面試總結經驗彙總

提離職緣由html

遇到的最難的技術點java

遇到問題:adam本地啓動時用jdk1.8能夠啓動,用jdk1.7時雖然啓動成功,可是訪問地址無反應,並且線上jdk版本也是1.7,錯誤信息啓動幾分鐘後控制檯纔有打印,剛開始沒看到錯誤信息,沒有頭緒,看到錯誤信息後,明白了緣由。mysql

報錯提示:1.WarningService: Shutdown: TcpSocketLinkOutOfMemorylinux

                2.AlarmClock slow alarmAlarm面試

緣由:本地使用默認jvm配置,堆內存、cms perm gen非堆內存不夠使用,內存溢出redis

Perm Gen全稱是Permanent Generation space,是指內存的永久保存區域,於是稱之爲永久代。這個內存區域用於存放Class和Meta的信息,Class在被 Load的時候被放入這個區域。由於Perm裏存儲的東西永遠不會被JVM垃圾回收的,因此若是你的應用程序LOAD不少CLASS的話,就極可能出現PermGen space錯誤。默認大小爲物理內存的1/64。算法

解決方案:啓動時配置jvm參數:-Xms2867M-Xmx2867M -Xmn1075M -XX:PermSize=512M -XX:MaxPermSize=512M,調大非堆內存代銷spring

思考:經過上述問題加深了對jvm參數的理解,後續須要看下jvm內存使用狀況sql

問題:在進行金額運算時,發現結果與預計不符,使用了BigDecimal 作除法運算時使用的是默認舍入方式。數據庫

解決:除法運算時指定舍入方式,並設置保留位數(避免無線不循環小數狀況)。

思考:獲取所需數據時,爲了不查詢庫次數過多,先將數據按範圍都查尋出來放入map中,經過map作映射管理,下降訪問數據庫次數,提高性能;

須要學習

java基礎

經常使用的設計模式有哪些?

int(M)長度的意義

MySQL 整型長度的含義

java容器(集合)有哪些?

hashmap hashtable區別

虛引用與弱引用區別

TCP udp區別?實時性要求高用哪一個?

Io nio 區別

btree深度爲何不能設置太深

使用數組實現隊列

併發包

string爲何定義成final類型 好處

https://www.cnblogs.com/651434092qq/p/11168608.html

switch支持的數據類型

https://www.cnblogs.com/HDK20...

https://blog.csdn.net/qq_3381...

枚舉類在switch...case語句中使用的問題

https://blog.csdn.net/qq_3523...

HashMap和ConcurrentHashMap區別(必考)

ConcurrentHashMap的數據結構(必考)

高併發HashMap的環是如何產生的

Boolean佔幾個字節

jdk1.8/jdk1.7都分別新增了哪些特性

Exception和Error

多線程

Java 線程狀態、線程池狀態

Java 線程狀態、線程池狀態

核心線程池ThreadPoolExecutor的參數(必考)

Java線程池,你瞭解多少?

爲何當線程池的核心線程滿了後,是先加入到阻塞隊列,而不是先建立新的線程?

線程池建立線程須要獲取mainlock這個全局鎖,會影響併發效率,因此使用阻塞隊列把第一步建立核心線程與第三步建立最大線程隔離開來,起一個緩衝的做用。

引入阻塞隊列,是爲了在執行execute()方法時,儘量的避免獲取全局鎖。

如何控制線程池線程的優先級

sleep、yield、wait、join的區別(阿里)

volatile做用(必考)

volatile關鍵字解析

  Java內存模型規定全部的變量都是存在主存當中(相似於前面說的物理內存),每一個線程都有本身的工做內存(相似於前面的高速緩存)。線程對變量的全部操做都必須在工做內存中進行,而不能直接對主存進行操做。而且每一個線程不能訪問其餘線程的工做內存。

java中爲何notify()可能會致使死鎖,而notifyAll()則不會

CountDownLatch的兩種經常使用場景

threadlocal原理

一文搞懂 ThreadLocal 原理

正確理解Thread Local的原理與適用場景

Atomic類如何保證原子性(CAS操做)(必考)

synchronized實現原理?鎖升級過程?

synchronized和Lock的區別(必考)

Synchronized與Lock的區別與應用場景

不可不說的Java「鎖」事

java鎖介紹

