前言
每一個技術人的夢想大概就是能夠找一份大廠的 offer,我也是這樣的呢,之前我只是中游公司的小職員,但因為疫情的原因,我們公司在二月中旬破產了,頓時我失業了,又不能出去找工作,還有人說遠程辦公不好,但至少他們還有工作,而我在那一瞬間什麼都沒了,在家人的開導下,我打開雲盤都是曾經蒐集的面試和實戰技術文檔(PS:我也沒用看全啊,期間已經開始投遞簡歷了)功夫不負有心人,我接到了阿里的面試,第一次還是很羞澀(我是存爺們啊!!!只是單純的緊張),最後我也是成功入職了阿里!!!(小興奮~~~)
面試心得
不論是筆試還是面試都是有章可循的,但是,一定要不要想著如何去應付面試,糊弄面試官,這樣做終究是欺騙自己。這篇文章的目的也主要想讓大家知道自己應該從哪些方向去準備面試,有哪些可以提高的方向。
軟實力
軟實力主要就是指平時在語言溝通、邏輯思維、面試的積極性和主動性、簡歷的優化技巧等方面。通過軟實力來突出自己的優勢,與硬實力的結合,才是你自己真正的實力體現。
溝通和邏輯思維能力:對一個問題的表達方式,邏輯思維(像有些人的發言就讓人聽上去很有層次感,很舒服),溝通的層次感,善於短時間突出重點。
積極性和主動性:尤其是BAT,特別喜歡主動性和積極性的人才,主動性的人更加擅長於克服當前的困難,並把事情做好,在遇到挫折後,更容易調整好心態,且積極去推進項目。這一點,在面試的溝通過程中,有經驗的BAT面試官可以通過與你的交流細節,可以捕獲到部分你的性格優勢和劣勢。總之,主動性和樂觀性的人,更有利於今後的發展,這一點不僅僅適用於面試,更適用於今後的工作發展。
簡歷的準備:簡歷重點是突出自我介紹、擅長技能、項目經驗。自我介紹要做到一句話就能表述清楚自己的優勢,比如:學習能力(短時間熟練掌握技能)、個人履歷(BAT背景優勢)、積極努力(個人推動什麼項目等)。
擅長技能:專業技能的描述詞無非就那麼幾種:精通、熟練、熟悉、瞭解。精通感覺一般還是不要寫,除非你在某個技術點上真的有足夠的把握,真正能做到精通一門語言、一個分佈式框架這才是精通。熟悉、熟練居多、精通是典型的金字塔頂部。總之,簡歷不要過於突出精通項數,而是突出精通的領域。
項目經驗:突出自己的王牌項目,最有技術含量、挑戰和幫助最大一個項目講就足夠了,面試的過程中面試官也會重點讓你描述這個擅長的項目,提前模擬這個項目的講解順序和重點,而不是臨場講解。
硬實力
面試技術重點:
Java程序員面試常問的重點技術問題:數據結構與算法,JVM內存結構、垃圾回收器、回收算法、GC、併發編程相關(多線程、線程池等)、NIO/BIO、性能優化、設計模式、Spring框架、分佈式相關:Redis緩存、一致Hash算法、分佈式存儲、負載均衡等,微服務以及Docker容器等。
大廠高頻常問的Java面試題如下:
java基礎
- HashMap1.7和1.8的實現區別
- HashMap中插入、添加、刪除除元素的時間複雜度?
- ConcurrentHashMap的實現原理?
- newString(),一共創建了幾個對象?
- 序列化和反序列化的底層實現原理?
- hashCode和equals方法的區別和聯繫?
- 講講String、StringBuilder、StringBuffer?
- Object類中常見的方法,為什麼wait notify會放在Object裡邊?
- Arraylist與LinkedUstKU空間是多少?
- HashMap的默認空間、擴容因子等?
- 若hashcode方法永遠退回1或者一個常量會產生什麼結果?
- 淺拷貝和深拷貝的區別?
- 反射的作用與實現原理?
- Java提供的排序算法是怎麼實現的?
多線程
- 說說synchronized實現原理(對象監視器)?
- volatile實現原理(禁止指令重排、刷新內存)?
- ThreadLocal原理分析,ThreadLocal為什麼會出現OOM,出現的深層次原理?
- CAS無鎖的概念、什麼是樂觀鎖和悲觀鎖?
- AQS同步隊列是什麼?
- 什麼是ABA問題,出現ABA問題JDK是如何解決的?
- 常見的原子操作類?
- 偏向鎖、輕量級鎖、重量級鎖、自旋鎖的概念?
- 一個線程連著調用start兩次會出現什麼情況?
- 線程池的實現?
- 重要參數及原理?
- 說說四種線程池?
- 任務拒接策略有哪幾種?
- 線程狀態以及API怎麼操作會發生這種轉換?
這裡,我也是看的馬士兵老師的《多線程與高併發》就一個字“屌”。給你們看下省略水印,嘿嘿,可以分享給你哦~~~
JVM
- JVM運行時內存區域劃分?
- 常見的GC回收算法及其含義?
- 什麼是類加載器?
- 什麼是雙親委派模型機制?
- 一個類的生命週期、類是如何加載到JVM中的?
- 說說類加載的過程?
- 什麼是強引用、軟引用、裝引用、虛引用?
- Minor GC與Full GC分別在什麼時候發生?
- 什麼時候觸發Full GC?
- Java中的大対象如何進行存儲?
- 為什麼新生代內存需要有兩個Survivor區?
設計模式
- 單例模式
- 動態代理
- 工廠模式
- 責任鏈模式
MySQL
- MySQL常見的存儲引擎以及他們之間的區別?
- MySQL索引為什麼使用B+樹?
- MySQL覆蓋索引是什麼?
- MySQL索引失效的條件,索引在什麼時候不會起效果?
- MySQL如何進行優化的?
- 什麼是explain命令?
- MySQL遇到的死鎖問題、如何排查與解決?
- 常見的數據庫優化方案,在你的項目中數據庫如何進行優化的?
- 什麼是redo日誌,什麼是undo日誌?
分佈式數據庫
- 說說常見的幾種分佈式ID的設計方案?
- 分庫與分錶帶來的分佈式困境與應對之策(如何解決分佈式下的分庫分表,全局表?)
- 如何拆分服務、水平分割、垂直分割?
Redis
- Redis使用場景?
- Redis有哪些數據類型?
- 說說Redis持久化機制?
- Redis為什麼是單線程的?
- 什麼緩存雪崩、緩存穿透、緩存預熱、緩存更新、緩存降級?
- 說說Redis常見的回收策略?
- Hash—致性算法?
- Redis和數據庫數據一致性的問題?
- Redis中zSet跳躍表問題?
Nignx
- 請解釋什麼是C10K問題或者知道什麼是C10K問題嗎?
- 正向代理和反向代理?
- Nginx幾種常見的負載均衡策略?
- Nginx服務器上的Master和Worker進程分別是什麼?
Zookeeper
- 什麼是Zookeeper通知機制?
- Zookeeper集群管理(文件系統、通知機制)
- 講講Zookeeper分佈式鎖?
- 獲取分佈式鎖的流程
- Zookeeper數據複製?
- zookeeper是如何保證事務的順序一致性的?
- zookeeper是如何選取主leader的?
- zk節點宕機如何處理?
- zookeeper負載均衡和nginx負載均衡區別?
- 說說zookeeper watch機制?
消息隊列問題及集群分佈式
- 消息隊列使用的場景介紹和作用(應用耦合、異步消息,流量削鋒等)
- 如何解決消息隊列丟失消息和重複消費問題?
- 什麼是CAP、Base?
- 說說最終一致性理論?
- 什麼是RPC、如何實現RPC、RPC的實現原理?
- 什麼是Dubbo?
- Dubbo的基本原理、執行流程?
- 集群Session解決方案?
- 分佈式事務?
- 說說三種分佈式鎖的實現?
- 集群、負載均衡、分佈式、數據一致性的區別和聯繫?
網絡編程
- 三次搌手和四次揮手、為什麼揮手需要四次
- 什麼是TCP粘包/拆包
- TCP粘包/拆包的解決辦法
- 從遊覽器中輸入URL到頁面加載的發生了什麼?
- 什麼是長連接和短連接?
Spring
- 講講靜態代理模式的優點及其瓶頸?
- 對Java 接口代理模式的實現原理的理解?
- 如何使用 Java 反射實現動態代理?
- 談談對Cglib 類增強動態代理的實現?
- 什麼是 AOP?
- 講解OOP與AOP的簡單對比?
- 講解JDK 動態代理和 CGLIB 代理原理以及區別?
- 什麼是 IOC?
- Spring IOC 怎麼管理 Bean 之間的依賴關係,怎麼避免循環依賴?
- BeanFactory 和 FactoryBean 有什麼區別,BeanFactory 和 ApplicationContext 又有什麼不同?
- 談談Spring Bean 創建過程中的設計模式?
微服務
- 什麼是Spring Boot ?
- Spring Boot有哪些優點?
- Spring Boot中的監視器是什麼?
- 如何實現Spring Boot應用程序的安全性?
- 如何集成Spring Boot和ActiveMQ ?
- 如何監視所有Spring Boot微服務?
- 如何使用Spring Boot實現異常處理?
- 什麼是Spring Cloud ?
- 使用Spring Cloud有什麼優勢?
- 服務註冊和發現是什麼意思?Spring Cloud如何實現?
- 負載平衡的意義什麼?
- 什麼是Hvstrix ?它如何實現容錯?
- 講講Hvstrix斷路器?
最後,在你通過了硬實力和軟實力的考核後,剩下的就是緣分了,你的面試氣場與BAT面試官的匹配度,每一個面試官都希望找到與自己類似的求職人才,這也許就是聞味吧。
最後
小編分享備戰BAT等大廠的面試題,希望能幫到大家。有想獲取的朋友就可以關注我幫忙轉發一下文章,後臺私信【面試】即可免費獲取
閱讀更多 Java技術虎 的文章