首頁>科技>

總結

06.20我從北京xxxx有限公司離職,結束了一年的見習生涯。07.05-08.04在幫我姐夫做翻譯;畢竟這段時間比較空閒,在空閒的時候我都是在準備面試,不管是Java基礎、JVM、資料庫、資料結構、分散式、叢集還是專案都準備的差不多,期間我看過《資料結構與演算法分析》和《Java程式設計思想》等書籍。08.03我回到深圳,08.04開始的阿里一面到08.22的四面,今天得知四面掛了感覺很可惜,畢竟差Offer僅一步之遙,但又在意料之中;你選擇公司,公司同樣也選擇你,如果你沒有足夠優秀,那麼對不起-你只是一個過客,而我就是那麼一個過客而已。我也留了退路,畢竟阿里沒有十足的把握;在這段時間我也去面過三家公司都是自身產品研發,很巧很幸運也都拿到了Offer;公司沒有好壞之分,你選擇公司的原因無非看在該公司是否能夠給予我們期望的salary、行業的前景和對自身的成長空間,這些之中阿里無非是首選。從阿里的這趟面試經歷中,給我最大的領悟就是:只有自己足夠優秀,才有選擇的餘地。以下就是近期的所有面試分享以及面試所需知識點總結。

目錄結構

面試必備知識點阿里巴巴集團1-4面經分享xx科技股份有限公司面經xx文化傳媒有限公司(360子公司)面經xx軟體集團有限公司面經(太水了就沒寫)

面試必備知識點(資料庫、Java基礎、專案、網路、資料結構、spring框架)

一、資料庫部分

MySQL資料庫的事務(基本要求、併發事務的問題、4個事務等級)

基本要求:ACID,原子性、一致性、隔離性、永續性;併發事務問題:髒讀、不可重讀、幻讀;4個事務隔離等級:讀未提交、讀已提交、可重讀、序列化

索引(應用場景:狀態比較多的欄位,一般唯一的、底層:hash和B+索引演算法、好處:應用資料結構進行查詢)使用複合索引的注意點複雜查詢(leftjoin、rightjoin、innerjoin、having、order by、limit、distinct等)explain關鍵詞最佳化表MySQL的儲存引擎InnoDB、MyISAM的區別以及如何選型MySQL的意向鎖(MySQL系統預設,人為無法使用)、樂觀鎖(一般用一個欄位version)、悲觀鎖(for update)Sharding-JDBC中介軟體(實現分表操作)讀寫分離之主從複製如何實現最佳化MySQL的方式(資料庫設計方面:合理的索引、儘量使用數值型代替字元型(依賴MySQL底層查詢機制)、使用定長欄位而非定長;資料庫語句最佳化方面:儘量使用exit和in、not in和in,like的用法要使用好,比如用 like 'xxx%'代替'%xxx%',因為'%xxx%'這種方式可能不會走索引)

a:messages<500w 做資料庫語句最佳化、表設計最佳化就可以應付

b:500w<messages<600w 在以上最佳化上+讀寫分離+redis快取(500-600左右

又是一個瓶頸)

c:1200w<messages<1500w 分表,可以使用Sharding-JDBC,主從複製同時應

用訊息佇列緩解寫入壓力。(1200-1500左右又是一個瓶頸)

d:再多就要分庫分表了。

二、Java基礎部分

Java最新版本,及其新增的特性集合框架(list、set、map、原始碼分析及其底層原理、有序集合有哪些[怎麼實現的])集合去重(可依賴set的特性)ConCurrentHashMap的原始碼(分段鎖,clear()、iterater()、get()弱一致性)ConCurrentHashMap與HashTable如何選擇同步鎖(synchronized、reentrantLock-lock[ConCurrentHashMap的分段鎖機制,jdk1.8之前]、CAS[ConCurrentHashMap的鎖機制-synchronized+CAS,jdk1.7之後])執行緒池(核心ThreadPoolExecutor類的引數:corePoolSize、maxmumPoolSize、keepAliveTime(這個引數allowCoreThreadTimeOut要為true才可以設定空閒執行緒等待時間,預設為false,需要指定)、timeutil、workQueue[BlockingQueue、]、threadFactiry、handler)

