天天看點

【牛客網】Java開發校招面試考點彙總--答案彙總

個人部落格:https://totalo.top

題目來源見下方,答案整理為部落客收集于網際網路。

作者:牛妹

連結:https://www.nowcoder.com/discuss/161991

來源:牛客網

本文首發于csdn,同步釋出在本人部落格:totalo.top

一、JavaSE部分

❤1、Java基礎

1、為什麼重寫equals還要重寫hashcode

答:(1)兩個對象相等,hashCode則一定相等;(2)hashCode相等,兩個對象不一定相等;為了提高程式的效率,先進行hashcode的比較,如果不同,不必要進equals的比較了。如果不重寫hashCode()會降低Map等集合的索引速度。

2、說一下map的分類和常見的情況

  1. HashMap: 線程不安全,底層采用數組 + 連結清單 + 紅黑數組成,允許一條記錄的為null。
  2. HashTable:線程安全,不允許鍵值為空
  3. LinkedHashMap: 保證了元素插入的順序,即輸入順序和輸出順序一緻。周遊速度隻與資料多少有關系。
  4. TreeMap: 實作了SortMap接口,能夠把儲存的記錄按照鍵排序(預設為升序)也可指定排序比較器。

在Map中插入,删除,定位元素:HashMap

要按照自定義順序或自然順序周遊:TreeMap

要求輸入順序和輸出順序相同:LinkedHashMap

3、Object若不重寫hashCode()的話,hashCode()如何計算出來的?

将對象的記憶體值進行哈希運算,傳回一個int類型的哈希值。

4、==比較的是什麼?

對于基本資料類型來說,比較的是值,對于引用類型來說,比較的是引用指向的對象是否為同一個(即比較對象的記憶體位址)。

5、若對一個類不重寫,它的equals()方法是如何比較的?

預設采用的Object類的equals(),而在Object類中,equals()方法的實習是采用==實作比較的。

6、java8新特性

lambda表達式:允許把函數作為一個方法的參數。

方法引用:直接引用已有的Java類或者對象(執行個體)的方法或構造器。

預設方法:在接口裡都有一個實作方法。

Stream API: 新添加Stream API 半把真正的函數式程式設計風格引入Java。

DateTimeAPI:加強對于日期和時間的處理。

Optional:解決空指針異常。

Js引擎。

7、說說Lamda表達式的優缺點。

優點:

1.簡潔

  1. 非常容易并行計算。
  2. 可能代表未來的程式設計趨勢。

缺點:

  1. 若不用并行計算,很多時候計算速度沒有比傳統的 for 循環快。(并行計算有時需要預熱才顯示出效率優勢)
  2. 不容易調試。
  3. 若其他程式員沒有學過 lambda 表達式,代碼不容易讓其他語言的程式員看懂。

8、一個十進制的數在記憶體中是怎麼存的?

二進制補碼

9、為啥有時會出現4.0-3.6=0.40000001這種現象?

在計算機中無法直接進行計算,都需要轉換為二進制數進行運算,在二進制小數的計算過程中,産生了誤差。

10、Java支援的資料類型有哪些?什麼是自動拆裝箱?

8種基本類型:byte、short、char、int、long、float、double、booblean以及引用類型包括數組、類、接口等。

自動裝箱、拆箱是Java中8種基本類型與其包裝類型之間的轉化。裝箱是基本資料類型與其包裝類型的轉化,拆箱是其逆過程。封裝成對象能夠更好的調用方法。

11、什麼是值傳遞和引用傳遞?

值傳遞:對于基本類型而言、傳遞的是該變量的一個副本,改變副本不影響原變量。

引用傳遞:一般對于對象類型而言,傳遞的是該對象位址的一個副本,并不是原對象本身。

一般認為,Java中的傳遞都是值傳遞,Java中執行個體對象的傳遞是引用傳遞。

12、數組(Array)和清單(ArrayList)有什麼差別?什麼時候應該使用Array而不是ArrayList?

Array可以包含基本類型以及對象類型并且時同一資料類型,ArrayList隻能包含對象類型,Object。Array大小是固定的,ArrayList的大小是動态變化的。ArrayList提供了更多方法和特性。

Array:集合長度固定、儲存的對象為基礎資料類型,且為同一類型。對集合進行随機的讀寫。

ArrayList:長度不固定,如果長度增長頻繁,應考慮預設ArrayList的長度或者使用連結清單LinkedList代替,ArrayList每次擴容都要進行數組的拷貝。插入和删除使用其内置方法較為友善。

13、你了解大O符号(big-O notation)麼?你能給出不同資料結構的例子麼?

大O符号描述了當資料結構裡面的元素增加的時候,算法的規模或者是一個漸進上界。O表示算法的時間或者空間複雜度上界。比如數組的插入時間複雜度為O(N),空間複雜度為O(1),連結清單的插入時間複雜度為O(1),空間複雜度為O(1).

14、String是最基本的資料類型嗎?

不是,String是引用類型。

15、int 和 Integer 有什麼差別

  1. Integer是int的包裝類型,int的初值為0,Integer的初值為null
  2. Integer 和new Integer不會相等,new出來的對象存在堆中,而非new Integer存放在常量池中,記憶體位址不一緻。
  3. 兩個非new Integer,如果數在-128 - 127之間則為true,否則為false.因為在編譯時,Integer i = x, 會轉化為Integer.valueOf(x),而此函數在-128 - 127對資料進行緩存。
  4. 兩個都是new 的話,記憶體位址不同,false
  5. int 和Integer比較,都為true,原因在于自動拆箱。

16、String 、StingBuilder和StringBuffer的差別

String 和 StringBuffer、StringBuilder 的差別在于 String 聲明的是不可變的對象,每次操作都會生成新的 String 對象,然後将指針指向新的 String 對象,而 StringBuffer、StringBuilder 可以在原有對象的基礎上進行操作,是以在經常改變字元串内容的情況下最好不要使用 String。

StringBuffer 和 StringBuilder 最大的差別在于,StringBuffer 是線程安全的,而 StringBuilder 是非線程安全的,但 StringBuilder 的性能卻高于 StringBuffer,是以在單線程環境下推薦使用 StringBuilder,多線程環境下推薦使用 StringBuffer。

17、我們在web應用開發過程中經常遇到輸出某種編碼的字元,如iso8859-1等,如何輸出一個某種編碼的字元串?

