{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

Java程序員面試中容易被問哪些問題?

gggggggbonggggggggbong 回答0 收藏2
問題描述:如何準備面試?
收藏問題

10條回答

617035918

617035918

回答于2022-06-28 15:32

由于我每年都會面試不少程序員,其中就包括相當數量的Java程序員,所以就這個問題,跟頭條的廣大網友交流一下。

Java工程師面試也是有一定的側重點,做不同的研發方向,問題上也有所區別。另外,初級程序員與主力程序員的面試問題也有很大的不同,總的來說就是方向與定位相結合,下面為大家一一描述。


Java初級程序員面試


面試Java初級程序員的流程相對來說比較簡單,通常是兩輪面試,首輪面試一般進行技術面試,次輪面試通常是有HR統一安排關于職業規劃以及心理方面的面試(大部分情況是走個流程),這兩輪面試中,技術面試起到了關鍵的作用。

面試初級程序員(2-3級)一般從技術細節入手,要通過面試,首先要知道初級程序員都需要具備哪些能力。下面先描述一下作為一個Java初級程序員(2-3級,Web方向為主)應該滿足哪些要求:

  1. 清晰Java面向對象編程步驟,理解封裝、繼承、多態等核心概念,理解基本的前端內容(HTML、CSS、JavaScript)。

  2. 能理解程序流程圖描述的功能需求,能獨立完成功能模塊的編寫、部署,能理解功能模塊之間的交互關系,能完成功能模塊之間的消息傳遞和處理。

  3. 能理解MVC、DAO等框架,并在實際開發中熟練使用,能獨立完成前后臺的數據處理,能完成各種認證功能的處理。

  4. 能使用數據庫連接池等基本優化方式提高程序運行效率。

  5. 能理解容器在程序運行中的作用,能配置各種容器的基本參數。

  6. 對程序的安全性有一定的理解,能避免初級的安全性問題。

  7. 能處理一定數量的并發問題,能解決多線程情況下的數據安全問題。

  8. 能理解不同角色的任務分配,能進行有效溝通。

  9. 常見框架的使用,比如SpringMVC等。

初級程序員的工作往往是編寫程序基本功能組件,是保證程序質量的一個重要環節,所以團隊的整體能力往往并不是由架構師決定的,反而是由眾多的初級程序員決定的。


Java主力程序員面試


主力程序員的面試通常要3輪或4輪,當然如果你走到了后面的兩輪,基本上選擇權就在你手里了,后面的兩輪面試公司會給你安排一個看似比較美好的職業發展規劃,因為主力程序員不僅要編碼通常還承擔者一部分管理工作(項目責任人),也是管理層比較倚重的。

主力程序員的技術面試流程并沒有那么多細節問題,首先要了解一下做過哪些項目,在項目中都承擔了什么任務,項目中遇到了哪些問題,怎么解決的等等。通常主力程序員的面試時間也比較長(2至3個小時),面試的氛圍也比初級程序員要輕松很多。

主力程序員大部分是推薦上來的,有人力資源公司推薦的,也有公司內推上來的,當然也有主動投送簡歷要求面試的。一般對主力程序員都會有背景調查,這一方面是對公司負責,另一方面也是對應聘者應有的尊重。

希望通過我的回答,大家能對Java程序員的面試有一個基本的了解。

我是悟空問答的簽約作者,致力于為頭條網友提供優質的科技類問題解答,關注我,跟我一起交流關于科技類的問題吧。

評論0 贊同0
  •  加載中...
leanote

leanote

回答于2022-06-28 15:32

謝邀~

從第二家單位開始,就負責社招的面試工作(技術方面),近兩兩年,也開始負責校招的工作,和大家分享一下我一般會問的問題,和一些我比較看重的地方,大家可以借鑒。

校招

其實說實話,我們單位校招沒有什么優勢,一般來面試我們公司開發崗位的,最好也就是中等偏上的985學校(最低要求是一本)。所以一般來說,只要不是溝通能力特別差的,基本都會通過。但是面試流程還是要走的,我一般問的都特別簡單:

  • 基本的數據結構和算法的問題,都是大學課程里面涵蓋的內容。
  • 一些Java的基礎知識,基礎到Java的基本類型有哪些,String是基本類型么,諸如此類。
  • 簡單的SQL語法。
  • 最難的可能就是簡單的編程問題,基本上就是一個main函數搞定的,輸入幾個值,經過計算得到結果。

初級

我主要是面試乙方(外包),初級基本上要兩年以上工作經驗;基本上簡歷上寫什么,我就問什么,所以我建議,如果你不會的東西,不要隨便寫在簡歷上。

  • 先做自我介紹,主要看一下表達能力和第一印象,所以我建議大家面試之前都準備一套自我介紹的詞兒。

  • 基本上還是從項目出發,先問一下業務上的流程,這個階段的開發,我對整個項目的流程問的少,還是主要問單個模塊的業務流程。

  • 技術方面主要以使用為主,就是看看你是否到底使用過。比如寫了使用過Mybatis,那么我可能會問#和$的區別,如果寫了使用過Spring的話,那么我可能會問依賴注入有幾種方式,諸如此類。

  • SQL方面會問一些復雜SQL的寫法,比如一些數據庫函數,左連接右連接之類的。

中級

工作三到五年的。

  • 還是從項目出發,問的可能會稍微的多一些,希望對方可以對整個項目甚至是某一個行業有著整體的了解。

  • 技術方面不僅僅要求是使用過了,我的要求可能會更高一些。如果還是Mybatis,那么我就可能會問到一級二級緩存,甚至是自定義緩存,如果是Spring的話,可能就會問到Bean是如何被管理的。

  • 一些主流技術和框架,可能你沒寫在簡歷上,但是我也會問一問。比如現在很常見的內存數據庫、Spring Boot等。

  • Java基礎知識可能會問,比如JVM相關、Java的集合等。

  • SQL方面,優化是我主要問的,比如索引失效的問題。

高級的一般都招不來,哈哈,沒有面試過。

我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。

評論0 贊同0
  •  加載中...
lowett

lowett

回答于2022-06-28 15:32

java基礎,反射,多線程,static的作用,集合,數據庫等基礎知識,還有就是數據庫,前端,java web(servlet,xml),ajax是面試的時候問的比較多的,以及一些主流框架的使用。還有做過的項目,以及在項目中遇到哪些比較難解決的問題,最后是怎么解決的。


學習java是在“如鵬網”上學習的,有詳細的課程體系,有網絡的地方就可以學習,每個章節的后面都有相應的練習題和面試口才題,需要以錄音的方式進行提交,實時把控學習質量,為面試做準備。java重要知識點列舉。

如何準備面試?

在準備面試之前,簡歷是很必要的,怎么寫簡歷,投簡歷,才能吸引面試官的眼球,簡歷上哪些內容可以寫,哪些內容是不能寫的。


在面試的過程中,應該注意哪些問題,對于面試官提出來的問題,應該怎么去回答。

看過“如鵬網”的免費公開課《程序員找工作的六大環節揭秘》,從寫簡歷,投簡歷,面試,簽協議等方面進行講解,分析的挺透徹的,可以去看看。


需要java視頻教程和“程序員找工作的六大環節揭秘”視頻教程的可在評論區留言哦。

評論0 贊同0
  •  加載中...
ZoomQuiet

ZoomQuiet

回答于2022-06-28 15:32

換個角度,談談我們招人時,都會問那些問題:

面試Java初級工程師:我們通常會問Java基礎知識,包括Java語法、Java工程化的一些知識,重點看面試人的綜合素質,是否可以培養;

面試Java中級工程師:我們通常會問Java常用框架的掌握情況,sql語法,Mysql等知識,做過哪些項目?比如:MyBatis和Hibernate的區別,sql關聯查詢等等;

面試Java高級工程師:我們通常會問Java如何調優,Spring Cloud、Dubbo等分布式開發框架是否用過?微服務的理解等等;

不管初中高級工程師都會問到的問題是:溝通能力?邏輯思維能力?

評論0 贊同0
  •  加載中...
svtter

svtter

回答于2022-06-28 15:32

給你列舉了以下幾項: 如果以下都高清楚了,你已經是一個頂尖的java工程師了!

一、Java基礎

1. String類為什么是final的。

1.線程安全2.支持字符串常量池數據共享,節省資源,提高效率(因為如果已經存在這個常量便不會再創建,直接拿來用)

2. HashMap的源碼,實現原理,底層結構。

總的來說,HashMap就是數組+鏈表(哈希表或者散列函數)的組合實現,每個數組元素存儲一個鏈表的頭結點,本質上來說是哈希表“拉鏈法”的實現。

HashMap的鏈表元素對應的是一個靜態內部類Entry,Entry主要包含key,value,next三個元素

主要有put和get方法,put的原理是,通過hash&length-1計算index,此時記作Entry[index]=該元素。如果index相同

就是新入的元素放置到Entry[index],原先的元素記作Entry[index].next

get就比較簡單了,先遍歷數組,再遍歷鏈表元素。

null key總是放在Entry數組的第一個元素(允許存放一個空鍵值對的原因)

解決hash沖突的方法:鏈地址法

再散列rehash的過程:確定容量超過目前哈希表的容量,重新調整table 的容量大小,當超過容量的最大值時

HashMap的容量size乘以負載因子[默認0.75] = threshold 將會觸發擴容

3. 說說你知道的幾個Java集合類:list、set、queue、map實現類咯。。。

queue的實現類: AbstractQueue, ArrayBlockingQueue, ConcurrentLinkedQueue, LinkedBlockingQueue, DelayQueue, LinkedList, PriorityBlockingQueue, PriorityQueue和ArrayDqueue

4. 描述一下ArrayList和LinkedList各自實現和區別

5. Java中的隊列都有哪些,有什么區別。

Queue: 基本上,一個隊列就是一個先入先出(FIFO)的數據結構

Queue接口與List、Set同一級別,都是繼承了Collection接口。LinkedList實現了Deque接 口。

Queue的實現

1、沒有實現的阻塞接口的LinkedList: 實現了java.util.Queue接口和java.util.AbstractQueue接口

  內置的不阻塞隊列: PriorityQueue 和 ConcurrentLinkedQueue

  PriorityQueue 和 ConcurrentLinkedQueue 類在 Collection Framework 中加入兩個具體集合實現。

  PriorityQueue 類實質上維護了一個有序列表。加入到 Queue 中的元素根據它們的天然排序(通過其 java.util.Comparable 實現)或者根據傳遞給構造函數的 java.util.Comparator 實現來定位。

  ConcurrentLinkedQueue 是基于鏈接節點的、線程安全的隊列。并發訪問不需要同步。因為它在隊列的尾部添加元素并從頭部刪除它們,所以只要不需要知道隊列的大 小,       ConcurrentLinkedQueue 對公共集合的共享訪問就可以工作得很好。收集關于隊列大小的信息會很慢,需要遍歷隊列。

2)實現阻塞接口的:

  java.util.concurrent 中加入了 BlockingQueue 接口和五個阻塞隊列類。它實質上就是一種帶有一點扭曲的 FIFO 數據結構。不是立即從隊列中添加或者刪除元素,線程執行操作阻塞,直到有空間或者元素可用。

