本人工做3年,面過幾家大廠,應聘的崗位是高級Java開發工程師,如下是親身經歷的一些面試題,記錄下來,留給須要的人~mysql
1、Java基礎面試
一、hashmap的基本原理,內部數據結構,put操做的總體流程,是否線程安全以及爲何?jdk8對hashmap作了哪些優化?
二、String類爲何是不可變的?StringBuilder和StringBuffer的區別,字符串常量池,StringBuffer爲何是線程安全?加號的底層原理
三、反射、accessible,動態代理的原理,jdk動態代理與cglib的區別與各自的實現原理
四、自動裝箱,賦值操做,在內存裏面是如何實現的。
五、接口和抽象類的區別
六、concurrenthashmap的原理,內部數據結構,如何提升併發性,jdk8中作了哪些優化。
七、hashset的原理
八、GC原理,分代機制,可達性分析
九、JVM參數有哪幾種,如何調優?
十、JMM特性有哪些?
十一、什麼是跳錶?redis
2、多線程算法
一、線程有幾種狀態?之間是如何切換的?
二、volatile的做用(兩點),volatile的原理與應用場景。
三、線程安全是什麼?如何作到線程安全?怎麼判斷一個類是否是線程安全?
四、線程同步有幾種方式?
五、threadlocal的原理
六、synchronized是如何實現的?
七、sleep和wait的區別
八、線程池有幾種?各自的應用場景
九、線程池的原理,主要有幾個參數?線程池滿了怎麼辦?
十、Semaphore、countdownlatch、futureTask
十一、submit和execute的區別。
十二、Future接口的幾個主要方法
1三、建立線程有幾種方式
1四、可重入鎖是如何實現的spring
3、數據庫sql
一、mysql索引原理?爲何是B+樹?有什麼優勢?
二、事務隔離級別有哪幾種?mysql默認的隔離級別是?髒讀、幻讀、不可重複讀是什麼狀況?
三、MVCC原理
四、mysql有哪幾種鎖?
五、mysql的存儲引擎有哪幾種?區別和各自的適用場景。
六、query cache的配置
七、ACID
八、如何優化慢查詢
九、最左前綴匹配原則,原理數據庫
4、算法設計模式
一、一致性哈希的原理
二、手寫二分查找,快速排序
三、手寫LRU算法
四、兩個鏈表找交點
五、兩個無限長的數字求和
六、手寫生產者消費者demo
七、256M內存排序2G大小的文件緩存
5、開源框架與組件tomcat
這部分主要根據簡歷以及項目的實際狀況來問。
一、對spring瞭解嗎?ioc,aop,transaction註解
二、spingmvc瞭解嗎?
三、redis與memcache的區別
四、redis持久化策略,rdb與aof的區別與應用場景
五、memcached的內存是如何分配的?一致性哈希原理
六、mq的原理與應用場景,mq是如何保證不丟消息的?
七、tomcat的原理,主要運用了哪些設計模式?
八、redis與memcached內存分別是如何回收的?
九、guava的緩存是怎麼實現的?
6、場景設計與架構
一、秒殺場景,如何作技術選型?
二、設計一個支持高併發的服務,寫出核心代碼
三、高併發與高可用如何實現?
四、服務降級怎麼作?限流、限速、超時重試、熔斷、自恢復、分別如何實現?
五、什麼是微服務?有什麼好處?爲何要這麼作?
六、CAP理論是什麼?項目中的哪些場景用到了CAP理論?
七、BASE理論是什麼?
八、何時應該使用mq?
7、其餘
一、平時都經過什麼方式學習技術? 二、最近學的一個知識點是什麼? 三、對帶人有什麼經驗? 四、最熟悉的一個項目是什麼? 五、跳槽的時候,你最看重什麼? 六、爲何跳槽?爲何選擇咱們公司?