// 将str字元串從iso8859-1轉化成utf8編碼
res = new String (str.getBytes("iso8859-1"), "utf-8");
           

18、&和&&的差別?

&和&&都可以作為邏輯與的運算符,表示邏輯與,當運算符兩邊的表達式的結果都為true時,整個運算結果才為true。&&具有短路功能呢,如果第一個為false,即不再判斷第二個表達式。&可作為位運算符。表示按位與運算。

19、在Java中,如何跳出目前的多重嵌套循環?

在最外層定義一個标号,在循環中直接break 标号就行了。

20、你能比較一下Java和JavaSciprt嗎?

基于對象和面向對象:Java是一門真正面向對象的語言,Js是腳本語言,基于對象和事件驅動的程式設計語言。

解釋和編譯:Java在運作時必須先編譯再解釋執行,而Js是一種解釋性語言。

強類型和弱類型:Java采用強類型的變量檢查必須先聲明後使用,而Js是一種弱類型。

代碼格式不一樣

Java是是靜态語言亦稱為“準動态語言”,可通過反射機制、位元組碼操作産生動态性,Js是動态語言。

21、簡述正規表達式及其用途。

在編寫處理字元串的程式時,經常會有查找符合某些複雜規則的字元串的需要,正規表達式就是用于描述這些規則的工具。正規表達式就是記錄文本規則的代碼。

22、Java中是如何支援正規表達式操作的?

String str = "待比對字元串";
Pattern p = Pattern.compile("正規表達式");
Matcher m = p.matcher(str);
           

23、請你說說Java和PHP的差別?

1、PHP适合快速開發,開發成本低。Java适合開發大型的應用系統。

2、系統技術架構的比較,PHP隻能實作簡單的兩層或者三層的架構。Java可實作多層的網絡架構。

3、PHP對于不同的資料庫需要采用不同的資料庫接口,Java用JDBC統一實作。

❤2、關鍵字

1、介紹一下Syncronized鎖,如果用這個關鍵字修飾一個靜态方法,鎖住了什麼?如果修飾成員方法,鎖住了什麼?

java關鍵字,用來修飾代碼塊、執行個體方法、靜态方法。為修飾的方法加鎖,提供線程安全。修飾變量時,既可以保證可見性,又可以保證原子性。

同步方法:鎖是目前對象

靜态函數:鎖是指引用目前類的class對象

同步方法塊:鎖是值synchonized括号内配置的對象。

2、介紹一下volatile?

java關鍵字之一,隻能用來修飾變量。使用其修飾的變量會強制将修改的值寫入主存,主存中值的更新會使緩存中的值失效。(非volatile變量不具備這樣的特性,非volatile變量的值會被緩存,線程A更新了這個值,線程B讀取這個變量的值時可能讀到的并不是是線程A更新後的值)。volatile禁止指令重排。其具有可見性、有序性。

指令重排是指在程式執行過程中, 為了性能考慮, 編譯器和CPU可能會對指令重新排序.

3、鎖有了解嘛,說一下Synchronized和lock

1、Lock是一個接口,而synchionized是java中的關鍵字,synchronized是内置語言實作的。

2、synchronized在發生異常時能夠自動釋放占有鎖,是以不會導緻死鎖現象發生;而Lock在發生異常時,若不是主動unLock(),有可能會早場死鎖現象。

3、Lock可以讓等待鎖的線程響應中斷;使用synchronized,等待的線程會一直等待下去,不能響應中斷。

4、Lock可以判斷是否成功擷取鎖,而synchronized無法辦到。

5、Lock可以提高多個線程進行讀操作的效率。

在性能上來說,競争資源不激烈,性能差不多,資源競争激烈時,Lock優于synchronized;

二者都是可重入鎖。

Lock是可中斷鎖,synchronized是不可中斷鎖。

synchronized是非公平鎖,無法保證等待的線程擷取鎖的順序。

ReentrantLock和ReentrantReadWriteLock,它預設情況下是非公平鎖,但是可以設定為公平鎖。

4、講一講Java裡面的final關鍵字怎麼用的?

final修飾關鍵字;修飾類表示該類不能被繼承,變量或者方法被final修飾表示在使用中變量值不能被修改為常量,方法不能被重寫。

❤3、面向對象

1、wait方法底層原理

sleep()不釋放對象鎖,wait()釋放對象鎖。

2、Java有哪些特性,舉個多态的例子。

封裝、繼承、多态。不同種類動物具有不一樣的行為。

3、String為啥不可變?

底層final修飾

4、類和對象的差別

類市對于一類事務的描述。

對象用于表示現實中該類事務的個體。

5、請列舉你所知道的Object類的方法。

clone() :建立并傳回此對象的一個副本。

equals(Object obj) :訓示其他某個對象是否與此對象“相等”。

getClass() :傳回此 Object 的運作時類。

hashCode() :傳回該對象的哈希碼值。

notify() :喚醒在此對象螢幕上等待的單個線程

notifyAll() :喚醒在此對象螢幕上等待的所有線程。

toString() :傳回該對象的字元串表示。

wait() : 在其他線程調用此對象的 notify() 方法或 notifyAll() 方法前,導緻目前線程等待。

6、重載和重寫的差別?相同參數不同傳回值能重載嗎?

1)重寫

override

  • 方法名、參數、傳回值相同。
  • 子類方法不能縮小父類方法的通路權限。
  • 子類方法不能抛出比父類方法更多的異常(但子類方法可以不抛出異常)。
  • 存在于父類和子類之間。
  • 方法被定義為

    final

    不能被重寫。

2)重載

overload

  • 參數類型、個數、順序至少有一個不相同。
  • 不能重載隻有傳回值不同的方法名。
  • 存在于父類和子類、同類中。

7、”static”關鍵字是什麼意思?Java中是否可以覆寫(override)一個private或者是static的方法?

static表示靜态的意思,修飾成員變量和成員函數,被static修飾的成員函數隻能通路靜态成員,不能風聞非靜态成員。靜态是随着類的加載而加載。不能。私有方法被隐式的定義為final不能被重寫。靜态的方法形式上是可以被重寫的,即子類中可以重寫父類中的靜态方法,但實際上在記憶體的角度上靜态方法是不可以被重寫的

8、String能繼承嗎?

不能,String類為final修飾。