五個隊列所提供的各有不同:

  * ArrayBlockingQueue :一個由數組支持的有界隊列。

  * LinkedBlockingQueue :一個由鏈接節點支持的可選有界隊列。

  * PriorityBlockingQueue :一個由優先級堆支持的無界優先級隊列。

  * DelayQueue :一個由優先級堆支持的、基于時間的調度隊列。

  * SynchronousQueue :一個利用 BlockingQueue 接口的簡單聚集(rendezvous)機制。

6. 反射中,Class.forName和classloader的區別

class.forName()除了將類的.class文件加載到jvm中之外,還會對類進行解釋,執行類中的static塊。

而classLoader只干一件事情,就是將.class文件加載到jvm中,不會執行static中的內容,只有在newInstance才會去執行static塊。

Class.forName(name, initialize, loader)帶參函數也可控制是否加載static塊。并且只有調用了newInstance()方法采用調用構造函數,創建類的對象

7. Java7、Java8的新特性(baidu問的,好BT)

java7有一些比較重要的更新,如異常處理增加了被抑制的異常、捕獲多異常、try-with-resource自動釋放資源等,還有應用了G1垃圾回收器、switch可以使用String類型、泛型自動判斷類型、fork/join框架把任務細分并使用多處理器處理、支持二進制字面量等

毫無疑問,Java 8是自Java 5(2004年)發布以來Java語言最大的一次版本升級,Java 8帶來了很多的新特性,比如編譯器、類庫、開發工具和JVM(Java虛擬機)。在這篇教程中我們將會學習這些新特性,并通過真實例子演示說明它們適用的場景。

最最重要的是Java8開始支持了Lambda表達式

8. Java數組和鏈表兩種結構的操作效率,在哪些情況下(從開頭開始,從結尾開始,從中間開始),哪些操作(插入,查找,刪除)的效率高

9. Java內存泄露的問題調查定位:jmap,jstack的使用等等

10. string、stringbuilder、stringbuffer區別

11. hashtable和hashmap的區別

HashMap是非線程同步的,HashTable是線程同步的。

HashMap允許null作為鍵或者值,HashTable不允許

HashTable中有個一個contains方法,HashMap去掉了此方法

效率上來講,HashMap因為是非線程安全的,因此效率比HashTable高

hashTable繼承Dictionary,而HashMap繼承Abstract

13 .異常的結構,運行時異常和非運行時異常,各舉個例子

14. String a= “abc” String b = “abc” String c = new String(“abc”) String d = “ab” + “c” .他們之間用 == 比較的結果

編譯時優化

15. String 類的常用方法

16. Java 的引用類型有哪幾種

對象的強、軟、弱和虛引用(四種引用)

在JDK 1.2以前的版本中,若一個對象不被任何變量引用,那么程序就無法再使用這個對象。也就是說,只有對象處于可觸及(reachable)狀態,程序才能使用它。從JDK 1.2版本開始,把對象的引用分為4種級別,從而使程序能更加靈活地控制對象的生命周期。這4種級別由高到低依次為:強引用、軟引用、弱引用和虛引用。

⑴強引用(StrongReference)

強引用是使用最普遍的引用。如果一個對象具有強引用,那垃圾回收器絕不會回收它。當內存空間不足,Java虛擬機寧愿拋出OutOfMemoryError錯誤,使程序異常終止,也不會靠隨意回收具有強引用的對象來解決內存不足的問題。 ps:強引用其實也就是我們平時A a = new A()這個意思。

⑵軟引用(SoftReference)

如果一個對象只具有軟引用,則內存空間足夠,垃圾回收器就不會回收它;如果內存空間不足了,就會回收這些對象的內存。只要垃圾回收器沒有回收它,該對象就可以被程序使用。軟引用可用來實現內存敏感的高速緩存(下文給出示例)。

軟引用可以和一個引用隊列(ReferenceQueue)聯合使用,如果軟引用所引用的對象被垃圾回收器回收,Java虛擬機就會把這個軟引用加入到與之關聯的引用隊列中。

⑶弱引用(WeakReference)

弱引用與軟引用的區別在于:只具有弱引用的對象擁有更短暫的生命周期。在垃圾回收器線程掃描它所管轄的內存區域的過程中,一旦發現了只具有弱引用的對象,不管當前內存空間足夠與否,都會回收它的內存。不過,由于垃圾回收器是一個優先級很低的線程,因此不一定會很快發現那些只具有弱引用的對象。

弱引用可以和一個引用隊列(ReferenceQueue)聯合使用,如果弱引用所引用的對象被垃圾回收,Java虛擬機就會把這個弱引用加入到與之關聯的引用隊列中。

⑷虛引用(PhantomReference)

“虛引用”顧名思義,就是形同虛設,與其他幾種引用都不同,虛引用并不會決定對象的生命周期。如果一個對象僅持有虛引用,那么它就和沒有任何引用一樣,在任何時候都可能被垃圾回收器回收。

