2020年阿里精選面試題及答案_第1頁
2020年阿里精選面試題及答案_第2頁
2020年阿里精選面試題及答案_第3頁
2020年阿里精選面試題及答案_第4頁
2020年阿里精選面試題及答案_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2020年阿里精選面試題及答案1. 使用mysql索引都有哪些原則?索引什么數據結構?B+tree和B tree什么區(qū)別?1、對于查詢頻率高的字段創(chuàng)建索引:2、對排序、分組、聯合查詢頻率高的字段創(chuàng)建索引;3、索引的數目不宜太多原因:a、每創(chuàng)建一個索引都會占用相應的物理控件:b、過多的索引會導致insert, update、delete語句的執(zhí)行效率降低:4、若在實際中,需要將多個列設置索引時,可以采用多列索引如:某個表(假設及名為Student),存在多個字段(StudentNo, StudentName, Sex, Address, Phone, BirthDate),其中需要 71 Stu

2、dentNo, StudentXame 字段進行查詢,對 Sex字段進行分組,對BirthDate字段建行排序,此時可以創(chuàng)建多列索引index index_najne (StudentNo, StudentXame, 5ex, BirthDate) ;#index_najne 為索引名在上面的語句中只創(chuàng)建了 個索引,但是對4個字段都賦予了豪引的功能。創(chuàng)建多列 索引,需要遵循BTree類型,即第一列使用時,才啟用索引。在上面的創(chuàng)建語句中,只有mysql語句在使用到Student、。字段時,索引才會被啟用。如:select * from Student wheie StudentNo = 1000

3、; #使用到了 StudentNo 字段, 索引被啟用。以使用explain檢測索引是否被啟用如:explain select * from Student where StudentNo = 1000;5、選擇唯一性索引唯性索引的值是唯的,可以更快速的通過該索引來確定某條記錄。例如,學生衣中 學號是具有唯性的字段。為該字段建立唯性索引可以很快的確定某個學生的信息。如果 使用姓名的話,可能存在同名現象,從而降低查詢速度。6、盡量使用數據量少的索引如果索引的值很長,那么查詢的速度會受到影響。例如,對個CHAR (100)類型的字 段進行全文檢索需要的時間肯定要比對CHAR (10)類型的字段需要

4、的時間要多。7、盡量使用前綴來索引如果索引字段的值很長,最好使用催的前綴來索引。例如,TEXT和BL0G類型的字段, 進行全文檢索會很浪費時間。如果只檢索字段的前面的若干個字符,這樣可以提高檢索速度。 8、刪除不再使用或者很少使用的索引.表中的數據被大量更新或者數據的使用方式被改變后原有的些索引可能不再需要。 數據庫管理員應當定期找出這些索引,將它們刪除從而減少索引對更新操作的影響B(tài)+tree 樹索引,B tree,散列Mysql有哪些存儲引擎?請詳細列舉其區(qū)別?InnoDB:事務型存儲引擎,并且有較高的并發(fā)讀取頻率MEMORY:存儲引挈,存放在內存 中.數據量小,速度快Merge:ARCHI

5、VE:歸檔,有很好的壓縮機制設計高并發(fā)系統(tǒng)數據庫層面該如何設計?數據庫鎖有哪些類型?如何實現?.分庫分表:同樣量的數據平均存儲在不同數據庫相同表(或不同衣)中,減輕單式壓 力,如果還是很大,就可以每個庫在分多張表,根據hash取值或者其他邏輯判斷將數據 存儲在哪張表中.讀寫分離:數據庫原本就有主從數據庫之分,查詢在從服務器,增刪改在主服務器,.歸檔和操作表區(qū)分:建張歸檔衣,將歷史數據放入,需要操作的我數據單獨存儲.索引啊之類的創(chuàng)建,對于數據量很大,百萬級別以上的單/3如果增刪改操作不頻繁 的話,可以創(chuàng)建bitMap索引,速度要快得多.共享鎖:要等第個人操作完.釋放鎖,才能操作.更新鎖:解決死鎖

6、,別人可以讀,但不能操作.排他鎖:讀寫都被禁用.意向鎖(xlock):對表中部分數據加鎖,查詢時,可以跳過.計劃鎖:操作時,別的表連接不了這張表,數據庫事務有哪些?原子性:所有操作要么全部成功,要么全部失敗一致性:例如轉賬,個事務執(zhí)行前和執(zhí)行后必須致隔離性:防止臟讀,重復讀問題 持久性:永久性提交數據必Oracle常用函數有哪些?Concat:字符串拼接,或者| KConcat:字符串拼接,或者| | Instr:指定字符串位置Length:長度Trim:去空格Lower:小寫Upper:大寫Nvl:判斷空Replace:替換Substr:截取Floor:向下取整To_nmber:To_cha