爲何要使用線程池(必考)

防止頻繁的建立線程消耗服務器資源

CPU資源有限的狀況下,新建更多的線程不只不能處理更多的任務,反而會由於線程間頻繁的切換致使處理任務的效率下降

更方便對線程進行集中管理

不停的建立線程,會佔用很大的內存空間

線程之間如何通訊

volatile 在雙重檢查的單例中起到的做用:

主要在於singleton = new Singleton()這句,這並不是是一個原子操做,事實上在 JVM 中這句話大概作了下面 3 件事情。

      1. 給 singleton 分配內存

      2. 調用 Singleton 的構造函數來初始化成員變量,造成實例

      3. 將singleton對象指向分配的內存空間(執行完這步 singleton纔是非 null了)

        在JVM的即時編譯器中存在指令重排序的優化。

        也就是說上面的第二步和第三步的順序是不能保證的,最終的執行順序多是 1-2-3 也多是 1-3-2。若是是後者,則在 3 執行完畢、2 未執行以前,被線程二搶佔了,這時 instance 已是非 null 了(但卻沒有初始化),因此線程二會直接返回 instance,而後使用,而後瓜熟蒂落地報錯。

分佈式 併發

分佈式主鍵 保證惟一性

冪等性

bitmap

秒殺 限流

限流算法

Spring

spring boot啓動過程

spring bean生命週期

如何記憶Spring Bean的生命週期

動態代理

spring 有哪些註解

Spring調用流程

springMVC請求流程詳解 - 夢醒點燈 - 博客園

Spring的IOC/AOP的實現(必考)

Spring IOC 實現原理

動態代理的實現方式(必考)

Spring如何解決循環依賴(三級緩存)(必考)

Spring的後置處理器

Spring的@Transactional如何實現的

Spring的事務傳播級別

Spring事務傳播屬性和隔離級別

BeanFactory和ApplicationContext的聯繫和區別

Spring中BeanFactory和ApplicationContext的區別_

Spring的Interceptor和Servlet的Filter區別

https://blog.csdn.net/qq_4027...

Mysql

索引怎麼優化 分析?

binlog,redolog,undolog都是什麼,起什麼做用

分庫分表 可重複讀怎麼保證

mysql隔離級別 及實現原理

一文完全讀懂MySQL事務的四大隔離級別

Innodb 中 RR 隔離級別可否防止幻讀?

Innodb 中 RR 隔離級別可否防止幻讀

MySQL InnoDB的可重複讀並不保證避免幻讀,須要應用使用加鎖讀來保證。而這個加鎖度使用到的機制就是next-key locks。

Mysql官方給出的幻讀解釋是:只要在一個事務中,第二次select多出了row就算幻讀。

a事務先select,b事務insert確實會加一個gap鎖,可是若是b事務commit,這個gap鎖就會釋放(釋放後a事務能夠隨意dml操做),a事務再select出來的結果在MVCC下還和第一次select同樣,接着a事務不加條件地update,這個update會做用在全部行上(包括b事務新加的),a事務再次select就會出現b事務中的新行,而且這個新行已經被update修改了,實測在RR級別下確實如此。

若是這樣理解的話,Mysql的RR級別確實防不住幻讀

緣由是前面的UPDATE語句執行以後,會將當前記錄上存儲的事務信息更新爲當前的事務,而當前事務所作的任何更新,對本事務全部SELECT查詢都變的可見,所以最後輸出的結果是UPDATE執行後更新的全部記錄。

多讀出的一行,是由於 "MVCC快照讀中,「本身的修改可見」。"仍是update的鎖把快照讀變成了當前讀。

快照讀 當前讀?

【MySQL】當前讀、快照讀、MVCC

mysql索引結構爲何不用hash

mvcc

行級鎖 怎麼實現的

mysql可重複讀怎麼實現的

主鍵索引 非主鍵索引 彙集索引 非彙集索引 區別

MySQL大數據量表根據非索引字段檢索優化

mysql日誌 模式

分佈式事務 https://www.cnblogs.com/xifen...

分庫分表、聚合查詢

分庫分表:https://www.jianshu.com/p/32b...

事務的基本要素

事務隔離級別(必考)

如何解決事務的併發問題(髒讀,幻讀)(必考)

MVCC多版本併發控制(必考)

InnoDB的行鎖/表鎖

