導讀
這篇文章呢,整合了一下三位朋友面試阿里螞蟻金服所有offer的經歷,時間段分別是7月初,7月中旬,8月中旬。如下也是我整合起來的面試題,和麪試經驗,我但願這些能幫到你們面試這些大廠能有所幫助,其實講白了,面試經驗只是一個借鑑,不能做爲具體參考,但這些經驗能從重考慮大體方向,接下來講說下4面阿里面試(三面加HR面)java
一面
開頭仍是先來自我介紹,完了面試官就開始發問,通常是40分鐘到1個小時不等。不過值得注意的是,他們那邊通常不直接回答對仍是錯,最終發現呢,阿里的幾輪面試,都是這樣,他們通常只聽,偶爾追問。程序員
首先確認對阿里的意向度;其次面試官會針對你曾經作過的項目來作具體技術的交流,你對項目細節是否是掌握到位,以及java技術基礎和原理掌握程序,好比並發編程以及數據庫和JVM三個方面,也會交流到分佈式、線程池的實現等等(重點考察有沒有深刻鑽研技術和技術上的亮點);web
- 首先,針對崗位問一些專業性問題,所以你要把該崗位要求的專業技能基礎看一遍。
- 而後,針對你的簡歷,問作過的一些具體的case,所以你要把本身寫在簡歷上的case都覆盤一遍,對本身作過的工做內容進行總結,好好分析不足點和須要進步的地方,而且梳理出本身的優點。(若是帶上你之前工做的數據和做品等等,會加不少分)
- 再而後,問你對公司、行業的瞭解,所以你要在面試以前經過各類渠道盡量的瞭解公司的歷史,業務、當前發展階段和規劃,瞭解行業的歷史、遠景和競爭對手。
- 再再而後,問你對該崗位的理解和職業規劃,所以你要儘可能瞭解你的崗位,而且提早作好將來大體的職業和人生規劃。
- 最後,就是瞎聊,他會跟你很隨意的聊一些話題,來觀察你的性格特質和待人接物,確保你能很好的融入他的團隊。
不知道的直接說答不上來,就會繼續一個題。面試
一面完了,叫你等消息,基本涼涼,不少公司,等消息基本就是沒消息。正則表達式
二面
主管面:根據項目深刻的瞭解技術實力,瞭解你的知識面、問題解決能力以及技術靈活運用能力,也經過這一過程考察團隊合做能力、學習主動性和創新性,能夠挑選2-3個作過的有典型性的項目作一個仔細技術回顧和本身獨到的理解(這是加分項,重要);redis
總結:算法
其實講白了主管是你TL(直接領導)的上級,他對具體的業務並不瞭解,因此都是問一些基礎,來幫TL把把關。基本上只要TL想要你,主管都是放行的。並且只要你能把上一輪面試的東西準備好,這一輪就沒什麼問題,只要你對人家表示尊重。spring
三面
高管複試,會涉及到相關的技術問題,大部分是對你的總體價值觀作宏觀的把控(好比上進心,責任心,心態,工做激情等);sql
整個過程要長一些,大約一個小時,完了還聊了一些我的及生活狀況。數據庫
總結:
整個技術面下來,感受好像面試有跡可循。
一面通常是基礎問題。二面偏向於作的項目與框架。三面比較全面,都會問到。若是會聊天,現場面還會聊技術以外的一些東西。
順便說一下,有開源項目或者技術博客,熟悉源碼加分。
四面HR面
HR最終面,進入最後一面,通常這種狀況反而有些緊張,一方面非技術類的問題是你們並不擅長的,再者應該你們早有耳聞阿里HRBP有"一票否決權"!因此仍是打起了十二分的精神認真對待,其實過程比想象中的順暢不少,就是從大方向瞭解一下面試者的心態、抗壓能力、將來規劃以及對阿里的意向度(用阿里的話說,即價值觀的匹配度);
總結
HR面: 這輪面試是薪酬福利面試,就是跟HR博弈,爭取在該級別範圍內拿到最高的薪水。這些就好商量了,(價值觀匹配度達到過關什麼都好說)整體的來講HR面是最容易的。健談的人通常都很容易。固然小瓜哥不是一個健談的人,當時第一次是倒在第三面,第二次差點在HR面翻車,由於實在不健談。哈哈。面試阿里第二次纔拿到offer實在有些慚愧。
接下來是我總結的部分問的方向和問題,但願對你們能有所幫助!
Java基礎:
- hashmap結構;什麼對象能作爲key
- hashtable,concurrentHashMap,hashtable比較
- String,StringBuilder,StringBuffer
- 對象的深淺複製
- 一個十進制的數在內存中是怎麼存的? Java支持的數據類型有哪些?什麼是自動拆裝箱? int 和 Integer 有什麼區別 ? 何時使用int 何時使用Integer?
- ==比較的是什麼?
- hashCode()和equals()方法有什麼聯繫? 爲何重寫equals還要重寫hashcode? Object若不重寫hashCode()的話,hashCode()如何計算出來的?若對一個類不重寫,它的equals()方法是如何比較的?
- 一個十進制的數在內存中是怎麼存的?
- Java語言中float和double數據類型的精度是多少?它們在內存中是怎麼存儲的?和Decimal有什麼區別?
- 爲啥有時會出現4.0-3.6=0.40000001這種現象?
- 不借助四則運算如何實現加法
- char能夠存漢字嗎,底層怎麼存的
- Java的字符集是什麼
- 什麼是值傳遞和引用傳遞?
- 數組(Array)和列表(ArrayList)有什麼區別?何時應該使用Array而不是ArrayList?
- StringBuilder 和StringBuffer的區別 ? 底層實現上呢?
- String爲何要設置成final類型?String是不變的嗎?String爲何不可變?怎麼實現不變的?
- &和&&的區別?
- 在Java中,如何跳出當前的多重嵌套循環?
- 簡述正則表達式及其用途。Java中是如何支持正則表達式操做的?
- 講一講Java裏面的final關鍵字怎麼用的?
- Java 8 如何實現的函數式編程?
- 如何保證方法的冪等性
- Java中的序列化的做用,serialVersionUID做用? 各類序列化器,序列化協議,爲何這個序列化那麼快
多線程:
- wait,sleep分別是誰的方法,區別
- countLatch的await方法是否安全,怎麼改造
- 線程池參數,整個流程描述
- 背後的底層原理aqs,cas
- ThreadLocal原理,注意事項,參數傳遞
- 還有Java的鎖,內置鎖,顯示鎖,各類容器
- 及鎖優化:鎖消除,鎖粗化,鎖偏向,輕量級鎖
- 多線程的好處
- 線程安全的定義? 如何保證線程安全?
- 多線程中的i++線程安全嗎?爲何?多個線程訪問i++ , 怎樣設計保證線程安全
- 建立線程有幾種不一樣的方式?你喜歡哪種?爲何?Java中有幾種方式啓動一個線程?
- 原子類的底層原理?Atomic在高併發場景下有什麼問題,缺點?
- CAS和ABA原理
- Jdk中哪裏用到了cas? CAS check的字段是哪裏,set到哪裏去? cas有什麼問題? jdk中是如何改進的? 若是不少個線程經過cas操做數據,如何提升效率?
- 如何線程安全的實現一個計數器?
- 請說出你所知道的線程同步的方法
- 線程數和內核數量的關係
- 線程中哪些是私有的?哪些是共享的
- 線程有多少狀態,畫出狀態圖,狀態之間如何轉換
- 同步方法和同步代碼塊的區別是什麼?
- runnable和callable有什麼區別?
- 爲何 object的方法 notify 和wait方法必須在synchronized裏使用?
web方面:
- servlet是否線程安全,如何改造
- session與cookie的區別,get和post區別,tcp3次握手,文件上傳用post仍是get
- session的存儲
- 如何防止表單重複提交
- 如何設置請求的編碼以及響應內容的類型?
- Servlet相關接口 , Servlet裏面有哪些方法 ? Servlet執行時通常實現哪幾個方法?
- Servlet 3中的異步處理指的是什麼?
- servlet生命週期?servlet是單例模式麼?爲何是單例?Servlet和cgi有什麼區別?
- 服務器收到用戶提交的表單數據,究竟是調用Servlet的doGet()仍是doPost()方法?
- servlet寫過麼,底層是怎麼處理前臺傳來的請求的
- 是否單例,爲何是單例。
- 如何在基於Java的Web項目中實現文件上傳和下載?
- 緩存的優勢?
- 說說MVC的各個部分都有那些技術來實現?如何實現?
- 什麼是DAO模式?
- 請問Java Web開發的Model 1和Model 2分別指的是什麼?
- 如何保存會話狀態,有哪些方式、區別如何
jvm:
- jvm內存模型,
- jvm問題工具,jps,jinfo,jmap...
- String a=「a」;String b=「b」; 問"a" "b"等不等於a b
- Java中堆棧的區別。堆棧的增加方向有哪些不一樣?
- jvm最大內存限制多少 ? 在一臺16G內存的機器上,JVM默認內存空間多大?
- jvm是如何實現線程?
- 瞭解過字節碼的編譯過程嗎
- eden區,survial區?
- 垃圾回收器的基本原理是什麼?垃圾回收器能夠立刻回收內存嗎?有什麼辦法主動通知虛擬機進行垃圾回收?(垃圾回收)
- JVM回收算法和回收器,CMS採用哪一種回收算法,怎麼解決內存碎片問題? 爲何年輕代要用複製算法?併發標記階段處理速度慢的緣由多是什麼。怎麼進行優化
- 闡述GC算法 , 那併發量很高時,使用哪一種算法?
- GC如何調優?
- 垃圾回收觸發條件 ? 是須要回收就當即回收,仍是怎麼辦?一般哪些設爲安全點?
- GC中如何判斷對象須要被回收? 一個方法中有A a = new A();這麼一條語句,方法執行完後A的實例化對象在GC時可否被回收掉
- GCRoot能夠是哪些對象
- 何時會觸發full gc? FullGC是否停頓用戶線程?發生Full GC的時候,必定會發生stop the world嗎?怎麼避免full gc ? 頻繁出現full gc應該如何排查?
- minor gc若是運行的很頻繁,多是什麼緣由引發的,minor gc若是運行的很慢,多是什麼緣由引發的?
- 對象怎麼分配內存,基於什麼原則;
- 類加載過程 ? 初始化階段是幹什麼的?
- 雙親委派模型的好處是什麼?
數據庫:
- 最重要的索性及底層實現
- 索性失效的場景
- 最左原則
- 查看執行計劃
- 及carndiation
- 而後是鎖的類型,行級表級
- 悲觀樂觀鎖
- 解釋數據庫事物及特性
- 隔離級別
- 及實現,redo log .undo log
- bin log主從複製
- mvcc,Next-Key Lock
- delete truncate 區別
- SQL 中select…limit and offset 會有什麼問題,怎麼解決
- 一條SQL語句在MySQL中會通過怎樣的過程
- 數據庫兩種引擎 InnoDB和MyISAM的區別?介紹一下何時用Innodb何時用MyISAM。
- 平時有查看過sql的執行計劃嗎
- 怎麼去監控MySQL的性能問題?怎麼查看一個sql語句的執行效率?
分佈式:
- 問了CAP,跟base
- zookeeper知足了CAP的哪些特性,paxos
- 緩存穿透怎麼解決
- redis的io模型
- 若是保證redis高可用
- redis是單線程仍是多線程
- 線上cpu佔比太高怎麼排查
- 一致性hash
- 分庫分表
- 怎麼熱拷貝,給一個思路,好比一個ES集羣在創建索引,咱們怎麼樣在它還在持續創建索引的狀況下,將當時的狀態給dump下來
- 若是緩存雪崩,大量請求直接打到數據庫怎麼辦?
- 服務限流,服務隔離。
- 當庫存預加載之後,庫存再次發生變化該如何解決?
- 實現限流怎麼實現?若讓你設計一個限流器,你會怎麼設計(令牌桶算法的思路)
- 2PC 和 3PC
- raft協議介紹,raft的日誌須要有什麼特色 , 網絡分區怎麼解決,raft一致性如何實現
spring:
- ioc,aop原理
- ioc初始化流程
- springmvc的流程
- springboot,spring cloud相關組件
- 介紹一下bean的生命週期
- Spring裏面註解用過沒有?autowired 和resource區別?
- Spring中BeanFactory和ApplicationContext的區別?
- 請問Spring中Bean的做用域有哪些?
- Spring加載Bean的過程? Spring框架xml文件中配置bean的實例化過程?瞭解Spring是怎麼遞歸地加載Bean的嗎?BeanFactory和FactoryBean有什麼區別?
- Spring getBean的整個流程
- 談談Spring中自動裝配的方式有哪些?
- 說一下IOC和AOP? DI的方式有幾種?哪幾種?
- spring怎麼解決循環引用的問題,好比,A對象構造時須要B對象;B對象構造時須要A對象
- springIOC原理?說說Ioc容器的加載過程Spring IOC底層存儲結構 ? 本身實現IOC要怎麼作,哪些步驟?
- aop的應用場景?
- AOP的原理是什麼? 除了動態代理還有什麼?
- 攔截器和AOP的關係 Spring攔截器的底層是怎麼實現的
項目
友情提醒一下,對於作過的項目,最好梳理清理,可能會叫你畫各類圖。
總結
能問的基本就是這幾個大體方向,若是你方面掌握的很不錯了,同時又是個很健談的人,我相信阿里面試對你而言也就是日常遇到BUG征服了就行了。
不過阿里的確是程序員的金字塔呀,在這種地方,你會以爲本身真的如此眇小,之前引以自豪的能力,在這裏面一切都像新手同樣,什麼 寫個框架無壓力的人不少,隨意修改JVM無壓力,數據庫也是。不過也是學習聖地,毫無疑問!
健談是一個很實用的技能,可能在你實力並無理想那種那種水平,能幫你得到更好的資源。一個會說話的人和一個不會說話的人,最終的高度絕對不會是同樣的(有實力的狀況),若是實力和健談你都有,就是一個閃閃發光的金子。在哪,都有你的一席之地。
再多提一句,最近網上流傳BAT等一線互聯網公司不招人了,沒錯這是謠言。
我也整理了如下資料給各位朋友喜歡能夠幫到你們
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
最後
還有更多的面試題我都是整理在一塊兒了,我但願我把這些問題,資料、面試題都分享給你們。讓你們能多多提高本身,歡迎作Java的程序員朋友們關注個人公衆號「java小瓜哥的分享平臺」發送「資料」!免費分享這些資料。其中覆蓋了互聯網的方方面面,期間碰到各類產品各類場景下的各類問題,但願能夠幫助你們擴展本身的技術廣度和知識面。謝謝。!