9、StringBuffer和StringBuilder有什麼差別,底層實作上呢?

StringBuffer線程安全,StringBuilder非線程安全。兩者都繼承AbstractStringBuilder。StringBuffer重寫了AbstractBuilder方法時使用了synchronized同步塊。

10、類加載機制,雙親委派模型,好處是什麼?

類加載機制 :虛拟機把描述類的資料從class檔案加載到記憶體,并對書韓劇進行校驗,轉換解析和初始化。

雙親委派機制:當類受到一個類加載請求,自己不會去嘗試加載這個類,而是把請求委派給父類去完成,每一層次的類加載器都是如此,是以所有的加載請求都應該傳送到啟動類加載其中。隻有當父類加載回報自己無法完成這個請求時,子類加載器才會嘗試自己加載。

好處:比如加載位于rt.jar包中的類java.lang.Object,不管是哪個加載器加載這個類,最終都是委托給頂層的啟動類加載器進行加載。這樣就保證了使用不同的類加載器最終得到的都是同樣一個Object對象。

11、靜态變量存在哪?

全局區

12、講講什麼是泛型?

不确定的一種資料類型。是一預編譯檢查類型。泛型可以将運作時異常轉換城編譯階段的錯誤。

13、解釋extends 和super 泛型限定符-上界不存下界不取

extends 指定上界限,隻能傳入本類和子類

super 指定下界限,隻能傳入本類和父類

連結:https://www.nowcoder.com/questionTerminal/5dfac75a8de64171bc763a3cb39a58f7

來源:牛客網

1、extends 限定參數類型的上界 參數類型必須是T或T的子類型 super限定參數類型的下界 參數類型必須是T或T的超類型

2、extends 隻能用于方法傳回 告訴編譯器此返參的類型的最小繼承邊界為T T和T的父類都能接收 但是入參類型無法确定 隻能接受null的傳入 super隻能用于限定方法入參 告訴編譯器入參隻能是T或其子類型 而返參隻能用Object類接收既不能用于入參也不能用于返參

14、是否可以在static環境中通路非static變量?

不可以。static變量屬于類,在類加載的時候被初始化,這個時候非靜态變量沒有加載,故靜态變量不能通路。

15、談談如何通過反射建立對象?

1、預設構造器通過Class的newInstance()方法擷取。

// 隻能預設建立無構造
Class<?> clz = Class.forName("完整包名");
Object obj = clz.newInstance();
           

2、通過擷取構造器getConstructor(Class<?>…parameterTypes);(通過有參的構造器,參數可以指定具體類型和多個數量

Class<?> clz = Class.forName("完整包名");
Constructor<?> con = clz.getConstructor(String.class, String.class); // 這裡面的參數需要是類型的.class
Object ojb = con.newInstance("",""); //與上文擷取的構造方法參數類型相對應即可
           

16、Java支援多繼承麼?

普通類不支援,但是接口支援,普通類可以實作多個接口

17、接口和抽象類的差別是什麼?

  • 抽象類可以有構造方法,接口中不能有構造方法。
  • 抽象類可以有普通成員變量,接口中沒有普通成員變量。
  • 抽象類可以包含靜态方法,接口中不能包含靜态方法。
  • 一個類可以實作多個接口,但隻能繼承一個抽象類。
  • 接口可以被多重實作,抽象類隻能被單一繼承。

18、Comparable和Comparator接口是幹什麼的?列出它們的差別。

Comparable是集合内部定義的方法實作排序。Comparator是在集合外部實作的排序。

Comparable是表示目前類支援排序;

Comparator可定義自定義比較器。

19、面向對象的特征有哪些方面

  • 封裝:給對象提供隐藏内部特性和行為的能力。
  • 繼承:給對象提供了從基類擷取字段和方法的能力。
  • 多态:程式設計語言給不同的底層資料類型做相同的接口展示一種能力。
  • 抽象:把想法從具體的執行個體中分離出來。

20、final, finally, finalize的差別。

1、final是修飾關鍵字

一個類被聲明為final,不能再派生出新的子類,不能作為父類被繼承。是以一個類不能既被聲明為abstract的,又被聲明為final.

變量被聲明為final,可以保證在使用中不被使用,被聲明為final的變量必須在聲明時給定初值,而且在以後的引用中隻能讀取,不可修改,被聲明為final的方法也同樣隻能使用,不能重寫。

2、finally

在異常處理時,提供finally塊來執行任何清楚操作,如果抛出一個異常,那麼相比對的的catch子句就會執行,最後進入fianlly語句。

在以下 4 種特殊情況下,finally塊不會被執行:

  • finally

    語句塊中發生了異常。
  • 在前面的代碼中用了

    System.exit()

    退出程式。
  • 程式所在的線程死亡。
  • 關閉 CPU 。

3、finalize

這是一個方法,在垃圾收集器将對象從記憶體中清除出去之前做必要的清理工作。這個方法時垃圾手機器在确定這個對象沒有被引用時對這個對象調用的。

  • 它是在 Object 類中定義的,是以所有的類都繼承了它。
  • 子類覆寫

    finalize()

    方法,以整理系統資源或者執行其他清理工作。
  • finalize()

    方法,是在垃圾收集器删除對象之前對這個對象調用的。

21、Overload和Override的差別。Overloaded的方法是否可以改變傳回值的類型?

1)重寫

override

  • 方法名、參數、傳回值相同。
  • 子類方法不能縮小父類方法的通路權限。
  • 子類方法不能抛出比父類方法更多的異常(但子類方法可以不抛出異常)。
  • 存在于父類和子類之間。
  • 方法被定義為

    final

    不能被重寫。

2)重載

overload

  • 參數類型、個數、順序至少有一個不相同。
  • 不能重載隻有傳回值不同的方法名。
  • 存在于父類和子類、同類中。

22、abstract class和interface有什麼差別?

  • 抽象類可以有構造方法,接口中不能有構造方法。
  • 抽象類可以有普通成員變量,接口中沒有普通成員變量。
  • 抽象類可以包含靜态方法,接口中不能包含靜态方法。
  • 一個類可以實作多個接口,但隻能繼承一個抽象類。
  • 接口可以被多重實作,抽象類隻能被單一繼承。

23、Static Nested Class 和 Inner Class的不同

Static Nested Class :靜态内部類,可以不依賴于外部類執行個體被執行個體化

