您好,登錄后才能下訂單哦!
本人兩年開發經驗、18年年底開始跑路找工作,在互聯網寒冬下成功拿到阿里巴巴、今日頭條、滴滴等公司offer,崗位是Java后端開發,最終選擇去了阿里巴巴。
面試了很多家公司,感覺大部分公司考察的點都差不多,所以將自己的心得記下來,希望能給正在找或者準備找工作的朋友提供一點幫助。另外,目前在阿里也做面試官的工作,身份從求職者變為面試官,看問題的很多角度也不一樣,所以下文中既有求職者的視角,也有面試官的視角。
先說下面試流程,一般大公司都有3-4輪技術面,1輪的HR面。就阿里而言,我共經歷了4輪技術面,前兩輪主要是問基礎和項目實現,第3輪是交叉面,兩個面試官,主要是問項目實現和拓展。第4輪是部門老大面,主要就問一些架構、技術和業務的理解、個人發展比較抽象的東西了。
HR面主要就是跟你聊聊天,看看你的個人穩定性、價值觀、主動性之類的,一般HR是不會掛人的,但很多人在HR面后掛了,原因其實不是你在HR面的表現不好(少數情況除外),而是你之前幾面的表現一般,比60分要高一點(所以沒在前面的面試直接掛了你),但是又沒達到80分,這個時候公司基于hc、人才配比、與其他候選人的對比等多個維度考慮,最終決定是否給你offer。
另外要特別說下的是,今日頭條對算法的考察會比較多,我面了4輪技術,每一輪都會問1到2個算法題,大概是leetcode上easy和medium難度。所以想去頭條的同學最好先去leetcode上刷刷題。
簡歷一到兩頁為最佳,將項目經歷寫2-3個左右就差不多了,一定要寫最有亮點的項目
工作經歷的起始時間要寫清楚,另外大公司都有背調,不要合并或省略一些比較短的工作經歷,影響的可能不只是這次面試,而是之后可能都無法進這家公司
博客沒什么好文章,github沒好項目就不要寫在簡歷中了
對于面試官的問題,想清楚再回答,如果覺得需要的時間可能比較長,可以跟面試官說我思考下、我整理下思路之類的
遇到不會的問題直接說不會,不要不懂裝懂
遇到比較確定的問題,要有自信一點,有時候面試官可能會故意用懷疑的語氣來考察你
面試的過程中注意語速和吐字,本人在做面試官后,發現很多人說話語速很快,或吐字不清,導致原本會的問題也會讓面試官覺得你沒答到點上(尤其是電話面)
面試過程中可以自信但不要與面試官爭執
面試完后不要直接問面試結果
面試保持自信而不自大,曾經問一位候選人說對hashmap是了如指掌,結果問到hashmap擴容時需不需要重新計算hash就懵逼了。對于很多人來說,面試官總有辦法把你問倒的。
每次面試后都總結有哪些答的不好的地方,有哪些知識點的盲區,解決掉。
被問到為什么想跳槽的時候,因該從自身發展等角度出發,而不是吐槽前公司。
另外,在求職的過程中也碰到過少數沒有素質的面試官,比如一上來就一副很不屑的語氣,話沒說兩句開始diss你的項目,給人的體驗很不好。所以也請各位面試官或將來要做面試官的同學,能在面試的過程中保持基本的禮貌和尊重,就像在阿里常說的:你面試別人的時候,別人也在面試著你。
最重要的一點,不要因為幾次的面試失敗就開始懷疑自己,永遠記住,面試的結果=實力+運氣。有時候你擅長的東西可能面試官根本不會,所以他也不可能花很多時間去問他不懂的東西;有時候可能他問你的你都會,但是可能因為對方提問方式、語氣等原因,答的就是不順暢。
接下來說技術相關的考察。
總的來說,技術相關的考察主要分為兩大塊,一是基礎,二是經驗。
基礎包括java基礎、數據庫、中間件等,來自于日常的積累和面試前的準備。
經驗包括以往做過的項目、解決的問題、以及一些場景題(比如你的項目如果流量大了十倍如何保證可用)。
本文主要說基礎,下篇文章將說經驗。
以下都是我認為面試中經常會被考察到的知識點的整理,不夠完整,但大部分都是常見面試題。
集合分為兩大塊:java.util包下的非線程安全集合和java.util.concurrent下的線程安全集合。
ArrayList與LinkedList的實現和區別
HashMap:了解其數據結構、hash沖突如何解決(鏈表和紅黑樹)、擴容時機、擴容時避免rehash的優化
LinkedHashMap:了解基本原理、哪兩種有序、如何用它實現LRU
TreeMap:了解數據結構、了解其key對象為什么必須要實現Compare接口、如何用它實現一致性哈希
Set基本上都是由對應的map實現,簡單看看就好
hashmap如何解決hash沖突,為什么hashmap中的鏈表需要轉成紅黑樹?
hashmap什么時候會觸發擴容?
jdk1.8之前并發操作hashmap時為什么會有死循環的問題?
hashmap擴容時每個entry需要再計算一次hash嗎?
hashmap的數組長度為什么要保證是2的冪?
如何用LinkedHashMap實現LRU?
如何用TreeMap實現一致性hash?
了解其實現原理
了解寫時復制機制、了解其適用場景、思考為什么沒有ConcurrentArrayList
了解實現原理、擴容時做的優化、與HashTable對比。
了解LinkedBlockingQueue、ArrayBlockingQueue、DelayQueue、SynchronousQueue
ConcurrentHashMap是如何在保證并發安全的同時提高性能?
ConcurrentHashMap是如何讓多線程同時參與擴容?
LinkedBlockingQueue、DelayQueue是如何實現的?
CopyOnWriteArrayList是如何保證線程安全的?
了解偏向鎖、輕量級鎖、重量級鎖的概念以及升級機制、以及和ReentrantLock的區別
了解AtomicInteger實現原理、CAS適用場景、如何實現樂觀鎖
了解AQS內部實現、及依靠AQS的同步類比如ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier等的實現
了解ThreadLocal使用場景和內部實現
了解線程池的工作原理以及幾個重要參數的設置
synchronized與ReentrantLock的區別?
樂觀鎖和悲觀鎖的區別?
如何實現一個樂觀鎖?
AQS是如何喚醒下一個線程的?
ReentrantLock如何實現公平和非公平鎖是如何實現?
CountDownLatch和CyclicBarrier的區別?各自適用于什么場景?
適用ThreadLocal時要注意什么?比如說內存泄漏?
說一說往線程池里提交一個任務會發生什么?
線程池的幾個參數如何設置?
線程池的非核心線程什么時候會被釋放?
如何排查死鎖?
推薦文章:
死磕Synchronized底層實現--概論(比較深入)
了解Java中的軟引用、弱引用、虛引用的適用場景以及釋放機制
軟引用什么時候會被釋放
弱引用什么時候會被釋放
推薦文章:
Java引用類型原理剖析(比較深入)
了解雙親委派機制
雙親委派機制的作用?
Tomcat的classloader結構
如何自己實現一個classloader打破雙親委派
了解BIO和NIO的區別、了解多路復用機制
同步阻塞、同步非阻塞、異步的區別?
select、poll、eopll的區別?
java NIO與BIO的區別?
reactor線程模型是什么?
垃圾回收基本原理、幾種常見的垃圾回收器的特性、重點了解CMS(或G1)以及一些重要的參數
能說清jvm的內存劃分
CMS GC回收分為哪幾個階段?分別做了什么事情?
CMS有哪些重要參數?
Concurrent Model Failure和ParNew promotion failed什么情況下會發生?
CMS的優缺點?
有做過哪些GC調優?
為什么要劃分成年輕代和老年代?
年輕代為什么被劃分成eden、survivor區域?
年輕代為什么采用的是復制算法?
老年代為什么采用的是標記清除、標記整理算法
什么情況下使用堆外內存?要注意些什么?
堆外內存如何被回收?
jvm內存區域劃分是怎樣的?
bean的生命周期、循環依賴問題、spring cloud(如項目中有用過)、AOP的實現、spring事務傳播
java動態代理和cglib動態代理的區別(經常結合spring一起問所以就放這里了)
spring中bean的生命周期是怎樣的?
屬性注入和構造器注入哪種會有循環依賴的問題?
了解一個常用RPC框架如Dubbo的實現:服務發現、路由、異步調用、限流降級、失敗重試
Dubbo如何做負載均衡?
Dubbo如何做限流降級?
Dubbo如何優雅的下線服務?
Dubbo如何實現異步調用的?
了解一個常用消息中間件如RocketMq的實現:如何保證高可用和高吞吐、消息順序、重復消費、事務消息、延遲消息、死信隊列
RocketMq如何保證高可用的?
RocketMq如何保證高吞吐的?
RocketMq的消息是有序的嗎?
RocketMq的消息局部順序是如何保證的?
RocketMq事務消息的實現機制?
RocketMq會有重復消費的問題嗎?如何解決?
RocketMq支持什么級別的延遲消息?如何實現的?
RocketMq是推模型還是拉模型?
Consumer的負載均衡是怎么樣的?
redis工作模型、redis持久化、redis過期淘汰機制、redis分布式集群的常見形式、分布式鎖、緩存擊穿、緩存雪崩、緩存一致性問題
推薦書籍:《Redis?設計與實現》
redis性能為什么高?
單線程的redis如何利用多核cpu機器?
redis的緩存淘汰策略?
redis如何持久化數據?
redis有哪幾種數據結構?
redis集群有哪幾種形式?
有海量key和value都比較小的數據,在redis中如何存儲才更省內存?
如何保證redis和DB中的數據一致性?
如何解決緩存穿透和緩存雪崩?
如何用redis實現分布式鎖?
事務隔離級別、鎖、索引的數據結構、聚簇索引和非聚簇索引、最左匹配原則、查詢優化(explain等命令)
Mysql(innondb 下同) 有哪幾種事務隔離級別?
不同事務隔離級別分別會加哪些鎖?
mysql的行鎖、表鎖、間隙鎖、意向鎖分別是做什么的?
說說什么是最左匹配?
如何優化慢查詢?
mysql索引為什么用的是b+ tree而不是b tree、紅黑樹
分庫分表如何選擇分表鍵
分庫分表的情況下,查詢時一般是如何做排序的?
zk大致原理(可以了解下原理相近的Raft算法)、zk實現分布式鎖、zk做集群master選舉
如何用zk實現分布式鎖,與redis分布式鎖有和優缺點
HBase適用的場景、架構、merge和split、查寫數據的流程。
Storm與Map Reduce、Spark、Flink的比較。Storm高可用、消息ack機制
算法的話不是所有公司都會問,但最好還是準備下,主要是靠刷題,在leetcode上刷個100-200道easy和medium的題,然后對應公司的面經多看看,問題應該不大。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。