本篇先以日曆形式回顧秋招之路,方便各位參考某廠的處理進度;然後是總結歸納春秋招Java面試題庫;最後做個總結還有展望,開始新的征程~
面試經歷
京東面試真題
面試經驗分享
1.面試經歷
2018年的冬季特別的冷,無疑是程序員的寒冬,我也是年底裁員大潮裁下來的一名,(整個業務線都裁了 難受中~)但臨近年底了失業回家也不太好所以有投了幾份簡歷,其中投京東的一份,京東Java崗。
崗位描述:1、參與京東金融保險核心業務系統底層架構設計及重構工作;2、持續優化高併發場景下系統性能;3、與保險公司接口對接及聯調;4、保險產品智能推薦系統開發;5、對接財務流程相關係統。
任職要求:1、計算機相關專業本科以上學歷,邏輯思維能力強,有很強的責任心和主動性;2、3年以上J2EE開發經驗,有互聯網開發經驗,JAVA基礎紮實,熟練運用設計模式;3、熟練掌握Spring、Struts2、Ibatis等常用框架,瞭解機制;4、熟悉分佈式開發,熟悉常用SOA框架、多線程、網絡編程等;5、熟悉常用數據庫及優化,熟悉常用緩存、NoSql技術;6、熟悉Zookeeper、MQ等組件;7、有高併發、大數據量系統開發及優化經驗者優先;8、有互聯網金融尤其是保險業務開發經驗者優先。2.京東面試真題(答案見文末)
一面(主要是基礎面)
自我介紹,主要問了做了什麼和擅長什麼
@Autowired的實現原理
Bean的默認作用範圍是什麼?其他的作用範圍?
索引是什麼概念有什麼作用?
MySQL裡主要有哪些索引結構?哈希索引和B+樹索引比較?
說說Java線程池的原理?線程池有哪些?線程池工廠有哪些線程池類型,及其線程池參數是什麼?
hashmap原理,處理哈希衝突用的哪種方法?
BIO、NIO、AIO的區別和聯繫?
jvm內存模型jmm 知道的全講講
講講Java GC機制?
Java怎麼進行垃圾回收的?什麼對象會進老年代?
垃圾回收算法有哪些?為什麼新生代使用複製算法?
HashMap的時間複雜度?HashMap中Hash衝突是怎麼解決的?Java8中的HashMap有什麼變化?
紅黑樹需要比較大小才能進行插入,是依據什麼進行比較的?其他Hash衝突解決方式?
hash和B+樹的區別?分別應用於什麼場景?哪個比較好?
二面(數據庫問的比較多)
自我介紹
為什麼MyISAM查詢性能好?
說說事務特性(ACID)?
mysql數據庫默認存儲引擎,有什麼優點
MySQL的事務隔離級別,分別解決什麼問題。
SQL慢查詢的常見優化步驟是什麼?
說下樂觀鎖,悲觀鎖(select for update),並寫出sql實現?
講講TCP協議的三次握手和四次揮手過程?
用到過哪些rpc框架?
Java web過濾器的生命週期?
三面(綜合面主要分佈式及緩存)
自我介紹,講下項目!
加鎖有什麼機制?
數據庫水平切分,垂直切分的設計思路和切分順序
Redis如何解決key衝突?
如何保證數據庫與redis緩存一致的
項目中消息隊列怎麼用的?使用哪些具體業務場景?
JVM相關的分析工具有使用過哪些?具體的性能調優步驟嗎?
MySQL的慢sql優化一般如何來做?除此外還有什麼方法優化?
線上的服務器監控指標,你認為哪些指標是最需要關注的?為什麼?
soa和微服務的區別?
單機系統演變為分佈式系統,會涉及到哪些技術的調整?請從前面負載到後端詳細描述。
設計一個秒殺系統?
面試真題的答案我已經整理再來一起,由於文章篇幅太長,需要的朋友可以加QQ群:935692859 進群免費領取資料!
3.面試經驗總結以及學習路線分享:
面試經驗總結:
面試儘量提前到,能早點面試,面試官也更願意給你通過(就像中國好聲音一樣,一開始都是瘋狂轉身)。
面試時調動你的幽默細胞,儘量把面試氣氛調得愉快一點,這樣面試官能更深的記住你。
說自己優點的時候一定輔以證據,不然面試官只會當作耳邊風
不會的問題不要強答,小心有坑,可以這樣說:“不好意思這個問題我不會,但是如果讓我來設計我會.......”
面試其實是一個雙向選擇,面試官在評估你的表現,同時由於面試官也代表公司,他的素質及提的問題也是你應該評估的方面,所以不要緊張。
使用幕布,在每次面試前將自己總結的知識過一遍。我幕布上寫了幾萬字的筆記,每次面試都拿出來看一遍,所以面試問到的基礎我基本都能應答入流。
學習路線:
大部分職業都是需要有成長體系,才能讓人有奮發向上的追求。架構師就是程序員這個群體成長道路上往往會出現的一個重要節點。每個好架構師都是一位出色的程序員。然而好的程序員進階為架構師,並不容易。
對於有一定後臺研發經驗(尤其是5年以上經驗)的程序員們來說,成為架構師的渴望更加強烈,因此會花更多時間學習,提升架構技能,但常常由於客觀條件限制,面臨著不少難點:接觸不到一線實戰架構技術,尤其是有一定的技術深度和難度架構技術。不瞭解核心技術點所處的具體背景是什麼?同時,又迫切需要掌握:業界目前主流乾貨技術 + 前沿技術,互聯網核心技術硬技能 + 核心軟技能,掌握架構技術的本質,知其然更知其所以然,架構築基篇,深入內核,直擊故障,拒絕蒙圈。
所以你需要一個明確的學習路線----這是一個典型的程序員的成長過程:
使用Java---->深入理解Java積累經驗------>獨立設計分析能力------>獨當一面的多面手!
因此,你必須學習:
一、開源框架解析(各
程序員每天都和代碼打交道。經過數年的基礎教育和職業培訓,大部分程序員都會「寫」代碼,或者至少會抄代碼和改代碼。但是,會讀代碼的並不在多數,會讀代碼又真正讀懂一些大項目的源碼的,少之又少。這也造成了很多錯誤看源碼的方式。
那要如何正確的分析源碼呢? 我們的目標應該放在最常用的框架上面:
二、架構師築基
從架構設計,到應用層調優,再深入瞭解底層原理,紮實的Java基本功才能讓自己變為掃地神僧:內存模型,併發模式,線程模型,鎖細節等等
三、高性能架構
我們不僅僅對項目要運籌帷幄,還要能解決一切性能問題。只有深入學習JVM底層原理,Mysql底層優化以及Tomcat調優,才能達到知其然,知其所以然的效果。除了性能優化之外,也能提供通用的常見思路以及方案選型的考慮點,幫助大家培養在方案選型時的意識、思維以及做各種權衡的能力。
四、微服務架構
關於微服務架構的取捨
在合適的項目,合適的團隊,採用微服務架構收益會大於成本。微服務架構有很多吸引人的地方,但在擁抱微服務之前,也需要認清它所帶來的挑戰。需要避免為了“微服務”而“微服務”。微服務架構引入策略 – 對傳統企業而言,開始時可以考慮引入部分合適的微服務架構原則對已有系統進行改造或新建微服務應用,逐步探索及積累微服務架構經驗,而非全盤實施微服務架構。
五、團隊協作
開發工具工程化
通過一小段描述信息來管理項目的構建,報告和文檔的軟件項目管理工具。程序員的戰鬥,往往不是一個人的戰鬥,我們如何在一個平臺下高效的去重,進行代碼review,對功能進行調整,debug,做到在統一的規劃下步步為營,混亂的堆代碼的過程中找到自己的記錄。這一切都依賴於有效的工具。
六、B2C項目實戰
項目實戰
要想立足於互聯網公司,且能在互聯網浪潮中不被淹沒,對於項目的開發實戰演練是不必可少的技能,也是對自身能力的一個衡量,有多少的量對等於獲得多少的回報。看似簡單的一個項目需求圖譜,其中的底層原理,實現原理又能知道多少?你搭建一個完整的B2C項目平臺到底需要多少知識?這一切都是需要我們考量的。
看完我分享的這些學習路線你是否會覺得自己的技術有待加強,思維不應該只停留在表面呢。
當然我這裡也為想提升自己技術的同學準備了一份架構進階視頻資料和上面的高清思維導圖。
資料獲取方式:私信回覆【學習或者JVM】就可以啦,謝謝大家,歡迎大家關注轉發,收藏。