虛引用主要用來跟蹤對象被垃圾回收器回收的活動。虛引用與軟引用和弱引用的一個區別在于:虛引用必須和引用隊列 (ReferenceQueue)聯合使用。當垃圾回收器準備回收一個對象時,如果發現它還有虛引用,就會在回收對象的內存之前,把這個虛引用加入到與之 關聯的引用隊列中。

ReferenceQueue queue = new ReferenceQueue ();

PhantomReference pr = new PhantomReference (object, queue);

程序可以通過判斷引用隊列中是否已經加入了虛引用,來了解被引用的對象是否將要被垃圾回收。如果程序發現某個虛引用已經被加入到引用隊列,那么就可以在所引用的對象的內存被回收之前采取必要的行動。

17. 抽象類和接口的區別

18. java的基礎類型和字節大小。

19. Hashtable,HashMap,ConcurrentHashMap 底層實現原理與線程安全問題(建議熟悉 jdk 源碼,才能從容應答)

20. 如果不讓你用Java Jdk提供的工具,你自己實現一個Map,你怎么做。說了好久,說了HashMap源代碼,如果我做,就會借鑒HashMap的原理,說了一通HashMap實現

21. Hash沖突怎么辦?哪些解決散列沖突的方法?

開放地址法 插入元素時,如果發生沖突,算法會簡單的從該槽位置向后循環遍歷hash表,直到找到表中的下一個空槽,并將該元素放入該槽中(會導致相同hash值的元素挨在一起和其他hash值對應的槽被占用)。查找元素時,首先散列值所指向的槽,如果沒有找到匹配,則繼續從該槽遍歷hash表,直到:(1)找到相應的元素;(2)找到一個空槽,指示查找的元素不存在,(所以不能隨便刪除元素);(3)整個hash表遍歷完畢(指示該元素不存在并且hash表是滿的)

拉鏈法(hashMap采用的是該種方法)

再散列(雙重散列,多重散列)

建立一個公共溢出區

22. HashMap沖突很厲害,最差性能,你會怎么解決?從O(n)提升到log(n)咯,用二叉排序樹的思路說了一通

23. rehash

24. hashCode() 與 equals() 生成算法、方法怎么重寫

如何重寫equals()方法

如果你決定要重寫equals()方法,那么你一定要明確這么做所帶來的風險,并確保自己能寫出一個健壯的equals()方法.一定要注意的一點是,在重寫equals()后,一定要重寫hashCode()方法.具體原因稍候再進行說明.

我們先看看 JavaSE 7 Specification中對equals()方法的說明:

It is reflexive: for any non-null reference value x, x.equals(x) should return true.

It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.

It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.

It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.

For any non-null reference value x, x.equals(null) should return false.

這段話用了很多離散數學中的術數.簡單說明一下:

1. 自反性:A.equals(A)要返回true.

2. 對稱性:如果A.equals(B)返回true, 則B.equals(A)也要返回true.

3. 傳遞性:如果A.equals(B)為true, B.equals(C)為true, 則A.equals(C)也要為true. 說白了就是 A = B , B = C , 那么A = C.

4. 一致性:只要A,B對象的狀態沒有改變,A.equals(B)必須始終返回true.

5. A.equals(null) 要返回false.

相信只要不是專業研究數學的人,都對上面的東西不來電.在實際應用中我們只需要按照一定的步驟重寫equals()方法就可以了.為了說明方便,我們先定義一個程序員類(Coder):

[java] view plain copy

class Coder {

private String name;

private int age;

// getters and setters

}

我們想要的是,如果2個程序員對象的name和age都是相同的,那么我們就認為這兩個程序員是一個人.這時候我們就要重寫其equals()方法.因為默認的equals()實際是判斷兩個引用是否指向內在中的同一個對象,相當于 == . 重寫時要遵循以下三步:

1. 判斷是否等于自身.

[java] view plain copy

if(other == this)

return true;

2. 使用instanceof運算符判斷 other 是否為Coder類型的對象.

[java] view plain copy

if(!(other instanceof Coder))

return false;

3. 比較Coder類中你自定義的數據域,name和age,一個都不能少.

[java] view plain copy

Coder o = (Coder)other;

return o.name.equals(name) && o.age == age;

看到這有人可能會問,第3步中有一個強制轉換,如果有人將一個Integer類的對象傳到了這個equals中,那么會不會扔ClassCastException呢?這個擔心其實是多余的.因為我們在第二步中已經進行了instanceof 的判斷,如果other是非Coder對象,甚至other是個null, 那么在這一步中都會直接返回false, 從而后面的代碼得不到執行的機會.

上面的三步也是<Effective Java>中推薦的步驟,基本可保證萬無一失.

如何重寫hashCode()方法

在JavaSE 7 Specification中指出,"Note that it is generally necessary to override the hashCode method whenever this method(equals) is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes."

如果你重寫了equals()方法,那么一定要記得重寫hashCode()方法.我們在大學計算機數據結構課程中都已經學過哈希表(hash table)了,hashCode()方法就是為哈希表服務的.

當我們在使用形如HashMap, HashSet這樣前面以Hash開頭的集合類時,hashCode()就會被隱式調用以來創建哈希映射關系.稍后我們再對此進行說明.這里我們先重點關注一下hashCode()方法的寫法.

<Effective Java>中給出了一個能最大程度上避免哈希沖突的寫法,但我個人認為對于一般的應用來說沒有必要搞的這么麻煩.如果你的應用中HashSet中需要存放上萬上百萬個對象時,那你應該嚴格遵循書中給定的方法.如果是寫一個中小型的應用,那么下面的原則就已經足夠使用了:

要保證Coder對象中所有的成員都能在hashCode中得到體現.

對于本例,我們可以這么寫:

[java] view plain copy

@Override

public int hashCode() {

int result = 17;

result = result * 31 + name.hashCode();

result = result * 31 + age;

return result;

}

其中int result = 17你也可以改成20, 50等等都可以.看到這里我突然有些好奇,想看一下String類中的hashCode()方法是如何實現的.查文檔知:

"Returns a hash code for this string. The hash code for a String object is computed as

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

using int arithmetic, where s[i] is the ith character of the string, n is the length of the string, and ^ indicates exponentiation. (The hash value of the empty string is zero.)"

對每個字符的ASCII碼計算n - 1次方然后再進行加和,可見Sun對hashCode的實現是很嚴謹的. 這樣能最大程度避免2個不同的String會出現相同的hashCode的情況.

重寫equals()而不重寫hashCode()的風險

在Oracle的Hash Table實現中引用了bucket的概念.如下圖所示:

從上圖中可以看出,帶bucket的hash table大致相當于哈希表與鏈表的結合體.即在每個bucket上會掛一個鏈表,鏈表的每個結點都用來存放對象.Java通過hashCode()方法來確定某個對象應該位于哪個bucket中,然后在相應的鏈表中進行查找.在理想情況下,如果你的hashCode()方法寫的足夠健壯,那么每個bucket將會只有一個結點,這樣就實現了查找操作的常量級的時間復雜度.即無論你的對象放在哪片內存中,我都可以通過hashCode()立刻定位到該區域,而不需要從頭到尾進行遍歷查找.這也是哈希表的最主要的應用.

如:

當我們調用HashSet的put(Object o)方法時,首先會根據o.hashCode()的返回值定位到相應的bucket中,如果該bucket中沒有結點,則將 o 放到這里,如果已經有結點了, 則把 o 掛到鏈表末端.同理,當調用contains(Object o)時,Java會通過hashCode()的返回值定位到相應的bucket中,然后再在對應的鏈表中的結點依次調用equals()方法來判斷結點中的對象是否是你想要的對象.

下面我們通過一個例子來體會一下這個過程:

我們先創建2個新的Coder對象:

[java] view plain copy

Coder c1 = new Coder("bruce", 10);

Coder c2 = new Coder("bruce", 10);

假定我們已經重寫了Coder的equals()方法而沒有重寫hashCode()方法:

[java] view plain copy

@Override

public boolean equals(Object other) {

System.out.println("equals method invoked!");

if(other == this)

return true;

if(!(other instanceof Coder))

return false;

Coder o = (Coder)other;

return o.name.equals(name) && o.age == age;

}

然后我們構造一個HashSet,將c1對象放入到set中:

[java] view plain copy

Set<Coder> set = new HashSet<Coder>();

