2. 考察點java
1. Coding能力:要求規範,簡潔,高效,無bug;較少提示下寫出代碼,可以自行優化,自行設計case進行測試;
2. 擅長技術:擅長某個技術領域,有必定的廣度和深度;加分項:Jvm調優,性能優化、SOA、SaaS,微服務,服務治理等;
3. 系統分析設計能力: 看過往作過哪些複雜系統,設計上有哪些考慮,在可用性、可擴展性、性能、易用性、安全等方面有什麼考慮,熟悉DDD的加分;
4. 業務領域的理解的考察,分析、建模能力(判斷候選人是否理解一個領域,若是業務理解不錯,再考察候選人是否有該領域的方法論總結和思考)
5. 工程能力,質量控制(經過哪些手段來控制項目的質量,結果如何);
6. 學習能力&自驅力:在什麼領域作過哪些學習,具體怎麼學的,用學到的知識解決了什麼問題,邏輯思惟;
7. 職業意向,責任心,拿結果;linux
考察點 nginx
考察點 #1, #2, #3
考察點 #1, #3,#4
考察點 #4, #5
:對齊TC標準
git
3. 題目
web
編號redis
考察點算法
適用級別spring
推薦sql
1數據庫
3.1. 基礎知識-java基礎
淺克隆和深克隆?深克隆的方法
==和equals的區別
自動裝箱拆箱機制
簡述一下java的異常體系,什麼是受檢異常,什麼是運行時異常;封裝一個API的時候什麼狀況下拋出異常
string常量池的考覈,可變類和不可變類
是否發現過jdk的bug或者踩過jdk的一些坑
Hash衝突,有哪幾種常見的解決方法? HashMap在高併發狀況下不當使用,可能會致使什麼樣極端狀況
HashMap/ConcurrentHashMap的數據結構實現,擴容機制
hashtable和hashmap之間對比,爲何hashmap不是線程安全的。
hash,hash碰撞攻擊,hash表的遍歷的時間複雜度,如何將其下降到o(n)的時間複雜度。以及如何實現一個LRU的機制的cache(linkedHashMap的變體),0/1切換和漸進式rehash。concurrenthashmap
ArrayList和LinkedList的區別,數據結構實現,區別
如何拷貝數組,怎樣效率最高?【clone,sysytem.arraycopy】爲何
http協議,在設計http接口得時候須要考慮什麼問題?冪等,超時等
常見的通訊協議
HTTP 各個 method 的語義
HTTP/2
HTTPS 的實現等
編譯裝載連接初始化的過程
多態的實現
對OOP的理解
動態類型語言和靜態類型語言的區別,強類型語言與弱類型語言
有沒有使用過其餘範式的編程語言,如函數式的語言,動態語言等。他們和Java比有何優劣
常見的代碼壞味道有哪些。重構的手法
git 的使用。git 的簡單工做原理
靜態代理和動態代理
java8的新特性
maven中如何規避,解決依賴衝突
2
3.2. 算法
字符串類似度匹配(動態規劃)
打麻將遊戲,打一張牌以後服務端算法處理(指針追趕)。
鏈表翻轉。
找數遊戲。從一個數組中找出知足符合條件的元素:它大於或等於前面全部元素,小於或等於後面全部元素
一摞烙餅的排序
買書問題
求二進制數中1的個數
尋找發帖「水王」
尋找最大的K個數
最大公約數問題
找符合條件的整數
尋找數組中的最大值和最小值
快速尋找知足條件的兩個數
子數組的最大乘積
求數組的子數組之和的最大值
子數組之和的最大值(二維)
求數組中最長遞增子序列
數組循環移位
數組分割
區間重合判斷
字符串移位包含的問題
電話號碼對應英語單詞問題
計算字符串的類似度
從無頭單鏈表中刪除節點
最短摘要的生成
編程判斷兩個鏈表是否相交
隊列中取最大值操做問題
求二叉樹中節點的最大距離
分層遍歷二叉樹
偶數個數只有兩個不是成對出現的,快速定位到這兩個不成對的數
3
3.3. web知識
響應碼 4XX與5XX的含義(客戶端異常與服務器異常), 400,401,403,404,405的含義(請求參數異常, 未受權, 禁止訪問, 頁面找不到, 請求方法不支持)
服務器跳轉與重定向的區別(服務器跳轉是指服務器內部跳轉, request是同一個, 重定向讓瀏覽器跳轉到新地址訪問, request不是同一個了, 重定向http code 是30一、302)
瀏覽器怎麼知道當前登錄者是誰? (cookie) cookie存在什麼位置?(http header)
restful是什麼? (一套基於資源定位的設計風格, 關鍵是答出資源兩字),
設計一個restful風格的 url (全是名詞, 若是有複數以及版本號 加分)
POST方法與PUT方法的區別 (冪等, POST只能新建, PUT能夠新建/修改)
HTTPS和HTTP的對比,如何加密和認證,創建https通訊過程?
4
3.4. 設計模式
針對某個熟悉的開源框架裏面的設計模式都有哪些?jdk 裏面的設計模式如Java io的裝飾者模式。
畫出一個類圖:從字典中選出符合如下三個條件的字符串,1)包含a或者b或者cd 2)以end結尾3)長度大於7
5
3.5. 併發
舉例Java線程安全的實現方法,原理、區別
線程同步的方法
線程池原理,使用,調優
ThreadLocal 做用和實現機制
Lock與synchronized 的區別,鎖的粒度:類級別和對象級別
讀寫鎖,CountDownLatch等的使用
ConcurrentHashMap get是否須要加鎖,是如何保證高併發狀況下的性能的?(分段鎖,hashEntry的final字段結構,segment中volidate類型的count字段的設計)
分佈式鎖的實現方式(redis,zk)
代碼實現一個讀取緩存,緩存失效透傳後端的功能。考擦點:如何避免高併發同一key多個同時透傳後端,緩存擊穿的問題 putifabsent等CAS操做是否會用
java 之DelayQueue,synchronizedQueue原理
普通Java中的ReentrantLock ,countdownLatch實現原理(如何保證高性能),和synchronized 之間的區別。何時選擇去用它
volitale的做用,爲何要指令重排序
AQS的理解,如何運用
還了解concurrent包下的哪些類,使用場景是什麼
死鎖如何產生,如何避免
如何理解Java內存模型,及內存可見性
6
3.6. jvm
java的類加載器體系結構和雙親委託機制
Jvm堆內存區,有兩個S區有什麼做用,談下java對象在JVM的生命週期
有遇到過OOM麼,什麼狀況,怎麼發現的,怎麼查緣由的
線上JVM參數都怎麼設置的,爲何要這麼設置,何時須要調優。
young gc和full gc觸發條件
垃圾回收算法及垃圾回收器的選擇
jvm內存結構
FGC的可能緣由,以及解決辦法。
平常調優的技巧(常見的性能優化策略)
如何判斷對象存活
常見讓java服務器掛掉的內存溢出(棧,堆, 持久態)以及緣由
jvm監控工具
CMS工做原理,相比Paralle GC的優劣
有了CMS,爲何還須要G1 GC
JVM經常使用參數適用及理解
常見的JVM字節碼及含義等
7
3.7. 數據庫
數據庫事務+事務傳播機制
MySQL索引使用的數據結構
MyISAM,InnoDB有什麼區別,各有什麼特色
慢查詢如何分析
使用事務的時候應該注意什麼?好比事務中不該該有執行時間過長的業務流程。
充值和提現,事務如何保證的,或者以銀行A/B用戶之間轉帳的例子將一下,這個場景中事務是如何保證的。 (兩階段提交,分佈式事務 2.本地事務,本地落地,補償發送)
分佈式事務(實時一致性【事務補償機制】仍是【基於消息的最終一致性】最終一致性)
聯合索引
爲何使用B+樹作索引(磁盤IO+範圍搜索)
事務的4個隔離級別?分別存在哪些問題?舉例說明
有哪些鎖?如何解決幻讀?
MVCC機制
分庫分表的思路
8
3.8. 性能調優
sql優化。
jvm優化,能夠講下曾經的遇到的問題以及解決方案。
接口調優。
系統調優。
問題排查的方法論
9
3.9. 系統分析設計
設計一個微信紅包搶紅包的系統。
大key和熱key的解決辦法
跨機房數據讀寫和同步的問題的解決方案。
接口流速控制自我保護的實現方式,在一個60s的時間序列上如何保接口的調用流速是均衡的。
設計一個實時流量統計系統。
設計一個直播系統。
設計一個電商秒殺系統
10
3.10. 開源框架【分佈式隊列,RPC通訊 等】
RPC:
你理解的rpc是怎樣的。
rpc異步調用的是如何實現的?
rpc調用的可靠性方面是如何保障的?網絡超時,閃斷,對方進程僵死,處理緩慢狀況下是如何保證協議可靠的?
心跳機制。是否懂的ping-pong的雙向心跳機制。
重連機制。斷掉以後是當即重連麼?爲何?(服務端句柄釋放須要必定的時間)
客戶端和服務端斷掉鏈接以後的,哪些尚未發送玩得消息(應該還在緩存中)是如何處理的?是否有設置緩存上限?
黏包拆包問題有沒有遇到,如何解決的?
服務端異常是如何透傳到客戶端的?
MQ
mq的經常使用場景
若是讓你設計一個MQ,你須要考慮什麼問題(rpc,事務,最終一致性,廣播,消息確認,負載均衡,存儲,流控,錯峯,調度),如何設計。
mq是怎麼保證高吞吐的?
對於mq存儲,經過哪些原理及手段,能夠保證mq tps遠高於磁盤I/O
如何保證mq消息儘可能不丟失
對於各類不肯定(超時,down機,消息沒有送達,送達後數據沒落地,數據落地了回覆沒收到)如何作到消息不丟失,如何避免重複消費的問題,如何鑑別是重複消費(messageId)並冪等的處理(狀態機/版本號,前者更優)
是否有順序保證?若是須要一個支持順序保證,應該如何選型和設計,好比kafka只能保證單個partition
怎麼避免重複消費。
kafka是如何實現高性能高可靠的。zero copy的原理
kafka副本同步機制
kafka選主機制,是不是相似paxos的算法,答案否。
數據可靠性和一致性如何保證。
kafka副本與leader節點不一樣步的緣由。
kafka isr和osr機制,HW設計理念。
kafka部署的時候若是節點小於和大於partition個數的時候都會有什麼現象和結果。
3.10.1. 開源框架(spring ,hbase ,zookeeper等)
aop實現原理,依賴注入。
Spring 事務的實現原理
SpringMVC的原理和機制
hbase架構原理,特性,性能。
hbase row key的設計原則。
openstsdb?
zookeeper原理,客戶端類圖。內部雙層隊列設計的思想。
zookeerper observer節點使用場景。
zookeeper 部署的時候須要注意的細節,如何防止腦裂。
11
3.11. 服務治理
服務註冊,服務分組 ,服務發現,異常上報,服務降級 ,監控檢查,動態upstream(http)
nginx lua openResty zookeeper
四層負載均衡和第七層負載均衡區別和好處
問下大型企業架構他用過哪些,對比優劣。
SOA和微服務的區別。
服務治理若是是使用spring-cloud,能夠進一步詢問其對相關組件的理解和簡單原理描述。Eureka,Zuul, Consul , Feign, Hystrix 均可以天然引入。
若是使用 Dubbo,深刻詢問
若是網絡異常致使服務器請求失敗, 須要怎麼作(重試)
重試會致使什麼後果(雪崩, 冪等)
雪崩怎麼解決(限流, 熔斷, 隔離)
冪等怎麼解決(token, 樂觀鎖)
SOA與傳統ESB消息總線的差別在哪裏?各自的應用場景是什麼?
12
3.12. Linux
在線查看日誌的命令
經常使用linux命令瞭解
如何自動ssh登陸
13
3.13. 安全
web常見安全問題?如何防範?
14
3.14. 工程能力
是否編寫單元測試? 單測覆蓋率是多少? 是否編寫過TDD
怎麼衡量代碼質量(sonar 或者其餘代碼工具), code review
使用過哪些測試框架,Junit?Mockito?Powermock?,使用它們有什麼好處
15
3.15. 軟素質
溝通能力
對干係人的識別、管理。
在團隊內主動提起的方案、改進和其中的過程。
團隊的會議流程。常見的例會有哪些。
會議的模式、羅伯特議事原則。
學習能力
自驅動力,業餘時間寫了什麼代碼。
最近讀了什麼技術書籍並簡要介紹。
社區活動,開源代碼庫的關注。
知識管理與沉澱
規劃能力
項目排期,排期依據,
需求控制。
對開發模型的瞭解(瀑布模型、敏捷模型等。
項目管理的常見方法論(極限編程、看板方法、豐田方法等)。
領導能力
4. 系統設計
模塊
設計題目
模塊
設計題目
訂單
設計一個餐飲訂單系統
一、開臺-》點菜-》下單-》付款-》結帳 關鍵點:訂單存儲模型、桌臺要與訂單解耦、訂單裏須要存儲商品的快照信息(如價格、規格屬性之類)
二、進一步:有促銷活動(菜品維度、訂單緯度) 關鍵點:訂單與活動邊界(訂單優惠誰計算、如何存儲優惠信息)
三、再進一步還能支持結帳後進行退菜或者加菜 ,有對帳需求,關鍵點:考察候選人是否有意識設計帳單的概念,解決錢和賬 對得上問題
租戶
設計一種隨機商戶編號做爲商戶的惟一標示,爲方便記憶,要求編號從4位開始,且要去掉不吉利的數字,如4! 考察點:一、隨機不重複 二、分佈式 三、要考慮擴容