作用:能夠限定最大的執行緒數,避免過多的執行緒上線文切換而導致系統執行緩慢,減少

執行緒建立與銷燬的開銷;減少GC次數

自動裝箱與自動拆箱異常(執行時、非執行時;以及他們的區別)反射IO(字元流Writer、Reader、位元組流InputStream、OutPutStream)JMM原理(可見性[一致性]、有序性、原子性、happen_before原則)volitale是什麼(可以保證一致性,不能保證原子性)Transient關鍵詞Happen-Before原則ThreadLocal(執行緒本地標量表,執行緒私有;內部是用ThreadLocalMap來儲存相關資訊,key為當前執行緒,value為Object)JVM記憶體劃分及其記憶體分配、回收演算法、怎麼判斷是否要回收某一物件[引用計數法、可達性分析演算法]、分代物件比例(Eden:servivor0:servivor1=8:1:1)、老年代與年輕代的物件比例(2:1)、調優引數[Xmx、Xms、Xmn、PermSize、MaxPermSIze...]引用的類別(強引用、軟引用、弱引用、虛引用)引用的種類與垃圾回收的關係類載入機制(載入、驗證[驗證class位元組碼的準確性]、準備[為類分配儲存空間、將類資訊分配在方法區、在堆中新建java.lang.Class物件]、初始化[為變數初始化]、解析[將符號引用轉為直接引用]、使用、銷燬[即為回收])泛型、泛型型別擦除菱形運算子JIT逃逸分析(同步省略、堆記憶體轉為棧記憶體、標量替換)常用的設計模式(概念:經過無數的實踐,可以反覆使用,可以解決特定問題的設計方法;工廠設計模式、單例模式、代理模式、包裝模式)代理模式(jdk動態代理、cglib動態代理)JDK常用的設計模式(結構型模式、建立模式、行為模式)AQS(AbstractQueuedSynchronizer),AQS是一個用來構建鎖和同步器的框架,使用AQS 能簡單且高效地構造出應用廣泛的大量的同步器,比如ReentrantLock、FutureTask、ReentrantReadWriteLock等等皆是基於AQS。B_IO N_IO A_IO的區別,以及底層怎麼實現的JVM檢視各個記憶體區域的分配(jmap......)

三、分散式部分

分散式鎖的實現(基於資料庫的排它鎖、基於資料庫建一張表作為鎖表、基於redis快取、基於zookeeper)秒殺系統的實現(高併發、讀多寫少、資源競爭等場景;採用負載均衡、redis快取、鎖等解決方案)CAP理論(consistency、available、partition tolerance[分割槽容錯])三者不可兼得,一般捨棄一致性,透過相關技術保證一致性。分散式快取(redis、memcached,兩者如何選型,兩者優缺點)dubbo(概念、原理、優點、缺點)

概念:是阿里的一個開源分散式RPC和微服務框架,基於Java的interface作為服務的契

約,透過註冊中心完成服務的註冊與發現,具體業務程式碼透過代理類遮蔽,致力

於提供透明化的RPC呼叫和SOA服務治理方案。

原理:提供者、消費者、註冊中心、監控中心、容器

優點:服務自動發現、叢集容錯、錯誤重試、軟負載、解耦等

缺點:單一的系統架構,使得在開發過程中,佔用的資源越來越多,而且隨著流量的增加越來越難以維護。

redis(原理:支援儲存的資料型別、支援事務、支援bgsave福全映象持久化和aof增量持久化、單執行緒、資料淘汰策略[allKeys-lru、allKeys-random、volatile-lru、volatile-random、volatile-ttl、no-enviction]、回收演算法[引用計數器、LRU演算法])MQ(作用:限流、削峰、非同步、解耦)tomcat原理(執行緒池、proxy[BIO、NIO、APR])Nginx的原理Zookeeper的原理

四、專案部分