myisam和innodb的區別,何時選擇myisam

MyISAM與InnoDB 的區別(9個不一樣點)

爲何選擇B+樹做爲索引結構(必考)9.索引B+樹的葉子節點均可以存哪些東西(必考)

查詢在何時不走(預期中的)索引(必考)

sql如何優化

explain是如何解析sql的

order by原理

深度分頁

Redis

redis如何保證和數據庫一致性

Redis數據分片是怎麼作的

一致性hash怎麼實現的

redis系列之——一致性hash

redis部署方式 集羣 哨兵

Redis(二)冰叔帶你瞭解Redis-哨兵模式和高可用集羣解析

redis哨兵模式選舉機制

《Redis持久化方式》

RDB方式:按期備份快照,經常使用於災難恢復。優勢:經過fork出的進程進行備份,不影響主進程、RDB 在恢復大數據集時的速度比 AOF 的恢復速度要快。缺點:會丟數據。

AOF方式:保存操做日誌方式。優勢:恢復時數據丟失少,缺點:文件大,回覆慢。

也能夠二者結合使用。

Redis支持的數據類型(必考)

Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

Redis的LRU過時策略的具體實現 

https://blog.csdn.net/nakiri_...

redis過時怎麼實現的

Redis 的過時策略是如何實現的?

如何解決Redis緩存雪崩,緩存穿透,緩存擊穿

緩存穿透,緩存擊穿,緩存雪崩解決方案分析

緩存穿透和緩存擊穿處理

Redis 分佈式優缺點

Redis的應用場景

Redis的管道pipeline

redis內部數據結構

zset跳錶的數據結構 實現原理(必考)

消息隊列

Kafka常見面試題

消息隊列積壓從原理分析怎麼處理?

Kafka集羣消息積壓問題及處理策略

kafka 何時慢? kafka爲何快?

Kafka 爲何那麼快的 6 個緣由!

kafka reblance 怎麼實現的?

Kafka Rebalance機制分析

目前kafka提供了5個協議來處理與consumer group coordination相關的問題:

Heartbeat請求:consumer須要按期給coordinator發送心跳來代表本身還活着

LeaveGroup請求:主動告訴coordinator我要離開consumer group

SyncGroup請求:group leader把分配方案告訴組內全部成員

JoinGroup請求:成員請求加入組

DescribeGroup請求:顯示組的全部信息,包括成員信息,協議名稱,分配方案,訂閱信息等

kafka 消費端 實現多線程消費

正確處理kafka多線程消費的姿式

如何保證Kafka不丟失消息?

Kafka如何保證消息不丟失不重複

面試官問我如何保證Kafka不丟失消息?我哭了!

Consumer端

  consumer端丟失消息的情形比較簡單:若是在消息處理完成前就提交了offset,那麼就有可能形成數據的丟失。因爲Kafka consumer默認是自動提交位移的,因此在後臺提交位移前必定要保證消息被正常處理了,所以不建議採用很重的處理邏輯,若是處理耗時很長,則建議把邏輯放到另外一個線程中去作。爲了不數據丟失,現給出兩點建議:

enable.auto.commit=false  關閉自動提交位移

在消息被完整處理以後再手動提交位移

手動提交可能致使重複消費:好比你剛剛消費完消息以後,還沒提交 offset,結果本身掛掉了,那麼這個消息理論上就會被消費兩次。

解決重複消費:1.創建去重表,保證處理冪等性

如何保證消息的順序消費?

深度剖析 Kafka/RocketMQ 順序消息的一些坑

生產端:

若是須要進行消息具備消費順序性,能夠在生產端指定這一類消息的 key,這類消息都用相同的 key 進行消息發送,kafka 就會根據 key 哈希取模選取其中一個分區進行存儲,因爲一個分區只能由一個消費者進行監聽消費,所以這時候消息就具備消息消費的順序性了。

消費端:

JVM

oom異常場景

https://www.cnblogs.com/devel...

ArrayList addAll 方法 ,批量添加 頻繁擴容 須要控件連續 oom;解決:初始化集合大小,原本是數據彙總再插入數據庫,不須要彙總 能夠每一個裏面都插入

CPU太高排查

記一次Java應用形成CPU太高的排查過程

使用top命令查詢服務cpu使用狀況

使用top -Hp 31737查詢31737進程中各個線程的資源使用率

