感覺面試還是主要圍繞簡歷來問的,所以不熟悉的東西最好不要隨便寫上去。項目和基礎都很重要,整體的基礎知識的框架可以參考GitHub 上 CYC2018的博客,分類很全,但是深入的學習還是要自己去看書,寫demo。項目中最好有難點,能夠體現自己解決問題的過程和思路。算法方面劍指offer + LeetCode 200左右吧。投了10+公司,進行面試大概就這幾家,其他沒結果或者筆試被刷了。
01 騰 訊
一面:
-
講一講異常, throwable, exception, error
-
try- catch
-
手寫單例模式——很生疏,GG
-
volatile ,作用,底層, lock 前綴的指令, 多CPU的嗅探機制,多處理器下的緩存一致性協議
-
synchronized
-
JVM 內存划分, 堆內存分代
-
redis, 源碼,
-
spring bean的實例化過程。——不熟悉的地方不要寫上去。
-
AOP
-
使用redis來實現單點登錄,那么當單個redis節點內存不夠的時候,怎么辦?集群化,redis-Cluster
-
比較偏底層
02 華 為
一面:
-
自我介紹
-
項目中的可用性,性能,擴展性 如何提升
-
nginx是如何實現反向代理的,哪一層的方向代理?應用層
-
如何向外提供HTTPS協議的服務, 在內網使用http協議, 通過nginx配置來進行實現
-
設計一個網絡的時候,需要考慮的因素
-
虛擬網絡
03 字 節 跳 動
-
自我介紹
-
單點登錄
-
JVM內存划分, 堆內存為什么要進行分代回收, 生命周期不同
-
redis,主從,哨兵,集群,分布式鎖。
-
redis的對象類型, 每種對象類型對應的底層的數據結構,參考redis設計與實現。
-
string, list, hash, set, sortedset.
-
每種對象都至少有2中數據結構, SDS, linkedlist, ziplist, intset, ziplist, skiplist
-
ISN, TCP協議為什么要隨機初始化一個序列號——安全性, 防止和上一次會話滯留的報文沖突
04 手 撕 算 法
-
把九億三千零五萬五千三百 轉化為 對應的數字,
-
給了一個長度為n的 值的范圍為0 到 n-1的數組,然后判斷是否有重復的元素出現的問題。
-
leetcode 42 雨水收集問題
05 拼 多 多
一面:
-
自我介紹,redis,分布式鎖, redlock算法,zookeeper分布式鎖,分布式鎖的問題
-
手寫一個隨機選擇算法的變種
二面:
-
說明一下缺頁中斷, 虛擬內存
-
JVM中的內存區域划分,堆的分代,為什么分代, 垃圾回收算法,垃圾回收器
-
Linux進程間的通信方式, 管道,有名管道,socket,共享內存,消息隊列
-
如何實現進程間特定場景下的高效通信, 問了存儲相關的問題。
-
MySQL索引類型, 底層的數據結構
-
手寫一個雙鏈表的插入和刪除,查找方法
HR:
-
為什么換專業
-
有沒有其他公司的offer,
-
職業規划
-
你認為自己轉專業和科班出身相比差距在哪里,我們為什么要錄用你 555
-
學習的過程, 如何去學習
06 招 商 銀 行
電話簡歷面:
-
自我介紹
-
事務的特性 ACID , 數據庫的死鎖發生的情景
-
死鎖的四個必要特性, 非共享, 持有並等待, 非搶占, 循環等待
-
死鎖避免 死鎖預防
-
線程的狀態 , 新建,就緒,running, wait, blocked, terminated
-
sleep 和 wait 的區別, 類的不同,是否會釋放持有的鎖,monitor
-
JDK 可重入鎖, 讀寫鎖 , 底層 AQS,抽象隊列同步器的機制
-
悲觀鎖和樂觀鎖, 概念上,JDK 中的類, CAS的缺點, 空轉,ABA問題。使用pause指令, AtomicStampedReference
-
講一講Servlet, web.xml 配置路徑到servlet的映射, init, service, destroy
-
可以看一看Tomcat容器的過程 ,Connector和 Context容器兩大部分。完成從socket到 request和Response對象的構造
-
SpringMVC的 dispatcher-servlet的請求解析過程
-
redis介紹, 系統中的角色,作為緩存, 分布式session服務器
-
redis的 性能,可用性,主從復制+哨兵, redis緩存訪問有網絡上的消耗。
-
redis事務, 分布式事務, 2PC, 本地消息表等, 3PC
07 阿 里 巴 巴
一面:
-
自我介紹, 項目
-
收獲最大的一個項目, 着重介紹, 項目的演進過程, 從提高系統可用性的來進行演進,例如redis的可用性,
-
分布式鎖(項目), redlock,持久化機制,主從復制過程, redis知道的都說出來
-
redis解決分布式Session問題, 單點登錄, Session一致性問題,描述,如何實現
-
IOC 的實例化過程,原理,
-
AOP, JDK代理, Proxy, InvocationHandler
-
一個循環鏈表進行是否為空判斷
-
樹的遍歷, 層序,先、中、后的遞歸非遞歸實現
-
操作系統 P/V Semaphore類,
-
CAS, AQS 實現
-
看哪些書, 論壇,如何學習Java
-
智力題 喝汽水問題, 2個空瓶換一瓶汽水,1元1瓶,可以買多少瓶汽水 問題,(剛好看過,通過借一瓶來最后再多喝一瓶)
二面:
-
自我介紹
-
在校,學習情況,參與項目(介紹一下業務方面,架構方面的過程)
-
hosts文件
-
樂觀鎖, 悲觀鎖, 舉例, 可以順便說一下, CAS,volatile, synchronized
-
事務,分布式事務, 如何實現分布式事務, 兩階段提交,(過程)
-
JVM堆划分,方法區,
-
執行了 system.gc()觸發的GC機制,FGC, 如何進行回收的, 分代回收
-
系統周期性卡頓,如何定位問題,結合GC日志, YGC,FGC, 調整分代的大小, 減小FGC時間
-
產生FGC的原因
三面:
-
自我介紹,學習過程,項目中的難點,如何解決,
-
如何去提升系統的可用性,性能,擴展性,伸縮性,等等, LVS,反向代理,集群,異步,緩存等等
-
開放性的系統設計,一個車票查詢系統,對最短時間,最短開銷進行求解,類似於12306的火車票購票系統,。
-
億萬流量網站架構和新技術, 這本書可以參考一下
四面:
-
自我介紹
-
學習過程, 難點——
-
synchronized關鍵字作用與靜態方法和普通方法的區別,通過不同的對象的監視器來進行並發控制,monitorenter, monitorexit
-
服務器CPU使用率很高,如何排查, top 定位進程, 如果是Java,通過jstack進行線程快照分析,jmap,jhat 等等,
-
智力題
-
紅黑樹的優缺點
-
AOP 動態代理
-
HR面:
-
自我介紹 學習過程
-
為什么選擇轉專業
-
項目中遇到的難點,
-
對部門的理解
-
個人的職業發展,城市的選擇,職業方向,有沒有其他公司的offer
下面是自己的一點自學和准備面試的過程,希望可以對其他人轉行的人有幫助。
大致就是下面這幾個方面要進行學習:
-
計算機基礎:計網,OS,算法和數據結構必須熟悉;組成原理,編譯原理等等看了更好
-
語言基礎:Java的一些語言特性,多線程,JVM
-
數據庫:基礎概念,SQL,數據庫的設計等
-
web基礎:Servlet,JSP, HTTP協議, Cookie, Session等進行一下了解,可以自己用servlet寫個demo
-
web框架:SpringMVC, Spring, Mybatis, 在項目實踐中學習,先會用,然后深入。SpringCloud, SpringBoot等也可以進行學習
-
中間件:Redis, 消息隊列這些也可以了解一下
-
開發工具:Maven ,Git等等
-
系統設計:如何提升系統並發,保證可用性,伸縮性,擴展性,安全性這幾個方面的考慮。
自己在學習的大致就是上述的過程,也不是很有計划性,基本都是邊學習邊修改自己的計划。
面試准備和閱讀書籍:
大體的建議還是平時多coding,多看書,多思考,多總結,不要在面試前依賴面經總結,或者背面試問題這種途徑,因為需要做到的是真正對某個問題理解了,知道解決方案,而不只是背過了答案。面經總結應該看成一種對自己進行查漏補缺的測驗,而不是背誦的題庫,功夫積累還是在平時。
看書的一點小建議:
如果在某個階段看書看不進去的時候,可能是自己其他方面的積累還不夠,也可能是要自己靜下心去深入分析,判斷是哪種就需要自己去感覺了。例如我看完《Head First Java》直接開始看《Java編程思想》,就感到十分痛苦,大部分都不懂,不知所雲。
但是在使用Java進行一定程度的編碼之后,對Java多線程有一定了解之后,再開始看《Java編程思想》的時候,就比之前好多了。但是在看《Java並發編程的藝術》的時候,看不懂,就需要啃着硬骨頭,靜心看下去。最重要的感覺就是不斷地實踐,看書,看博客,總結,不斷反復。
轉載:https://mp.weixin.qq.com/s/MIgdbabIJrX64h0IWPEIHg
