
面試程序
最近去阿里的菜鳥國際做了一次面試交流,發現大公司對于面試者的知識結構考核非常嚴謹,可以作為我們日常作業學習的指導,雖然很多人說面試問到的東西在實際作業中很少用到,甚至有「面試造火箭,作業擰螺絲」的說法,
但從面試中,其實可以看得出來現在的公司對于面試者的知識體系要求,如果我們能在作業中就按著這樣的要求去不斷提升,那么在面試的時候必然也能游刃有余,
一般來說,阿里的面試會有兩輪的技術電面,分別交叉檢驗你的技識訓礎,后面還有兩輪的現場技術面試,主要檢驗你的專案經驗,但從知識體系的角度來看,阿里面試對于知識的考核可以分為三個層次:對于基礎知識的考核、對于專案經驗的考核、對于專案深度的考核,
一、基礎知識考核
在這個層次上,主要考核你對 Java 語言本身原理的理解以及各種框架的原理理解,對于 Java 開發崗位上來說,這些知識點包括但不限于:
- 集合 HashMap 的原理,與 Hashtable、ConcurrentHashMap 的區別?
- Java 執行緒池的核心屬性以及處理流程
- Java 并發包原理、Synchronized關鍵字、鎖
- 執行緒的生命周期
- JVM類加載機制
- JVM記憶體模型
- JVM分代以及垃圾回識訓制
- Spring Bean 容器生命周期
- Spring AOP 原理
- Dubbo 請求流程以及原理
- 資料庫 SQL 優化、資料庫索引、索引原理
- ……
看到這么多的知識點,我一下子就懵逼了,這么多得看到什么時候才看得完啊?但后面我想明白了,其實你不需要全部都懂,但需要了解大部分知識點,并且在這大部分知識點中,還需要有部分是了解得非常深入的,如果達到這個水平,基本上都能通過考核,
對于基礎知識的考核多出現在阿里的前兩輪電話面試上,對于這塊,你事前把常見的面試題目看一遍,多面試幾次基本上都沒有問題,

二、專案經驗的考核
當你成功通過基礎知識的考核之后,你會進入下一關的考驗:專案的理解程度,
面試官首先會讓你選擇一個你最拿手的專案,畫出架構圖,之后的一切問題都從這個架構圖觸發,當你畫出架構圖之后,你肯定需要解釋清楚每個模塊的作用,每個框架的原理以及與其他框架的區別,
例如我就用我做過的一個搜索專案作為經典專案,與面試官探討,
專案中用到了 Kafka 這個框架,那么面試官就會問 Kafka 和 RocketMQ 之間的區別是什么,它們兩個有什么不同?
專案中還用到了 Canal 這個阿里巴巴開源的框架,那么面試官自然會問這個東西是干嘛的,原理是怎樣的?
專案中還用到了 Zookeeper 作為協調者,那么 Zookeeper 在這個專案中的作用是什么,扮演了什么角色?
對于「專案理解程度」的考核會發生在技術面試的三四輪,在這個層次上,你必須要有一個拿得出手的專案,并且對其中的所有框架以及原理都了如指掌,否則你會被虐慘,
三、專案深度的考核
通過上一輪對于「專案理解程度」的考核后,基本上你對整個專案都會有一個全面的認識,應用層面上的問題基本上不會難倒你了,但在「專案思考深度」的考核上,就不僅僅只是考核應用層面上的問題了,
還是用我做過的一個搜索專案作為例子,其中 Canal 這個開源框架暫時是沒有實作集群這個功能的,那么面試官就問了:
你如何去改造這個專案,從而實作 Canal 的集群功能?
這個時候,你會發現你懵逼了,因為你從來沒有去思考過這個問題,你所有的作業內容都是在想如何使用開源框架,而沒有進一步思考這些開源框架好不好,有什么可以改進的地方,
所以,在這一個層次上考核的是你對開源框架的思考深度,這些框架到底好不好,好在哪里,不好在哪里,有什么可以改進的地方,
對于「專案思考深度」的考核同樣發生在技術面試的三四輪,在這個層次上,你不僅要對專案本身理解足夠深刻,還要跳出專案本身,去思考開源框架本身的問題,
四、總結
當我們回過頭來總結,你會發現這三個層次都是層層遞進的,而且逐步深入,雖然這是面試中總結出來的經驗,但是這卻是一個很好的學習指引,讀者可以自己自查,看看自己現在是處于哪個層次,這樣在作業中也可以不斷地向更高層次邁進,
對于我來說,我缺乏的是對于專案的思考深度,很多時候都是業界覺得好,那我就用了,但是作為一個高級開發,甚至是一個即將成為架構師的高級開發來說,你必須知道為什么要用這些框架?它有什么問題,我們能不能做得更好?只有這樣,我們才能有所成長,

