博主工作3年了,面過幾家大廠,應聘的崗位是進階Java開發工程師,以下是親身經曆的一些面試題,記錄下來,留給需要的人~
一、Java基礎
1、hashmap的基本原理,內部資料結構,put操作的整體流程,是否安全執行緒以及為什麼?jdk8對hashmap做了哪些最佳化。
2、String類為什麼是不可變的。StringBuilder和StringBuffer的區別,字串常量池,StringBuffer為什麼是安全執行緒。加號的底層原理
3、反射、accessible,動態代理的原理,jdk動態代理與cglib的區別與各自的實現原理
4、自動裝箱,賦值操作,在記憶體裡面是如何?的。
5、介面和抽象類別的區別
6、concurrenthashmap的原理,內部資料結構,如何提高並發性,jdk8中做了哪些最佳化。
7、hashset的原理
8、GC原理,分代機制,可達性分析
9、JVM參數有哪幾種,如何調優。
10、JMM特性有哪些。
11、什麼是跳錶。
二、多線程
1、線程有幾種狀態。之間是如何切換的。
2、volatile的作用(兩點),volatile的原理與應用情境。
3、安全執行緒是什麼。如何做到安全執行緒。怎麼判斷一個類是不是安全執行緒。
4、線程同步有幾種方式。
5、threadlocal的原理
6、synchronized是如何?的。
7、sleep和wait的區別
8、線程池有幾種。各自的應用情境
9、線程池的原理,主要有幾個參數。線程池滿了怎麼辦。
10、Semaphore、countdownlatch、futureTask
11、submit和execute的區別。
12、Future介面的幾個主要方法
13、建立線程有幾種方式
14、可重新進入鎖是如何?的
三、資料庫
1、mysql索引原理。為什麼是B+樹。有什麼優點。
2、交易隔離等級有哪幾種。mysql預設的隔離等級是。髒讀、幻讀、不可重複讀取是什麼情況。
3、MVCC原理
4、mysql有哪幾種鎖。
5、mysql的儲存引擎有哪幾種。區別和各自的適用情境。
6、query cache的配置
7、ACID
8、如何最佳化慢查詢
9、最左首碼匹配原則,原理
四、演算法
1、一致性雜湊的原理
2、手寫二分尋找,快速排序
3、手寫LRU演算法
4、兩個鏈表找交點
5、兩個無限長的數字求和
6、手寫生產者消費者demo
7、256M記憶體排序2G大小的檔案
8、求數組最大子序列
五、作業系統與電腦網路
1、如何從訪問日誌中找出量最大的10個ip。awk語句瞭解嗎。
2、jstack,jstat,jmap,jheap命令瞭解嗎,如何使用。
3、系統負載情況如何查看。
4、網路分層協議瞭解嗎。
5、tcp三向交握,四次揮手瞭解嗎。
6、aio,bio,nio的區別
7、select,poll,epoll的區別。
8、io模型有哪些。
六、開源架構與組件
這部分主要根據簡曆以及項目的實際情況來問。
1、對spring瞭解嗎。ioc,aop,transaction註解
2、spingmvc瞭解嗎。
3、redis與memcache的區別
4、redis持久化策略,rdb與aof的區別與應用情境
5、memcached的記憶體是如何分配的。一致性雜湊原理
6、mq的原理與應用情境,mq是如何保證不丟訊息的。
7、tomcat的原理,主要運用了哪些設計模式。
8、redis與memcached記憶體分別是如何回收的。
9、guava的緩衝是怎麼實現的。
七、情境設計與架構
1、秒殺情境,如何做技術選型。
2、設計一個支援高並發的服務,寫出核心代碼
3、高並發與高可用如何?。
4、服務降級怎麼做。限流、限速、逾時重試、熔斷、自恢複、分別如何?。
5、什麼是微服務。有什麼好處。為什麼要這麼做。
6、CAP理論是什麼。項目中的哪些情境用到了CAP理論。
7、BASE理論是什麼。
8、什麼時候應該使用mq。
八、其他
1、平時都通過什麼方式學習技術。
2、最近學的一個知識點是什麼。
3、對帶人有什麼經驗。
4、最熟悉的一個項目是什麼。
5、跳槽的時候,你最看重什麼。
6、為什麼跳槽。為什麼選擇我們公司。