前言:從過年前就萌生出要跳槽的想法,到過年來公司從月初提出離職到~~號正式離職,上班的時間也出去面試過幾家公司,後來總覺的在職找工做老是得請假,便決心離職後找工做。到3月10號找到了一家互聯網公司成功應聘上,中間也經歷了不少公司,有外包的、創業的、互聯網的等等各類類型,也收到了不少offer,也有面試不順序的...今天來記錄一下本身面試中的問題,圍繞着java到底應該具有什麼樣的水平才能適應如今市場的要求的主題來談一談。java
創一個小羣,供你們學習交流聊天
若是有對學JAVA方面有什麼疑惑問題的,或者有什麼想說的想聊的你們能夠一塊兒交流學習一塊兒進步呀。
也但願你們對學JAVA可以鍥而不捨
JAVA愛好羣,
若是你想要學好JAVA最好加入一個組織,這樣你們學習的話就比較方便,還可以共同交流和分享資料,給你推薦一個學習的組織:快樂學習JAVA組織 能夠點擊組織二字,能夠直達
Java到底要作到什麼程度才能適應市場的需求(本人的面試經歷)linux
本篇文章目錄:git
一:面試中的問題面試
二: 面試中要注意的問題ajax
三:關於最後的選擇redis
四:兩年java到底應該具有什麼樣的水平算法
一:面試中的問題spring
java集合框架:sql
1:介紹一下java的集合框架mongodb
2:HashMap碰見哈希衝突會如何怎麼辦?HashMap是線程安全的嗎?HashMap在高併發下會有什麼問題?而後引入ConcurrentHashMap的原理?
3:Hahtable和concurrentHashMap的區別?
4:數組和ArrayList的區別?Arraylist是如何擴容的?
5:線程池中的阻塞隊列通常會選擇哪一種隊列?爲何?
6:RetreenLock的原理?AQS的原理?
7:HashMap的容量爲何推薦是2的冪次方?
框架類:
1:mybatis的二級緩存有什麼問題?
2:mybaits中的mapper的#{}和${}有什麼區別?哪一種能夠防止sql注入?
2:咱們知道mybatis的mapper和接口之間是沒有對象的,那麼它是如何映射的?
4:說說springmvc的註解有哪些?他們的原理是什麼?
5:springmvc的控制器是單例的嗎?是線程安全的嗎?
6:struts1和struts2的區別?是線程安全的嗎?
7:spring如何解析它的xml文件?
8:spring的核心是什麼?Aop的原理是什麼?
redis相關:
1:redis數據類型有哪些?
2:zset數據類型是如何排序的?
3:redis如何作項目的中間緩存層?
4:redis的Hash的時間複雜度是多少?
數據庫:
1:數據庫索引分爲哪幾種?組合索引有什麼要注意的問題?
2:什麼是悲觀鎖 什麼是樂觀鎖?如何實現悲觀鎖?
3: 數據庫關鍵字的執行順序是什麼?
4:如何進行sql優化?
5:有沒有進行過度庫分表操做?分庫以後如何保持事務一致?
分佈式和微服務:
1:微服務要克服那些問題?微服務系統是怎樣通訊的?
2:分佈式環境下如何解決session不一致的問題?
3:分佈式下如何保證id一致?
4:你在dubbo的使用過程當中遇到什麼問題?
5: zookeeper的負載均衡算法有哪些?
jdk源碼相關
1:synchronized的原理?它該怎麼用?如何一個方法是synchronized的,其餘的非synchronzied線程能進入嗎?
2:cvs中的ABA問題如何解決?
3:volatile的原理是什麼?volatile必定是線程安全的嗎?
4:ThreadLocal是什麼?它的原理是什麼?
5:CountDowanLatch有沒有用過?適合在什麼樣的場景下用?
設計模式相關:
1:實現兩種單例模式
2:講一下觀察者模式
3:spring中都用到哪些設計模式?
4:動態代理模式是如何實現的?
5:你在項目中用到哪些設計模式了?講解一下業務場景
算法相關:
1:快速排序的時間複雜度?手寫快速排序(注意遞歸式和非遞歸式的實現方式)
2:手寫二分查找
3:手寫堆排序
4:一個int數組如何進行奇數和偶數分離?
5:用算法實現String轉double
jvm相關:
1: jvm的垃圾回收算法有哪些?分別解釋一下?
2: 新生代爲何要設置兩個survior區?
3:如何經過一個.class文件獲取它的jdk版本?
4:jvm的內存模型?哪些是線程私有的?哪些是公共的?
關於本身的項目(問的時間最長)
1:簡述一下本身的項目?你在其中主要是作什麼的?
2:你在項目中都遇到了哪些難題?最後都是怎麼解決的?
3:項目有多大規模?週期多久(這個不少都問到的)
4:講一下某一模塊的具體實現方式?而後從中挑刺
5:如何解決某一時刻的高併發請求?
6:如何解決訂單支付回調的超時問題?輪詢應該怎麼寫?
其餘:
1:秒殺場景如何削峯?
2:http和udp的區別是什麼?
3:ajax的跨域問題
4:nio與io的區別?什麼狀況下適合用nio
5: 說說常見的linux命令,linux查看內存的命令是什麼?
7:git碰見代碼衝突了怎麼辦?
8:說幾個常見的maven命令,maven如何排除一個jar包的衝突?
二: 面試中要注意的問題
2.1:必定要有本身的實際項目經驗
按照我這麼多面試經驗?其實有的公司會側重於問本身作的項目經驗,有的公司側重於問問題,通常互聯網公司會對技術要求比較高,既要求項目經驗又要要求技術水平
2.2:能夠適當渲染,可是不要誇大其詞
面試的過程當中最忌諱的就是誇誇其談,高屋建瓴很厲害,可是一到實際細節都不知所云了,在技術總監面前,其實你吹牛或者是真的會他是一目瞭然的。不懂裝懂,有的面試官又給你臺階下,否則你就卡帶了,這很容易形成面試的很差印象
2.3:要會自我介紹
面試的時候通常的話都會讓你作一個自我介紹,這個要分對象,是技術官仍是Hr,若是是技術官側重於綜述一下本身的項目的實際技術棧和技術路線,若是是Hr的話不要用過多的技術語言,而要說一些本身的實際工做經歷或者本身上家公司的運營狀況
2.4:關於簡歷
簡歷切記不可太囉嗦,可是不可太簡單,做爲技術的簡歷通常起碼得在3頁,否則HR會以爲你的求職態度不怎麼好,無論如何求職結果如何,一個良好的簡歷會給人留下好的第一印象
(有簡歷模板)
三:關於最後的選擇
說實話也接受到不少HR的offer邀請,可是我通常會選擇說考慮一下一天之後再給回覆,切不可直接把話說死,否則後面就尷尬了。實際提供的offer的有一家外包公司,三家創業公司,兩家互聯網公司,最終選擇了一家互聯網公司,雖然實際上班地點有點遠(下了地鐵還得座公交,後來仍是選擇騎單車了),可是互聯網公司會給你快的成長速度,而且互聯網技術棧都比較新..相比於傳統企業會有更多的技術挑戰。而外包公司的話,可能環境不怎麼好,我記得本身當初仍是個小白的時候,去了外包,那裏的優勢就是會有不斷的活,新人進去的話收穫仍是挺多的,可是做爲已經有兩年經驗的我,外包很顯然不適合個人後期職業發展。缺點:技術更新迭代的太慢,沒有歸屬感,最後的選擇我我的的意見是選擇技術優先,畢竟之後軟件路還長,技術纔是王道
四:兩年java到底應該具有什麼樣的水平
兩年java的面試過程當中遇到了不少挑戰,也遇到了一些不談技術的公司,從上面的面試題能夠看出,目前對於java的要求愈來愈高,水漲船高,畢竟這個行業的人數愈來愈多,而保持本身的競爭力的惟一方法就是找對方向,不斷學習,注意這裏我提到的第一點是方向,而後纔是學習。給本身制定一個職業規劃,按照這個路線往前走,我其實還在想分佈式微服務這塊之後再深刻學習,但是按照市場要求,如今已經刻不容緩了,一些技術架構好比:springcloud、duboo都得保持學習,這樣纔能有競爭力!做爲一名兩年的javaSir,
你必須具有如下技能
1:閱讀源碼的能力,多用Intelj idea這個開發工具,而不是eclipse。它是直接支持反編譯class文件的,多讀jdk源碼,吸取優秀的源碼並加以複用
2:作到可以手寫常見的排序算法,好比快速排序和堆排序、冒泡排序、選擇排序、二分查找這些都是必須的
3:對java的框架有很深刻的認識,如今基本流行的ssm框架不少人都會,但是知道一些原理的人就很少了,得不斷研究這些框架自己,它們都是通過無數次錘鍊 出來的優秀框架
4:多用redismongodb,傳統的關係型數據庫已經沒法市場需求了,這些東西也是面試中的一部分,雖不是重點,但也是加分的選項
5:對於微服務和分佈式,這個是有必定難度的,我在面試人人車的時候,一面很順利,二面被技術總監給pass了,問題就是分佈式不是特別熟悉!要想進入好的互聯網公司,分佈式和微服務是很必須的
6:jvm的底層,這裏要推薦的書就是周志明的《深刻jvm虛擬機》這本書了,我總在閒暇時間讀它,因此jvm的問題仍是信手拈來的