專案背景,如:為什麼要重構;專案處理方案專案總體結構需要清楚,要有層次感,先講系統架構然後各個模組的作用專案的亮點要體現出來各個模組需要清楚,包括功能、技術核心技術點需要了解怎麼處理的根據場景設想面試官會問什麼在專案沒有的場景你是什麼解決的要到的分散式技術要知道原理,如:內部通訊、訊息佇列、分散式快取(dubbo、mq、redis)按事實回答,如果不是自己做的模組但自己知道,你就說有去了解過,然後開始巴拉巴拉

五、網路部分

DNScookie、sessionpost、get請求的區別TCP與UDP的區別TCP三次握手過程四次揮手socketHTTP與HTTPS的區別HTTP包含哪些資訊

六、資料結構部分

樹、二叉樹、二叉搜尋樹、紅黑樹、AVL樹、各大排序演算法(注重快排和堆排)

七、框架部分

IOC(工廠模式、單例模式、xml、dom4j xml解析器)AOP(JDK代理、cglib代理)

阿里巴巴集團(給自己打分-一面:90、二面:85、三面:90、四面:75)

一面(30分鐘)

你最近在幹嗎?(********)、你能說下服裝外貿的流程嗎?、集合底層原理、介紹專案、介紹下buddo、如果我發了兩筆相同的轉賬你是怎麼處理的?(專案上,採用redis,開始巴拉巴拉)、redis掛了怎麼辦?(採取叢集模式,能夠持久化:命令列log和持久化到本地或者是遠端伺服器儲存)、你能講下對賬嗎?、你有什麼要問我的嗎?

二面(45分鐘)

三面(49分鐘,交叉面)

前戲:

A:你面的是ICBU(國際技術事業部)是嗎?

B:是的,之前填的是這個部門

A:來我們部門(業務平臺事業部)吧?現在阿里的重心在我們部門,ICBU的話不是公司的業務核心(面試官在憨笑)

B:可以啊,可以轉部門嗎?可以的話我就轉過來(在憨笑)

A:可以轉,不過一般是要在正式兩年之後才可以

A:你之前面試過嗎?你是第輪面試了啊?

B:這是第三面了

A:你現在人在哪裡呢?

B:我現在在深圳這邊

A:來杭州吧,深圳那邊的話是一個研發基地,杭州是總部基本核心業務部門都在這裡

B:可以的,聽從安排,畢竟阿里牛人多,哪裡需要去哪裡(在笑著)

A:好吧,現在開始面試吧

面試:

A:自我介紹下......

B:巴拉巴拉

A:你做過哪些專案

B:開始敘述......(先講做過的專案,然後挑一個熟悉的專案精講:包括專案背景、專案系統架構、用到的技術、模組的各個功能)

A:為什麼要用分散式?我單個應用整合也可以啊?

B:分散式系統的話有這些優點:qps、執行可靠性、可擴充套件性、可維護性、解耦等(還好多,多巴拉巴拉)

A:那分散式的資料一致性問題怎麼解決?

B:在我們專案的話,內部通訊主要採用的是MQ,MQ在一定程度上市可以保證資料的一致性的

A:MQ如何保證一致性的?

B:比如A模組發了一個訊息到Topic1,B模組監聽Topic1;如果B獲取了訊息就會往下執行,如果沒有獲取則訊息還在

A:如果此時我B系統奔潰了怎麼辦?這個怎麼處理?(這個問題主要問的是分散式、叢集的特點了)

B:因為分散式系統在叢集模式下,每一個服務例項都有執行資料的複製;比如B奔潰了導致執行緒中斷,因為分散式有容災的特性在每個B系統的叢集例項都有相關資料的備份,即使B掛了也沒事,還有B1、B2、B3......

A:xxxxx模組是幹什麼的?

B:巴拉巴拉

A:為什麼閘道器要用restful介面方式?

B:為了相容之前的系統,客戶化的時候去掉了閘道器模組;現在統一採用的是dubbo介面,因為dubbo也有錯誤重試、軟負載、服務自動發現等優點(建議在回答的時候儘量要回答為什麼,自己主動說而不是別人問)

A:快取你們一般用來幹嘛?

B:在我們專案的話,主要用於兩個方面;一是:基礎配置資料,二是:非同步快取

A:基礎配置資料的話是你們服務起來的時候一個一個啟動嗎?

