從 1995 年第一個版本釋出到現在,Java 語言已經在跌宕起伏中走過了 26 年,最新的 Java 版本也已經疊代到 Java 16。
java是有一個龐大的生态系統,它的覆寫範圍非常廣,而且已經連續十幾年位居開發語言的榜首,是以java是相對于其他語言來說,非常穩定的。
JAVA市場
java有非常廣泛的應用市場,它的生态系統幾乎涵蓋了目前市面上所有的軟硬體,java幾乎是萬能的,你能想到的,java基本都能實作(雖然吹的有點大,但不可否認)。
web開發:
能做大型的網際網路網站如,京東,淘寶,人人網、去哪兒網、美團等。
java在開發高通路、高并發、叢集化的大型網站方面有很大的優勢。
移動端開發:
目前手機上所有的APP背景代碼及部分移動端頁面java是都能夠做到的。
用戶端開發:
主要面向政府、事業機關和大型企業,如醫療、學校、OA、郵箱、投票、金融、考試、物流、礦山等資訊方面的系統。這些應用在我們生活中其實随處可見,比如醫院的挂号系統、公司的打卡系統、物流系統等。
從招聘網站來看java的需求量是非常大的,有人說java已經飽和了,飽和隻是針對那些剛學java不久沒有任何開發經驗的工程師而言的,是不是說初學者就找不到java開發的相關工作了,NO!有實習崗位。
這篇文章來分享一下我四輪阿裡的面試經曆,希望能對大家有所啟發幫助。
阿裡社招一般有四到五輪,我這次的流程是第一輪技術面、第二輪寫代碼、第三輪boss面、第四輪boss面、第五輪HR面。然而我沒能和HR聊上一句。
阿裡一面
- 首先自我介紹一下?
- 參加的比賽用到的技術?
- Java的集合類有哪些?詳細講List、Set、Map
- ArrayList和HashMap的差別是什麼?HashMap如何解決hash沖突?有幾大類hash沖突的解決方式?hash函數?
- 紅黑樹的特點?TreeSet說一下?應用場景?
- CocurrentHashMap了解嘛?詳細說說底層和鎖的機制?應用?和HashTable的差別?
- StringBuilder和StringBuffer的差別?講到底層和各自應用場景
- Java的鎖都有哪些?偏向鎖、輕量級鎖、重量級鎖、Lock包等都說了說
- synchronized和Lock的差別?ReentrantLock?
- 什麼是線程?線程程序差別?實作線程有幾種方式?
- 線程池這塊了解嘛?建立線程池的方式?用哪個方式建立比較好?說一說線程池的工作原理?拒絕政策?
- sleep()和wait()的差別?
- IO模型了解嘛?BIO、NIO、AIO?
- 快排和堆排?時間複雜度?如果資料量非常大,要進行排序的話直接快排性能不好,怎麼進行優化?
- 計算機網絡OSI模型都有哪些?
- TCP和UDP的差別?應用場景?
- JVM的記憶體模型說一下?運作時資料區?
- 你了解的垃圾回收算法都有哪些?引用計數和可達性分析差別?
- 什麼是索引?索引的作用?
- InnoDB底層結構?和MyISAM的差別?
- 假設要對sql語句優化,一般從哪幾個方面來進行?
- 事務隔離級别有哪幾類?各自解決什麼問題?目前讀和快照讀?MVCC機制?undolog?
- 資料庫的樂觀鎖和悲觀鎖說一下?樂觀鎖的實作?next-key鎖?
- Spring了解嘛?說一下IoC?AOP?JDK動态代理和CGlib?項目應用?
- Spring 建立的bean預設什麼作用域?并發的情況下會不會存在問題?提到threadLocal,又講到了自己項目的用threadLocal怎麼用的。又問那threadLocal存在什麼問題?一開始想了半天沒想到,停頓了一段時間很尴尬,還好想起來了,記憶體洩露。
- 反問。如果希望進入貴司的話自己還有什麼不足需要改進?
面試官很好,指出了有些基礎不足,這塊确實自己答得不太好,非常感謝一面面試官老師,引導着我回答問題,面試體驗很好!
阿裡二面
- 自我介紹
- 說一說項目,深挖
- 講一下Spring IoC AOP,AOP的原理?在項目哪裡用了?MyBatis?Dao 接口的工作原理?講到了AOP
- 談談你認知中的Redis?RDB、AOF?在項目裡怎麼用的Redis,談到自己實作了一個異步事件處理架構,感覺面試官基本都是全程深挖項目。
- 了解RabbitMQ嗎?zookeeper?
- 反問
二面基本就是問一些偏架構和中間件的知識,以及深挖項目。面試官全程非常耐心和藹地對話,感覺就是想挖掘出我的亮點,總之體驗非常好!非常感謝二面面試官老師!
阿裡三面
- JVM的編譯優化
- 對Java記憶體模型的了解,以及其在并發中的應用
- 指令重排序,記憶體栅欄等
- OOM錯誤,stackoverflow錯誤,permgen space錯誤
- JVM常用參數
- tomcat結構,類加載器流程
- volatile的語義,它修飾的變量一定線程安全嗎
- g1和cms差別,吞吐量優先和響應優先的垃圾收集器選擇
- 說一說你對環境變量classpath的了解?如果一個類不在classpath下,為什麼會抛出ClassNotFoundException異常,如果在不改變這個類路徑的前提下,怎樣才能正确加載這個類?
- 說一下強引用、軟引用、弱引用、虛引用以及他們之間和gc的關系
- zookeeper原理和适用場景
- zookeeper watch機制
- redis/zk節點當機如何處理
- 分布式叢集下如何做到唯一序列号
- 如何做一個分布式鎖
- 用過哪些MQ,怎麼用的,和其他mq比較有什麼優缺點,MQ的連接配接是線程安全的嗎
- MQ系統的資料如何保證不丢失
- 列舉出你能想到的資料庫分庫分表政策;分庫分表後,如何解決全表查詢的問題。
三面明顯強度提升,主要涉及多線程、JVM和分布式架構,貌似很多程式員的短闆都是分布式,我雖然也是,但還是在面試官的指引下答出來了,阿裡面試官态度是真的好,非常感謝!!!
阿裡四面
四面就比較吃力了,部門經理面試,就是圍繞兩大塊,第一是根據我的項目來提出漏洞,讓我解決;第二是他自己設定場景,讓我給出解決方案。
第一個還相對簡單,主要是倒在了第二方面,因為對電商項目不是很了解,沒有足夠的經驗,當時就感覺可能要涼,果不其然,過來幾天在郵件裡看到回複資訊:您的職業經曆與該職位的要求略有差異······
面對這些問題,你又是否能答出來?
筆者給大家簡單分析一下:
1. 社招面試,技術問的相對來說更加深入,是以對有些源碼還是要了解點,比如多線程、高并發相關的原理,是經常被問到的。JVM就更不用說了,幾乎是必問到的。
2. 所有的問題都是圍繞具體場景,一般大廠都會結合具體場景來問你問題,是以你隻會純理論肯定不行的,你還要知道為什麼要用這個技術,以及如何做到高可用等等。
3. 以後面試,基本上都會讓你寫代碼的,招軟體開發工程師,光會嘴說是不行的,這就要平時抽空多練習了,我指的是練練算法題,而不是那種業務代碼。
有了阿裡面試失敗的經曆,終于意識到系統學習,不留短闆的重要性,又開始惡補清華掃地僧級别大佬的6+2學習路線,夯實自己基礎,最後投了位元組,【+jcc4261擷取】成功獲得offer,薪資還上漲了3k!!!
6個知識點:
多線程高并發+JVM調優+設計模式+ Redis + Zookeeper + MySql調優
兩大項目:
網約車+億級流量
實戰Java高并發程式設計
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwJWZ3xCdh1mcvZ2LcRDOxEzX3xCZlhXam9VbsUmepNXZy9CXldWYtlWPzNXZj9mcw1ycz9WL4xSPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsAjMfd3bkFGazxCMx8VesATMfhHLlN3XnxCMz8FdsYkRGZkRG9lcvx2bjxSa2EWNhJTW1AlUxEFeVRUUfRHelRHL0EzXlpXazxyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3PwJWZ35SOyQzM4QmZjJmNkVDMjhjNzYzXzUjMyYTM3AzLcFTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.webp)
在單核CPU時代,單任務在一個時間點隻能執行單-程式,随着多核CPU的發展,并行程式開發變得尤為重要。
本篇主要介紹基于Java的并行程式設計基礎、思路、方法和實戰。第一,立足于并發程式基礎,詳細介紹Java進行并行程式設計的基本方法。第二,進一步詳細介紹了JDK對并行程式的強大支援,幫助讀者快速、穩健地進行并行程式開發。第三,詳細讨論了“鎖”的優化和提高并行程式性能級别的方法和思路。第四,介紹了并行的基本設計模式,以及Java 8/9/10對并行程式的支援和改進。第五,介紹了高并發架構Akka的使用方法。第六,詳細介紹了并行程式的調試方法。第七,分析Jetty代碼并給出一些其在高并發優化方面的例子。
JVM進階特性和最佳實踐
目前商用的高性能Java虛拟機都提供了相當多的優化參數和調節手段,用于滿足應用程式在實際生産環境中對性能和穩定性的要求。如果隻是為了入門學習,讓程式在自己的機器上正常工作,那麼這些特性可以說是可有可無的;但是,如果用于生産開發,尤其是大規模的、企業級的生産開發,就迫切需要開發人員中至少有一部分人對虛拟機的特性及調節方法具有很清晰的認識。是以在Java開發體系中,對架構師、系統調優師、進階程式員等角色的需求一直都非常大。 學習虛拟機中各種自動運作特性的原理也成為Java程式員成長路上最終必然會接觸到的一課。
Zookeeper分布式過程協同技術詳解
建構分布式系統并不容易。然而,人們日常所使用的應用大多基于分布式系統,在短時間内依賴于分布式系統的現狀并不會改變。Apache ZooKeeper旨在減輕建構健壯的分布式系統的任務。ZooKeeper基于分布式計算的核心概念而設計,主要目的是給開發人員提供一套容易了解和開發的接口,進而簡化分布式系統建構的任務。
網約車項目
項目架構圖
有多線程、高并發,到分布式架構、JVM調優,這些高頻面試文檔和網約車、億級流量項目實戰等學習資料,助你更加系統的提升進階,不要留下明顯短闆,因為那就将是你的緻命缺陷。
當面試時突然卡住而答不上來後,有什麼好的解決方法,再和朋友們分享一下,隻是筆者個人的見解,有哪裡覺得不合适的地方,請多多留言交流,筆者一定虛心接受,咱們共同交流學習進步~~~
- 一.保持冷靜,搜集資訊
- 二.杜絕沉默,适當表達
- 三.回避問題,展示自己
- 四.鞏固自身,追求卓越