7、r:To.date:Decode:判斷函數等等6.Sql中哪些情況可能不會走索引?查詢謂詞沒有使用索引的主要邊界,換句話說就是select *,可能會導致不走索引單鍵值的b樹索引列上存在null值,導致COUNTS)不能走索引。索引列存在空值索引列上有函數運算,導致不走索引隱式類型轉換導致不走索引。表的數據庫小或者需要選擇大部分數據,不走索引!=或者0 (不等于),可能導致不走索引表字段的屬性導致不走索引,字符型的索引列會導致優(yōu)化器認為需要掃描索引大部分數據且聚簇因子很大,最終導致棄用索引掃描而改用全農掃描方式,使用like, in等,可能導致不走素引講講分布式唯一 ID?確定ID存儲用64位

8、,1個64位二進制6是這樣的000000001100 0101,切割64位,某段二進制表示成1個約束條件,前41位為耋秒時間,后緊接9位為IP, IP之 后為自增的二進制,記錄當前面位數相同情況下是第幾個id,如現在有10臺機器,這個id 生成游生成id極限是同臺機器Ims內生成2的14次方個IDo分布式唯 TD =時間戳 41位,int類型服務器編號 10,序列自增sequence o每個時間 戳內只能生成固定數量如(1。萬)個自地號,達到最大值則同步等待下個時間戳,白墻從。 開始。將,空秒數放在最高位,保證生成的ID是趨勢逢增的,每個業(yè)務統(tǒng)、每個機房、每個 機器生成的ID都是不同的。如39

9、bit毫秒數|4bit業(yè)務線12bit機房I預留17bit序列號。 高位職2016年1月1耳1到現在的耋秒數,系統(tǒng)運行1曾,至少需要10年x365天x24小 時X3600愁X1000邕秒=320 xl0.9,差不多39bit給秒 數,每秒單機高峰并發(fā)小于10。, 差不多7bit給每忘秒的自增號,5年內機房小于100臺機器,預留2bit給機房,每個機房 小二100臺機器,預留7bit給每個機房,業(yè)務線小于10個,預留4bit給業(yè)務線標識。64bit分布式ID (42bit斑秒+5bit機器ID+12位自增)等生成分布式工D的方式:A, 2個自增表,步長相互隔開B,時間的堂秒或者納秒C, UUID

10、 D, 64位約束條件(如上)NIO和IO的區(qū)別?第點,町o少r 1次從內核空間到用戶空間的拷貝。Byt eBuff er. allocat eDir ect ()分配的內芍使用的是本機內存而不是Java堆上的內 存,和網絡或者磁盤交互都在操作系統(tǒng)的內核空間中發(fā)生oallocateDirectO的區(qū)別在于這 塊內存不由java堆管理,但仍然在同用戶進程內。第二點,町0以塊處理數據,10以流處理數據第三點,非阻塞,阿。1個線程可以管理多個輸入輸出通道Redis內存數據上升到一定大小會執(zhí)行數據淘汰策略,Redis提供了哪6種數據淘汰策略?LRU:從已設置過期時間的數據集合中挑選最近最少使用的數據淘

11、汰random:從已設置過期時間的數據中挑選任意數據淘汰ttl:從已設置過期時間的數據集合中挑選將要過期的數據淘汰。notenvision:禁止昵逐數據如mysql中有2千萬數據,redis只存儲20萬的熱門數據。LRU或者TTL都滿足熱點數據讀 取較多,不太可能超時特點。redis特點:速度塊,0 (1),豐富的數據類型,支持事物原性,可用于存,比memecache 速度塊,可以持久化數據。常見問題和解決:Master最好不做持久億如RDB快照和A0F日志文件;如果數據比較重 要,某分slave開啟A0F備份數據,漩各為每秒1次,為了主從復制速度及稔定,MS主從 在同一局域網內;主從復制不要

12、用圖狀結構,用單向鏈表更為穩(wěn)定M-S-S-S-So.。: redis 過期采用懶漢+定期,懶漢即get/set時候檢查key是否過期,過期則刪除key,定期遍歷 每個DB,檢查制定個數個key;結合服務器性能調節(jié)并發(fā)情況。過期淘汰,數據寫入redis會附帶1個有效時間,這個有效時間內該數據被認為是正確的 并不關心真實情況,例如對支付等業(yè)務采用版本號實現,redis中每份數據都維持1個版 本號,DB中也維持1份,只有當redis的與DB中的版本致時,才會認為redis為有效 的,不過仍然每次都要訪問DB,只需要查詢version版本字段即可。請描述 MyISM 和 InnoDB?YylSV采用表

