<input id="0qass"><u id="0qass"></u></input>
  • <input id="0qass"><u id="0qass"></u></input>
  • <menu id="0qass"><u id="0qass"></u></menu>

    JAVA語言知識點總結

    JAVA 同時被 2 個專欄收錄
    1 篇文章 0 訂閱
    1 篇文章 0 訂閱

    一、Java SE
    ?1、Java基礎
    1、一個十進制的數在內存中是怎么存的? Java支持的數據類型有哪些?什么是自動拆裝箱? int 和 Integer 有什么區別 ? 什么時候使用int 什么時候使用Integer?
    2、==比較的是什么?
    3、hashCode()和equals()方法有什么聯系? 為什么重寫equals還要重寫hashcode? Object若不重寫hashCode()的話,hashCode()如何計算出來的?若對一個類不重寫,它的equals()方法是如何比較的?
    4、一個十進制的數在內存中是怎么存的?
    5、Java語言中float和double數據類型的精度是多少?它們在內存中是怎么存儲的?和Decimal有什么區別?
    6、為啥有時會出現4.0-3.6=0.40000001這種現象?
    7、不借助四則運算如何實現加法
    8、char可以存漢字嗎,底層怎么存的
    9、Java的字符集是什么
    10、什么是值傳遞和引用傳遞?
    11、數組(Array)和列表(ArrayList)有什么區別?什么時候應該使用Array而不是ArrayList?
    12、StringBuilder 和StringBuffer的區別 ? 底層實現上呢?
    13、String為什么要設置成final類型?String是不變的嗎?String為什么不可變?怎么實現不變的?
    14、&和&&的區別?
    15、在Java中,如何跳出當前的多重嵌套循環?
    16、簡述正則表達式及其用途。Java中是如何支持正則表達式操作的?
    17、講一講Java里面的final關鍵字怎么用的?
    18、Java 8 如何實現的函數式編程?
    19、如何保證方法的冪等性
    20、Java中的序列化的作用,serialVersionUID作用? 各種序列化器,序列化協議,為什么這個序列化那么快
    21、final、finally、finalize的區別和用法? 當在類里定義了一個方法,此時需要線程切換,方法里傳的參數 必須用final修飾, why? 如果try里有return語句,還會執行finally里的語句嗎?finalize里出現了異常,會發生什么?fnalize里面可以開啟新的線程嗎?調用finalize一定會將對象銷毀嗎?finalize一定會僅執行一次嗎?finally一定執行嗎?什么時候不被執行
    22、Java中main方法返回void如何判斷程序是否正常退出?用static修飾有什么作用,為什么要用static,用JVM啟動的時候,為什么不可以創建一個實例再去調用main的方法
    23、如何創建一個注解
    24、流式編程(Stream)會嗎?然后講流式編程底層原理
    25、java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
    26、你知道的數組復制的方法,有什么高效率的嗎
    27、非遞歸和遞歸相比有什么好處
    28、RAII是什么,Java是如何實現的?
    29、簡單描述一下”System.out.println(“hello,world”);”從編寫到控制臺打印,經歷了哪些過程
    30、Java中的LongAdder和AtomicLong的區別
    31、JDK和JRE的區別是什么?
    32、了解哪設計模式,舉例說說在jdk源碼哪些用到了你說的設計模式

    ?2、面向對象
    1、面向對象的設計原則? 談一下面向對象的"六原則一法則"。
    2、面向對象的特征有哪些方面
    3、類和對象的區別
    4、問創建對象的幾種方式
    5、Java有哪些特性,舉個多態的例子。說一下多態的底層的原理?說了一下編譯時多態和運行時多態以及JVM調用invokestatic方法然后調用動態分派的過程,通過棧幀的信息去找到被調用方法的具體實現,然后使用這個具體實現的直接引用完成方法調用。它是怎么找到對象實際類的?
    6、多態的隱藏和覆蓋
    7、繼承和組合的優劣?
    8、String能繼承嗎?
    9、Java支持多繼承么?
    10、請列舉你所知道的Object類的方法。
    11、重載和重寫的區別?相同參數不同返回值能重載嗎? Java中protect和static修飾的方法能重寫嗎?為什么?
    12、”static”關鍵字是什么意思?Java中是否可以覆蓋(override)一個private或者是static的方法? static塊中能否調用實例方法? static的原理是什么
    13、靜態變量存在哪?
    14、接口和抽象類的區別是什么? 什么時候用接口,什么時候用抽象類
    15、Comparable和Comparator接口是干什么的?列出它們的區別。
    16、Static Nested Class 和 Inner Class的不同
    17、Java的接口和C++的虛類的相同和不同處。
    18、Java中,什么是構造函數?什么是構造函數重載?什么是復制構造函數?
    19、說說Lamda表達式的優缺點。Lambda 表達式的實現原理?那匿名內部類和lambda表達式有什么區別?
    20、靜態代理實現與動態代理實現 ?JDK實現動態代理的限制
    21、動態代理的主要作用是什么?動態代理與cglib實現的區別? cglib的實現原理?
    22、Java 的null是對象嗎,可以怎么用,不可以怎么用
    23、內部類為何可以訪問外部類對象的屬性及方法;
    24、內部類可以引用他包含類的成員嗎?有沒有什么限制?

    ?3、 異常
    1、Java中的異常處理機制的簡單原理和應用。
    2、運行時異常與受檢異常有什么區別?
    3、error和exception有什么區別?
    4、給我一個你最常見到的runtime exception
    5、JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什么意義?在try塊中可以拋出異常嗎?

    ?4、反射
    1、反射的實現與作用?
    2、如何通過反射獲取和設置對象私有字段的值?
    3、談談如何通過反射創建對象?
    4、getMethods和getDeclaredMethods有什么區別
    5、反射可以訪問私有屬性和方法嗎?為什么可以,Java API中是如何實現的?
    6、動態代理基于反射,反射的性能怎么樣呢[答:反射越多性能會變差];那Spring為什么給人的感覺確是效率還可以呢
    7、父類P有兩個子類A B,A先加載了D.class,B再加載D.class,加載完成后的class D是同一個class嗎
    8、給你一個類,類中私有封裝方法,不允許你直接調用,你怎么做測試。
    9、反射會破壞單例嗎

    ?5、泛型
    1、java實現一個泛型數組
    2、講講什么是泛型?泛型實現原理? 泛型擦除?
    3、泛型 <? extends T> 和 <? super T>區別
    ?6、集合
    1、你對集合框架是怎么理解的?
    2、Java集合類框架的基本接口有哪些? List、Map、Set三個接口存取元素時,各有什么特點?
    3、Set 了解過嗎?知道 add() 會出什么問題嗎?
    4、Map和ConcurrentHashMap的區別?Collections實現線程安全和ConcurrentHashMap的區別
    5、hashMap內部具體如何實現的? 為什么鏈化閾值是 6 ,樹化閾值是8
    6、什么是TreeMap? TreeMap底層,紅黑樹原理?
    7、如果hashMap的key是一個自定義的類,怎么辦?
    8、ArrayList是否會越界?
    9、ArrayList和LinkedList的區別,如果一直在list的尾部添加元素,用哪個效率高? arrylist遍歷過程中想刪除元素怎么搞,擴容
    10、ArrayList,Vector,LinkedList的存儲性能和特性是什么?
    11、HashMap怎么擴容的 , 什么時候擴容 ? 加載因子能改變么? 負載因子,為啥是2^n? 擴容過程哪里是線程不安全的? Hash沖突了怎么解決的?你剛才說了鏈地址法,那Hash沖突的時候,數據是放在鏈表頭還是鏈表尾?HashMap擴容的同時,進行put操作,會發生什么。
    12、那么兩個線程同時對hashmap進行添加操作會發生什么。如果hashmap在擴容的時候,另一個線程添加數據又會發生什么。
    13、hashmap死鎖的原因?
    14、HashMap和Hashtable有什么區別? key和value是否可以為空?
    15、concurrenthashmap有啥優勢?ConcurrentHashMap是如何保證線程安全的? concurrenthashmap用的什么鎖? ConcurrentHashMap鎖加在了哪些地方? 1.7,1.8區別?concurrenthashmap讀的時候不加鎖,那如何保證讀的一致性
    16、HashMap外部加鎖 與 使用concurrenthashmap時兩者效率相比如何
    17、講一下HashMap在1.8中的擴容方案? 講一下concurrntHashMap的擴容方案
    18、為什么集合類沒有實現Cloneable和Serializable接口?
    19、什么是迭代器?
    20、Iterator和ListIterator的區別是什么?
    21、快速失敗(fail-fast)和安全失敗(fail-safe)的區別是什么?
    22、Collection 和 Collections的區別。
    22、闡述ArrayList、Vector、LinkedList的存儲性能和特性
    23、map迭代方法(Iterator遍歷、entrySet遍歷、Map.values取值遍歷)
    24、java?1.6和1.8之間的區別?在HashMap上的改進是什么?用了紅黑樹,查詢性能提升了多少?修改性能提升了沒?紅黑樹是平衡二叉樹嗎?hashmap為什么不用平衡樹,用了紅黑樹?多線程為什么1.7插入鏈表死循環,1.8不會?
    25、Collection.sort 源碼看過嗎?給我講講

    ?7、多線程
    1、多線程的好處
    2、線程安全的定義? 如何保證線程安全?
    3、多線程中的i++線程安全嗎?為什么?多個線程訪問i++ , 怎樣設計保證線程安全
    4、創建線程有幾種不同的方式?你喜歡哪一種?為什么?Java中有幾種方式啟動一個線程?
    5、原子類的底層原理?Atomic在高并發場景下有什么問題,缺點?
    6、CAS和ABA原理
    7、Jdk中哪里用到了cas? CAS check的字段是哪里,set到哪里去? cas有什么問題? jdk中是如何改進的? 如果很多個線程通過cas操作數據,如何提高效率?
    8、如何線程安全的實現一個計數器?
    9、請說出你所知道的線程同步的方法
    10、線程數和內核數量的關系
    11、線程中哪些是私有的?哪些是共享的
    12、線程有多少狀態,畫出狀態圖,狀態之間如何轉換
    13、同步方法和同步代碼塊的區別是什么?
    14、runnable和callable有什么區別?
    15、為什么 object的方法 notify 和wait方法必須在synchronized里使用?
    16、sleep() 和 wait() 有什么區別? 為什么wait是Object的方法,sleep不是?wait方法底層是如何實現的?stop()和suspend()方法為何不推薦使用?
    17、啟動一個線程是用run()還是start()?
    18、線程的sleep()方法和yield()方法有什么區別?
    19、ThreadLocal的原理,用什么作為key? 應用場景?
    20、線程中斷,interupt,是否肯定會中斷。如果中斷不了掉這個方法還有什么意義呢
    21、如何理解Java多線程回調方法?
    22、AQS了解嗎,在什么場景下用到?講一下AQS的源碼吧。
    23、cyclicbarrier和countdownlatch的區別
    24、同步和異步有何異同,在什么情況下分別使用他們?舉例說明。
    25、volatile、CAS、synchronized原理 什么情況下發生指令重排?各自的應用場景是什么
    26、synchronized的用法以及有什么劣勢 ?
    27、介紹一下Syncronized鎖,如果用這個關鍵字修飾一個靜態方法,鎖住了什么?如果修飾成員方法,鎖住了什么?
    28、當一個線程進入一個對象的synchronized方法A之后,其它線程是否可進入此對象的synchronized方法B?
    29、Synchronized原理 ? monitor是什么? 是怎么定義的? 一個什么標志? 在哪里標志的?
    30、那我現在有一個父類synchronized修飾非static方法和兩個子類,現在兩個子類調用這個方法會發生競爭嗎?static的呢?為啥?
    31、在監視器(Monitor)內部,是如何做線程同步的?程序應該做哪種級別的同步?
    32、 synchronized底層實現,偏向鎖、自旋鎖、輕量級鎖、重量級鎖,能否從重量級到輕量級,synchronized加在類和方法上的區別;為什么是可重入的?不可中斷解釋一下
    33、synchronized在jdk后面的版本做了優化,哪些優化
    34、synchronize與lock的區別?
    35、講下Synchronized是怎么升級的?
    36、線程池有什么好處?
    37、Java中有幾種線程池?
    38、單核CPU是否會出現線程安全問題?單核cpu有必要使用線程池嗎?
    39、線程池設計依據是什么?讓你實現一些緩存線程池,你怎么設計?
    40、線程池并行計算的方式?
    41、線程池運行流程,參數,策略(拒絕策略) 那這個 core 和 maximum 要怎么設的?關系是什么?線程池的場景設計,要根據IO密集型和CPU密集型來設計
    42、線程submit的過程?
    43、介紹一下生產者消費者模式?
    44、happen-before原則
    45、fast-fail和fail-safe機制,
    46、Arraylist和Linkedlist線程安全嗎?Java中有沒有提供線程安全的版本?CopyOnWriteArrayList怎么保證讀寫安全的?CopyonWriteArraylist的lock用的是哪個鎖
    47、了解哪些阻塞隊列
    48、怎么定位死鎖?如何觀察死鎖,比如用java命令
    49、Java本身可以自動解決死鎖問題嗎?mysql可以解決嗎?怎么解決的?
    50、future的原理
    51、無鎖情況下如何保證線程安全
    52、Executors中四個生成線程的實現類有什么特點,適用于什么場景
    53、CLH同步隊列怎么實現非公平與公平的?
    54、十個線程,分別執行不同任務,如何讓他們執行完后,相互等待,一同出發
    55、無鎖隊列的實現
    56、寫日志類 , 滿足多線程向文件中寫日志,設計一下需要實現哪些方法,說一下大概思路。

    ?8、鎖
    1、講一下非公平鎖和公平鎖在reetrantlock里的實現。
    2、鎖本質上是如何實現一個鎖的操作?加鎖有什么開銷?可重入鎖是怎么實現的。
    3、如何確保N個線程可以訪問N個資源同時又不導致死鎖?
    4、操作系統中的各種鎖的實現原理,互斥鎖、悲觀鎖、樂觀鎖。
    5、分布式鎖有哪些實現? 除了Lua解決方案呢? 怎么解除分布式鎖?
    6、JVM 引入的鎖優化技術有哪些?
    7、鎖膨脹 , 鎖消除
    8、ReentrantReadWriteLock了解嗎?ReentrantReadWriteLock 底層實現的原理?
    9、自旋鎖的優點
    10、Segment是什么?
    11、公平鎖和非公平鎖?
    12、加鎖解鎖過程中,線程內具體的操作了解過嗎?
    13、操作系統的PV原語和JAVA多線程里面的鎖有什么關系,說一下PV原語
    14、銀行家算法

    ?9、JVM
    1、JVM內存模型
    2、JVM運行時數據區域? 1.6,1.7,1.8區別?
    3、String a=“a”;String b=“b”; 問"a" "b"等不等于a b
    4、Java中堆棧的區別。堆棧的增長方向有哪些不同?
    5、jvm最大內存限制多少 ? 在一臺16G內存的機器上,JVM默認內存空間多大?
    6、jvm是如何實現線程?
    7、了解過字節碼的編譯過程嗎
    8、eden區,survial區?
    9、垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內存嗎?有什么辦法主動通知虛擬機進行垃圾回收?(垃圾回收)
    10、JVM回收算法和回收器,CMS采用哪種回收算法,怎么解決內存碎片問題? 為什么年輕代要用復制算法?并發標記階段處理速度慢的原因可能是什么。怎么進行優化
    11、闡述GC算法 , 那并發量很高時,使用哪種算法?
    12、GC如何調優?
    13、垃圾回收觸發條件 ? 是需要回收就立即回收,還是怎么辦?通常哪些設為安全點?
    14、GC中如何判斷對象需要被回收? 一個方法中有A a = new A();這么一條語句,方法執行完后A的實例化對象在GC時能否被回收掉
    15、GCRoot可以是哪些對象
    16、什么時候會觸發full gc? FullGC是否停頓用戶線程?發生Full GC的時候,一定會發生stop the world嗎?怎么避免full gc ? 頻繁出現full gc應該如何排查?
    17、minor gc如果運行的很頻繁,可能是什么原因引起的,minor gc如果運行的很慢,可能是什么原因引起的?
    18、對象怎么分配內存,基于什么原則;
    19、類加載過程 ? 初始化階段是干什么的?
    20、雙親委派模型的好處是什么?
    21、什么情況下用自定義類加載器?
    22、對象頭中都有什么信息?
    23、了解過JVM調優沒,基本思路是什么
    24、java中內存泄露是啥,什么時候出現內存泄露? jvm的oom都怎么發生? Java 內存模型中哪一個區域不會發生 OOM 異常? 如何確定內存泄漏的位置?
    25、?cms算法 , 與G1的區別? CMS收集器用的什么算法?以及CMS的缺點?
    CMS對產生內存碎片的問題有什么解決方案嗎?說下G1收集器的優點
    硬軟弱虛引用,以及軟引用的回收時機
    26、java類文件結構說一下。
    27、java8的metaspace
    28、new一個對象經歷了哪些過程?jvm 里 new 對象時,堆會不會發生搶占?那你怎么設計jvm的堆的線程安全?
    29、jvm虛擬機除了可以用在Java上,還可以用到其他語言上嗎?
    30、新生代里是怎么劃分的?每個區域的比例?你覺得設計者為什么要這么劃分?
    31、Java自帶的JVM監控軟件介紹
    32、survivor空間不夠怎么辦
    37、直接(堆外)內存的使用
    1)、堆外內存定義
    內存對象分配在Java虛擬機的堆以外的內存,這些內存直接受操作系統管理(而不是虛擬機),這樣做的結果就是能夠在一定程度上減少垃圾回收對應用程序造成的影響。使用未公開的Unsafe和NIO包下ByteBuffer來創建堆外內存。
    2)、為什么使用堆外內存
    1、減少了垃圾回收
    使用堆外內存的話,堆外內存是直接受操作系統管理( 而不是虛擬機 )。這樣做的結果就是能保持一個較小的堆內內存,以減少垃圾收集對應用的影響。
    2、提升復制速度(io效率)
    堆內內存由JVM管理,屬于“用戶態”;而堆外內存由OS管理,屬于“內核態”。如果從堆內向磁盤寫數據時,數據會被先復制到堆外內存,即內核緩沖區,然后再由OS寫入磁盤,使用堆外內存避免了這個操作。
    3、堆外內存申請
    JDK的ByteBuffer類提供了一個接口allocateDirect(int capacity)進行堆外內存的申請,底層通過unsafe.allocateMemory(size)實現。Netty、Mina等框架提供的接口也是基于ByteBuffer封裝的。
    注:unsafe.allocateMemory(size)最底層是通過malloc方法申請的,但是這塊內存需要進行手動釋放,JVM并不會進行回收,幸好Unsafe提供了另一個接口freeMemory可以對申請的堆外內存進行釋放。
    在Cleaner 內部中通過一個列表,維護了針對每一個 directBuffer 的一個回收堆外內存的線程對象(Runnable),回收操作是發生在 Cleaner 的 clean() 方法中
    4、堆外內存釋放
    其中first是Cleaner類的靜態變量,Cleaner對象在初始化時會被添加到Clener鏈表中,和first形成引用關系,ReferenceQueue是用來保存需要回收的Cleaner對象。如果該DirectByteBuffer對象在一次GC中被回收了此時,只有Cleaner對象唯一保存了堆外內存的數據(開始地址、大小和容量),在下一次FGC時,把該Cleaner對象放入到ReferenceQueue中,并觸發clean方法。
    此時,只有Cleaner對象唯一保存了堆外內存的數據(開始地址、大小和容量),在下一次FGC時,把該Cleaner對象放入到ReferenceQueue中,并觸發clean方法。
    Cleaner對象的clean方法主要有兩個作用:
    1、把自身從Clener鏈表刪除,從而在下次GC時能夠被回收
    2、釋放堆外內存

    38、破壞雙親委派的場景。加載同一個類怎么做。
    39、提到Java全局的緩存怎么處理防止OOM
    40、Java JIT聽說過嗎

    ?10、 網絡編程 , IO,NIO與AIO
    1、網絡編程相關的內容; 給你一個網絡上圖片的URL,怎么將其讀取并寫入本地指定磁盤
    2、非阻塞io和阻塞式io的區別
    3、Java中的IO有哪些類,用了哪些設計模式
    4、NIO怎么實現? NIO對比于BIO優勢是什么
    5、NIO中buffer中在傳輸文件時如何工作
    6、select、poll、epoll實現和區別
    7、零拷貝?
    8、當現在是epoll_Wait時,有一個io請求發送了過來,會發生什么?
    9、Java中異步調用或者說異步IO實現了解嗎?
    10、Netty的使用場景
    11、netty如何解決粘包和拆包問題

    ?11、XML基礎
    1、XML文檔定義有幾種形式?它們之間有何本質區別?解析XML文檔有哪幾種方式?

    ?12、Java的調優
    1、用過哪些java工具,有過調優經驗嗎
    2、如果線上代碼出問題怎么排查?內存泄漏怎么排查?
    3、JDK提供了哪些性能分析工具 , 作用

    二、設計模式
    ?1、結構型模式
    1、java中有哪些代理模式?
    2、如何實現動態代理 ? 兩種動態代理的區別?
    3、IO流熟悉嗎,用的什么設計模式?
    ?2、創建型模式
    1、介紹一下單例模式?手寫單例模式?懶漢式的單例模式如何實現單例?
    ?3、行為型模式
    1、介紹一下策略模式?
    2、設計模式了解哪些,手寫一下觀察者模式?
    ?4、模式匯總
    1、說說你所熟悉或聽說過的j2ee中的幾種常用模式?及對設計模式的一些看法
    2、j2ee常用的設計模式?說明工廠模式。
    3、簡述一下你了解的Java設計模式 開發中都用到了那些設計模式?用在什么場合?

    三、Java web編程
    ?1、web編程基礎
    1、JAVA應用服務器有那些?
    2、啟動項目時如何實現不在鏈接里輸入項目名就能啟動?
    3、1分鐘之內只能處理1000個請求,你怎么實現,手撕代碼?
    4、JSP和Servlet有哪些相同點和不同點,他們之間的聯系是什么?(JSP)
    5、說一說四種會話跟蹤技術
    6、講講Request對象的主要方法
    7、過濾器有哪些作用和用法?
    8、請談談你對Javaweb開發中的監聽器的理解?
    9、說說web.xml文件中可以配置哪些內容?
    10、get和post的區別
    11、token , cookie和session的區別 , 與localstorage的區別
    12、session怎么保證多次訪問是同一個ID
    13、談談Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分別是做什么的?有什么區別?
    14、如何設置請求的編碼以及響應內容的類型?
    15、Servlet相關接口 , Servlet里面有哪些方法 ? Servlet執行時一般實現哪幾個方法?
    16、Servlet 3中的異步處理指的是什么?
    17、servlet生命周期?servlet是單例模式么?為什么是單例?Servlet和cgi有什么區別?
    18、服務器收到用戶提交的表單數據,到底是調用Servlet的doGet()還是doPost()方法?
    19、servlet寫過么,底層是怎么處理前臺傳來的請求的
    10、Servlet中如何獲取用戶提交的查詢參數或表單數據?
    11、Servlet中如何獲取用戶配置的初始化參數以及服務器上下文參數?
    20、登錄功能如何保證安全性。(MD5+鹽)為什么用MD5,講一下機制。還有什么保證安全的加密方式?
    21、設計一個怎么使得驗證碼有效期,過了一段時間就過期了。
    22、如何實現單點登錄

    ?2、web編程進階

    1、forward與redirect區別,說一下你知道的狀態碼,redirect的狀態碼是多少?
    2、常見的加解密算法方式了解嗎?對稱加密和非對稱加密的算法有哪些?3DES為什么叫3DES?
    3、是否單例,為什么是單例。
    4、如何在基于Java的Web項目中實現文件上傳和下載?
    5、緩存的優點?
    6、說說MVC的各個部分都有那些技術來實現?如何實現?
    7、什么是DAO模式?
    8、請問Java Web開發的Model 1和Model 2分別指的是什么?
    9、如何保存會話狀態,有哪些方式、區別如何
    10、分布式session如何管理,你有哪些方案
    11、布隆過濾器及其實現
    12、項目中數據如何加密傳輸?
    13、在用戶成功登錄之后怎么保證數據安全傳輸?如何保證請求合法?
    14、你了解的web安全問題都有什么,什么是xss攻擊? CSRF攻擊 ? JSONP問題? 追問crfs攻擊,怎樣偽造受信用的的客戶端,具體怎么偽造的。
    15、系統化怎么進行分頁的呢?我答了sql語句limit、數組分頁還有攔截器分頁。
    16、tomcat的類加載機制。
    17、登錄邏輯?如何保證登錄安全?用戶攜帶的這個token和誰進行比較?怎么獲取token?
    18、什么是中間人攻擊
    19、安全相關,token的設計應該考慮哪些因素?
    20、tomcat有哪些配置?有沒有修改過tomcat的參數?如果有修改過什么?tomcat底層怎么實現的?Tomcat是類加載實現結構,它有哪些實現類加載器
    21、dos攻擊怎么回事,怎么解決
    22、服務端是怎么驗證用戶的?生成的token有可能重復嗎?
    23、我們在web應用開發過程中經常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串?
    24、登錄怎樣校驗密碼,海量用戶同時登錄怎么優化

    ?3、web編程原理
    1、請談談轉發和重定向的區別?
    2、forward 和redirect的區別
    3、BS與CS的聯系與區別。
    4、什么是Web Service(Web服務)?
    5、大型網站在架構上應當考慮哪些問題?
    6、jwt是怎么實現的
    7、Tomcat啟動主要負責什么工作?
    8、tomcat為什么會出現假死,既然死鎖是某幾個線程之間出現循環等待,為什么整個tomcat會假死。
    9、禁用cookie怎么辦
    10、單拎出來的跨域問題,了解下瀏覽器同源(協議,域名,端口)政策,對后端的限制(AJAX等,前端問題暫不考慮),解決方法(JSONP,WebSocket,CORS),CORS(Cross-Origin Resource Sharing)相關內容,頭字段 Origin,Access-Control-Allow-Origin 等;
    11、SOCKS

    三、Java常用框架及組件
    ?1、Spring
    1、介紹一下spring? spring框架的優點? Spring框架為企業級開發帶來的好處有哪?缺陷有哪些?怎么避免這個缺陷
    2、介紹一下bean的生命周期
    3、Spring里面注解用過沒有?autowired 和resource區別?
    4、Spring中BeanFactory和ApplicationContext的區別?
    5、請問Spring中Bean的作用域有哪些?
    6、Spring加載Bean的過程? Spring框架xml文件中配置bean的實例化過程?了解Spring是怎么遞歸地加載Bean的嗎?BeanFactory和FactoryBean有什么區別?
    7、Spring getBean的整個流程
    8、談談Spring中自動裝配的方式有哪些?
    9、說一下IOC和AOP? DI的方式有幾種?哪幾種?
    10、spring怎么解決循環引用的問題,比如,A對象構造時需要B對象;B對象構造時需要A對象
    11、springIOC原理?說說Ioc容器的加載過程Spring IOC底層存儲結構 ? 自己實現IOC要怎么做,哪些步驟?
    12、aop的應用場景?
    13、AOP的原理是什么? 除了動態代理還有什么?
    14、攔截器和AOP的關系 Spring攔截器的底層是怎么實現的
    15、你如何理解AOP中的連接點(Joinpoint)、切點(Pointcut)、增強(Advice)、引介(Introduction)、織入(Weaving)、切面(Aspect)這些概念?
    16、#號和$號的區別
    17、Spring支持的事務管理類型有哪些?你在項目中使用哪種方式?
    18、什么是Spring的聲明式事務管理。
    19、AOP 的 @transaction 是怎么做的?為什么不加這個注解就不是事務?
    20、spring事務傳播機制
    21、spring中用到了哪些設計模式
    22、Spring Security 的核心原理
    23、如果spring的事務中拋出了IOException,會回滾嗎?
    24、在spring中雙重檢查鎖有效嗎

    ?2、Mybatis
    1、持久層設計要考慮的問題有哪些?你用過的持久層框架有哪些?
    2、解釋一下MyBatis中命名空間(namespace)的作用。
    3、Mybatis原理
    4、MyBatis中的動態SQL是什么意思?
    5、MyBatis 如何獲取自增主鍵的值?底層怎么實現?
    6、mybatis 如何防止SQL注入
    7、mybatis如何配置測試和開發環境下不同的鏈接
    8、mybatis和jdbc區別,什么是一級二級緩存,為什么一般不開啟二級緩存有什么問題?#KaTeX parse error: Expected 'EOF', got '#' at position 24: …別對應什么?mybatis中 #? 和 ¥ 的區別,sql注入問…{}的區別是什么?預編譯的作用
    11、寫一下mybatis的批量插入
    12、mybatis中xml是怎么解析的?
    13、講講mybatis和jpa的區別
    14、mybatis哪里用到過反射
    15、mybatis的數據庫表與配置文件是如何實現映射關系的

    ?3、MVC
    1、Spring MVC注解的優點
    2、@Controller和@RestController的區別?
    3、那一個controller分別調用兩個Service再調用兩個Dao時,注解加在什么層,如何實現事務?那兩個Service強相關呢?(還是事務傳播,加入到一個事務中。)再問:怎么加入呢?(答:事務管理器),那是事務管理器里的哪個對象呢?(答:記 記不清了
    4、springmvc和spring-boot區別?
    5、SpringMVC的運行機制,運行機制的每一部分的相關知識?
    6、攔截器和過濾器區別? springmvc攔截器和servlet過濾器先用哪個
    7、springMVC中對整個請求的處理流程是怎樣的?返回json的話是用哪個view?
    8、spring框架從URL請求如何找到controller
    9、RestFul 規范是怎么樣的?
    10、如何使用SpringMVC對用戶寫入的參數進行修改?
    11、如果一個Dao有兩個實現,一個連接mysql,一個oracle,service要自動注入這個類,如果直接注入的話會有沖突,怎么解決沖突?

    ?4、SpringBoot
    1、Spring Boot的啟動函數是怎樣的? 怎么找到啟動類
    2、springboot如何實現自動裝配
    3、springboot掃描配置的過程

    ?5、dubbo
    1、Dubbo原理
    2、講 Dubbo SPI 的源碼?
    3、講 Dubbo 服務暴露源碼 + Dubbo 服務注冊
    4、講一下 Dubbo 服務引用底層?
    5、講一下 Dubbo RPC 協議調用過程,使用哪些協議?
    6、Dubbo 的連接
    7、Dubbo 的負載均衡
    8、dubbo為什么比springcloud快 , 從網絡角度分析dubbo為什么比springcloud快 dubbo服務注冊怎么做,過程。如果幾萬個服務怎么配的。怎么設計服務中心效率更高。

    ?6、Kafka
    1、kafka 消費者組和分區的關系? kafka有5個消費者,4個分區,是如何消費?kafka的分區有哪些方式,分區算法?
    2、kafka 應答機制,選舉算法
    3、kafka 消息丟失的原因? 消息丟失場景和怎么保證數據不丟失 ? 如何防止重復消費
    4、kafka如何實現消息是有序的?
    5、kafka如何實現多線程的消費?
    6、接口防刷限流是怎么實現的,較短時間出現大量請求該如何解決
    7、kafka的重復消費?
    8、kafka異步刷盤,數據會不會丟

    ?7、各框架對比與項目優化
    1、Mybatis和Hibernate區別?
    2、介紹一下你了解的Java領域的Web Service框架。

    ?8、es
    1、ES怎么用的?倒排索引講一下?

    ?9、rabbitMq
    1、rabbitmq從發送到接受之間的具體過程
    2、rabbitMQ事務的底層實現原理
    3、為什么使用rabbit mq?
    4、rabbitmq能夠多個線程進行消費嗎?
    5、那如果有的事件消息的數量很多,有的很少怎么辦?做了負載均衡么?

    ?10、Zookeeper
    1、zookeeper的服務注冊
    2、zookeeper的節點類型
    3、說下CAP理論,Zookeeper 舍棄了哪個 , Zookeeper和Eureka分別是滿足CAP中的哪些 redis屬于哪種 分區容錯性的意義?

    四、數據庫
    ?1、SQL語句的使用
    1、寫SQL:找出每個城市的最新一條記錄。
    2、一個學生表,一個課程成績表,怎么找出學生課程的最高分數
    3、插入一條數據時如何直接取到當前數據的id
    4、有一組合索引(A,B,C),會出現哪幾種查詢方式?tag:sql語句
    5、寫一下創建存儲過程的語句
    6、建立組合唯一索引的語句
    7、delete truncate 區別
    8、SQL 中select…limit and offset 會有什么問題,怎么解決
    9、一個考試成績明細表,字段有id,class_name,user_name,score,找出考試分數大于90分的人數最多的班級
    10、我現在要查詢某一個商家某段時間內的訂單金額,sql語句怎么寫?

    ?2、mysql基礎
    1、mysql和Oracle的區別?
    2、數據類型(datetime timestamp)的大小
    3、怎么防止sql注入?
    4、一條SQL語句在MySQL中會經過怎樣的過程
    5、數據庫兩種引擎 InnoDB和MyISAM的區別?介紹一下什么時候用Innodb什么時候用MyISAM。
    6、講一下事務ACID的特性?怎么保證事務的原子性?
    7、mysql數據庫的事務,隔離級別 , 可重復讀如何實現的?給定一個場景,銀行賬戶相互轉賬, 你覺得設定什么隔離級別比較合適?
    8、數據庫索引介紹一下。 數據庫索引適合用在什么場景下?不適合用在什么場景下?什么情況下索引會失效?
    9、索引了解嘛,底層怎么實現的,什么時候會失效
    10、聚族索引和非聚簇索引
    11、如何讓模糊查詢使用索引
    12、數據庫樂觀鎖和悲觀鎖 ? 如何實現 ? 各有什么優缺點 ? 缺點如何解決 ?
    13、mysql主從復制? 延遲了怎么辦?
    14、left join和right join的區別?給兩張表 100行和50行,left join后有多少行?如果有一行重復呢? 知道數據庫的join操作嗎?談談這個操作怎么做
    15、談一下你對繼承映射的理解。
    16、說出數據庫連接池的工作機制是什么?
    17、JDBC中如何進行事務處理?
    18、行鎖和表鎖的區別 ? 數據庫行鎖如何觸發?行鎖實現原理?
    19、sql中limit會不會越來越慢,為什么
    20、建立abc三列的索引,問ac bc ba 會不會用到索引 , 兩個字段的聯合索引, 是一棵樹 還是兩個樹? 聯合索引為什么要遵循最左前綴原則?
    21、數據庫主從同步是怎么做的
    22、間隙鎖的鎖定范圍是多少?Select * from t where id<4,這條sql中,間隙鎖鎖的范圍是什么?是(1,4)還是(-無窮,4)?
    23、MySQL宕機怎么解決?
    24、一條Update語句,一定會更新索引嗎
    25、增刪操作相比查找操作的弊端
    26、like關鍵字進行查找會用到索引嗎? like“aa%”索引是否可以 ?為什么like后跟%不走索引? mysql如何知道sql語句用沒用上索引?
    27、查詢表中最后一個記錄,哪個索引更快,為什么
    28、mysql視圖
    29、MySQL數據庫的select…for update是只鎖一行數據么??分析一下
    30、uuid做主鍵可以嗎?為什么?
    31、間隙鎖鎖的是數據還是索引? 間隙鎖解決的是啥問題
    32、單表更新是否需要事務?
    33、mysql主鍵索引和unique索引區別 ? 主鍵索引可以用來建立復合索引嗎
    34、在一個事務A方法里調另一個事務B方法,映射到mysqlA和B兩個事務,這兩個事務可以并存嗎?
    35、Mysql索引 hash和btree什么情況使用
    36、覆蓋索引
    37、mysql列擴容的時候,是否可以進行select, update
    38、select … for update加鎖時,宕機時鎖會釋放嗎?會的話,原理是什么?
    39、MySQL 的 binlog、bitmap , redo log 和 undo log
    40、冪等的實現,fail over怎么處理
    41、update … where a = 1;這句語句innoDB會加幾行鎖?
    42、什么時候會造成數據庫死鎖?什么時候會造成數據庫索引失效?

    ?3、mysql優化
    1、數據庫優化方法
    2、數據庫自己做了哪些優化,
    3、vachar 字段非常大,數據庫怎么進行優化存儲
    4、MySQL做高可用了么?怎么做的?過程簡單講一下?
    5、怎么定位數據庫慢語句?怎么分析 SQL 語句的性能?如何對查詢語句優化?分析SQL的字段?explain,會關注哪些字段?
    6、有一個查詢語句,速度特別的慢,服務器都快不行啦,你咋排查呢?
    7、那怎么進行讀寫優化?
    8、MySQL索引優化,索引設計原則。 對索引的內容有什么要求,比如年齡字段適不適合建立索引?做過索引優化不?explain語句出來的結果中的type如果為index是啥意思
    9、平時有查看過sql的執行計劃嗎
    10、怎么去監控MySQL的性能問題?怎么查看一個sql語句的執行效率?
    11、數據量大時如何分庫分表,原則是什么,如何管理id
    12、數據庫如何水平切分,垂直切分 ?
    13、設計一個實時監測 MySQL 的工具,可以監測每條 SQL 語句運行時間、事務的運行和數據庫的連接信息等
    14、mysql進程利用率很高如何排查問題
    15、MySQL 大表翻頁優化怎么做,具體情境100w頁之后

    ?4、mysql原理
    1、數據庫的架構
    2、mysql的通信協議
    3、mysql 索引 b 和B+ 的區別是什么? B+樹索引的核心在于什么? 我們知道樹有很多種,為什么要選擇b+樹,而不選擇其他?為什么要用 B+ 樹而不用紅黑樹? 為什么B+樹磁盤讀寫代價更低
    4、為什么myisam不支持行鎖
    5、mycat分庫分表了解嗎?
    6、數據庫刪除操作底層實現
    7、Innodb如何避免幻讀的?innodb怎么實現可重復讀?
    8、java訪問的數據庫的時候速度瓶頸問題是什么造成的,為什么會有瓶頸?
    9、InnoDB是如何實現聚集索引的?
    10、mvcc是什么怎么解決未提交讀的。mvcc 適用的隔離級別,為什么

    ?5、mysql表的設計
    1、數據庫的三范式? 設計表的時候一定要遵從范式嗎?
    2、如何設計表,從安全、性能、高并發等方面分析

    ?6、mysql集群
    1、如何解決跨節點的join關聯查詢
    2、兩個MySQL數據庫怎么來做數據同步?
    3、怎么處理跨庫跨表查詢,怎么做數據遷移,
    4、說一下分布式事務以及多數據庫高并發的處理 ? 什么是兩段式,三段式,它的實現原理是什么?補償事務?Sagas事務模型?

    ?7、JDBC基礎
    1、JDBC的反射,反射都是什么?
    2、Jdo是什么?
    3、Statement和PreparedStatement有什么區別?哪個性能更好?
    4、使用JDBC操作數據庫時,如何提升讀取數據的性能?如何提升更新數據的性能?
    5、反射能獲取到父類的私有方法嗎?怎么防止反射破壞單例模式?

    ?8、Redis基礎
    1、Redis哨兵模式和集群的區別?
    2、Redis為什么用跳表不用其他的?介紹一下Redis的zset中的跳表zskiplist
    3、講一下RDB、AOF,優缺點,怎么選擇?講一下緩存雪崩、緩存擊穿、緩存穿透、怎么避免?
    4、redis為什么快?除了內存角度呢?
    5、redis有哪幾種數據結構?給你一個key怎么知道是用的哪種結構?Redis數據類型??
    6、redis宕機后恢復數據的方式
    7、怎么保證 redis 和 數據庫的一致性? 如果數據庫更新成功,緩存更新失敗呢?
    8、redis 集群的實現?
    9、redis的過期規則?如何設置過期時間? 過期后是怎么處理的?
    10、redis的內存置換方法
    11、Redis內存泄漏,
    13、Redis 主從節點是怎樣通信的,傳輸數據是全量復制還是半增量復制
    14、講一下redis的主從復制怎么做的?
    15、Redis為什么單線程但是性能高
    16、aof,rdb,優點,區別?
    17、redis的List能用做什么場景?
    18、在一個多核cpu環境下,既然redis是單線程的,怎么提高服務器的利用率
    19、redis用到哪些設計模式
    20、Redis怎么解決雙寫一致性問題
    21、影響Redis最大并發性能的主要因素
    22、Redis除了有做緩存還有什么用
    23、redis中熱點key導致單點掛掉怎么解決
    24、redis如何實現對熱點數據的存儲
    25、redis是否支持事務
    26、redis如何存一個鍵值對 , 如何存String
    27、若存在一些排序操作,例如order by score這樣的操作,在緩存中怎么進行處理
    28、假設Redis中存儲著一個List類型的數據,這些數據會不定期的變化,例如,論壇的帖子,按照發布時間進行排序顯示。怎么確保每一次讀這樣的List數據,能夠確保不讀到空的數據?(最佳方式,利用腳本實現)
    29、Redis集群負載均衡怎么搭建?
    30、有序集合的底層 -字典與跳躍表 為什么用這兩個結構
    31、SDS優點,鏈表、跳表的實現與復雜度
    32、那兩個數據庫雙寫不一致問題怎么解決呢?(那就先把緩存刪了,再從MySQL中重新加載緩存。常見方法導致繼續加問。。。)還有別的方法么?(那做序列化,將數據按照順序一條條寫入。)那如果有一條數據寫入失敗怎么辦,MySQL成功,Redis失敗?(答:再從MySQL讀這條數據??偛荒芑貪L吧?)
    33、業務中redis如何保證可用性? 一些節點崩了怎么辦,全都崩了咋辦。。
    34、如果你要對班里的學生根據分數進行排名,你覺得用redis里的哪個數據結構比較好。zset的底層是用什么數據結構實現的。
    35、redis,十幾萬條已排好的數據在redis里,這時新來了一條數據,怎么快速更新排行榜,這個問題說了好久沒說到面試官想要的答案
    36、redis除了使用lua腳本還能如何實現原子性
    37、redis為什么使用跳躍表,不使用紅黑樹
    38、 Redis出現多個Client同時修改redis服務器中同一個key怎么辦?(redis并發競爭問題?)
    39、redis的事務跟數據庫的事務一樣嗎?

    五、計算機網絡
    ?1、網絡概述

    1、OSI、TCP/IP、五層體系結構聯系與區別?

    2、TCP和UDP的區別? UDP相比TCP來說最大的優點是什么?視頻使用tcp還是udp,為什么?
    3、為什么要有MAC地址,用IP地址不行嗎
    4、TCP和HTTP的keepalive分別是什么
    5、給定域名有哪些方法可以獲取到對應的IP,你自己獲取,不是DNS。
    6、怎么判斷網絡上發生了擁塞,重傳?失序?
    7、如何實現IPv6以及IPv4的檢測
    8、點到點和端到端的區別
    9、橋接和NAT
    10、osi主要協議,telnet哪一層
    11、江蘇放個服務器,北京訪問,大概需要多少時間,按什么方法計算,能最快達到什么級別的速度
    12、如何確定網絡的穩定性?
    13、翻墻中的墻的實現原理
    14、假設你在宿舍玩游戲,突然發現特別卡,原來你舍友在用迅雷下載東西,為什么迅雷會占用網絡帶寬導致你玩游戲特別卡,而游戲競爭不過迅雷。
    15、假如你要傳一個很大的文件,怎么傳?
    16、從輸入url到頁面渲染中間過程,如果網絡距離太長,怎么解決
    17、ping的原理?
    18、詳細說一下arp

    ?2、運輸層
    1、講一下TCP的連接和釋放連接。
    2、TCP有哪些應用場景?
    3、tcp如何實現可靠傳輸
    4、tcp為什么要建立連接
    5、闡述TCP的4次揮手
    6、講一下瀏覽器從接收到一個URL到最后展示出頁面,經歷了哪些過程。tag
    7、http和https的區別 ? https為什么安全? https 單向認證和雙向認證的流程?
    8、http的請求有哪些,應答碼502和504有什么區別
    9、為什么TIME_WAIT狀態需要經過兩個最大報文段生存時間才能到close狀態?
    10、說說ssl四次握手的過程
    11、304狀態碼有什么含義?
    12、如何減少TCP的時延問題
    13、TIME-Wait和Close-Wait出現在什么時候,為什么需要它們?什么原因會導致服務端一直CLOSE-WAIT
    14、TCP客戶端發出第一個報文后狀態是什么,服務端收到這個報文的狀態?
    15、大量TIME_WAIT?大量主機在CLOSE-WAIT狀態是什么原因
    16、TCP如何避免擁塞,怎么判斷擁塞了。擁塞控制算法最壞的場景
    17、滑動窗口是什么,滑動窗口大小怎么確定?什么場景下滑動窗口效率低
    18、如何使UDP變得可靠
    19、數據中心網絡下TCP的缺陷不足
    20、三次握手第二次失敗了,客戶端和服務器分別做什么
    21、TCP未按序到達的包怎么處理
    22、tcp傳輸中數據被篡改了怎么處理
    23、tcp_reuse ,timestamp參數
    24、為什么time_wait是2MSL,2MSL時長是多少,為什么需要將time_wait設置減小,調整時間有什么意義。(需要再深入再詳細一些)如何讓time_wait快速回收。
    25、TCP中RTT,RTO相關計算公式,給解釋一下。給了提示,tcp傳輸一組數據要用多長時間。
    26、如何快速復用處于TIME_WAIT的連接?
    27、tcp dump命令的使用?如何dump數據包然后優化網絡?
    28、QQ的屬于tcp還是udp協議,直播是怎么實現的
    29、syn攻擊
    30、有哪些因素會影響 tcp 的傳輸速率?
    31、TCP的RST了解嗎?
    32、第二到第三次揮手之間服務器在做什么?最后一次揮手,客戶端與服務端的狀態?

    ?3、網絡層
    1、arp協議,arp攻擊
    2、icmp協議
    3、講一下路由器和交換機的區別?
    4、路由器給局域網動態分配IP的原理嗎
    5、廣播和單播?局域網和廣域網?同一局域網下網段要相同嗎?如果不是路由器,是交換機網段要相同嗎?
    6、路由表的結構是什么樣的
    7、報文亂序;有一個報文一直未收到,什么原因,怎么解決
    8、BGP路由協議
    9、路由的兩種方式(rip, ospf),怎么實現

    ?4、應用層
    1、DNS尋址過程
    2、負載均衡反向代理模式優點及缺點
    3、HTTP狀態碼 ? 304具體是什么錯誤?
    4、如何提高HTTPS的效率
    5、端口號 443 和80 分別是用于哪個協議
    6、HTTP 1.1版本增加了哪些內容?有哪幾種請求方式?
    7、HTTP是怎么傳圖片的?
    8、如果現在讓你寫一個程序能出現500的錯誤,你怎么寫?
    9、發布一個http接口需要考慮哪些方面:協議(get post),安全(白名單,token,sql注入,xss攻擊等),考慮前后端分離(所以用json格式當參數和返回值,另外可以傳設備類型到后臺,aop統計不同設備調用次數)
    10、http如何保持連接
    11、如果不用http,如何保持連接
    12、了解身份鑒別協議,有哪些?http證書怎么來?
    13、如果讓你實現一個文件上傳協議,你會怎么設計??斷點續傳??如果這個接收端是分布式的呢???怎么控制傳輸速率???文件怎么存儲??分布式存儲怎么辦???
    14、http中向服務器請求一個網頁,用的是以下哪個函數,get/read/post/head
    15、 Http 報文里有什么?
    16、http1.0,1.1和2.0的區別
    17、http是三次握手嗎
    18、短連接和長連接?
    短連接:連接、傳輸數據、關閉連接
    短連接指SOCKET連接后發送接收完數據馬上斷開連接。
    長連接:連接、傳輸數據、保持連接、傳輸數據、、、、、關閉連接
    長連接指建立SOCKET連接后不管是否使用都保持連接,但安全性較差。
    19、半包:接收方沒有接收到一個安裝的包,只接受了部分,這種情況主要是由于TCP為提高傳輸效率,將一個包分配的足夠大,導致接收方不能一次接收完(在長連接和短連接中都會出現)粘包:指發送方發送的若干數據到接收方接收時粘成一包,從接收緩存區看,后一包數據的頭緊接著前一包數據的尾。分包:出現粘包時接收方要進行分包處理(在長鏈接中出現)。
    20、在并發量比較大的情況下,就會出現一次接受并不能完整獲取所有數據?
    解決方法:1、通過包頭、包長、包體的協議形式,當服務器端獲取到指定包長時才說明獲取完整。2、獲取到指定包結束標識時,說明包獲取完整。
    什么時候需要考慮粘包的情況?
    1、 當短連接時,不需要考慮粘包情況。
    2、 如果發送數據無結構,如文件傳輸,這樣發送方只管發送,接收方只管接受存儲就好,不用考慮粘包。
    3、 如果雙方建立連接,需要在連接受一段時間內發送不同數據結構時,接收方創建一處理線程,對接收到的數據包進行預處理,將粘包分開。
    注:粘包情況分兩種:一種是粘在一起的包是完整的數據包,另一種情況是粘在一起的包有不完整的包
    一個包沒有固定長度,以太網限制在46-1500字節,1500就是以太網的MTU,超過這個量,TCP會為IP數據報設置偏移量進行分片傳輸,現在一般可允許應用層設置8k(NTFS系)的緩沖區,8k的數據由底層分片,而應用看來只是一次發送。windows的緩沖區經驗值是4k,Socket本身分為兩種,流(TCP)和數據報(UDP),你的問題針對這兩種不同使用而結論不一樣。甚至還和你是用阻塞、還是非阻塞Socket來編程有關。
    1、通信長度,這個是你自己決定的,沒有系統強迫你要發多大的包,實際應該根據需求和網絡狀況來決定。對于TCP,這個長度可以大點,但要知道,Socket內部默認的收發緩沖區大小大概是8K,你可以用SetSockOpt來改變。但對于UDP,就不要太大,一般在1024至10K。注意一點,你無論發多大的包,IP層和鏈路層都會把你的包進行分片發送,一般局域網就是1500左右,廣域網就只有幾十字節。分片后的包將經過不同的路由到達接收方,對于UDP而言,要是其中一個分片丟失,那么接收方的IP層將把整個發送包丟棄,這就形成丟包。顯然,要是一個UDP發包佷大,它被分片后,鏈路層丟失分片的幾率就佷大,你這個UDP包,就佷容易丟失,但是太小又影響效率。最好可以配置這個值,以根據不同的環境來調整到最佳狀態。
    send()函數返回了實際發送的長度,在網絡不斷的情況下,它絕不會返回(發送失敗的)錯誤,最多就是返回0。對于TCP你可以字節寫一個循環發送。當send函數返回SOCKET_ERROR時,才標志著有錯誤。但對于UDP,你不要寫循環發送,否則將給你的接收帶來極大的麻煩。所以UDP需要用SetSockOpt來改變Socket內部Buffer的大小,以能容納你的發包。明確一點,TCP作為流,發包是不會整包到達的,而是源源不斷的到,那接收方就必須組包。而UDP作為消息或數據報,它一定是整包到達接收方。
    5、關于接收,一般的發包都有包邊界,首要的就是你這個包的長度要讓接收方知道,于是就有個包頭信息,對于TCP,接收方先收這個包頭信息,然后再收包數據。一次收齊整個包也可以,可要對結果是否收齊進行驗證。這也就完成了組包過程。UDP,那你只能整包接收了。要是你提供的接收Buffer過小,TCP將返回實際接收的長度,余下的還可以收,而UDP不同的是,余下的數據被丟棄并返回WSAEMSGSIZE錯誤。注意TCP,要是你提供的Buffer佷大,那么可能收到的就是多個發包,你必須分離它們,還有就是當Buffer太小,而一次收不完Socket內部的數據,那么Socket接收事件(OnReceive),可能不會再觸發,使用事件方式進行接收時,密切注意這點。這些特性就是體現了流和數據包的區別。

    六、操作系統

    ?1、操作系統概論
    1、計算機底層是用補碼來計算的,為什么用補碼?
    2、用戶態和內核態的區別? 為什么需要內核態?什么時候進入內核態?用戶態切換到內核態的過程?如何實現切換?進程快照需要保存哪些必要數據?中斷處理函數讓你自己寫如何實現?在時間片亂轉的情況下,計算機有什么方法可以實現中斷?(定時器)
    3、什么是分時操作系統和實時操作系統 Linux是實時還是分時 ?
    4、什么是大小端
    5、操作系統層面 怎么解決多個cpu同時訪問同一個區域
    6、操作系統有幾大模塊? 說一下你設計操作系統要幾個模塊。

    ?2、Linux操作系統
    1、CentOS 和 Linux的關系?
    2、64位和32位的區別?
    3、用過哪些Linux命令
    4、linux查看cpu和文件目錄
    5、top里面,內存那有buffer/cache,知道這是什么嗎?
    6、如何定位IO使用高的程序
    7、chmod 777代表什么意思?
    8、如果要查看服務器中各個進程CPU的狀態用什么命令
    9、linux查看內存指令,修改權限指令,如果權限相關的數字是777,代表什么含義,
    10、關鍵字查詢怎么查
    11、Awk命令
    12、inux查看一個文件末尾幾行的命令(tail)
    13、怎么查看含有某個關鍵字的幾行(grep),具體怎么寫命令
    14、講講如何查看你項目占用的進程,講講如何將項目傳到服務器上,講講如何殺死一個進程。
    15、給你一個日志文件,里面包含ip、date等字段,如何求出每日的去重后的ip數量
    16、Linux的軟連接和硬連接
    17、虛擬地址和物理地址時怎么轉化的?其中用到哪些硬件? 為什么用虛擬地址
    18、swap分區
    19、硬盤結構,如何工作,最小單位?
    20、多進程多線程瀏覽器(比如 Chrome),主控進程,插件進程,GPU進程,每個 tab 一個進程,tab 進程內有網絡請求線程等;
    21、 ls、ps的內部原理,如何操作的,死鎖設計的時候如何預防
    22、線程調度算法,linux采用哪種

    ?3、進程與線程
    1、怎么殺死進程?
    2、線程,進程區別 ? 多線程與多進程區別,使用場景,瀏覽器使用哪個,為什么。
    3、系統線程數量上限是多少?
    4、進程和線程的區別是什么? 線程切換的時候保存哪些狀態
    5、解釋一下LINUX下線程,GDI類。
    6、Linux線程模型是什么樣的,或者說Linux線程和進程的關聯
    7、怎么查看某個進程中的線程?
    8、協程? 協程有哪些優勢?把所有多線程都替換成協程實現可以嘛?
    9、進程間通信方式?
    10、信號量通信中,進程是如何獲取到信號量的
    11、進程分配了哪些資源
    12、進程調度策略
    13、守護進程、僵尸進程、孤兒進程,如何創建守護進程;
    14、講講信號和信號量,它們有什么區別

    ?4、輸入輸出系統
    1、socket編程,BIO,NIO,epoll?

    ?5、存儲器管理
    1、什么是頁式存儲?
    2、操作系統里的內存碎片你怎么理解,有什么解決辦法?
    3、知道哪些頁面置換算法?
    4、磁盤調度算法?
    5、虛擬內存的實現原理 ? 虛擬內存怎么管理 ?
    6、除了top怎么看內存使用量?
    7、文件讀寫授權

    ?6、處理機調度與死鎖
    1、什么情況下會發生死鎖,解決策略有哪些?
    2、系統CPU比較高是什么原因?
    3、系統如何提高并發性?
    4、操作系統層面,CPU調用線程完成任務的過程,
    5、Linux下的中斷
    6、死鎖和死循環都會導致程序hung住,怎么判斷是死鎖還是死循環:
    7、Linux CPU的輪詢方式

    ?7、文件相關操作
    1、linux熟悉嗎?怎么查看文件的前10行,怎么查看文件的后10行?
    2、怎么對文件內容排序
    3、linux查看文件和目錄的磁盤占有率、查看端口被哪個進程占用
    4、一個文件如何組織存放到硬盤上
    5、怎么看這個文件夾下所有文件的大小
    6、Linux 中能否刪除一個正在運行的文件
    7、給你一個文件里面有好幾列,怎么用命令統計某一列的和
    8、.如果rm了正在讀寫的文件,會發生什么?
    9、mv一個文件到另一個地方,是真實的把整個文件移動過去嗎?
    10、怎么看打開這個文件的是哪個進程?

    七、算法與數據結構
    ?1、哈希
    1、hashset存的數是有序的嗎?
    2、Object作為HashMap的key的話,對Object有什么要求嗎? hashCode 怎么對應桶的位置?
    3、一致性哈希算法
    4、HashMap碰撞的概率? 1000W個數put碰撞的概率??
    5、Java中的HashMap的工作原理是什么?
    6、hashCode()和equals()方法的重要性體現在什么地方?
    7、解決hash沖突有哪些辦法
    8、講下你了解的Hash函數有哪些?

    ?2、樹
    1、說一下B+樹和B-樹?
    2、怎么求一個二叉樹的深度?手撕代碼?
    3、算法題:二叉樹層序遍歷,進一步提問:要求每層打印出一個換行符
    4、二叉樹任意兩個節點之間路徑的最大長度
    5、如何實現二叉樹的深度?
    6、如何打印二叉樹每層的節點?
    7、TreeMap和TreeSet在排序時如何比較元素?Collections工具類中的sort()方法如何比較元素?
    8、紅黑樹平衡怎么調整
    9、B樹什么時候的高度會變高;

    ?3、遍歷
    1、編程題:寫一個函數,找到一個文件夾下所有文件,包括子文件夾
    2、二叉樹 Z 字型遍歷

    ?4、鏈表
    1、反轉單鏈表
    2、隨機鏈表的復制
    3、鏈表-奇數位升序偶數位降序-讓鏈表變成升序
    4、bucket如果用鏈表存儲,它的缺點是什么?
    5、如何判斷鏈表檢測環

    ?5、數組
    1、尋找一數組中前K個最大的數
    2、求一個數組中連續子向量的最大和
    3、找出數組中和為S的一對組合,找出一組就行
    4、一個數組,除一個元素外其它都是兩兩相等,求那個元素?
    5、算法題:將一個二維數組順時針旋轉90度,說一下思路。
    6、二分查詢的時間復雜度是多少,為什么是logn

    ?6、排序
    1、排序算法知道哪些,時間復雜度是多少,哪些是穩定的 , 不穩定會有什么問題?解釋一下快排?
    2、如何得到一個數據流中的中位數?
    3、堆排序的原理是什么? 大頂堆轉換小頂堆
    4、歸并排序的原理是什么?
    5、排序都有哪幾種方法?請列舉出來。
    6、如何用java寫一個冒泡排序?
    7、口述topK
    8、100個數字,100萬個數字,100億個數字,分別給出排序的方法。
    9、講一下最大堆和最小堆

    ?7、堆與棧
    1、堆與棧的不同是什么?
    2、heap和stack有什么區別。
    3、解釋內存中的棧(stack)、堆(heap)和靜態區(static area)的用法。

    ?8、隊列
    1、什么是Java優先級隊列(Priority Queue)?

    ?9、字符串
    1、KMP算法

    ?10、圖
    1、Dijkstra 算法
    2、說一下數據結構中的圖如何存儲

    ?11、高級算法
    1、題目:
    Design and implement a data structure for Least Frequently Used (LFU) cache. It should support the following operations: get and put.
    get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.
    put(key, value) - Set or insert the value if the key is not already present. When the cache reaches its capacity, it should invalidate the least frequently used item before inserting a new item. For the purpose of this problem, when there is a tie (i.e., two or more keys that have the same frequency), the least recently used key would be evicted.
    Could you do both operations in O(1) time complexity?
    2、id全局唯一且自增,如何實現?
    3、如何設計算法壓縮一段URL?
    4、為什么要設計后綴表達式,有什么好處?
    5、LRU算法的實現原理?
    如何實現? 有兩種方案(LinkedList和Redis) https://zhuanlan.zhihu.com/p/34133067
    6、負載均衡算法 負載均衡器Ribbon的實現原理
    7、A*算法
    8、設計一個不使用鏈表的緩存淘汰算法
    9、負載均衡算法有哪些
    10、大O復雜度具體指的是什么?
    11、動態規劃了解嗎,主要是用來解決什么問題?適用于什么場景?動態規劃相比遞歸來說有什么優點。

    八、分布式相關
    ?1、分布式原理
    1、緩存的實現原理,設計緩存要注意
    2、微服務和單體架構優缺點在哪里?怎么評估一個系統是不是需要做微服務化?
    3、了解的中間件;
    4、微服務架構中,多級鏈路調用過程,如果部分調用失敗,如何讓狀態回滾
    5、服務熔斷和服務降級有什么區別
    6、分布式系統需要考慮哪些方面要素
    7、Hystrix 熔斷原理
    8、RPC通信框架的概念。RPC通信的流程。rpc架構了解嗎怎么實現?RPC框架的核心?
    9、 如果你自己設計一個rpc框架,怎么設計?
    10、怎么熱拷貝,給一個思路,比如一個ES集群在建立索引,我們怎么樣在它還在持續建立索引的情況下,將當時的狀態給dump下來
    11、如果緩存雪崩,大量請求直接打到數據庫怎么辦?
    12、服務限流,服務隔離。
    13、當庫存預加載以后,庫存再次發生變化該如何解決?
    14、實現限流怎么實現?若讓你設計一個限流器,你會怎么設計(令牌桶算法的思路)
    15、2PC 和 3PC
    16、raft協議介紹,raft的日志需要有什么特點 , 網絡分區怎么解決,raft一致性如何實現
    17、etcd分布式鎖如何實現
    18、分布式kv元數據管理用什么結構
    19、Paxos和ZAB協議
    20、分布式集群中如何保證線程安全?
    21、Twitter雪花算法了解一下

    ?2、系統設計
    1、如何畫項目的架構、模塊、技術圖
    2、如何設計存儲海量數據的存儲系統
    3、設計一個系統,每天有100億條數據,需要在后臺做實時展示和查找。
    我當時回答的大體思路是nginx負載均衡,消息隊列存儲,多線程讀取,批量插入,數據庫分庫分表。面試官根據我的回答又衍生出了很多問題,如消息隊列存滿了怎么辦?(也就是消費跟不上生產)批量插入時某一條失敗了有什么影響?怎么解決?分庫分表應該怎么分?怎么解決數據遷移的問題?
    4、講一下秒殺系統的整個架構? 秒殺系統如何解決超賣問題 ?
    5、分布式秒殺如果不用mq怎么做?不使用緩存設計一個秒殺系統如何優化? 秒殺如何在手機端限流
    6、設計一個關注系統,一個用戶可以關注很多個用戶,也可以查看自己關注的人的信息,數據怎么存儲,數據庫怎么設計,然后設計一套API,包含兩個功能:關注某個用戶,查看關注的用戶的信息
    7、場景設計題:如果讓你設計類似于滴滴打車的軟件,只考慮后端,那么你會設計哪些模塊?
    8、設計題:有一個服務器專門接收大量請求,怎么設計?
    9、如果搜索做的很大,需要分布式,你會怎么設計?
    10、做項目,高并發遇到的瓶頸,除了數據庫方面,能從其他方面考慮嗎?
    11、怎么削峰?接口壓測QPS只有2000,怎么應對5000QPS的訪問量(我回答的消息隊列,面試官沒啥表情) 如果消息隊列也超過閾值了呢?

    ?3、場景題
    1、一張商品表的主鍵是int類型(大概21億),并且這張表還和其他的很多表有關聯,現在表中的id已經到了20億。 問: 假如快到雙11了,商品量暴漲,表里可能存不下了,給一個方法,躲過這個難關???
    2、多租戶場景下的單個數據庫資源占用過多怎么解決?
    3、如果我們有 1000 個服務,在雙 11 要關閉部分業務,這個怎么更快關閉。(回答MQ 說不行,最后沒轍說注冊中心方案)如果要關閉1000個服務,結果有 5 個消息丟失了怎么辦?
    4、文件并發訪問量很高的時候,怎么保證可用性

    九、補充

    ?1、Git , Maven等工具使用
    1、maven版本控制
    2、Maven怎么解決包沖突的
    3、使用git時有哪些情況會push失敗
    4、Git的基礎命令
    5、Git相關,工作區和暫存區?git push?
    6、Git中 rebase 和 merge 有什么區別
    7、Git相關,如果現在要切換到其他分支處理bug,保存當前的工作,用什么命令
    8、git的使用,怎么避免代碼沖突,怎么回退代碼,問我有多少種回退機制

    ?2、知識擴展
    1、對數據壓縮方面有了解嗎?
    2、大概講一下搜索引擎原理
    3、比如云計算有哪些服務和應用場景
    4、NP 問題
    5、拜占庭問題
    6、SSO原理,應用場景
    7、介紹一下mapreduce
    8、 講講同構和同態

    ?3、場景題
    5、情景題:如果一個外賣配送單子要發布,現在有200個騎手都想要接這一單,如何保證只有一個騎手接到單子?
    6、場景題:美團首頁每天會從10000個商家里面推薦50個商家置頂,每個商家有一個權值,你如何來推薦?第二天怎么更新推薦的商家?
    可以借鑒下stackoverflow,視頻網站等等的推薦算法。
    7、場景題:微信搶紅包問題
    悲觀鎖,樂觀鎖,存儲過程放在mysql數據庫中。
    8、場景題:1000個任務,分給10個人做,你怎么分配,先在紙上寫個最簡單的版本,然后優化。
    全局隊列,把1000任務放在一個隊列里面,然后每個人都是取,完成任務。
    分為10個隊列,每個人分別到自己對應的隊列中去取務。
    9、場景題:保證發送消息的有序性,消息處理的有序性。
    10、如何把一個文件快速下發到100w個服務器
    11、給每個組分配不同的IP段,怎么設計一種結構使的快速得知IP是哪個組的?
    12、10億個數,找出最大的10個。
    建議一個大小為10的小根堆。
    13、有幾臺機器存儲著幾億淘寶搜索日志,你只有一臺2g的電腦,怎么選出搜索熱度最高的十個搜索關鍵詞?
    14、如果有100g的文件要排序(數字),內存只有1g,該怎樣排序
    先劃分成多個小文件,送進內存排序,然后再采用多路歸并排序。
    15、有十萬個單詞,找出重復次數最高十個?
    16、對一個超大文件怎么搜索最快
    17、有20億個訂單,其中一個缺失了,如何找到他 限制內存1G
    18、網絡藏書館中有1000億本英文書,每本書都有英文名字和出版日期,我想要計算出每個英文單詞總共出現的次數。需要關注以下幾個功能:以多線程方式來處理這個功能,在處理過程中我隨時需要知道處理的進度和當前的結果,防止并發問題
    19、設計一個類似“微信附近的人”的功能(考慮海量用戶的場景,數據存儲方式,使用什么數據結構,使用什么算法,時間復雜度和空間復雜度分別是多少)
    20、美團點評發布團購訂單,商家的操作有三個操作:新增一個操作,刪除一個操作,界面顯示(展示按照添加的順序),任意兩個商品信息互換。從最簡單的設計一個如何來實現排序的功能(添加和互換) 數據頻繁變更不適合建立索引,如何優化不考慮數據庫,在內存中如何來實現這樣一個feature?
    21、海量數據迅速查詢包含關鍵字的所有文章
    22、有一個場景,現在一張表有幾十萬的數據,然后10個線程,對它并發計算,然后計算完了之后通知,該怎么設計?
    23、一億個文件需要處理,把處理結果匯總到一個文件,說說你的思路
    24、百度的40億次請求(關鍵詞搜索),如何找到搜索次數top100萬的關鍵字?如果已經有了這個100萬個關鍵字,如何做關鍵詞的聯想推薦(輸入中,推薦框提示中國,中華等)?百萬條電話(假設7位)如何返回一個不含重復號碼的清單?(想法是可反推的哈希方法,如何做到呢)
    25、顯示網站的用戶在線數的解決思路
    26、設計一個負載均衡算法,實現每個用戶隨機訪問不同服務器,不能重復
    27、設計一個系統,限制單個用戶每5分鐘只能訪問100次接口
    28、一道大數據量的題目,A文件有3T,里面放的是uid+uname,B文件2T,里面放的是uid+unage,找出相同的uid并寫成uid+uname+uage的樣子,限制內存2G
    29、feed流用拉還是用推,這兩種方式有什么特點?如果你設計微博,用戶關注動態用推還是用拉?
    30、求抖音小視頻每日點擊量最高的10個(Hash + 最小堆)
    31、一個文件有1億行,怎么定位到1000行最快

    ?4、項目的實際問題
    1、如果線上故障宕機,如何復現
    2、項目怎么部署到服務器上的?怎么登錄linux服務器?如果將項目部署到兩臺服務器中,需要考慮哪些因素?
    3、做接口優化的思路是怎么樣的?答:(用阿爾薩斯查看)。阿爾薩斯(iarthas)原理是怎么樣的?
    4、聊聊項目中進行的性能優化,怎么調優的。
    5、會進行軟件性能的考量嗎?比如模塊測試。有沒有做過單元測試,不能連數據庫, 你怎么做的單元測試。有沒有進行過壓力測試?如何進行壓力測試?給一個測試場景(上傳照片),分析壓測的方向
    6、TDD的推行情況 , 如何保證開發能夠推行TDD
    7、前臺,中臺,具體的區別,中臺是什么
    8、客戶抱怨你們網站太慢,怎么排查問題?
    9、一個java程序halt住了,如何檢查

    ?4、智力題
    1、有兩個雞蛋,如何最快的試出100層樓中剛好那一層扔下雞蛋會碎
    2、給你10只實驗小鼠,用7天的時間檢驗999個瓶子中帶有一瓶毒藥的瓶子是哪一瓶,小鼠喝了毒藥7天后才會死亡,如何實現?
    3、時針和分針在十二點時刻是重合的,再過12小時之后,在這個過程中,分別在哪些時刻是重合的。
    4、n條直線最多把平面分割成幾部分? n個平面最多把空間分割成幾部分?

    評論 9 您還未登錄,請先 登錄 后發表或查看評論
    ??2022 CSDN 皮膚主題:大白 設計師:CSDN官方博客 返回首頁

    打賞作者

    小饅頭的yy

    你的鼓勵將是我創作的最大動力

    ¥2 ¥4 ¥6 ¥10 ¥20
    輸入1-500的整數
    余額支付 (余額:-- )
    掃碼支付
    掃碼支付:¥2
    獲取中
    掃碼支付

    您的余額不足,請更換掃碼支付或充值

    打賞作者

    實付
    使用余額支付
    點擊重新獲取
    掃碼支付
    錢包余額 0

    抵扣說明:

    1.余額是錢包充值的虛擬貨幣,按照1:1的比例進行支付金額的抵扣。
    2.余額無法直接購買下載,可以購買VIP、C幣套餐、付費專欄及課程。

    余額充值
    多乐彩