B:是的,我們用的@PostConstruct註解,當服務一啟動的時候就將資料庫的配置載入到本地快取;如果在應用程式中,某個請求拿不到快取的話就去資料庫查詢(適當改編,因為之前是沒有去資料庫拿資料這一步,畢竟有可能快取你拿不到訊息)

A:專案問完了,現在問下java基礎

A:StringBuffer、StringBuilder的區別

B:巴拉巴拉

A:ArrayList、LinkedList的區別以及使用場景

B:巴拉巴拉

A:泛型用過嗎?

B:用過,比如List、Set、Map這些都有用到過泛型

A:泛型的優點是什麼?

B:避免了CastClassException的異常;在沒有泛型之前是用Object,但這有一個問題是會有類轉換異常;泛型有型別擦除,在編譯期間型別是不會保留的

A:再來講講集合吧,HashMap是執行緒安全的嗎?

B:非執行緒安全,執行緒安全的有HashTable、ConCurrentHashMap

A:設計模式用過嗎?

B:具體沒用過,但瞭解過;比如IO的介面卡模式和裝飾器模式

A:使用單例模式的時候需要注意什麼?

B:側重講雙重校驗鎖(再巴拉巴拉其他的)

A:web開發瞭解嗎?

B:瞭解過一些

A:問個簡單的,post與get的區別?

B:巴拉巴拉

A:cookie與session的區別?

B:巴拉巴拉

A:好的差不了瞭解了,你還有什麼想問的嗎?

B:我問下的,阿里校招難嗎?容不容易進啊?

A:挺難的,現在我們部門一個都還沒過,一個Offer都還沒發;我是社招進來的。你這邊我覺得沒什麼問題

B:阿里對待校招生有怎樣的培養計劃?

A:進去之後都是有師兄帶著的,也有全部的新人做一個專案............

B:轉正難不難啊?

A:也不算難,轉正的時候會參考以往的工作外加考核

B:好的,我差不多瞭解了

四面(57分鐘,交叉面;紅色部分即回答有問題)

A:你覺得Java跟其他高階語言有什麼區別?

A:Java的最新版本是什麼?有哪些特性?(我只知道特性有stream流、lambda表示式;開始敘述lambda表示式怎麼使用,stream流忘了,最新版不知道[想說java11,但不確定;查了下是java10])

A:StringBuffer、StringBuilder的區別

A:執行緒安全的概念

A:代理模式(jdk、cglib動態代理;區別、底層應用技術、應用場景)

A:異常分為哪些,執行時異常與非執行時異常的區別,自定義異常屬於什麼異常

A:final與finally的區別

A:B_IO、N_IO、A_IO的區別以及底層原理、底層分別有哪些類進行處理與實現(我:講了三個的概念;面試官追問:底層實現是什麼?各有什麼類或方法進行處理?,我:.......這個不清楚)

A:JMM

A:JVM

A:如果在程式碼中呼叫System.gc()會發生什麼(我:會觸發垃圾回收,可能會對執行緒不安全;可以在jdk中進行配置禁止在程式碼使用System.gc()即程式碼中寫了System.gc()也無效因為System.gc()要JVM的配合)

A:如果一個應用隔三天就會發生OutOfMemory,這個問題你會怎麼排查?(我:可以用jmap工具檢視相關jvm的記憶體區域佔用情況,其他不知道了)

A:資料庫主從複製怎麼實現,具體的配置(我:透過binlog實現主從複製,怎麼配置不是很清楚,沒有具體實現過)

A:MySQL怎麼備份資料(mysqldump -h127.0.0.1 -uroot -ppass myweb > d:/backupfile.sql)(我:之前一般都用navicat工具備份的,我記得是用mysqlxxx命令備份的;哎,記錯了、忘記了這一點,這麼簡單的都不會)

A:複合索引的問題

A:MySQL的儲存引擎有哪些,他們有哪些區別以及使用場景(我:我知道有InnoDB,一般都是用這個儲存引擎,從MySQL5.5.5開始預設也使用該引擎;該引擎支援事務、行級表等高階特性......;雖然是知道有其他的,記不起來了)