set.add(c1);

再執行:

[java] view plain copy

System.out.println(set.contains(c2));

我們期望contains(c2)方法返回true, 但實際上它返回了false.

c1和c2的name和age都是相同的,為什么我把c1放到HashSet中后,再調用contains(c2)卻返回false呢?這就是hashCode()在作怪了.因為你沒有重寫hashCode()方法,所以HashSet在查找c2時,會在不同的bucket中查找.比如c1放到05這個bucket中了,在查找c2時卻在06這個bucket中找,這樣當然找不到了.因此,我們重寫hashCode()的目的在于,在A.equals(B)返回true的情況下,A, B 的hashCode()要返回相同的值.

我讓hashCode()每次都返回一個固定的數行嗎

有人可能會這樣重寫:

[java] view plain copy

@Override

public int hashCode() {

return 10;

}

如果這樣的話,HashMap, HashSet等集合類就失去了其 "哈希的意義".用<Effective Java>中的話來說就是,哈希表退化成了鏈表.如果hashCode()每次都返回相同的數,那么所有的對象都會被放到同一個bucket中,每次執行查找操作都會遍歷鏈表,這樣就完全失去了哈希的作用.所以我們最好還是提供一個健壯的hashCode()為妙.

二、Java IO

1. 講講IO里面的常見類,字節流、字符流、接口、實現類、方法阻塞。

2. 講講NIO。

3. String 編碼UTF-8 和GBK的區別?

4. 什么時候使用字節流、什么時候使用字符流?

5. 遞歸讀取文件夾下的文件,代碼怎么實現

三、Java Web

1. session和cookie的區別和聯系,session的生命周期,多個服務部署時session管理。

2. servlet的一些相關問題

3. webservice相關問題

4. jdbc連接,forname方式的步驟,怎么聲明使用一個事務。舉例并具體代碼

5. 無框架下配置web.xml的主要配置內容

6. jsp和servlet的區別

四、JVM

1. Java的內存模型以及GC算法

2. jvm性能調優都做了什么

3. 介紹JVM中7個區域,然后把每個區域可能造成內存的溢出的情況說明

4. 介紹GC 和GC Root不正常引用。

5. 自己從classload 加載方式,加載機制說開去,從程序運行時數據區,講到內存分配,講到String常量池,講到JVM垃圾回收機制,算法,hotspot。反正就是各種擴展

6. jvm 如何分配直接內存, new 對象如何不分配在堆而是棧上,常量池解析

7. 數組多大放在 JVM 老年代(不只是設置 PretenureSizeThreshold ,問通常多大,沒做過一問便知)

8. 老年代中數組的訪問方式

9. GC 算法,永久代對象如何 GC , GC 有環怎么處理

10. 誰會被 GC ,什么時候 GC

11. 如果想不被 GC 怎么辦

12. 如果想在 GC 中生存 1 次怎么辦

五、開源框架

1. hibernate和ibatis的區別

2. 講講mybatis的連接池。

3. spring框架中需要引用哪些jar包,以及這些jar包的用途

4. springMVC的原理

5. springMVC注解的意思

6. spring中beanFactory和ApplicationContext的聯系和區別

BeanFactory特點

BeanFactory常用的實現類是DefaultListableBeanFactory,調用者只需要使用getBean()方法就可以獲得指定的引用,無須關心Bean的實例化過程。創建Spring容器的實例時,必須提供Spring容器管理的Bean的詳細配置信息。Spring的配置信息通常采用XML配置文件來設置,因此,創建BeanFactory實例時,應該提供XML配置文件作為參數。XML配置文件通常使用Resource對象傳入。

Resource isr = new ClassPathResource("beans.xml");

//Resource isr = new FileSystemResource("beans.xml");

DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();

new XmlBeanDefinitionReader(beanFactory).loadBeanDefinition(isr);

ApplicationContext特點

ApplicationContext常用的實現類是FileSystemXmlApplicationContext、ClassPathXmlApplicationContext和AnnotationConfigApplicationContext。如果在Web應用中使用Spring容器,則通常使用XmlWebApplicationContext、AnnotationConfigApplicationContext兩個實現類。如果需要使用多個XML配置文件創建Spring容器,可以使用FileSystemXmlApplicationContext或者是ClassPathXmlApplicationContext。

除了提供BeanFactory所支持的所有功能外,ApplicationContext還有額外的功能

默認初始化所有的Singleton,也可以通過配置取消預初始化。

繼承MessageSource,因此支持國際化。

資源訪問,比如訪問URL和文件。

事件機制。

同時加載多個配置文件。

以聲明式方式啟動并創建Spring容器。

由于ApplicationContext會預先初始化所有的Singleton Bean,于是在系統創建前期會有較大的系統開銷,但一旦ApplicationContext初始化完成,程序后面獲取Singleton Bean實例時候將有較好的性能。也可以為bean設置lazy-init屬性為true,即Spring容器將不會預先初始化該bean。

7. spring注入的幾種方式(循環注入)

8. spring如何實現事物管理的

set注入(通常也叫屬性注入),構造函數注入,接口注入(這個現在基本不用),注解注入(@Autowire)

9. springIOC

10. spring AOP的原理

11. hibernate中的1級和2級緩存的使用方式以及區別原理(Lazy-Load的理解)

12. Hibernate的原理體系架構,五大核心接口,Hibernate對象的三種狀態轉換,事務管理。

六、多線程

1. Java創建線程之后,直接調用start()方法和run()的區別

2. 常用的線程池模式以及不同線程池的使用場景

3. newFixedThreadPool此種線程池如果線程數達到最大值后會怎么辦,底層原理。

4. 多線程之間通信的同步問題,synchronized鎖的是對象,衍伸出和synchronized相關很多的具體問題,例如同一個類不同方法都有synchronized鎖,一個對象是否可以同時訪問。或者一個類的static構造方法加上synchronized之后的鎖的影響。

5. 了解可重入鎖的含義,以及Lock 和synchronized的區別

1. lock是一個接口,而synchronized是java的一個關鍵字,synchronized是內置的語言實現;(具體實現上的區別在《Java虛擬機》中有講解底層的CAS不同,以前有讀過現在又遺忘了。)

2. synchronized在發生異常時候會自動釋放占有的鎖,因此不會出現死鎖;而lock發生異常時候,不會主動釋放占有的鎖,必須手動unlock來釋放鎖,可能引起死鎖的發生。(所以最好將同步代碼塊用try catch包起來,finally中寫入unlock,避免死鎖的發生。)

3. lock等待鎖過程中可以用interrupt來終端等待,而synchronized只能等待鎖的釋放,不能響應中斷;

4. lock可以通過trylock來知道有沒有獲取鎖,而synchronized不能;

5. Lock可以提高多個線程進行讀操作的效率。(可以通過readwritelock實現讀寫分離)

6. 同步的數據結構,例如concurrentHashMap的源碼理解以及內部實現原理,為什么他是同步的且效率高

7. atomicinteger和Volatile等線程安全操作的關鍵字的理解和使用

8. 線程間通信,wait和notify

9. 定時線程的使用

10. 場景:在一個主線程中,要求有大量(很多很多)子線程執行完之后,主線程才執行完成。多種方式,考慮效率。

11. 進程和線程的區別

12. 什么叫線程安全?舉例說明

13. 線程的幾種狀態

14. 并發、同步的接口或方法

15. HashMap 是否線程安全,為何不安全。 ConcurrentHashMap,線程安全,為何安全。底層實現是怎么樣的。

16. J.U.C下的常見類的使用。 ThreadPool的深入考察; BlockingQueue的使用。(take,poll的區別,put,offer的區別);原子類的實現。

17. 簡單介紹下多線程的情況,從建立一個線程開始。然后怎么控制同步過程,多線程常用的方法和結構

18. volatile的理解

19. 實現多線程有幾種方式,多線程同步怎么做,說說幾個線程里常用的方法

七、網絡通信

1. http是無狀態通信,http的請求方式有哪些,可以自己定義新的請求方式么。

2. socket通信,以及長連接,分包,連接異常斷開的處理。

3. socket通信模型的使用,AIO和NIO。

