一個三年Java工程師的面試總結

前言:前端

15年畢業到如今也近3年了,最近面試了阿里集團(菜鳥網絡,螞蟻金服)、網易、滴滴、點我達,最終收到點我達和網易offer,螞蟻金服二面掛掉,菜鳥網絡一個月了還在流程中...最終有幸去了網易。java

 

 

1、面試總體事項程序員

一、簡歷要準備好,聯繫方式必定要正確清晰醒目,項目經歷按照時間倒序闡述,注意描述本身在項目中承擔的職責,簡歷的模板儘可能選擇簡潔的,畢竟程序員大部分仍是喜歡簡單明瞭的。面試

二、推薦boss直聘,我以爲很好用(不是廣告)。redis

三、通常的總體面試流程都是電面>現場面>HR面>等着。算法

四、不要以爲HR讓你回去等消息就是GG了,他們也要跟你以前的面試官討論,再向領導彙報,若是說不急可能還要和其餘候選人比較,因此HR讓你回去等消息毫不是說明你完蛋了。數據庫

五、面試前準備好自我介紹,1分鐘左右就能夠,最好寫在紙上,電面能夠照着念,等你到現場面試基本也能背下來自我介紹了。設計模式

六、準備好紮實的基礎,這是一切的根源,沒實力怎麼都沒用的。緩存

七、面試中你能夠把你的面試官往你會的知識上引導(我遇到過你會什麼他不問什麼的)。安全

八、遇到了設計類題目不要着急,面試官不是爲了讓你幾分鐘設計一個高併發高可用設計模式完美的架構,只是想看看你的思路,看看你應變的能力,而後給你些提示看看你可否迅速的調整。

九、offer都會有的,不要着急,把面試當成一個交流的過程。

2、須要準備的知識

如下爲在近期面試中比較有印象的問題,也就不分公司了,由於沒什麼意義,大體分類記錄一下,目前只想起這麼多,不過必定要知道這些問題只是冰山一角,就算都會了也不能怎麼樣,最最重要的,仍是堅實的基礎,清醒的頭腦。

Java基礎

一、HashMap的源碼,實現原理,JDK8中對HashMap作了怎樣的優化。

二、HaspMap擴容是怎樣擴容的,爲何都是2的N次冪的大小。

三、HashMap,HashTable,ConcurrentHashMap的區別。

四、極高併發下HashTable和ConcurrentHashMap哪一個性能更好,爲何,如何實現的。

五、HashMap在高併發下若是沒有處理線程安全會有怎樣的安全隱患,具體表現是什麼。

六、java中四種修飾符的限制範圍。

七、Object類中的方法。

八、接口和抽象類的區別,注意JDK8的接口能夠有實現。

九、動態代理的兩種方式,以及區別。

十、Java序列化的方式。

十一、傳值和傳引用的區別,Java是怎麼樣的,有沒有傳值引用。

十二、一個ArrayList在循環過程當中刪除,會不會出問題,爲何。

1三、@transactional註解在什麼狀況下會失效,爲何。

數據結構和算法

一、B+樹

