1. 程式人生 > >七面阿里:現在分享一下阿里最全面試116題:阿里天貓、螞蟻金服、阿里巴巴面試題含答案

七面阿里:現在分享一下阿里最全面試116題:阿里天貓、螞蟻金服、阿里巴巴面試題含答案

貌似這一點適應的行業最廣,但是我可以很肯定的說:當你從事Java一年後,重新找工作時,才會真實的感受到這句話。

工作第一年,往往是什麼都充滿新鮮感,什麼都學習,衝勁十足的一年;WEB行業知識更新特別快,今天一個框架的新版本,明天又是另一個新框架,有時往往根據專案的需要來不斷學習新東西;所有,很多時候感覺,自己用過的東西真多呀!但是真正深入研究的東西卻不多。面試,是跳槽後第一個需要面對的問題;而且不同公司面試的著重點不同;但是卻有一個共同點:Java基礎是必考的。

工作第一年,可能問你String物件建立的理解,常用的框架是什麼等等;

工作第三年,就問你Java記憶體分配機制是什麼,類是如何載入的等等;

工作第五年,就問你常用的設計模式是什麼,你在工作中充當什麼角色,怎麼獨立完成一個模組等等;

可以看出——這是一個典型的程式設計師的成長過程:

使用Java—->深入理解Java積累經驗——>獨立設計分析能力——>獨當一面的多面手!

因此,必須學習:

資料庫 最常用的是Oracle了(當然銀行專案等需要DB2等),熟練掌握使用儲存過程,觸發器等;

UML 專案中經常要寫文件,專案經理的基本功,程式設計師走向設計的基本功;

linux系統 需要掌握常用的linux命令——部署在windows作業系統上的專案很少吧。

其他就不多說了,大家可以補充。

學習上,興趣是最大的老師;專案驅動也是不錯的選擇,總之,不學習不行。

文章很長,可以先收藏

從阿里面試回來給大家分享一下阿里所問到的面試題

【阿里天貓、螞蟻、釘釘面試題目】

  1. junit用法,before,beforeClass,after, afterClass的執行順序
  2. 分散式鎖
  3. nginx的請求轉發演算法,如何配置根據權重轉發
  4. 用hashmap實現redis有什麼問題(死鎖,死迴圈,可用ConcurrentHashmap)
  5. 執行緒的狀態
  6. 執行緒的阻塞的方式
  7. sleep和wait的區別
  8. hashmap的底層實現
  9. 一萬個人搶100個紅包,如何實現(不用佇列),如何保證2個人不能搶到同一個紅包,可用分散式鎖
  10. java記憶體模型,垃圾回收機制,不可達演算法
  11. 兩個Integer的引用物件傳給一個swap方法在方法內部交換引用,返回後,兩個引用的值是否會發現變化
  12. aop的底層實現,動態代理是如何動態,假如有100個物件,如何動態的為這100個物件代理
  13. 是否用過maven install。 maven test。git(make install是安裝本地jar包)
  14. tomcat的各種配置,如何配置docBase
  15. spring的bean配置的幾種方式
  16. web.xml的配置
  17. spring的監聽器。
  18. zookeeper的實現機制,有快取,如何儲存註冊服務的
  19. IO會阻塞嗎?readLine是不是阻塞的
  20. 用過spring的執行緒池還是java的執行緒池?
  21. 字串的格式化方法 (20,21這兩個問題問的太低階了)
  22. 時間的格式化方法
  23. 定時器用什麼做的
  24. 執行緒如何退出結束
  25. java有哪些鎖?樂觀鎖 悲觀鎖 synchronized 可重入鎖 讀寫鎖,用過reentrantlock嗎?reentrantlock與synmchronized的區別
  26. ThreadLocal的使用場景
  27. java的記憶體模型,垃圾回收機制
  28. 為什麼執行緒執行要呼叫start而不是直接run(直接run,跟普通方法沒什麼區別,先調start,run才會作為一個執行緒方法執行)
  29. qmq訊息的實現機制(qmq是去哪兒網自己封裝的訊息佇列)
  30. 遍歷hashmap的三種方式
  31. jvm的一些命令
  32. memcache和redis的區別
  33. mysql的行級鎖加在哪個位置
  34. ConcurrentHashmap的鎖是如何加的?是不是分段越多越好
  35. myisam和innodb的區別(innodb是行級鎖,myisam是表級鎖)
  36. mysql其他的效能優化方式
  37. linux系統日誌在哪裡看
  38. 如何檢視網路程序
  39. 統計一個整數的二進位制表示中bit為1的個數
  40. jvm記憶體模型,java記憶體模型