4. socket框架netty的使用,以及NIO的實現原理,為什么是異步非阻塞。

5. 同步和異步,阻塞和非阻塞。

6. OSI七層模型,包括TCP,IP的一些基本知識

7. http中,get post的區別

8. 說說http,tcp,udp之間關系和區別。

9. 說說瀏覽器訪問www.taobao.com,經歷了怎樣的過程。

10. HTTP協議、 HTTPS協議,SSL協議及完整交互過程;

11. tcp的擁塞,快回傳,ip的報文丟棄

12. https處理的一個過程,對稱加密和非對稱加密

13. head各個特點和區別

14. 說說瀏覽器訪問www.taobao.com,經歷了怎樣的過程。

八、數據庫MySql

1. MySql的存儲引擎的不同

2. 單個索引、聯合索引、主鍵索引

3. Mysql怎么分表,以及分表后如果想按條件分頁查詢怎么辦(如果不是按分表字段來查詢的話,幾乎效率低下,無解)

4. 分表之后想讓一個id多個表是自增的,效率實現

5. MySql的主從實時備份同步的配置,以及原理(從庫讀主庫的binlog),讀寫分離

6. 寫SQL語句。。。

7. 索引的數據結構,B+樹

8. 事務的四個特性,以及各自的特點(原子、隔離)等等,項目怎么解決這些問題

9. 數據庫的鎖:行鎖,表鎖;樂觀鎖,悲觀鎖

10. 數據庫事務的幾種粒度;

11. 關系型和非關系型數據庫區別

九、設計模式

1. 單例模式:飽漢、餓漢。以及餓漢中的延遲加載,雙重檢查

2. 工廠模式、裝飾者模式、觀察者模式。

3. 工廠方法模式的優點(低耦合、高內聚,開放封閉原則)

十、算法

1. 使用隨機算法產生一個數,要求把1-1000W之間這些數全部生成。(考察高效率,解決產生沖突的問題)

2. 兩個有序數組的合并排序

3. 一個數組的倒序

4. 計算一個正整數的正平方根

5. 說白了就是常見的那些查找、排序算法以及各自的時間復雜度

6. 二叉樹的遍歷算法

7. DFS,BFS算法

9. 比較重要的數據結構,如鏈表,隊列,棧的基本理解及大致實現。

10. 排序算法與時空復雜度(快排為什么不穩定,為什么你的項目還在用)

11. 逆波蘭計算器

12. Hoffman 編碼

13. 查找樹與紅黑樹

十一、并發與性能調優

1. 有個每秒鐘5k個請求,查詢手機號所屬地的筆試題(記得不完整,沒列出),如何設計算法?請求再多,比如5w,如何設計整個系統?

2. 高并發情況下,我們系統是如何支撐大量的請求的

3. 集群如何同步會話狀態

4. 負載均衡的原理

5 .如果有一個特別大的訪問量,到數據庫上,怎么做優化(DB設計,DBIO,SQL優化,Java優化)

6. 如果出現大面積并發,在不增加服務器的基礎上,如何解決服務器響應不及時問題“。

7. 假如你的項目出現性能瓶頸了,你覺得可能會是哪些方面,怎么解決問題。

8. 如何查找 造成 性能瓶頸出現的位置,是哪個位置照成性能瓶頸。

9. 你的項目中使用過緩存機制嗎?有沒用用戶非本地緩存

————————————————

版權聲明:本文為CSDN博主「zhouwei1818」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/zhouwei1818/article/details/80180872

評論0 贊同0
  •  加載中...
lentoo

lentoo

回答于2022-06-28 15:32

面試的心態很重要

如果可以的話,**建議以一個和面試官交流的心態去面試**。而且普通面試大部分問答都是有一些套路的。

面試的過程中,肯定會有答不上來的時候,這個時候,坦然的說不知道,就行了;或者再說出來點你知道的,例如思路。**重點** 答不出來的時候一定要淡定,你和面試官是平等的!反過來讓你問面試官,他也肯定有答不上來的!

java基礎必考,線程、集合(list、map、linklist、array,什么無key遍歷map啊,鏈表倒置啊,這幾個東西的數據結構和插入查詢特性啊,線程創建方式和同步啊)相關必問。最好能說清楚常見的設計模式、要能手寫一個單列模式。

**框架** :主要說你熟練的,會問一些,但是一般都比較基礎,只要找;除非,你說你看過這個框架的源碼,剛好面試官也比較了解。

**數據庫** 可能會問你都用過什么,最好有一個用的熟練的,沒事兒去配置一下主從數據庫費不了多少時間,然后就好答這個問題了。sql,一般是必考的,分組查詢,排序,連結查詢。很可能會讓你手寫sql語句。我還遇到了一個讓你查前多少行的,以及不用框架實現分頁查詢的。

**源碼** 其實源碼沒有那么的高大上,即使你說你熟練源碼,剛好面試官也熟悉,他最多也只能問問你這框架從啟動到配置完成,從接收請求,到處理完成再返回的 ** 流程**然后再問一下,你從這些源碼里學到了什么?這個問題,建議去百度(我都是臨面試了才去百度這些有套路的問題)。

**前端** 你要是像我一樣,囂張到簡歷寫的連前端你都會不少,(不過現在確實很多公司的招聘后端的要求也要會一些前端)那就很可能要多面你一會兒了,再問問你簡歷里寫的用過的框架,手寫幾串js的代碼啊,還有可能會通過js代碼考察下對DOM概念的理解。正則表達式也是有可能的。

一般算法和數據結構是必考的,操作系統也經常被問。如果是校招的話,筆試中還會有一些排列組合啊,語文表達啊,思維拓展啊(你咋不去高中招?高中剛畢業的時候比較符合需求!!),其次,筆試過了還會有好幾輪面試,不管你說你扣過源碼,還是跟過還可以的項目,都會被往深里問,再往深里問,再再往深里問!

下邊是一個簡單的面試記錄

問:說說你的突出點

答:java基礎扎實(這個慌說的次數多了,現在說起來都沒感覺了,哈哈),框架使用熟練(這個慌說了你們也發現不了,所以也沒啥感覺),熟悉Tomcat源碼,springMVC源碼和結構。

問:如果想要統計springMVC每一個訪問時長,放到log文件里,你在哪里做這個統計?為什么?

答:在preHandle攔截器里記錄訪問開始的時間,在postHandle里判斷是哪個訪問,計算訪問時間并存儲。

問:在posthandler里計算,并存儲是吧。答:是。

問:為什么?

答了一個錯誤答案,然后又是一頓鄙視。,,

再問:用一個什么變量存?ThreadLocal?還是一個函數內部局部變量,?

答:線程內,(其實是在猜)。

問:為什么? 你不要猜,也不用在乎我的反應,無論你答什么我都會問你為什么。

答:函數內變量可能會不能覆蓋整個訪問的歷程,,一頓鄙視,然后突然反應過來,不對,我說的有問題,外層函數是可以的,那就放在函數內局部變量里,節省資源。

問:如果我想把計算結果存到log里,在哪里做這個事情?

答:(悠長的停頓) 在posthandler處理結束,返回請求之前

問:為什么?

答:不占用處理請求的資源,(錯誤答案,已經慌亂)

問:確定?

答:不確定,,,停頓,,不對 ,還是會占用資源。

問:然后呢

答:(不說話了,,,)(后來想想,這事兒應該另起一個線程去做)

(鄙視狀,,,)

問:恩,說說Tomcat

答:(內心:幸虧沒問tomcat優化,JVM優化,,不過,說說?說啥啊?難道說說這個干啥用的?還是說說哪個公司出的?說這些會不會直接趕人啊,,,就這樣過了最少一分鐘,哈哈)然后我就說了下tomcat的結構,和啟動過程。

接著問:Tomcat和里面的Servlet是一個進程還是多個進程,

答:一個進程內

一頓鄙視,再問:為什么,,,??

答:因為我覺得進程是分配資源的基本單位,一般來講,一個應用就是一個進程。

問:你確定?

(內心:大爺的,估計已經掛了,那我還怕個球,,,于是乎,坐直,平視,語氣和神態突然就平靜了)

答:確定。

問:你大學什么專業?學過操作系統嗎?