二、快速排序,堆排序,插入排序(其實八大排序算法都應該瞭解

三、一致性Hash算法,一致性Hash算法的應用

JVM

一、JVM的內存結構。

二、JVM方法棧的工做過程,方法棧和本地方法棧有什麼區別。

三、JVM的棧中引用如何和堆中的對象產生關聯。

四、能夠了解一下逃逸分析技術。

五、GC的常見算法,CMS以及G1的垃圾回收過程,CMS的各個階段哪兩個是Stop the world的,CMS會不會產生碎片,G1的優點。

六、標記清除和標記整理算法的理解以及優缺點。

七、eden survivor區的比例,爲何是這個比例,eden survivor的工做過程。

八、JVM如何判斷一個對象是否該被GC,能夠視爲root的都有哪幾種類型。

九、強軟弱虛引用的區別以及GC對他們執行怎樣的操做。

十、Java是否能夠GC直接內存。

十一、Java類加載的過程。

十二、雙親委派模型的過程以及優點。

1三、經常使用的JVM調優參數。

1四、dump文件的分析。

1五、Java有沒有主動觸發GC的方式(沒有)。

多線程

一、Java實現多線程有哪幾種方式。

二、Callable和Future的瞭解。

三、線程池的參數有哪些,在線程池建立一個線程的過程。

四、volitile關鍵字的做用,原理。

五、synchronized關鍵字的用法,優缺點。

六、Lock接口有哪些實現類,使用場景是什麼。

七、可重入鎖的用處及實現原理,寫時複製的過程,讀寫鎖,分段鎖(ConcurrentHashMap中的segment)。

八、悲觀鎖,樂觀鎖,優缺點,CAS有什麼缺陷,該如何解決。

九、ABC三個線程如何保證順序執行。

十、線程的狀態都有哪些。

十一、sleep和wait的區別。

十二、notify和notifyall的區別。

1三、ThreadLocal的瞭解,實現原理。

數據庫相關

常見的數據庫優化手段索引的優缺點,什麼字段上創建索引數據庫鏈接池。durid的經常使用配置。

計算機網絡

TCP,UDP區別。三次握手,四次揮手,爲何要四次揮手。長鏈接和短鏈接。鏈接池適合長鏈接仍是短鏈接。

設計模式

觀察者模式代理模式單例模式,有五種寫法,能夠參考文章單例模式的五種實現方式能夠考Spring中使用了哪些設計模式

分佈式相關

分佈式事務的控制。分佈式鎖如何設計。分佈式session如何設計。dubbo的組件有哪些,各有什麼做用。zookeeper的負載均衡算法有哪些。dubbo是如何利用接口就能夠通訊的。

緩存相關

redis和memcached的區別。redis支持哪些數據結構。redis是單線程的麼,全部的工做都是單線程麼。redis如何存儲一個String的。redis的部署方式,主從,集羣。redis的哨兵模式,一個key值如何在redis集羣中找到存儲在哪裏。redis持久化策略。

框架相關

SpringMVC的Controller是如何將參數和前端傳來的數據一一對應的。Mybatis如何找到指定的Mapper的,如何完成查詢的。Quartz是如何完成定時任務的。自定義註解的實現。Spring使用了哪些設計模式。Spring的IOC有什麼優點。Spring如何維護它擁有的bean。一些較新的東西JDK8的新特性,流的概念及優點,爲何有這種優點。區塊鏈瞭解如何設計雙11交易總額面板,要作到高併發高可用

一些小建議

能夠去leetcode上刷題換換思路。八大排序算法必定要手敲一遍(快排,堆排尤爲重要)。瞭解一些新興的技術。面試以後面試官都會問你有沒有什麼問題,千萬不要沒問題,也別傻乎乎的問一些敏感問題。瞭解你要面試的公司的產品及競爭產品。

總結

不管是哪家公司,都很重視高併發高可用的技術,重視基礎,重視JVM。面試是一個雙向選擇的過程,不要抱着畏懼的心態去面試,不利於本身的發揮。同時看中的應該不止薪資,還要看你是否是真的喜歡這家公司,是否是能真的獲得鍛鍊。其實我寫了這麼多,只是我本身的總結,並不必定適用於全部人,相信通過一些面試,你們都會有這些感觸。若是這些文字可以幫到你,那就最好了,幫不到就當是我本身的一個記錄。最後,但願你們都能找到適合本身的公司,開開心心的擼代碼。

最後

爲了讓學習變得輕鬆高效, 如今給你們提供一個學習平臺,讓你在實踐中積累經驗掌握原理。主要方向是JAVA架構師,在這裏你能夠學習Java工程化、高性能及分佈式、深刻淺出、性能調優、Spring,MyBatis,Netty源碼分析和大數據等知識點,免費的大型互聯網Java技術視頻分享給你們。

 

 

歡迎工做一到五年的 Java 的工程師朋友們加入的 Java 架構開發:697-579-751

本羣提供免費的學習指導架構資料以及免費的解答

不懂得問題均可以在本羣提出來以後還會有職業生涯規劃以及面試指導

相關文章
相關標籤/搜索