Inner Class :内部類需要在外部類執行個體化後才能執行個體化。

24、當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,并可傳回變化後的結果,那麼這裡到底是值傳遞還是引用傳遞?

值傳遞,在Java裡面隻有值傳遞。當Java執行個體對象執行個體作為一個參數被傳遞到方法中時,參數的值就是該對象的引用一個副本。指向同一個對象,對象的内容可以在被調用的方法中改變。但對象的引用時永遠不會改變的。

Java參數不管是原始類型還是引用類型,傳遞的都是一個副本。

1、參數是原始類型:傳遞的是參數的一個副本,即參數的原始值,函數中改變副本的值不會改變原始的值;

2、參數是引用類型:傳遞的參數是引用參數的副本,這副本是存放的是參數的位址,若沒改變副本的位址,改變了位址中的值會影響原始值。如果改變了副本的值,如new一個,那麼副本指向了新位置,但是原始引用位址中的值不會發生變化。

25、Java的接口和C++的虛類的相同和不同處。

C++中的虛類相當于Java中的抽象類,是以有如下的不同;

虛類可有構造方法,接口無;

虛類隻能單繼承,接口可以多實作;

虛類中的方法不一定為抽象方法,可以具有方法體,接口中都是抽象方法,不能有方法體,隻是方法聲明;

虛類可以是public、private、protected、default,接口隻有public;

虛類中的方法權限修飾符同上,接口中隻能是public和default;

虛類和接口都不能被執行個體化;

26、JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分别代表什麼意義?在try塊中可以抛出異常嗎?

throws:顯式的聲明一個異常;

throw:抛出一個異常;

try:将可能發生異常的語句包含起來,進行異常的處理;

catch:如果有異常就會執行相關的語句;

finally:不管是否發生異常都會執行;

可以。

27、内部類可以引用他包含類的成員嗎?有沒有什麼限制?

可以,不是靜态内部類,無任何限制,一個内部類對象可以通路建立他的外部類對象的成員包括私有成員。如果式靜态内部類,不可以通路外部類的普通成員變量隻能通路外部類的靜态成員變量。

28、兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code說法是否正确?

不正确,equals()相等。hashCode()肯定相等。hashCode()相等。equals()不一定相等。

29、重載(Overload)和重寫(Override)的差別。重載的方法能否根據傳回類型進行區分?

1)重寫

override

  • 方法名、參數、傳回值相同。
  • 子類方法不能縮小父類方法的通路權限。
  • 子類方法不能抛出比父類方法更多的異常(但子類方法可以不抛出異常)。
  • 存在于父類和子類之間。
  • 方法被定義為

    final

    不能被重寫。

2)重載

overload

  • 參數類型、個數、順序至少有一個不相同。
  • 不能重載隻有傳回值不同的方法名。
  • 存在于父類和子類、同類中。

30、如何通過反射擷取和設定對象私有字段的值?

getDeclaredField() //擷取Field對象
setAccessible(true) //将其設定為可以通路
get/set // 通過get/set方法擷取
           

31、談一下面向對象的"六原則一法則"。

六原則:

(1)單一職責原則:一個類該做他該做的事;

(2)開閉原則:軟體實體應對拓展開發,對于修改關閉;

(3)依賴倒置原則:面向接口程式設計;

(4)裡氏替換原則:任何時候都可以用子類型替換掉父類型;

(5)接口隔離原則:接口要小而專,絕不能大而全;

(6)合成聚合複用原則:優先使用聚合或者合成關系服複用代碼;

一法則:

迪米特法則:一個對象應當對其他對象有盡可能少的了解。

32、請問Query接口的list方法和iterate方法有什麼差別?

list()傳回的對象是完整的,iterate()方法隻是傳回對象中包含的主鍵值。

33、Java中的方法覆寫(Overriding)和方法重載(Overloading)是什麼意思?

重載(Overloading)

(1)方法重載是讓類以統一的方法處理不同類型資料的一種手段。多個同名函數同時存在,具有不同的參數個數(類型)。重載Override是一個類中多态性的一種表現。

(2)java的方法重載,就是在類中可以建立多個方法,他們具有相同的名字,但具有不同參數和不同的定義。調用方法時通過傳遞給他們不同的參數個數和參數類型來決定具體使用那個方法,這就是多态性。

(3)重載的時候,方法名要一樣,但是參數類型和個數不一樣,傳回值類型可以相同也可以不同。無法以傳回類型來作為重載函數的區分标準。

重寫(Overriding)

(1)父類與子類的多态性,對父類的函數進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫。在java中,子類可繼承父類的方法,則不需要重新編寫相同的方法。但有時子類并不想原封不動繼承父類的方法,而是想做一定的修改,這就采用方法重寫。方法重寫又稱方法覆寫。

(2)若子類中的方法與父類的中的某一方法具有相同的方法名、傳回類型和參數表,則新方法覆寫原有的方法。如需要父類的原有方法,可以使用super關鍵字,該關鍵字引用房錢類的父類。

(3)子類函數通路權限大于父類。

34、Java中,什麼是構造函數?什麼是構造函數重載?什麼是複制構造函數?

構造函數:初始化對象

構造函數重載:對于預設構造函數的重載;

複制構造函數:Java沒有拷貝構造函數的概念。

35、hashCode()和equals()方法有什麼聯系?

hashCode()相等,equals()不一定相等;

equals()相等,hashCode()一定相等。

❤4、集合

1、Map和ConcurrentHashMap的差別?

不知道怎麼說這個;

Map是一個接口。但是ConcurrentHashMap是一個線程安全的一個類,在jdk1.7中采用segment分段鎖,有點類似16個現場安全的hashtable組合而成,不同分段操作不需要上鎖,對于同一分段才需要上鎖,讀不上鎖,寫才上鎖。鎖的粒度更加精細。在jdk1.8中,采用AQS和CAS實作。

2、hashMap内部具體如何實作的?

在jdk1.8中,hashMap底層是數組 + 連結清單 + 紅黑樹,具體可以去研究一下底層源碼實作。

3、如果hashMap的key是一個自定義的類,怎麼辦?

必須重寫equals()方法以及hashMap()方法。因為自定義類的hashcode()方法繼承于Object類,其hashcode碼為預設的記憶體位址,這樣即便有相同的兩個對象,比較也是不相等。若不重寫比較的是其位址。