答:計算機科學與技術,當然學過,我清楚的記得這一點,進程是分配資源的基本單位,不過,可能太久了,記不清了(其實內心是:你長的美,你說的都對)。

問:ok,一個應用可以啟多個進程嗎?

答:不可以

問:(鄙視狀)確定?

答:(平靜狀)不太確定

問:呵呵

答:麻煩您給講講吧,我不太懂。

問:一個應用當然是可以啟多個線程的,更何況還有跨應用的線程調用,資源也是可以動態分配的,,,(當時沒聽太懂,也記不清了。)。末了來一句,難道你就沒打開過你的資源管理器看過嗎?

答:當然看過,不過都是卡了才看,看哪個程序占用太高,給結束了。(內心:看過,但是跟這個問題有毛關系嗎??)

上邊是倆個長問題,還有一些其他的,例如:

問:你覺得要做一個厲害的程序員應該具備哪些特點?

這個就是一些,FQ啊,工具啊,總結啊,交流啊什么的;比如說,善用google,要至少對一個跨平臺的工具很了解,善于學習最新的技術,善于掌握有力的工具,多逛各大社區,善于總結。(我就隨便一寫,找工作的話,要提前準備類似問題。)

問:我看你學了這么多東西,但是好像沒有認真的去思考過為什么,你有沒有想過當你記憶達到一個上限時你還能學什么?你還能干什么?

這個當然是要反駁的,我說我當然有思考,然后問你思考的啥,然后答當時就想知道Tomcat到springMVC的銜接是怎么銜接的,然后被鄙視:那你直接打幾個斷點調試一下不完了嗎,java的調試不是很強嗎?(貌似這個他也不太確定。而我也不知道斷點打到哪去,更不用提怎么調試,哈哈)。

問:我看你這寫的有一個了解分布式處理,分布式處理是什么?我怎么沒聽過。(這個就是一個概念問題,不重要。)

評論0 贊同0
  •  加載中...
Kerr1Gan

Kerr1Gan

回答于2022-06-28 15:32

java面試主體分為兩個部分:

1.基礎知識的面試

(1).如何理解面向對象的編程

(2).如何理解內存中的堆棧和靜態存儲區的用法

(3).是否可以繼承String 類

(4).String和StringBuilder、StringBuffer區別?

等等這些常見的java基礎類題目

2.框架及編程思想

(1).spring mvc 工作機制原理

(2).Struts工作機制?為什么要使用Struts?

(3).如何優化Hibernate?

現在只是簡單的列舉幾個面試題目,很多公司的面試直接都沒有筆試,因為水平的高低通常意義上講幾句話就能測試出水平的深淺,所以在面試需要注意以下幾點:

1.簡歷上面不要摻雜太多的水份

2.面試過程中要懂得實事求是,不要吹的太厲害,中間遇上一個技術高手幾句話就能讓自己下不了臺

3.對于一些沒有工作經驗的初學者能做的事情,就是老老實實把基礎做好,沒有經驗能證明自己的只有基礎,也只有打好自己的基礎才靠譜。

覺得有收獲就點贊

評論0 贊同0
  •  加載中...
enrecul101

enrecul101

回答于2022-06-28 15:32

作為從事java開發6年的程序猿,參于的面試有七八十場吧,程序猿面試問題是根據企業的招聘需求而定的,三年和五年的程序員遇到的問題是有區別的,所以不能一概而論。


三年開發經驗的程序員


礎相關

  1. java的基本數據類型有哪些
  2. java中用到的集合的區別,比如ArrayList和LinkedList的區別
  3. 什么是自動裝箱和自動拆箱
  4. stringbuffer和Stringbulider有什么區別
  5. hashmap的實現原理
  6. HashMap和hashtable有什么區別
  7. 重載和重寫的區別
  8. 接口和抽象類的區別
  9. 開發中使用過哪些設計模式
  10. 請實現一個單利模式
  11. jsp和servlet有沒有區別
  12. 如何實現自定義Filter
  13. java中實現多線程的方式

框架相關

  1. spring的特性
  2. spring AOP有哪些應用
  3. struct2的工作原理
  4. hibernate和mybaits的區別
  5. hibernate總如何實現一對多、多對多
  6. hibernate如何解決N+1查詢問題


數據庫相關

  1. 請手寫一個oracle分頁查詢
  2. 一張成績表包含語數外三門課程,請幫我查詢“小明同學的排名”
  3. 如何解決sql查詢緩慢的問題

五年開發經驗的程序員

五年開發經驗的程序員問道的問題會更趨向于原理方面,當然三年經驗的問題依然會問道,但是側重點不一樣了

基礎相關

  1. java多線程的實現方式
  2. java線程池的實現原理以及工作流程
  3. 請寫一個死鎖程序
  4. ConcurrentHashMap的實現原理

  5. java并發中的最佳實踐有哪些

  6. volatile關鍵字的用途

  7. 是否用過消息隊列

  8. 是否用過zookeeper和dubbo

  9. zookeeper的選舉機制說一下

以上就是一些面試會遇到的問題,當然只是列舉了一些,因為每個面試官的側重點不一樣,有的面試官喜歡連環炮是的發問,問完一個接著深入問另一個相關的問題,知道自己回答不上來為止,有的是東一個問題西一個問題,所以沒有什么面試寶典,唯一能做的就是加深自己的修煉

我是北漂coder,以上就是我的回答,歡迎關注,一起探討交流

評論0 贊同0
  •  加載中...
baihe

baihe

回答于2022-06-28 15:32

多線程,集合,jvm調優,gc ,spring 套餐,dubbo,主流框架。還有數據結構。設計模式。

小面是我面試的經歷。

【【冷酷到底】面試深受打擊,感覺迷茫了。一個程序員的自白】https://m.zjurl.cn/item/6529754521017516552/?iid=26166306190&app=news_article×tamp=1521475420&tt_from=copy_link&utm_source=copy_link&utm_medium=toutiao_ios&utm_campaign=client_share

評論0 贊同0
  •  加載中...
BetaRabbit

BetaRabbit

回答于2022-06-28 15:32

建議自己整理答案,這樣有印象,也能節省時間。

2021年很多公司都在問黑紅樹,數據結構與算法一定要看哦~

尚硅谷Java大廠面試題第3季,跳槽必刷題目+必掃技術盲點(周陽主講)_嗶哩嗶哩_bilibili

https://www.bilibili.com/video/BV1Hy4y1B78T?

尚硅谷Java大廠面試題第2季,面試必刷,跳槽大廠神器_嗶哩嗶哩_bilibili

https://www.bilibili.com/video/BV18b411M7xz?

尚硅谷經典Java面試題第一季(java面試精講)_嗶哩嗶哩_bilibili

https://www.bilibili.com/video/BV1Eb411P7bP?

強烈推薦一個網站:

Java面試題-幫助你通過Java面試 (zwmst.com)

https://zwmst.com/

數據結構與算法面試

1.常用的數據結構

2.數據里有{1,2,3, 4,5,6,7.8,9},請隨機打亂順序,生成一個新的數組(請以代碼實現)

3.寫出代碼判斷一 個整數是不是2的階次方( 請代碼實現,謝絕調用API方法)

4.假設今日是2015年3月1日,星期日,請算出13個月零6天后是星期幾,距離現在多少天(請用代碼實現,謝絕調用API方法)

5.有兩個籃子,分別為A和B,籃子A里裝有雞蛋,籃子B里裝有蘋果,請用面向對象的思想實現兩個籃子里的物品交換(請用代碼實現)

JVM面試

1.知識點匯總

2.知識點詳解:

3.類加載與卸載

4.簡述一下JM的內存模型

5.堆和棧的區別

6.什么時候會觸發FullC

7.什么是Java虛擬機?為什么Java被稱作是“平臺無關的編程語言

8.Java內存結構

9.對象分配規則

10.描述一下J加載class文件的原理機制?

11.Java對象創建過程

12.類的生命周期

13.簡述Javs的對象結構

14.如何判斷對象可以被回收?

15.JVM的永久代中會發生垃圾回收么?

16.垃圾收集算法

17.調優命令有哪些?

18.調優工具

