七面阿里:現在分享一下阿里最全面試116題:阿里天貓、螞蟻金服、阿里巴巴面試題含答案
貌似這一點適應的行業最廣,但是我可以很肯定的說:當你從事Java一年後,重新找工作時,才會真實的感受到這句話。
工作第一年,往往是什麼都充滿新鮮感,什麼都學習,衝勁十足的一年;WEB行業知識更新特別快,今天一個框架的新版本,明天又是另一個新框架,有時往往根據專案的需要來不斷學習新東西;所有,很多時候感覺,自己用過的東西真多呀!但是真正深入研究的東西卻不多。面試,是跳槽後第一個需要面對的問題;而且不同公司面試的著重點不同;但是卻有一個共同點:Java基礎是必考的。
工作第一年,可能問你String物件建立的理解,常用的框架是什麼等等;
工作第三年,就問你Java記憶體分配機制是什麼,類是如何載入的等等;
工作第五年,就問你常用的設計模式是什麼,你在工作中充當什麼角色,怎麼獨立完成一個模組等等;
可以看出——這是一個典型的程式設計師的成長過程:
使用Java—->深入理解Java積累經驗——>獨立設計分析能力——>獨當一面的多面手!
因此,必須學習:
資料庫 最常用的是Oracle了(當然銀行專案等需要DB2等),熟練掌握使用儲存過程,觸發器等;
UML 專案中經常要寫文件,專案經理的基本功,程式設計師走向設計的基本功;
linux系統 需要掌握常用的linux命令——部署在windows作業系統上的專案很少吧。
其他就不多說了,大家可以補充。
學習上,興趣是最大的老師;專案驅動也是不錯的選擇,總之,不學習不行。
文章很長,可以先收藏
從阿里面試回來給大家分享一下阿里所問到的面試題
【阿里天貓、螞蟻、釘釘面試題目】
- junit用法,before,beforeClass,after, afterClass的執行順序
- 分散式鎖
- nginx的請求轉發演算法,如何配置根據權重轉發
- 用hashmap實現redis有什麼問題(死鎖,死迴圈,可用ConcurrentHashmap)
- 執行緒的狀態
- 執行緒的阻塞的方式
- sleep和wait的區別
- hashmap的底層實現
- 一萬個人搶100個紅包,如何實現(不用佇列),如何保證2個人不能搶到同一個紅包,可用分散式鎖
- java記憶體模型,垃圾回收機制,不可達演算法
- 兩個Integer的引用物件傳給一個swap方法在方法內部交換引用,返回後,兩個引用的值是否會發現變化
- aop的底層實現,動態代理是如何動態,假如有100個物件,如何動態的為這100個物件代理
- 是否用過maven install。 maven test。git(make install是安裝本地jar包)
- tomcat的各種配置,如何配置docBase
- spring的bean配置的幾種方式
- web.xml的配置
- spring的監聽器。
- zookeeper的實現機制,有快取,如何儲存註冊服務的
- IO會阻塞嗎?readLine是不是阻塞的
- 用過spring的執行緒池還是java的執行緒池?
- 字串的格式化方法 (20,21這兩個問題問的太低階了)
- 時間的格式化方法
- 定時器用什麼做的
- 執行緒如何退出結束
- java有哪些鎖?樂觀鎖 悲觀鎖 synchronized 可重入鎖 讀寫鎖,用過reentrantlock嗎?reentrantlock與synmchronized的區別
- ThreadLocal的使用場景
- java的記憶體模型,垃圾回收機制
- 為什麼執行緒執行要呼叫start而不是直接run(直接run,跟普通方法沒什麼區別,先調start,run才會作為一個執行緒方法執行)
- qmq訊息的實現機制(qmq是去哪兒網自己封裝的訊息佇列)
- 遍歷hashmap的三種方式
- jvm的一些命令
- memcache和redis的區別
- mysql的行級鎖加在哪個位置
- ConcurrentHashmap的鎖是如何加的?是不是分段越多越好
- myisam和innodb的區別(innodb是行級鎖,myisam是表級鎖)
- mysql其他的效能優化方式
- linux系統日誌在哪裡看
- 如何檢視網路程序
- 統計一個整數的二進位制表示中bit為1的個數
- jvm記憶體模型,java記憶體模型
【阿里巴巴面試題目】
- 如何把java記憶體的資料全部dump出來
- 如何手動觸發全量回收垃圾,如何立即觸發垃圾回收
- hashmap如果只有一個寫其他全讀會出什麼問題
- git rebase
- mongodb和hbase的區別
- 如何解決併發問題
- volatile的用途
- java執行緒池(好像之前我的理解有問題)
- mysql的binlog
- 代理模式
- mysql是如何實現事務的
- 讀寫分離何時強制要讀主庫,讀哪個從庫是通過什麼方式決定的,從庫的同步mysql用的什麼方式
- mysql的儲存引擎
- mysql的預設隔離級別,其他隔離級別
- 將一個連結串列反轉(用三個指標,但是每次只發轉一個)
- spring Aop的實現原理,具體說說
- 何時會記憶體洩漏,記憶體洩漏會拋哪些異常
- 是否用過Autowire註解
- spring的注入bean的方式
- sql語句各種條件的執行順序,如select, where, order by, group by
- select xx from xx where xx and xx order by xx limit xx; 如何優化這個(看explain)
- 四則元算寫程式碼
- 統計100G的ip檔案中出現ip次數最多的100個ip
- zookeeper的事物,結點,服務提供方掛了如何告知消費方
- 5臺伺服器如何選出leader(選舉演算法)
- 介面卡和代理模式的區別
- 讀寫鎖
- static加鎖
- 事務隔離級別
- 門面模式,類圖(外觀模式)
- mybatis如何對映表結構
- 二叉樹遍歷
- 主從複製
- mysql引擎區別
- 靜態內部類載入到了哪個區?方法區
- class檔案編譯後加載到了哪
- web的http請求如何整體響應時間變長導致處理的請求數變少,該如何處理?用佇列,當處理不了那麼多http請求時將請求放到佇列
這裡推薦一下我的JAVA架構學習交流群:614478470 ,想要學習Java高架構、分散式架構、高可擴充套件、高效能、高併發、效能優化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分散式專案實戰學習架構師視訊都有整理,送給每一位JAVA小夥伴,有想學習JAVA架構的,或是轉行,還有工作中想提升自己能力的,正在學習的小夥伴歡迎加入學習。
點選:加入
中慢慢處理,web如何實現佇列
- 執行緒安全的單例模式
- 快速排序效能考慮
- volatile關鍵字用法
- 求表的size,或做資料統計可用什麼儲存引擎
- 讀多寫少可用什麼引擎
- 假如要統計多個表應該用什麼引擎
- concurrenhashmap求size是如何加鎖的,如果剛求完一段後這段發生了變化該如何處理
- 1000個蘋果放10個籃子,怎麼放,能讓我拿到所有可能的個數
- 可重入的讀寫鎖,可重入是如何實現的?
- 是否用過NIO
- java的concurrent包用過沒
- sting s=new string("abc")分別在堆疊上新建了哪些物件
- java虛擬機器的區域分配,各區分別存什麼
- 分散式事務(JTA)
- threadlocal使用時注意的問題(ThreadLocal和Synchonized都用於解決多執行緒併發訪問。但是ThreadLocal與synchronized有本質的區別。synchronized是利用鎖的機制,使變數或程式碼塊在某一時該只能被一個執行緒訪問。而ThreadLocal為每一個執行緒都提供了變數的副本,使得每個執行緒在某一時間訪問到的並不是同一個物件,這樣就隔離了多個執行緒對資料的資料共享。而Synchronized卻正好相反,它用於在多個執行緒間通訊時能夠獲得資料共享)
- java有哪些容器(集合,tomcat也是一種容器)
- 二分查詢演算法
- myisam的優點,和innodb的區別
- redis能存哪些型別
- http協議格式,get和post的區別
- 可重入鎖中對應的wait和notify
- redis能把記憶體空間交換進磁碟中嗎(這個應該是可以的,但是那個面試官非跟我說不可以)
- java執行緒池中基於快取和基於定長的兩種執行緒池,當請求太多時分別是如何處理的?定長的事用的佇列,如果佇列也滿了呢?交換進磁碟?基於快取的執行緒池解決方法呢?
- synchronized加在方法上用的什麼鎖
- 可重入鎖中的lock和trylock的區別
- innodb對一行資料的讀會枷鎖嗎?不枷鎖,讀實際讀的是副本
- redis做快取是分散式存的?不同的伺服器上存的資料是否重複?guava cache呢?是否重複?不同的機器存的資料不同
- 用awk統計一個ip檔案中top10
- 對錶做統計時可直接看schema info資訊,即查看錶的系統資訊
- mysql目前用的版本
- 公司經驗豐富的人給了什麼幫助?(一般boss面會問這些)
- 自己相對於一樣的應屆生有什麼優勢
- 自己的好的總結習慣給自己今後的工作帶了什麼幫助,舉例為證
- 原子類,執行緒安全的物件,異常的處理方式
- 4億個int數,如何找出重複的數(用hash方法,建一個2的32次方個bit的hash陣列,每取一個int數,可hash下2的32次方找到它在hash陣列中的位置,然後將bit置1表示已存在)
- 4億個url,找出其中重複的(考慮記憶體不夠,通過hash演算法,將url分配到1000個檔案中,不同的檔案間肯定就不會重複了,再分別找出重複的)
有1萬個陣列,每個陣列有1000個整數,每個陣列都是降序的,從中找出最大的N個數,N<1000
- LinkedHashmap的底層實現
- 類序列化時類的版本號的用途,如果沒有指定一個版本號,系統是怎麼處理的?如果加了欄位會怎麼樣?
- Override和Overload的區別,分別用在什麼場景
- java的反射是如何實現的
【阿里巴巴面試題目含答案】
1,mysql的三大引擎是啥?
mysql常用的引擎有InnoDB,MyISAM,Memory,預設是InnoDB
InnoDB:磁碟表,支援事務,支援行級鎖,B+Tree索引
ps:優點: 具有良好的ACID特性。適用於高併發,更新操作比較多的表。需要使用事務的表。對自動災難恢復有要求的表。
缺點:讀寫效率相對MYISAM比較差。佔用的磁碟空間比較大。
mysql的4大特性+4種隔離級別:
MyISAM:磁碟表,不支援事務,支援表級鎖,B+Tree索引
ps: 優點:佔用空間小,處理速度快(相對InnoDB來說)
缺點:不支援事務的完整性和併發性
MEMORY(Heap):記憶體表,不支援事務,表級鎖,Hash索引,不支援Blob,Text大型別
ps: 優點:速度要求快的,臨時資料
缺點:丟失以後,對專案整體沒有或者負面影響不大的時候。
2,redis的hash演算法用的是啥?
redis應該是使用一致性hash演算法---MurmurHash3 演算法,具有低碰撞率優點,google改進的版本cityhash也是redis中用到的雜湊演算法。
現有的主流的大資料系統都是用的 MurmurHash本身或者改進
3,nosql為啥比sql快?
Nosql是非關係型資料庫,因為不需要滿足關係資料庫資料一致性等複雜特性所以速度快;
sql是關係型資料庫,功能強大,但是效率上有瓶頸
4,什麼是索引為啥nosql沒索引?nosql有索引滴
索引分為聚簇索引和非聚簇索引兩種,聚簇索引是按照資料存放的物理位置為順序的,而非聚簇索引就不一樣了;聚簇索引能提高多行檢索的速度,而非聚簇索引對於單行的檢索很快。
聚簇索引:有主鍵時,根據主鍵建立聚簇索引;沒有主鍵時,會用一個唯一且不為空的索引列做為主鍵,成為此表的聚簇索引;如果以上兩個都不滿足那innodb自己建立一個虛擬的聚集索引
非聚簇索引:非聚簇索引都是輔助索引,像複合索引、字首索引、唯一索引
5,B+樹和B樹區別?
B樹的非葉子節點儲存實際記錄的指標,而B+樹的葉子節點儲存實際記錄的指標
B+樹的葉子節點通過指標連起來了, 適合掃描區間和順序查詢。
這裡推薦一下我的JAVA架構學習交流群:614478470 ,想要學習Java高架構、分散式架構、高可擴充套件、高效能、高併發、效能優化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分散式專案實戰學習架構師視訊都有整理,送給每一位JAVA小夥伴,有想學習JAVA架構的,或是轉行,還有工作中想提升自己能力的,正在學習的小夥伴歡迎加入學習。
點選:加入