阿里技術崗位要求及體系圖:
好多人對阿里巴巴技術崗的體系結構及級別的技術要求設置不太清楚,想去面試也不知道面試什麼級別的崗位,下面說說阿里的技術體系又是一個怎麼樣的水平劃分!
阿里P6(技術主管)
工作要求:
能獨立解決問題,制定系統的技術實現方案,考覈會涉及部分技術深度。
技能要求:
除P5的技能外,還需掌握以下技能,以下技能至少需要做到熟悉。
架構設計,運維能力,操作系統。
附圖:
技術四面面試題如下
一面(問了數據結構、jvm、鎖等):
-
自我介紹和項目
-
HashMap底層如何實現?
-
Hash一致算法?
-
說說HashMap和ConcurrentHashMap的區別?treemap和HashMap的區別?
-
java的內存分區?
-
java對象的回收方式,回收算法?
-
CMS和G1瞭解嗎?
-
CMS解決什麼問題,說一下回收的過程?
-
CMS回收停頓了幾次?
-
java棧什麼時候會內存溢出,java堆呢,說一種場景?
-
集合類如何解決這個問題(軟引用和弱引用),講下這個兩個引用的區別?
-
java裏的鎖瞭解哪些?
-
synchronized鎖升級的過程(偏向鎖到輕量鎖再到重量級鎖),分別如何實現的,解決的是哪些問題?
-
Tomcat的基本架構是什麼?
-
什麼是類加載器?
-
說說雙親委派模型機制?
-
GC的機制是什麼?GC算法和回收策略?
-
未來的職業規劃?
二面(線程、數據庫、緩存、協議等):
-
講一下項目
-
線程池由哪些組件組成?
-
有哪些線程池,分別怎麼使用?拒絕策略有哪些?
-
什麼時候多線程會發生死鎖,寫一個例子?
-
Redis的數據結構是什麼?線程模型說一下?
-
講講Redis的數據淘汰機制?
-
說說Redis的數據一致性問題?
-
Redis的分佈式怎麼做?
-
RPC講一下?
-
三次握手和四次揮手?如果沒有三次握手有問題嗎?
-
Http請求過程,DNS解析的過程?
-
InnoDB支持的四種事務隔離級別名稱是什麼?有什麼區別?說說MySQL隔離級別?
-
事務的特性及慢查詢?
-
BTree機制說一下?
-
說說MySQL常用的優化方法?
三面(分佈式,消息隊列等):
-
自我介紹
-
cap瞭解嗎,分別指什麼?
-
強一致性和弱一致性有什麼方法來實現的?
-
負載均衡怎麼實現?爲什麼這麼做?
-
緩存雪崩說下?
-
MySQL主從複製怎麼實現的?具體原理是什麼?有什麼優缺點?
-
講講分佈式事務?
-
消息隊列,用到什麼場景(削峯,限流,異步)?
-
zk的性能瓶頸怎麼克服?
-
講了下kafka,怎麼保證數據不丟失?確保消息不會重複消費?
-
消息送達確認是怎麼實現的?
四面(從項目講起):
-
說了自己的項目
-
主要用到的架構,做了些什麼?
-
比較複雜的業務邏輯講一下?
-
遇到很難解決的問題和突破收貨
-
以後的打算和未來的職業發展,談談自己的看法
併發編程:
-
什麼是多線程併發和並行?
-
什麼是線程安全問題?
-
什麼是共享變量的內存可見性問題?
-
什麼是Java中原子性操作?
-
什麼是Java中的CAS操作,AtomicLong實現原理?
-
什麼是Java指令重排序?
-
Java中Synchronized關鍵字的內存語義是什麼?
-
Java中Volatile關鍵字的內存語義是什麼?
-
什麼是僞共享,爲何會出現,以及如何避免?
-
什麼是可重入鎖、樂觀鎖、悲觀鎖、公平鎖、非公平鎖、獨佔鎖、共享鎖?
-
講講ThreadLocal 的實現原理?
-
ThreadLocal 作爲變量的線程隔離方式,其內部是如何做的?
-
說說InheritableThreadLocal 的實現原理?
-
InheritableThreadLocal 是如何彌補 ThreadLocal 不支持繼承的特性?
-
CyclicBarrier內部的實現與 CountDownLatch 有何不同?
-
隨機數生成器 Random 類如何使用 CAS 算法保證多線程下新種子的唯一性?
-
ThreadLocalRandom 是如何利用 ThreadLocal 的原理來解決 Random 的侷限性?
-
Spring 框架中如何使用 ThreadLocal 實現 request scope 作用域 Bean?
-
併發包中鎖的實現底層(對AQS的理解)?
-
講講獨佔鎖 ReentrantLock 原理?
-
談談讀寫鎖 ReentrantReadWriteLock 原理?
-
StampedLock 鎖原理的理解?
-
談下對基於鏈表的非阻塞無界隊列 ConcurrentLinkedQueue 原理的理解?
-
ConcurrentLinkedQueue 內部是如何使用 CAS 非阻塞算法來保證多線程下入隊出隊操作的線程安全?
-
基於鏈表的阻塞隊列 LinkedBlockingQueue 原理。
JVM
-
Java 內存分配?
-
Java 堆的結構是什麼樣子的?
-
什麼是堆中的永久代(Perm Gen space)?
-
簡述各個版本內存區域的變化?
-
說說各個區域的作用?
-
Java 中會存在內存泄漏嗎,簡述一下?
-
Java 類加載過程?
-
描述一下 JVM 加載 Class 文件的原理機制?
-
什麼是類加載器?
-
類加載器有哪些?
-
什麼是tomcat類加載機制?
-
類加載器雙親委派模型機制?
-
什麼是GC? 爲什麼要有 GC?
-
簡述一下Java 垃圾回收機制?
-
如何判斷一個對象是否存活?
-
垃圾回收的優點和原理,並考慮 2 種回收機制?
-
垃圾回收器的基本原理是什麼?
-
垃圾回收器可以馬上回收內存嗎?有什麼辦法主動通知虛擬機進行垃圾回收?
-
深拷貝和淺拷貝?
-
System.gc() 和 Runtime.gc() 會做些什麼?
-
如果對象的引用被置爲 null,垃圾收集器是否會立即釋放對象佔用的內存?
-
什麼是分佈式垃圾回收(DGC)?它是如何工作的?
Spring
-
爲什麼需要代理模式?
-
講講靜態代理模式的優點及其瓶頸?
-
對Java 接口代理模式的實現原理的理解?
-
如何使用 Java 反射實現動態代理?
-
Java 接口代理模式的指定增強?
-
談談對Cglib 類增強動態代理的實現?
-
point cut,advice,Join point是什麼?
-
join point 和 point cut 的區別?
-
怎麼理解面向切面編程的切面?
-
談談對SpringAOP Weaving(織入)的理解?
-
談談SpringAOP Introduction(引入)的理解?
-
講解OOP與AOP的簡單對比?
-
講解JDK 動態代理和 CGLIB 代理原理以及區別?
-
講解Spring 框架中基於 Schema 的 AOP 實現原理?
-
講解Spring 框架中如何基於 AOP 實現的事務管理?
-
談談對控制反轉的設計思想的理解?
-
怎麼理解 Spring IOC 容器?點擊這裏統統拿走
數據庫
-
MySQL 有哪些存儲引擎啊?都有什麼區別?
-
Float、Decimal 存儲金額的區別?
-
Datetime、Timestamp 存儲時間的區別?
-
Char、Varchar、Varbinary 存儲字符的區別?
-
什麼是索引?
-
對比一下B+樹索引和 Hash索引?
-
MySQL索引類型有?
-
如何管理 MySQL索引?
-
對Explain參數及重要參數的理解?
-
索引利弊是什麼及索引分類?
-
二叉樹的轉置是什麼?
-
聚簇索引和非聚簇索引的區別?
-
B+tree 如何進行優化?索引遵循哪些原則?存儲引擎會進行哪些自動優化?到底何時索引會失效?
-
索引與鎖有什麼關係?
-
還有什麼其他的索引類型,各自索引有哪些優缺點?
-
談談對Innodb事務的理解?
-
說說數據庫事務特點及潛在問題?
-
什麼是MySQL隔離級別?
-
有多少種事務失效的場景,如何解決?
緩存
-
redis數據結構有哪些?
-
Redis緩存穿透,緩存雪崩?
-
如何使用Redis來實現分佈式鎖?
-
Redis的併發競爭問題如何解決?
-
Redis持久化的幾種方式,優缺點是什麼,怎麼實現的?
-
Redis的緩存失效策略?
-
Redis集羣,高可用,原理?
-
Redis緩存分片?
-
Redis的數據淘汰策略?
-
redis隊列應用場景?
-
分佈式使用場景(儲存session)?
網絡編程
-
TCP建立連接和斷開連接的過程?
-
HTTP協議的交互流程,HTTP和HTTPS的差異,SSL的交互流程?
-
TCP的滑動窗口協議有什麼用?
-
HTTP協議都有哪些方法?
-
Socket交互的基本流程?
-
講講tcp協議(建連過程,慢啓動,滑動窗口,七層模型)?
-
webservice協議(wsdl/soap格式,與restt辦議的區別)?
-
說說Netty線程模型,什麼是零拷貝?
-
TCP三次握手、四次揮手?
-
DNS解析過程?
-
TCP如何保證數據的可靠傳輸的?
分佈式
-
什麼是CAP定理?
-
說說CAP理論和BASE理論?
-
什麼是最終一致性?最終一致性實現方式?
-
什麼是一致性Hash?
-
講講分佈式事務?
-
如何實現分佈式鎖?
-
如何實現分佈式 Session?
-
如何保證消息的一致性?
-
負載均衡的理解?
-
正向代理和反向代理?
-
CDN實現原理?
-
怎麼提升系統的QPS和吞吐?
-
Dubbo的底層實現原理和機制?
-
描述一個服務從發佈到被消費的詳細過程?
-
分佈式系統怎麼做服務治理?
-
消息中間件如何解決消息丟失問題?
-
Dubbo的服務請求失敗怎麼處理?
-
對分佈式事務的理解?
-
如何實現負載均衡,有哪些算法可以實現?
-
Zookeeper的用途,選舉的原理是什麼?
-
講講數據的垂直拆分水平拆分?
面試經驗總結
一定要謹慎對待寫在簡歷上的東西,一定要對簡歷上的東西非常熟悉。因爲一般情況下,面試官都是會根據你 的簡歷來問的;
能有一個上得了檯面的項目也非常重要,這很可能是面試官會大量發問的地方,所以在面試 之前好好回顧一下自己所做的項目;
和面試官聊基礎知識比如設計模式的使用、多線程的使用等等,可以結合具體的項目場景或者是自己在平時是 如何使用的;
建議提前瞭解一下自己想要面試的公司的價值觀,判斷一下自己究竟是否適合這個公司。
另外,我個人覺得面試也像是一場全新的征程,失敗和勝利都是平常之事。所以,勸各位不要因爲面試失敗而灰心、 喪失鬥志。也不要因爲面試通過而沾沾自喜,等待你的將是更美好的未來,繼續加油!點擊這裏統統拿走
看完上面的內容,相信大家已經有了清晰的目標與方向,針對部分同學年後跳槽面試,我們爲大家準備了十分全面的複習文檔。