19.Minor GC與Full GC分別在什么時候發生?

20.你知道哪些JM性能調優

21.JYM內存分哪幾個區,每個區的作用是什么?

22.簡述J ava垃圾回收機制?

23.什么是類加載器,類加載器有哪些?”

24.你有沒有遇到過OutOfMemory問題?你是怎么來處理這個問題的?處理過程中有哪些收獲?

26.跟JTM內存相關的幾個核心參數圖解

27.如何啟動系統的時候設置JVM的啟動參數

多線程、并發面試

1.Java中實現多線程有幾種方法

2.如何停止-個正在運行的線程

3.noti fy 0和noti fyAll 0有什么區別?

4.sleep 0和waitO有什么區別

5.volatile是什么?可以保證有序性嗎?

6.Thread 類中的start0和run0方法有什么區別?

7.為什么wait, notify 和notifyA11這些方法不在thread類里面?

8.為什么wai t和noti fy方法要在同步塊中調用?

9.Java中interrupted和isInterruptedd方法的區別?

10.Java中synchronized和Reentr antLock有什么不同?

11.有三個線程T1, T2, T3,如何保證順序執行?

12.Symchr oni Ie dMap和C oncurrentHashMap有什么區別?

13.什么是線程安全

14.Thread類中的yi el a方法有什么作用?

15.Java線程池中submitO和execute 0方法有什么區別?

16.說-說自己對于synchronized關鍵字的了解

17.說說自己是怎么使用symchronized關鍵字,在項目中用到了嗎synchr oni zed關鍵字最主要的三種使用方式:

18.什么是線程安全? Vector是一個線程安全類嗎?

19.volatile關鍵字的作用?

20.常用的線程池有哪些?

21.簡述一下你對線程 池的理解

22.Java程序是如何執行的

23.說一說自己對于synchronized關鍵字的了解

24.說說自己是怎么使用synchronized關鍵字,在項目中用到了嗎

25.講一下synchronired 關鍵字的底層原理

26.為什么要用線程池?

27.實現Runnabl e接口和Callable接口的區別

28.執行execute 0方法和submi t0方法的區別是什么呢?

29.如何創建線程池

基礎面試

1.Java語言有哪些特點

2.面向對象和面向過程的區別

3.八種基本數據類型的大小,以及他們的封裝類

4.標識符的命名規則。

5.instanceof 關鍵字的作用

6.Java自動裝箱與拆箱

7.重載和重寫的區別

8.equa1s與==的區別

9.Hasheode的作用

10.String String StringBuffer和StringBuilder 的區別是什么?

11.ArrayList和1inke aList的區

12.HashMap和HashT able的區別

13.Collecti on包結構,與Collecti ons的區別

14.Javs的四種引用,強弱軟虛

15.泛型常用特點

16.Jav創建對象有幾種方式?

17.有沒有可能兩個不相等的對象有相同的hasheode

18.深拷貝和淺拷貝的區別是什么?

19.final有哪些用法?

20.stati 都有哪些用法?

21.3*0. 1==0. 3返回值是什么

22.a=a+b與a+=b有什么區別嗎?

23.try catch finally; try里有return, finally還執行么?

24.Exepti on與Error包結構

25.00M你遇到過哪些情況,SOF你遇到過哪些情況

26.簡述線程、程序、進程的基本概念。以及他們之間關系是什么

27.線程有哪些基本狀態?

28.Java序列化中如果有些字段不想進行序列化,怎么辦?

29.Java中I0流

30.Java I0與HI0的區別

31.java反射的作用于原理

32.說說List, Set, Map三者的區別?

Spring面試

1.Sprine的I0C和AOP機制?

2.Spring中Autowired和Resouree關鍵字的區別?

3.依賴注入的方式有幾種,各是什么?

4.講一下什么是Spring

5.Spr ing MVC流程.

6.Spri ngMVYC怎么樣設定重定向和轉發的?

7. Sprin/MVC常用的注解有哪些?

8.Sprina的AOP理解:

9.Sprine的I0C理解

10.解釋- -下spring be an的生命周期

11.解釋Spring支持的幾種bean的作用域。

12. Spring基于xm1注入bean的幾種方式:

13.Spring框架中都用到了哪些設計模式?

SpringBoot面試

1.什么是SpringBoot?為什么要用SpringBoot

2.Spring Boot. 的核心注解是哪個?它主要由哪幾個注解組成的?

3.運行Spring Boot有哪幾種方式

4.如何理解Spring Boot 中的Starters?

5.如何在Spring Boo.啟動的時候運行一些特定的代碼?

6.Spring Boot需要獨立的容器運行嗎?

7.Spring Boot中的監視器是什么?

8.如何使用Spring Boot實現異常處理?

9.你如何理解Spring Boot中的Starters?

10.springboot常用的starter有哪些

11.SpringBoot 實現熱部署有哪幾種方式?

12.如何理解Spring Boot配置加載順序?

13.Spring Boot的核心配置文件有哪幾個?它們的區別是什么?

14.如何集成Spring Boot和ActiveMQ?

15.如何重新加載Spring Boot上的更改,而無需重新啟動服務器?

16.Spring Boot、Spring MVC和Spring有什么區別?

17. 能否舉一個例子來解釋更多Staters的內容?

18.Spring Boot還提供了其它的哪些Starter Project Opti ons

MySQL面試

1.數據庫的三范式是什么

2.數據庫引擎有哪些

3.InoDB與MyISAM的區別

4.數據庫的事務

5.索引問題

6.SQL優化

7.簡單說一說drop、 delete與truncate的區別

8.什么是視圖

9.什么是內聯接、左外聯接、右外聯接?

10.并發事務帶來哪些問題?

11.事務隔離級別有哪些?MySQI的默認隔離級別是?

12.大表如何優化?

13.分庫分表之后,id主鍵如何處理?

14.mysq1有關權限的表都有哪幾個

15.mysq1有哪些數據類型

16.創建索引的三種方式,刪除索引

Mybatis面試

1.什么是MyBatis

2.MyBati s的優點和缺點

3.#}和$ {}的區別是什么?

4.當實體類中的屬性名和表中的字段名不一樣,怎么辦?

5.Mybatis是如何進行分頁的?分頁插件的原理是什么?

6.Mybatis是如何將sql執行結果封裝為目標對象并返回的?都有哪些映射形式?

7.如何執行批量插入?

8.Xm1映射文件中,除了常見的select |insert lupdae |delete標簽之外,還有哪些標簽?

9.MyBatis實現一對一有幾種方式?具體怎么操作的?

10.Mybatis是否支持延遲加載?如果支持,它的實現原理是什么?

11.Mybatis的一級、二級緩存:

Redis面試

1.Redi s持久化機制

2.緩存雪崩、緩存穿透、緩存預熱、緩存更新、緩存降級等問題

3.熱點數據和冷數據是什么

4.Memcache與Redi s;的區別都有哪些?

5.單線程的redi s為什么這么快

6.redi s的數據類型,以及每種數據類型的使用場景

7.redi s的過期策略以及內存淘汰機制

8.Redis為什么是單線程的

9.Redis常見性能問題和解決方案?

10.為什么Redi s的操作是原子性的,怎么保證原子性的?

11.Redis事務

Nginx面試

1.簡述一下什么是Nginx,它有什么優勢和功能?

2.Nginx是如何處理一個HTTP請求的呢?

3.列舉-些Ngi nx的特性

4.請列舉Nginx和Apache之間的不同點

5.在Hginx中;如何使用未定義的服務器名稱來阻止處理請求?

6.請解釋Nei rx服務器上的Master和W orker進程分別是什么?

7.請解釋代理中的正向代理和反向代理

8.解釋Nginx用途

SpringCloud面試

1.什么是SpringCloud

2.什么是微服務

3.SpringCloud有什么優勢

4.什么是服務熔斷?什么是服務降級?

5.Eureks和zookeeper都可以提供服務注冊與發現的功能,請說說兩個的區別?

6.SpringBoot和SpringCloud的區別?

7.負載平衡的意義什么?

8.什么是Hystrix?它如何實現容錯?

9.什么是Hystrix斷路器?我們需要它嗎?

10.說說RPC的實現原理