使用printf "%x\n" 5322把線程id轉化爲十六進制(14ca),由於打印線程棧的時候,本地線程標識nid是用十六進制表示的

使用jstack命令打印堆棧信息,jstack 31737 | grep -10 14ca

查找本地線程標識爲14ca的線程堆棧信息

查看源碼

頻繁fullgc 怎麼排查 解決?

cms和g1 區別?分別什麼場景下使用?

調優

syschronize 1.7優化

await sleep

cpu比較高查找緣由

內存溢出了怎麼查找

jvm命令

運行時數據區域(內存模型)(必考)

垃圾回收機制(必考)

垃圾回收算法(必考)

Minor GC和Full GC觸發條件

GC中Stop the world(STW)

各垃圾回收器的特色及區別

雙親委派模型

JDBC和雙親委派模型關係

Java基礎

ZooKeeper

CAP定理

ZAB協議

leader選舉算法和流程

Dubbo

調用流程

Dubbo支持哪些序列化機制

linux

查看端口占用命令

其餘

高併發系統的限流如何實現

高併發秒殺系統的設計

負載均衡如何設計

補充

另外還會考一些計算機網絡,操做系統啊之類的。像消息隊列,RPC框架這種考的比較少。

計算機網絡就是分層啊,tcp/udp啊,三次握手之類的。操做系統就是進程與線程啊,進程的數據結構以及如何通訊之類的。數據結構的排序算法也比較常考,考的話必定會讓你手寫個快排。剩下的算法題就靠LeetCode的積累了。其實非算法崗考的算法題都蠻簡單的,不少題徹底就是考察你智力是否正常,稍微難點的涉及到一些算法思想的按照LeetCode題目類型的分類,每種題作一兩道基本就能徹底應付面試了。

面試感覺及評價

除了外企,體驗最好的就是阿里。絕對的脫穎而出,不管是面試官的專業程度仍是面試官對參與面試人員的態度都徹底突出於其餘公司。很是的尊重人,以及會引導我去做出正確的回答,惟一就是阿里的HR是很是強勢的,永遠有一票否決權。而有些公司面試官會故意誤導你,千方百計讓你說出錯誤的答案,而且有些態度極其傲慢,讓人感受很不尊重人。這裏點名批評面試體驗最差的兩家公司:美團和Boss直聘。

外企的話,體驗都很好。微軟是英文面的,亞馬遜不是。這倆都是以算法爲主,微軟除了算法還聊了操做系統和計算機網絡,亞馬遜聊了較長時間的項目細節。

最後

最後說下本身的狀況,17年在京東實習,19年7月離職。正式工做時間很短,就一年(算實習兩年),並且19年有半年的時間準備考研因此有半年的空檔期,這也是爲何我被不少HR掛了的緣由。雖然Offer沒拿幾個,可是一半多都面到HR面了,因此對於兩三年經驗的感受整理的問題仍是比較有表明性的。

算法題

最長迴文子串

大數據文件 30m 怎麼排序

矩陣

小頂堆大頂堆

100萬個數據取前20大的數據

快速排序

單鏈表獲取倒數第n個元素

合併兩個有序鏈表,LeetCode21題。(猿輔導)

反轉鏈表,LeetCode206題。(頭條,搜狐)

兩個單單鏈表相交

楊輝三角求數字位置,LeetCode118,119題相關。(滴滴)

循環有序數組的查找,LeetCode33題。(滴滴)

求二叉樹的最近公共祖先,LeetCode236題。(滴滴)

求階乘後的0,LeetCode172題。(螞蟻金服筆試)

實現一個增刪查功能的LinkedList,LeetCode707題。(Boss直聘筆試)

矩陣置0,LeetCode73題。(跟誰學筆試)

二又樹的層序遍歷,LeetCode102題。(搜狐)

中文轉數字/數字轉中文。(頭條)

鏈表的兩數相加,LeetCode2題類型題。(頭條)

括號匹配,LeetCode20題。(拼多多)

隊列實現棧,棧實現隊列,LeetCode225,232題。(拼多多)

判斷字符串(IP地址)是否在集合內。(微軟)

中綴表達式的計算,LeetCode224題。(微軟)

劃分字母區間,LeetCode763題。(亞馬遜)

相關文章
相關標籤/搜索