A:MySQL事務的四個特性

A:xxxxx專案分為哪幾個模組?

A:介面卡用來幹嘛的?(面試官:沒什麼新穎的啊;可能我表達的方式不對吧)

A:你們專案的冪等校驗

A:我大概瞭解了;結果的話這個星期會出,你注意下手機或者郵件。先這樣了,再見

......(還有其他的,記不起來了)

xx科技股份有限公司-150分鐘

筆試(40分鐘)

選擇題-10分、應用題(string stringBuffer stringBuilder的區別、多執行緒的實現方式 舉例執行緒不安全、JVM記憶體區域劃分 並解釋)-30分、演算法題(兩題;應用遞迴-20、應用二分查詢-40)-60分(注:幸好演算法題這兩個都會,應用二分查詢的其實題目是要求儘可能降低時間複雜度,我選擇的二分演算法,因為只有這個我才會)

技術(80分鐘)

介紹下自己、你的職業規劃、介紹專案、redis原理(巴拉巴拉單執行緒基於記憶體操作的key-value資料庫;支援的資料型別、多種資料淘汰策略、回收演算法)、redis多臺例項怎麼配置、dubbo原理、你用過哪些索引、講講socket(我就知道socket是基於傳輸層的,具體我沒用過;在tomcat中到接收到一個請求的時候,會把socket請求放在accept佇列,然後交給worker執行緒池處理,獲取執行緒之後根據連接獲取引數生成一個request轉發至servlet容器)、http請求包含哪些資訊(報文頭-url http版本號 請求方式是post還是get等、報文體-內容)、你用過哪些執行緒池(我:沒有用過,因為在專案中spring框架已經封裝好了,但我瞭解過Excutor,ThreadPoolExcutor是執行緒池的核心類,有這些引數......)、你知道的常見設計模式(IOC的單例、工廠,AOP的動態代理 jdk和cglib,IO的介面卡和裝飾器模式,Object.clone()的原型模式、Integer Boolean Character的享元模式;面試官:那你知道直譯器模式嗎? 我:想了一會[忘了],這個忘了,因為23種有點多;format就是直譯器模式[我怎麼忘了呢,心累啊])、你知道哪些鎖(開始巴拉巴拉Synchronized、ReentrantLock、CAS;看我回答到了底層,然後面試官就問:你看過原始碼是嗎? 我:是的,jdk原始碼有些常用的看過)、資料庫表級鎖在MySQL5.6有嗎?(5.6我不能很確認,因為我一般用的5.7;面試官:那5.7有表級鎖嗎? 我:有,比如事務隔離等級的序列化就是表級鎖,表級鎖鎖粒度是最大的加鎖快,但是效能最差,容易造成鎖衝突)、你在專案上遇到過什麼問題......(還好多問題記不到了)

HR(30分鐘)

介紹下自己、你的職業規劃、你為什麼離開之前公司(之前的公司偏向於業務,與我的職業規劃有衝突)、你對職業行業有什麼選擇、如果安排你做大資料可以嗎?你之前公司的實習薪資是怎樣的、你的期望薪資是多少?(我:*****,HR:我們這裡給不了這麼高,我:沒事兒,我相信貴公司能夠給一個合理的工資,HR:不過你比較特殊,實習經驗豐富…)、你住的離這裡遠嗎?(很近,在前海,才三公里)、面試結果下午給你答覆......

xx文化傳媒有限公司(360子公司)-210分鐘

筆試

面試官說,直接來吧從第一題開始,指著題目說:你有什麼想法......

題目大概意思:在一個已經排序好的陣列,判定某個數組裡面的兩個數相加的和是否等於X返回boolean;方法引數陣列A,數值X(然後我開始講思路,面試官說:可以)題目大概意思:求臺階的積水量(然後我開始巴拉巴拉,用這種演算法可以,比如:......;面試官看了半天,最後微笑著說這種方法也行,就是程式碼實現起來有點複雜,不過方案可行)題目大概意思:資料庫有2000w條資料,記憶體為10G,最大應用記憶體為100M(類似於jvm記憶體);假設我需要更新某個欄位的狀態,如何保證這些資料都處理完?