【阿里巴巴面試題目】

  1. 如何把java記憶體的資料全部dump出來
  2. 如何手動觸發全量回收垃圾,如何立即觸發垃圾回收
  3. hashmap如果只有一個寫其他全讀會出什麼問題
  4. git rebase
  5. mongodb和hbase的區別
  6. 如何解決併發問題
  7. volatile的用途
  8. java執行緒池(好像之前我的理解有問題)
  9. mysql的binlog
  10. 代理模式
  11. mysql是如何實現事務的
  12. 讀寫分離何時強制要讀主庫,讀哪個從庫是通過什麼方式決定的,從庫的同步mysql用的什麼方式
  13. mysql的儲存引擎
  14. mysql的預設隔離級別,其他隔離級別
  15. 將一個連結串列反轉(用三個指標,但是每次只發轉一個)
  16. spring Aop的實現原理,具體說說
  17. 何時會記憶體洩漏,記憶體洩漏會拋哪些異常
  18. 是否用過Autowire註解
  19. spring的注入bean的方式
  20. sql語句各種條件的執行順序,如select, where, order by, group by
  21. select xx from xx where xx and xx order by xx limit xx; 如何優化這個(看explain)
  22. 四則元算寫程式碼
  23. 統計100G的ip檔案中出現ip次數最多的100個ip
  24. zookeeper的事物,結點,服務提供方掛了如何告知消費方
  25. 5臺伺服器如何選出leader(選舉演算法)
  26. 介面卡和代理模式的區別
  27. 讀寫鎖
  28. static加鎖
  29. 事務隔離級別
  30. 門面模式,類圖(外觀模式)
  31. mybatis如何對映表結構
  32. 二叉樹遍歷
  33. 主從複製
  34. mysql引擎區別
  35. 靜態內部類載入到了哪個區?方法區
  36. class檔案編譯後加載到了哪
  37. web的http請求如何整體響應時間變長導致處理的請求數變少,該如何處理?用佇列,當處理不了那麼多http請求時將請求放到佇列

這裡推薦一下我的JAVA架構學習交流群:614478470 ,想要學習Java高架構、分散式架構、高可擴充套件、高效能、高併發、效能優化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分散式專案實戰學習架構師視訊都有整理,送給每一位JAVA小夥伴,有想學習JAVA架構的,或是轉行,還有工作中想提升自己能力的,正在學習的小夥伴歡迎加入學習。

點選:加入

中慢慢處理,web如何實現佇列

  1. 執行緒安全的單例模式
  2. 快速排序效能考慮
  3. volatile關鍵字用法
  4. 求表的size,或做資料統計可用什麼儲存引擎
  5. 讀多寫少可用什麼引擎
  6. 假如要統計多個表應該用什麼引擎
  7. concurrenhashmap求size是如何加鎖的,如果剛求完一段後這段發生了變化該如何處理
  8. 1000個蘋果放10個籃子,怎麼放,能讓我拿到所有可能的個數
  9. 可重入的讀寫鎖,可重入是如何實現的?
  10. 是否用過NIO
  11. java的concurrent包用過沒
  12. sting s=new string("abc")分別在堆疊上新建了哪些物件
  13. java虛擬機器的區域分配,各區分別存什麼
  14. 分散式事務(JTA)
  15. threadlocal使用時注意的問題(ThreadLocal和Synchonized都用於解決多執行緒併發訪問。但是ThreadLocal與synchronized有本質的區別。synchronized是利用鎖的機制,使變數或程式碼塊在某一時該只能被一個執行緒訪問。而ThreadLocal為每一個執行緒都提供了變數的副本,使得每個執行緒在某一時間訪問到的並不是同一個物件,這樣就隔離了多個執行緒對資料的資料共享。而Synchronized卻正好相反,它用於在多個執行緒間通訊時能夠獲得資料共享)
  16. java有哪些容器(集合,tomcat也是一種容器)
  17. 二分查詢演算法
  18. myisam的優點,和innodb的區別
  19. redis能存哪些型別
  20. http協議格式,get和post的區別
  21. 可重入鎖中對應的wait和notify
  22. redis能把記憶體空間交換進磁碟中嗎(這個應該是可以的,但是那個面試官非跟我說不可以)
  23. java執行緒池中基於快取和基於定長的兩種執行緒池,當請求太多時分別是如何處理的?定長的事用的佇列,如果佇列也滿了呢?交換進磁碟?基於快取的執行緒池解決方法呢?
  24. synchronized加在方法上用的什麼鎖
  25. 可重入鎖中的lock和trylock的區別
  26. innodb對一行資料的讀會枷鎖嗎?不枷鎖,讀實際讀的是副本
  27. redis做快取是分散式存的?不同的伺服器上存的資料是否重複?guava cache呢?是否重複?不同的機器存的資料不同
  28. 用awk統計一個ip檔案中top10
  29. 對錶做統計時可直接看schema info資訊,即查看錶的系統資訊
  30. mysql目前用的版本
  31. 公司經驗豐富的人給了什麼幫助?(一般boss面會問這些)
  32. 自己相對於一樣的應屆生有什麼優勢
  33. 自己的好的總結習慣給自己今後的工作帶了什麼幫助,舉例為證
  34. 原子類,執行緒安全的物件,異常的處理方式
  35. 4億個int數,如何找出重複的數(用hash方法,建一個2的32次方個bit的hash陣列,每取一個int數,可hash下2的32次方找到它在hash陣列中的位置,然後將bit置1表示已存在)
  36. 4億個url,找出其中重複的(考慮記憶體不夠,通過hash演算法,將url分配到1000個檔案中,不同的檔案間肯定就不會重複了,再分別找出重複的)

有1萬個陣列,每個陣列有1000個整數,每個陣列都是降序的,從中找出最大的N個數,N<1000

  1. LinkedHashmap的底層實現
  2. 類序列化時類的版本號的用途,如果沒有指定一個版本號,系統是怎麼處理的?如果加了欄位會怎麼樣?
  3. Override和Overload的區別,分別用在什麼場景
  4. 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架構的,或是轉行,還有工作中想提升自己能力的,正在學習的小夥伴歡迎加入學習。

點選:加入