13、級鎖,對Myism表讀不會阻塞讀,會阻塞同表寫,對Myism寫則會阻塞讀和寫, 即個線程獲得1個表的寫鎖后,只有持有鎖的線程可以對表更新操作,其他線程的讀和寫 都會等待。InnoDB,采用行級鎖,支持事務,例如只對a列加索引,如果update.where a=l and b=2 其實也會鎖整個表,select使用共享鎖,update insert delete采用排它鎖,commit會把 鎖職消,當然select by id for update也可以制定排它鎖c請描述實時隊列?實時隊列采用雙隊列模式,生產者將行為記錄寫入Queuel, worker服務從Queuel消贄 新 鮮數據,如果異常

14、則寫入Queue 2 (主要保存異常數據),RetryWorker會監(jiān)聽Queue 2,消 費異常數據,如果還未處理成功按照定的策略等待或者將異常數據再寫入Queue2,如果數 據發(fā)生積壓可以調整worker的消費游標,從最新數據重新開始消費,保證/最新data得到 處理,中間未處理的段則可以啟動backupworker指定起止游標在消費完指定區(qū)間的數據 后,backupWorker會自動停止。DB降級開關后,可直接寫入redis (stoim),同時將數據寫入份到Retry隊列,在開啟DB 降級開關后消費Retry隊列中的數據,從而把數據寫入到mysql中,達到最終致性。MYSQL 切分為分

15、片為2的、次方,例如原來分為兩個庫dO和dl均放在sO服務器上,sO同時有備 機si,擴容只要幾步驟:確保sO到si服務器同步順利,沒有明顯延遲:sO暫時關閉讀寫權 限;確保si已經完全同步到sO更新;si開放讀寫權限;dl的dns由sO切換到si; sO開 放讀寫權限。DB的特性和隔離級別?4大特性:原子性,致性,分離性,持久性隔離級別:讀提交:寫事務禁止讀讀未提交:寫事務允許讀可重復讀:寫事務禁止讀事務,讀禁止與序列化:全部禁止詳細說明:讀提交1個事務開始寫則全音噤止其他事務訪問該行。讀未提交1個事務開始 寫則不允許其他事務同時寫,但可以讀??芍貜妥x讀事務會禁止寫事務,寫事物則禁止其 他任

16、何事務。序列化性能最低,全部禁止,串行執(zhí)行。MYSQL默認的是可重復讀。ICMP是什么協議,處于哪一層?Internet控制報文協議,處于網絡層(IP層)講一下NIO和網絡傳輸.NIO Reactor反應器模式,例如汽車是乘客訪問的實體reactor,乘客上車后到售票員處 Acceptor登記,之后乘客便可休息睡覺了,到達乘客目的地后,售票員Aceptor將其喚即可。 持久TCP長鏈接每個client和曙匕如工之間有存在一個持久連接,當CCU (用戶并發(fā)數量)上 升,阻塞server無法為每個連接運行1個線程,自己開發(fā)1個二進制協議,將message壓縮至 3-6倍,傳輸雙向且消息頻率高,假設

17、gver鏈接了 2000個client,每個client平均每分鐘傳 輸1T0個message, 1個messaged的大小為幾百字節(jié)/幾千字節(jié),而server也要向client廣播 其他玩家的當前信息,需要高速處理消息的能力。Buffer,網絡字節(jié)存放傳輸的地方,從channel 中讀與,從buff er作為中間存儲格式,channel是 網絡連接與buffer間數據通道,像之前的 socket 的 stream。內存泄漏未對作廢數據內存單元置為null,盡早釋放無用對象的引用,使用臨時變量時,讓引用變量 在推出活動域后自動設置為null,暗示垃圾收集器收集;程序避免用String拼接,用 StringBuffer,因為每個String會占用內存一塊區(qū)域;盡量少用靜態(tài)變量(全局不會回收): 不要集中創(chuàng)建對象尤其大對象,可以使用流操作;盡量使用對象池,不再循環(huán)中創(chuàng)建對象, 優(yōu)化配置;創(chuàng)建對象到單例getlnstance中,對象無法回收被單例引用:服務器session時 間設置過長也會引起內存泄漏。請描述平衡二叉樹.平衡二叉樹,左右高度之差不超過1, Add/加lete可能造

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論