4、ArrayList和LinkedList的差別,如果一直在list的尾部添加元素,用哪個效率高?

ArrayList基于動态數組實作,位址連續,查詢速率比較高,插入和删除的效率低。

LinkedList基于連結清單實作,位址任意不連續,新增和删除add以及remove速度快,LinkedList适合頭尾操作或插入指定的位置。

5、HashMap底層,負載因子,為啥是2^n?

負載因子預設為0.75,2^n是為了讓散列更加均勻。

連結:https://www.nowcoder.com/questionTerminal/cede8f68a7d24256895a3a632508a4eb?orderByHotValue=1&page=1&onlyReference=false

來源:牛客網

hash%length,計算機中直接求餘效率不如位移運算,源碼中做了優化hash&(length-1), hash%length==hash&(length-1)的前提是length是2的n次方; 為什麼這樣能均勻分布減少碰撞呢?2的n次方實際就是1後面n個0,2的n次方-1 實際就是n個1; 例如長度為9時候,3&(9-1)=0 2&(9-1)=0 ,都在0上,碰撞了; 例如長度為8時候,3&(8-1)=3 2&(8-1)=2 ,不同位置上,不碰撞; 其實就是按位“與”的時候,每一位都能 &1 ,也就是和1111……1111111進行與運算

6、ConcurrentHashMap鎖加在了哪些地方?

不同的Segment,ConcurrentHashMap将資料分段,在讀寫的時候隻加到相應的資料段上,這樣在多線程的時候,可以讀寫其他段的資料,提高效率。

7、TreeMap底層,紅黑樹原理?

平衡二叉樹:一棵空樹或者左右子樹的高度差絕對值不超過1,并且左右兩個子樹都一個平衡二叉樹。

8、concurrenthashmap有啥優勢,1.7,1.8差別?

ConcurrentHashMap是線程安全的。

jdk1.7:segment + HashEntry的方式實作;其中Segment在實作上繼承了ReentrantLock,自帶鎖功能。

jdk1.8:Node + 數組 + synchronized來保證并發安全進行實作。

9、ArrayList是否會越界?

可能會越界,當多個線程操作同一個ArrayList的時候,兩個線程同時執行Add線上程一已經将size++而線程二在讀取的時候導緻越界,線程在被挂起的時候,執行的位置不一樣,size是個共有變量,自增是個非原子操作。

10、什麼是TreeMap?

TreeMap繼承AbstractMap,實作NavigableMap、Cloneable、Serializable三個接口,能按自然順序或自定義順序周遊。

11、ConcurrentHashMap的原理是什麼?

線程安全的HashMap實作,采用鎖分段技術。把資料分成一段一段的存儲,然會給每一段資料進行加鎖。當一個線程占用鎖通路其中一個段資料。ConcurrentHashMap是由Segment數組結構和HashEntry數組結構組成。Segment是一種可重入鎖ReentrantLock,在ConcurrentHashMap裡扮演鎖的角色,HashEntry則用于存儲鍵值對資料。一個ConcurrentHashMap裡包含一個Segment數組,Segment的結構和HashMap類似,是一種數組和連結清單結構, 一個Segment裡包含一個HashEntry數組,每個HashEntry是一個連結清單結構的元素, 每個Segment守護者一個HashEntry數組裡的元素,當對HashEntry數組的資料進行修改時,必須首先獲得它對應的Segment鎖。

12、Java集合類架構的基本接口有哪些?

Collection

  • List
    • ArrrayList:有序,可重複,底層使用數組實作,查詢速度快,線程不安全,擴容 = 目前 * 1.5 + 1;
    • LinkedList:有序,可重複。底層使用雙向循環循環連結清單實作,增删快,線程不安全;
    • Vector:有序,底層使用數組,速度快,線程安全效率低,擴容 = 目前容量 * 2。
  • Set
    • HashSet:排列無序,不可重複,有去重特性。底層使用Hash表實作,存取速度快。内部是HashMap;
    • TreeSet:排列無序,不可重複。底層使用二叉樹實作,排序存儲,内部采用TreeMap的SortedSet;
    • LinkedHashSet:采用Hash表存儲,并使用雙向連結清單記錄插入順序。内部是LinkedHashMap。
  • Queue:在兩端出入的List,是以可以用數組或者連結清單來實作。

Map

  • TreeMap:鍵不可重複,值可重複,底層為二叉樹;
  • HashMap:鍵不可重複,值可重複,底層哈希表,線程不安全,允許key值為null,value也可以為null。
  • HashTable:鍵不可重複,值可重複,底層哈希表,線程安全,key、value都不允許為null。

13、為什麼集合類沒有實作Cloneable和Serializable接口?

克隆(cloning)或者序列化(serialization)的語義和含義是跟具體的實作相關的。是以應該由集合類的具體實作類來決定如何被克隆或者序列化

14、什麼是疊代器?

簡單來說 就是遊标

15、Iterator和ListIterator的差別是什麼?

Iterator可用來周遊Set和List集合,但是ListIterator隻能用來周遊List;

Iterator對集合隻能前向周遊,ListIteratorz隻能周遊List;

ListIterator實作了Iterator接口,包含其他很多功能。比如增加元素,替換元素,擷取前一個和後一個索引。

16、快速失敗(fail-fast)和安全失敗(fail-safe)的差別是什麼?

fail-safe允許在周遊的過程中對容器中的資料進行修改,而fail-fast則不允許。

17、HashMap和Hashtable有什麼差別?

hashMap:線程不安全,允許key值為null,value也可以為null。Iterator是fail-fast疊代器。當其他線程修改其結構時,抛出異常。預設為16,擴容為2n

hashTable:線程安全,key、value都不允許為null。初始容量為11,擴容會變成2n+1

18、ArrayList和LinkedList有什麼差別?

同上

19、ArrayList,Vector,LinkedList的存儲性能和特性是什麼?

同上

20、Collection 和 Collections的差別。

  • Collection ,是集合類的上級接口,繼承與他的接口主要有 Set 和List 。
  • Collections ,是針對集合類的一個工具類,它提供一系列靜态方法實作對各種集合的搜尋、排序、線程安全化等操作。

21、你所知道的集合類都有哪些?主要方法?

見12

22、List、Set、Map是否繼承自Collection接口?

否,詳情請參考12