Zookeeper面試

1. ZooKeeper 是什么?

2. ZooKeeper 提供了什么?

3. Zookeeper文件系統

4. ZAB 協議?

5. 四種類型的數據節點Znode

6. Zookeeper Watcher 機制--數據變更通知

7.客戶端注冊Watcher 實現

8. 服務端處理Watcher 實現

9.客戶端回調Watcher

10. ACL 權限控制機制

11. Chroot 特性

12.會話管理

13.服務器角色

14. Zookeeper 下Server工作狀態

15.數據同步

16. zookeeper 是如何保證事務的順序一致性的?

17.分布式集群中為什么會有Master?

18. zk 節點宕機如何處理?

19. zookeeper 負載均衡和nginx負載均衡區別

20. Zookeeper 有哪幾種幾種部署模式?

21.集群最少要幾臺機器,集群規則是怎樣的?

22. 集群支持動態添加機器嗎?

23. Zookeeper 對節點的watch監聽通知是永久的嗎?為什么不是永久的?

24. Zookeeper 的java客戶端都有哪些?

25. chubby 是什么,和zookeeper比你怎么看?

26. 說幾個zookeeper 常用的命令。

27. ZAB和Paxos算法的聯系與區別?

28. Zookeeper的典型應用場景

Kafka面試

1.如何獲取topic 主題的列表

2.生產者和消費者的命令行是什么?

3.consumer 是推還是拉?

4.講講kafka維護消費狀態跟蹤的方法

5.講一下主從同步

6.為什么需要消息系統,mysql不能滿足需求嗎?

7.Zookeeper 對于Kafka的作用是什么?

9.Kafka判斷-個節點是否還活著有那兩個條件?

10.Kafka與傳統MQ消息系統之間有三個關鍵區別

11.講一講kafka的ack的三種機制

12.消費者如何不自動提交偏移里由應用提交?

13.消費者故障,出現活鎖問題如何解決?

14.如何控制消費的位置

15.kafka分布式(不是單機)的情況下,如何保證消息的順序消費

16.kafka的高可用機制是什么?

17.kafka如何減少數據丟失

18.kafka如何不消費重復數據?比如扣款,我們不能重復的扣。

MQ面試

1.為什么使用順

2.MQ優缺點

3.Kafka、ActiveMQ、Rabbi tMQ、RocketMQ都有什么區別?

4.如何保證高可用的?

5.如何保證消息的可靠傳輸?如果消息丟了怎么辦

6.如何保證消息的順序性

7.如何解決消息隊列的延時以及過期失效問題?消息隊列滿了以后該怎么處理?有幾百萬消息持續積壓幾小時,說說怎么解決?

8.設計M9的思路

Elasticsearch面試

1.elasticsearch. 了解多少,說說你們公司es. 的集群架構,索引數據大小,分片有多少,以及一些調優手段。

2.elasticsear ch的倒排索引是什么

3.elasticsearch 索引數據多了怎么辦,如何調優,部署

4.elasticsearch是如何實現mster 選舉的

5.詳細描述一 下Elasticsearch索引文檔的過程

6.詳細描述一 下Flasticsearch搜索的過程?

7.Elasticsearch 在部署時,對Linux的設置有哪些優化方法

8.lucence內部結構是什么?

9.Elasticsearch 是如何實現Master選舉的?

10.Elasticsearch 中的節點(比如共20個),其中的10個

11.客戶端在和集群連接時,如何選擇特定的節點執行請求的?

12.詳細描述一 下Elasticsearch索引文檔的過程。

13.詳細描述一 下Elasticsearch更新和刪除文檔的過程。

14.詳細描述一 下Elasticsearch搜索的過程。

15.在Elasticsearch中,是怎么根據一個詞找到對應的倒排索引的?

16.Elasticsearch 在部署時:又Linux的設置有哪些優化方法?

17.對于GC方面,在使用Elasticsearch時要注意什么?

18.Elasticsearch對于大數據量(上億量級) 的聚合如何實現?

19.在并發情況下,Flasticsearc h如果保證讀寫- 致?

20.如何監控Elasticsearch集群狀態?

21.介紹下你們電商搜索的整體技術架構。

22.介紹一下你們的個性化搜索方

23.是否了解字典樹?

24.拼寫糾錯是如何實現的?

Linux面試

1.絕對路徑用什么符號表示?當前目錄、上層自錄用什么表示?主目錄用什么表示?切換目錄用什么命令?

2.怎么查看當前進程?怎么執行退出?怎么查看當前路徑?

3.怎么清屏?怎么退出當前命令?怎么執行睡眠?怎么查看當前用戶id?查看指定幫助用什么命令?

4.Ls命令執行什么功能?可以帶哪些參數,有什么區別?

5.建立軟鏈接(快捷方式),以及硬鏈接的命令。

6.目錄創建用什么命令?創建文件用什么命令?復制文件用什么命令?

7.查看文件內容有哪些命令可以使用?

8.隨意寫文件命令?怎么向屏幕輸出帶空格的字符串,比如”hello world" ?

9.終端是哪個文件夾下的哪個文件?黑洞文件是哪個文件夾下的哪個命令?

10.移動文件用哪個命令?改名用哪個命令?

11.復制文件用哪個命令?如果需要連同文件夾一塊復制呢?如果需要有提示功能呢?

12.刪除文件用哪個命令?如果需要連目錄及目錄下文件一塊刪除呢?刪除空文件夾用什么命令?

13.Linux下命令有哪幾種可使用的通配符?分別代表什么含義?

14.用什么命令對一個文件的內容進行統計? (型號、 單詞數、字節數)

15.Grep命令有什么用?如何忽略大小寫?如何查找不含該串的行?

16.Linur中進程有哪幾種狀態?在ps顯示出來的信息中,分別用什么符號表示的?

17.怎么使一個命令在后臺運行?

18.利用ps怎么顯示所有的進程?怎么利用ps查看指定進程的信

19.哪個命令專i ]用來查看后臺任務?

20.把后臺任務調到前臺執行使用什么命令?把停下的后臺任務在后臺執行起來用什么命令?

21.終止進程用什么命令?帶什么參數?

22.怎么查看系統支持的所有信號?

23.搜索文件用什么命令?格式是怎么樣的?

24.查看當前誰在使用該主機用什么命令?查找自己所在的終端信息用什么命令?

25.使用什么命令查看用過的命令列表?

26.使用什么命令查看磁盤使用空間?空閑空間呢?

27.使用什么命令查看網絡是否連通?

28.使用什么命令查看ip 地址及接口信息?

29.查看各類環境變量用什么命令

30.通過什么命令指定命令提示符

31.查找命令的可執行文件是去哪查找的?怎么對其進行設置及添加

32.通過什么命令查找執行命令?

33.怎么對命令進行取別名?

34.du和df的定義,以及區別

35.awk 詳解。

36.當你需要給命令綁定一個宏或者按鍵的時候,應該怎么做呢?

37.如果一個linux新手想要知道當前系統支持的所有命令的列表, 他需要怎么做?

38.如果你的助手想要打印出當前的目錄棧:你會建議他怎么做?

39.你的系統目前有許多正在運行的任務,在不重啟機器的條件下,有什么方法可以把所有正在運行的進程移除呢?

40.bash shell 中的hash 命令有什么作用?

41.哪-個bash內置命令能夠進行數學運算。

42.怎樣一頁一頁地查看一個大文件的內容呢?

43.數據字典屬于哪-個用戶的?

44.怎樣查看一個linw: 命令的概要與用法?假設你在/bin目錄中偶然看到一個你從沒見過的的命令,怎樣才能知道它的作用和用法呢?

45.使用哪一個命令可以查看自己文件系統的磁盤空間配額呢?

46.列舉幾個常用的Linux命令

47.你平時是怎么查看日志的?

簡歷模板

1.為什么說簡歷很重要?

2.先從面試來說

3.再從面試說起

4.必知必會的幾點

5.必須了解的兩大法則

6.項目經歷怎么寫

7.專業技能怎么寫

8.排版注意事項

9.其他一些小tips

評論0 贊同0
  •  加載中...

相關問題

最新活動

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關注的人
向幫助了您的網友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<