阿里面試真題:
一面(主要是jvm,并發,鎖,資料結構等基礎)
- 自我介紹(說說自己的擅長及拿手的技術)
- 說說treemap和HashMap的區別?HashMap和ConcurrentHashMap的區別?
- HashMap底層如何實作(JDK1.8有所改動)?
- 說說Hash的一致演算法?
- 你知道的GC演算法和回收策略有哪些?GC的機制是什么?
- 垃圾回收器的基本原理?是否可以立即回收記憶體?怎么樣主動的通知JVM進行垃圾回收?
- 雙親委派模型機制執行緒池創建的幾個核心構造引數是什么?
- 樂觀鎖和悲觀鎖?可重入鎖和Synchronized?他們都是可重入鎖嗎?哪個效率更高?
- CountDownLaunch和Cylicbarrior的區別以及分別是在哪樣場景下使用的?
- Http和Https的區別以及Https加密的方式?
- 以后的職業規劃和想法
二面(主要是資料庫,協議 , Spring等 )
- 自我介紹,聊下自己認為做得很好的專案!
- InnoDB支持的四種事務隔離級別名稱是什么?之間的區別是什么? MySQL隔離級別是什么?
- 說說事務的特性?講講對慢查詢的分析?
- 你理解的BTree機制?
- 有哪些MySQL常用的優化方法?6. Http請求程序, DNS決議的程序?7.三次握手和四次握手的程序?
- B+樹索引和Hash索引之間的區別?
- Spring IOC如何管理Bean之間的依賴關系,怎么樣避免回圈依賴?
- SpringBean創建程序中的設計模式?11.說說AOP的實作原理?
- Tomcat的基本架構是什么?
三面(主要是快取,并發,分布式)
- 自己專案中的總結的并發經驗
- 說說MySQL的鎖并發?加鎖的機制是什么?
- 高并發場景下如何防止死鎖,保證資料的一致性?
- 集群和負載均衡的演算法與實作?
- 說說分庫與分表設計?
- 分庫分表帶來的分布式困境與對應之策有哪些?
- Redis和Setnx命令使如何實作分布式鎖的?
- 使用Redis怎么進行異步佇列?會有什么缺點?
- 快取擊穿的概念和解決方案?
- Redis的資料結構?執行緒模型? Redis的資料淘汰機制?
- Redis的資料一致性問題12. MQ底層原理的實作?
- 阻塞佇列不用Java提供的該怎么實作?
- 講講負載均衡的原理?
- 如何實作高并發環境下的削峰、限流?
百度面試真題:
百度一面
- 手寫ArrayList
- 手寫進制轉換演算法,求出一個數的二進制數1的個數
- JAVA基礎 equals和==
- 多執行緒方式、threadlocal,各種鎖,synchronized和lock
- 設計模式、spring類加載方式、實體保存在哪、aop ioc、反射機制
- 類加載器,雙親委派模型,熱部署
- jvm記憶體模型,記憶體結構、堆的分代演算法、堆的磁區、gc演算法、gc程序,
- tcp ip 七層模型 rest介面規范 get和post區別,長度,安全,
- tcp ip的arp協議,兩個同一網路的主機如何獲得對方的mac地址,
- 負載均衡、高并發、高可用的架構
- mysql的引擎區別
- redis快取,redis的集群部署,熱備份,主從備份,主從資料庫,hash映射找到知道指定節點,
- 了解云計算么,了解云容器docker么,容器和虛擬機的區別
百度二面
- 自我介紹 專案中負責哪些 做了哪些
- 專案中的資料庫備份,主從資料庫、集群
- 資料庫的索引原理,b+樹原理,trie樹引申,二叉查找樹的原理
- 海量資料中查找一個單詞,分布式計算map reduce ,或者用hsah映射篩選部分結果
- java的抽象類和介面區別、java的hashmap,java的記憶體模型,磁區,分代垃圾回收演算法,實體、常量放在哪里,
- int 4個位元組,double 8個位元組,
- 多執行緒中的wait和sleep區別,notify的作用
- 設計模式了解哪些,寫一個觀察者模式,實作兩個介面,一個是主題一個是觀察者,并寫出對應方法,
- 寫一個生產者消費者佇列的方法,分別寫兩個類代表生產者和消費者,并且用佇列模擬其生產消費,用while回圈和waitnotify可以實作,但我忘記在佇列上加synchronize關鍵字,于是讓我再寫一題,寫的是:輸入一個字串,輸入第一個只出現一次的字符,寫出來了,
- tcp ip的四次揮手 子網掩碼的作用, 子網掩碼(subnet mask)又叫 網路掩碼 、 地址掩碼 、子網路遮罩,它是一種用來指明一個IP地址 的哪些位標識的是 主機所在的子網,以及哪些位標識的是主機的位掩碼,子網掩碼不能單獨存在,它必須結合IP地址一起使用,子網掩碼只有一個作用,就是將某個IP地址劃分成 網路地址 和主機地址 兩部分,
- 了解linux么,說一下linux的內核鎖?沒接觸過,
- 有沒有用過sed 使用shell腳本寫一個將文本中的字符替換掉的腳本,大概說了一下用grep || 替換,沒再問linux的
百度三面
- 自我介紹
- 負責模塊,哪些模塊,專案一的架構,我說太久了忘了,說最近的專案,
- 資料庫連接池用的是什么,組態檔呢,資料庫驅動怎么下載的,持久層框架呢,
- 為什么要用資料庫連接池,有什么好處,
- java的記憶體模型,變數和實體存在哪,java堆疊的作用,java的堆存什么,方法區存什么,
- java的分代回收,
- 專案如何部署到云主機上,有什么速度提升,為什么有提升,答主要是設備性能和帶寬,
- tomcat的配置,堆得初始大小是多少,達不知道,
- 問遇到過什么難題,
- 問在遇到問題時候的辦法,
- 抗壓能力
- 優缺點
- 接受加班,
- 遇到作業問題,同事不配合怎么辦,
- 快速上手作業的辦法,
- 平時學習的方法,舉幾點,
- 職業規劃
最后
感謝各位程式員同仁閱讀,感謝支持,我會更加努力分享,喜歡的朋友可以關注下,祝大家面試通過拿到心儀offer,
面試題答案決議,直接點擊 這里,對,就是這里,回復暗號;CS 即可免費領取,含有各種面試題以及答案決議,Java進階架構知識點資源,包含但不限于(分布式架構、高并發、Jvm性能調優、Spring,MyBatis,Nginx原始碼分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等知識點決議)也有各大互聯網公司人才,可以交流討論共同進步,



更多筆記分享

最全最新面試檔案分享,先一步了解大型互聯網面試題及答案,對面試檔案總結感興趣可以直接點擊 這里,對,就是這里,回復暗號;CS 即可免費領取(整理不易)大型互聯網企業面試答案獲取詳情!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/98816.html
標籤:其他
上一篇:全堆疊專案-寵物樂園