:我覺得可以使用執行緒池,首先測試單個執行緒的暫用記憶體,然後新建一個 執行緒池在記憶體允許的情況下設定maximunPoolSize,在select的時候用Limit關鍵詞;在保證記憶體不會超出的狀態下可以儘可能地加快執行效率

面試官:那執行緒池的作用是什麼?

:執行緒池就類似於一個池子,這可以在應用可以承載的前提下儘可能發揮CPU的優勢,也不會因為過多的執行緒導致上下文的切換導致系統執行緩慢

面試官:你做過正則校驗碼?

:沒做過,但簡單瞭解過,之前專案有正則校驗又去看過

面試官:最後這題有點難那就不為難你了

一面(python或go面試官)

介紹下自己你知道http協議嗎?http協議包含什麼資訊cookie與session的區別http是長連線還是短連線?怎麼可以讓http可以像tcp一樣實現長連線?tcp協議我這邊沒問題,請稍等會......(還好多,一下子面了四面太多了記不住)

二面(java面試官?)

介紹下自己講下專案xxxx模組是什麼功能dubbo原理redis原理RocketMQ的原理你知道嗎?(我:mq是訊息佇列,具有削峰、限流、非同步、解耦等特點.......具體怎麼實現的不太瞭解)redis的RDB全映象持久化底層是怎麼做的MySQL的索引索引的底層資料結構有哪些(B+、B-、Hash)B+與B-有什麼區別(B+是各個節點都是有資料的,B-的話是將資料放在葉子節點上)有兩個已經排序好的陣列A、B,找出他們的中位數(我:新建一個空陣列C,大小為這兩個陣列的長度;先將陣列A放在C中從0下標開始,外層迴圈B獲取值賦給temp,再在C中透過二分查詢插入temp值[O(log2n)]或者是一個一個遍歷找到位置插入temp[O(n)]);最終從C中選算中位數即可。你還有什麼要問我嗎?(還是老套路)我這邊沒問題,你稍等會......(還好多,一下子面了四面太多了記不住)

三面(C++面試官):

介紹下自己你之前做的專案都是Java的嗎?你有了解過其他語言嗎?我們來一個非程式問題,你知道1000的階乘有多少個0嗎?(我:開始分析,巴拉巴拉利用5的倍數乘以2^n能得0的特性我們可以求出100的階乘有多少個0,然後再乘以10,因為百位數我們可以不管......巴拉巴拉[面試官一旁也在幫我分析])你簡歷的是java開發讓你做python、go可以嗎?(python的話今年來越來越火;python的話我也瞭解過一些,一般用於非伺服器端的資料分析,如果python的話我願意)然後我們聊了C++與java的區別與特性包括優缺點你還有什麼要問我嗎?(還是老套路)我這邊沒問題,你稍等會......(還好多,一下子面了四面太多了記不住)

HR面:

介紹下自己你一直在北京嗎?為什麼來深圳?你是打算在深圳了嗎?你有去面其他的公司嗎?(有:前幾天拿了xx科技股份有限公司的Offer,現在還在阿里的三面)、阿里的三面什麼時候?(我:就這個星期)那意思是你下週才能確定來這裡是嗎?(我:是的,這周我還在等阿里的三面)你面的那個公司給你多少(我:實習期間xxxx,轉正後10k+)你簡歷的是java開發讓你做python、go可以嗎?(python的話今年來越來越火;python的話我也瞭解過一些,一般用於非伺服器端的資料分析,如果python的話我願意來)你還有什麼要問我嗎?(還是老套路)好的現在也差不多了你也忙活一下午了,先就這樣了

xx軟體集團有限公司(90分鐘)

面試太水了(開始就問我mvc,然後mybatis的動態SQL,這也太古老了吧),不說了。兩面技術面,一面HR面。

針對上面的技術我特意整理了一下,如果想學習Java工程化、高效能及分散式、深入淺出。效能調優、Spring,MyBatis,Netty原始碼分析的朋友可以檢視一下

10
最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 當世鋼鐵俠Elon Musk: 為人類未來而來