23、闡述ArrayList、Vector、LinkedList的存儲性能和特性

見12

24、List、Map、Set三個接口存取元素時,各有什麼特點?

見12

❤5、線程

1、多線程中的i++線程安全嗎?為什麼?

先說不是原子的,因為這個是分為三步,讀值,+1,寫值。在這三步任何之間都可能會有CPU排程産生,造成i的值被修改,造成髒讀髒寫。

接下來說volatile不能解決這個線程安全問題。因為volatile隻能保證可見性,不能保證原子性。回答這個隻為了讓面試官曉得你考慮周全,知識面廣。

接下來說可以用鎖。使用synchronized或者ReentrantLock都可以解決這個問題。這裡還可以比較下這兩種方式的優劣。教科書式的比較結束後,來一句“我認為一般使用synchronized更好,因為JVM團隊一直以來都在優先改進這個機制,可以盡早獲得更好的性能,并且synchronized對大多數開發人員來說更加熟悉,友善代碼的閱讀”。

最後補上AtomicInteger。為什麼AtomicInteger使用CAS完成?因為傳統的鎖機制需要陷入核心态,造成上下文切換,但是一般持有鎖的時間很短,頻繁的陷入核心開銷太大,是以随着機器硬體支援CAS後,JAVA推出基于compare and set機制的AtomicInteger,實際上就是一個CPU循環忙等待。因為持有鎖時間一般較短,是以大部分情況CAS比鎖性能更優。

最初是沒有CAS,隻有陷入核心态的鎖,這種鎖當然也需要硬體的支援。後來硬體發展了,有了CAS鎖,把compare 和 set 在硬體層次上做成原子的,才有了CAS鎖。

轉載自https://blog.csdn.net/fansunion/article/details/79625510

2、如何線程安全的實作一個計數器?

使用AtomicInteger類

3、多線程同步的方法

  • 同步方法:synchronized關鍵字修飾的方法
  • 同步代碼塊
  • 使用特殊域變量(volatile)實作線程同步
  • 使用重入鎖實作線程同步
  • 使用局部變量實作線程同步

4、介紹一下生産者消費者模式?

5、線程,程序,然後線程建立有很大開銷,怎麼優化?

6、線程池運作流程,參數,政策

7、講一下AQS吧。

8、建立線程的方法,哪個更好,為什麼?

9、Java中有幾種方式啟動一個線程?

10、Java中有幾種線程池?

11、線程池有什麼好處?

12、cyclicbarrier和countdownlatch的差別

13、如何了解Java多線程回調方法?

14、建立線程有幾種不同的方式?你喜歡哪一種?為什麼?

15、概括的解釋下線程的幾種可用狀态。

16、同步方法和同步代碼塊的差別是什麼?

17、啟動線程有哪幾種方式,線程池有哪幾種?

18、在螢幕(Monitor)内部,是如何做線程同步的?程式應該做哪種級别的同步?

19、sleep() 和 wait() 有什麼差別?

20、同步和異步有何異同,在什麼情況下分别使用他們?舉例說明。

21、設計4個線程,其中兩個線程每次對j增加1,另外兩個線程對j每次減少1。使用内部類實作線程,對j增減的時候沒有考慮順序問題。

22、啟動一個線程是用run()還是start()?

23、請說出你所知道的線程同步的方法

24、多線程有幾種實作方法,都是什麼?同步有幾種實作方法,都是什麼?

25、java中有幾種方法可以實作一個線程?用什麼關鍵字修飾同步方法? stop()和suspend()方法為何不推薦使用?

26、線程的sleep()方法和yield()方法有什麼差別?

27、當一個線程進入一個對象的synchronized方法A之後,其它線程是否可進入此對象的synchronized方法B?

28、請說出與線程同步以及線程排程相關的方法。

29、舉例說明同步和異步

30、什麼是線程池(thread pool)?

31、說說線程的基本狀态以及狀态之間的關系?

32、如何保證線程安全?

❤6、鎖

1、講一下非公平鎖和公平鎖在reetrantlock裡的實作。

2、講一下synchronized,可重入怎麼實作。

3、鎖和同步的差別。

4、什麼是死鎖(deadlock)?

5、如何確定N個線程可以通路N個資源同時又不導緻死鎖?

6、請你簡述synchronized和java.util.concurrent.locks.Lock的異同?

❤7、JDK

1、Java中的LongAdder和AtomicLong的差別

2、JDK和JRE的差別是什麼?

❤8、反射

1、反射的實作與作用

?9、JVM

1、JVM回收算法和回收器,CMS采用哪種回收算法,怎麼解決記憶體碎片問題?

2、類加載過程

3、JVM分區

4、eden區,survial區?

5、JAVA虛拟機的作用?

6、GC中如何判斷對象需要被回收?

7、JAVA虛拟機中,哪些可作為ROOT對象?

8、JVM記憶體模型是什麼?

9、jvm是如何實作線程?

10、jvm最大記憶體限制多少

11、什麼是Java虛拟機?為什麼Java被稱作是“平台無關的程式設計語言”?

12、描述一下JVM加載class檔案的原理機制?

❤10、GC

1、java中記憶體洩露是啥,什麼時候出現記憶體洩露?

2、minor gc如果運作的很頻繁,可能是什麼原因引起的,minor gc如果運作的很慢,可能是什麼原因引起的?

3、闡述GC算法

4、GC是什麼? 為什麼要有GC?

5、垃圾回收的優點和原理。并考慮2種回收機制

6、java中會存在記憶體洩漏嗎,請簡單描述。

7、垃圾回收器的基本原理是什麼?垃圾回收器可以馬上回收記憶體嗎?有什麼辦法主動通知虛拟機進行垃圾回收?(垃圾回收)

❤11、IO和NIO、AIO

1、怎麼列印日志?

2、運作時異常與一般異常有何異同?

3、error和exception有什麼差別?

4、給我一個你最常見到的runtime exception

5、Java中的異常處理機制的簡單原理和應用。

6、java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分别是哪些類?

7、什麼是java序列化,如何實作java序列化?

8、運作時異常與受檢異常有什麼差別?

二、JavaEE部分

❤1、Spring

1、說一下IOC和AOP?

2、介紹一下bean的生命周期

3、Spring裡面注解用過沒有?autowired 和resource差別?

4、@Controller和@RestController的差別?

5、依賴注入的方式有幾種,哪幾種?

6、springIOC原理?自己實作IOC要怎麼做,哪些步驟?

7、Spring中BeanFactory和ApplicationContext的差別?、

8、什麼是IoC和DI?DI是如何實作的?

9、請問Spring中Bean的作用域有哪些?

10、談談Spring中自動裝配的方式有哪些?

11、aop的應用場景?

12、AOP的原理是什麼?

13、你如何了解AOP中的連接配接點(Joinpoint)、切點(Pointcut)、增強(Advice)、引介(Introduction)、織入(Weaving)、切面(Aspect)這些概念?

14、Spring支援的事務管理類型有哪些?你在項目中使用哪種方式?

15、介紹一下spring?

16、Struts攔截器和Spring AOP差別?

17、spring架構的優點?

18、選擇使用Spring架構的原因(Spring架構為企業級開發帶來的好處有哪些)?

19、持久層設計要考慮的問題有哪些?你用過的持久層架構有哪些?

❤2、Hibernate

1、闡述實體對象的三種狀态以及轉換關系。

2、Hibernate中SessionFactory是線程安全的嗎?Session是線程安全的嗎(兩個線程能夠共享同一個Session嗎)?

3、Hibernate中Session的load和get方法的差別是什麼?

4、如何了解Hibernate的延遲加載機制?在實際應用中,延遲加載與Session關閉的沖突是如何處理的?

4、簡述Hibernate常見優化政策。

5、鎖機制有什麼用?簡述Hibernate的悲觀鎖和樂觀鎖機制。

6、Hibernate如何實作分頁查詢?

7、談一談Hibernate的一級緩存、二級緩存和查詢緩存。

❤3、Struts

1、說說STRUTS的應用

❤4、Mybatis

1、解釋一下MyBatis中命名空間(namespace)的作用。

2、MyBatis中的動态SQL是什麼意思?

❤5、MVC

1、Spring MVC注解的優點

2、springmvc和spring-boot差別?

3、SpringMVC的運作機制,運作機制的每一部分的相關知識?

4、談談Spring MVC的工作原理是怎樣的?

❤6、各架構對比與項目優化

1、Mybatis和Hibernate差別?

2、介紹一下你了解的Java領域的Web Service架構。

❤7、JPA

1、EJB是基于哪些技術實作的?并說出SessionBean和EntityBean的差別,StatefulBean和StatelessBean的差別。

2、EJB與JAVA BEAN的差別?

3、EJB包括(SessionBean,EntityBean)說出他們的生命周期,及如何管理事務的?

4、EJB的角色和三個對象是什麼?

5、說說EJB規範規定EJB中禁止的操作有哪些?

6、EJB的激活機制是什麼?

7、EJB的幾種類型分别是什麼

8、EJB需直接實作它的業務接口或Home接口嗎,請簡述理由。

三、Java web程式設計

❤1、web程式設計基礎

❤2、web程式設計進階

1、forward與redirect差別,說一下你知道的狀态碼,redirect的狀态碼是多少?

2、servlet生命周期,是否單例,為什麼是單例。

3、說出Servlet的生命周期,并說出Servlet和CGI的差別。

4、Servlet執行時一般實作哪幾個方法?

5、闡述一下闡述Servlet和CGI的差別?

6、說說Servlet接口中有哪些方法?

7、Servlet 3中的異步處理指的是什麼?

8、如何在基于Java的Web項目中實作檔案上傳和下載下傳?

9、伺服器收到使用者送出的表單資料,到底是調用Servlet的doGet()還是doPost()方法?

10、Servlet中如何擷取使用者送出的查詢參數或表單資料?

11、Servlet中如何擷取使用者配置的初始化參數以及伺服器上下文參數?

12、講一下redis的主從複制怎麼做的?

13、redis為什麼讀寫速率快性能好?

14、redis為什麼是單線程?

15、緩存的優點?

16、aof,rdb,優點,差別?

17、redis的List能用做什麼場景?

18、說說MVC的各個部分都有那些技術來實作?如何實作?

19、什麼是DAO模式?

20、請問Java Web開發的Model 1和Model 2分别指的是什麼?

21、你的項目中使用過哪些JSTL标簽?

22、使用标簽庫有什麼好處?如何自定義JSP标簽?(JSP标簽)

❤3、web程式設計原理

1、get和post差別?

2、請談談轉發和重定向的差別?

3、說說你對get和post請求,并且說說它們之間的差別?

4、cookie 和session 的差別?

5、forward 和redirect的差別

6、BS與CS的聯系與差別。

7、如何設定請求的編碼以及響應内容的類型?

8、什麼是Web Service(Web服務)?

9、談談Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分别是做什麼的?有什麼差別?

10、大型網站在架構上應當考慮哪些問題?

11、請對J2EE中常用的名詞進行解釋(或簡單描述)

四、JDBC程式設計

❤1、SQL基礎

1、寫SQL:找出每個城市的最新一條記錄。

2、一個學生表,一個課程成績表,怎麼找出學生課程的最高分數

3、有一組合索引(A,B,C),會出現哪幾種查詢方式?tag:sql語句

❤2、JDBC基礎

1、資料庫水準切分,垂直切分

2、資料庫索引介紹一下。介紹一下什麼時候用Innodb什麼時候用MyISAM。

3、資料庫兩種引擎

4、索引了解嘛,底層怎麼實作的,什麼時候會失效

5、問了資料庫的隔離級别

6、資料庫樂觀鎖和悲觀鎖

7、資料庫的三範式?

8、講一下資料庫ACID的特性?

9、mysql主從複制?

10、leftjoin和rightjoin的差別?

11、資料庫優化方法

12、談一下你對繼承映射的了解。

13、說出資料連接配接池的工作機制是什麼?

14、事務的ACID是指什麼?

15、JDBC中如何進行事務處理?

❤3、JDBC進階

1、JDBC的反射,反射都是什麼?

2、Jdo是什麼?

3、Statement和PreparedStatement有什麼差別?哪個性能更好?

4、使用JDBC操作資料庫時,如何提升讀取資料的性能?如何提升更新資料的性能?

五、XML

❤1、XML基礎

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

❤2、Web Service

1、WEB SERVICE名詞解釋,JSWDL開發包的介紹,JAXP、JAXM的解釋。SOAP、UDDI,WSDL解釋。

2、請你談談對SOAP、WSDL、UDDI的了解?

3、談談Java規範中和Web Service相關的規範有哪些?

六、計算機網絡

❤1、網絡概述

1、TCP協定在哪一層?IP協定在那一層?HTTP在哪一層?

❤2、運輸層

1、講一下TCP的連接配接和釋放連接配接。

2、TCP有哪些應用場景

3、tcp為什麼可靠

4、tcp為什麼要建立連接配接

5、闡述TCP的4次揮手

6、講一下浏覽器從接收到一個URL到最後展示出頁面,經曆了哪些過程。tag

7、http和https的差別

8、http的請求有哪些,應答碼502和504有什麼差別

9、http1.1和1.0的差別

10、說說ssl四次握手的過程

11、304狀态碼有什麼含義?

❤3、網絡層

1、arp協定,arp攻擊

2、icmp協定

3、講一下路由器和交換機的差別?

❤4、應用層

1、DNS尋址過程

2、負載均衡反向代理模式優點及缺點

七、作業系統

❤1、作業系統概論

1、CentOS 和 Linux的關系?

2、64位和32位的差別?

❤2、程序的描述與控制

1、怎麼殺死程序?

2、線程,程序差別

3、系統線程數量上限是多少?

4、程序和線程的差別是什麼?

5、解釋一下LINUX下線程,GDI類。

❤3、輸入輸出系統

1、socket程式設計,BIO,NIO,epoll?

❤4、存儲器管理

1、什麼是頁式存儲?

2、作業系統裡的記憶體碎片你怎麼了解,有什麼解決辦法?

❤5、處理機排程與死鎖

1、什麼情況下會發生死鎖,解決政策有哪些?

2、系統CPU比較高是什麼原因?

3、系統如何提高并發性?

八、算法與資料結構

❤1、哈希

1、hashset存的數是有序的嗎?

2、Object作為HashMap的key的話,對Object有什麼要求嗎?

3、一緻性雜湊演算法

4、什麼是hashmap?

5、Java中的HashMap的工作原理是什麼?

6、hashCode()和equals()方法的重要性展現在什麼地方?

❤2、樹

1、說一下B+樹和B-樹?

2、怎麼求一個二叉樹的深度?手撕代碼?

3、算法題:二叉樹層序周遊,進一步提問:要求每層列印出一個換行符

4、二叉樹任意兩個節點之間路徑的最大長度

5、如何實作二叉樹的深度?

6、如何列印二叉樹每層的節點?

7、TreeMap和TreeSet在排序時如何比較元素?Collections工具類中的sort()方法如何比較元素?

❤3、周遊

1、程式設計題:寫一個函數,找到一個檔案夾下所有檔案,包括子檔案夾

2、二叉樹 Z 字型周遊

❤4、連結清單

1、反轉單連結清單

2、随機連結清單的複制

3、連結清單-奇數位升序偶數位降序-讓連結清單變成升序

4、bucket如果用連結清單存儲,它的缺點是什麼?

5、如何判斷連結清單檢測環

❤5、數組

1、尋找一數組中前K個最大的數

2、求一個數組中連續子向量的最大和

3、找出數組中和為S的一對組合,找出一組就行

4、一個數組,除一個元素外其它都是兩兩相等,求那個元素?

5、算法題:将一個二維數組順時針旋轉90度,說一下思路。

❤6、排序

1、排序算法知道哪些,時間複雜度是多少,解釋一下快排?

2、如何得到一個資料流中的中位數?

3、堆排序的原理是什麼?

4、歸并排序的原理是什麼?

5、排序都有哪幾種方法?請列舉出來。

6、如何用java寫一個冒泡排序?

❤7、堆與棧

1、堆與棧的不同是什麼?

2、heap和stack有什麼差別。

3、解釋記憶體中的棧(stack)、堆(heap)和靜态區(static area)的用法。

❤8、隊列

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

❤9、進階算法

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算法的實作原理?

九、設計模式

❤1、結構型模式

1、java中有哪些代理模式?

2、如何實作動态代理

3、IO流熟悉嗎,用的什麼設計模式?

❤2、建立型模式

1、介紹一下單例模式?懶漢式的單例模式如何實作單例?

❤3、行為型模式

1、介紹一下政策模式?

2、設計模式了解哪些,手寫一下觀察者模式?

❤4、模式彙總

1、說說你所熟悉或聽說過的j2ee中的幾種常用模式?及對設計模式的一些看法

2、j2ee常用的設計模式?說明工廠模式。

3、開發中都用到了那些設計模式?用在什麼場合?

4、簡述一下你了解的Java設計模式

十、場景題

❤1、場景題彙總

1、情景題:如果一個外賣配送單子要釋出,現在有200個騎手都想要接這一單,如何保證隻有一個騎手接到單子?

2、場景題:美團首頁每天會從10000個商家裡面推薦50個商家置頂,每個商家有一個權值,你如何來推薦?第二天怎麼更新推薦的商家?

可以借鑒下stackoverflow,視訊網站等等的推薦算法。

3、場景題:微信搶紅包問題

悲觀鎖,樂觀鎖,存儲過程放在mysql資料庫中。

4、場景題:1000個任務,分給10個人做,你怎麼配置設定,先在紙上寫個最簡單的版本,然後優化。

全局隊列,把1000任務放在一個隊列裡面,然後每個人都是取,完成任務。

分為10個隊列,每個人分别到自己對應的隊列中去取務。

5、場景題:保證發送消息的有序性,消息處理的有序性。

6、如何把一個檔案快速下發到100w個伺服器

7、給每個組配置設定不同的IP段,怎麼設計一種結構使的快速得知IP是哪個組的?

8、10億個數,找出最大的10個。

建議一個大小為10的小根堆。

9、有幾台機器存儲着幾億淘寶搜尋日志,你隻有一台2g的電腦,怎麼選出搜尋熱度最高的十個搜尋關鍵詞?

10、分布式叢集中如何保證線程安全?

11、給個淘寶場景,怎麼設計一消息隊列?

12、10萬個數,輸出從小到大?

先劃分成多個小檔案,送進記憶體排序,然後再采用多路歸并排序。

13、有十萬個單詞,找出重複次數最高十個?

十一、UML

❤1、UML

1、請你談一下UML中有哪些常用的圖?