




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、2020年阿里精選面試題及答案1. 使用mysql索引都有哪些原則?索引什么數(shù)據(jù)結(jié)構(gòu)?B+tree和B tree什么區(qū)別?1、對于查詢頻率高的字段創(chuàng)建索引:2、對排序、分組、聯(lián)合查詢頻率高的字段創(chuàng)建索引;3、索引的數(shù)目不宜太多原因:a、每創(chuàng)建一個索引都會占用相應(yīng)的物理控件:b、過多的索引會導致insert, update、delete語句的執(zhí)行效率降低:4、若在實際中,需要將多個列設(shè)置索引時,可以采用多列索引如:某個表(假設(shè)及名為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、選擇唯一性索引唯性索引的值是唯的,可以更快速的通過該索引來確定某條記錄。例如,學生衣中 學號是具有唯性的字段。為該字段建立唯性索引可以很快的確定某個學生的信息。如果 使用姓名的話,可能存在同名現(xiàn)象,從而降低查詢速度。6、盡量使用數(shù)據(jù)量少的索引如果索引的值很長,那么查詢的速度會受到影響。例如,對個CHAR (100)類型的字 段進行全文檢索需要的時間肯定要比對CHAR (10)類型的字段需要
4、的時間要多。7、盡量使用前綴來索引如果索引字段的值很長,最好使用催的前綴來索引。例如,TEXT和BL0G類型的字段, 進行全文檢索會很浪費時間。如果只檢索字段的前面的若干個字符,這樣可以提高檢索速度。 8、刪除不再使用或者很少使用的索引.表中的數(shù)據(jù)被大量更新或者數(shù)據(jù)的使用方式被改變后原有的些索引可能不再需要。 數(shù)據(jù)庫管理員應(yīng)當定期找出這些索引,將它們刪除從而減少索引對更新操作的影響B(tài)+tree 樹索引,B tree,散列Mysql有哪些存儲引擎?請詳細列舉其區(qū)別?InnoDB:事務(wù)型存儲引擎,并且有較高的并發(fā)讀取頻率MEMORY:存儲引挈,存放在內(nèi)存 中.數(shù)據(jù)量小,速度快Merge:ARCHI
5、VE:歸檔,有很好的壓縮機制設(shè)計高并發(fā)系統(tǒng)數(shù)據(jù)庫層面該如何設(shè)計?數(shù)據(jù)庫鎖有哪些類型?如何實現(xiàn)?.分庫分表:同樣量的數(shù)據(jù)平均存儲在不同數(shù)據(jù)庫相同表(或不同衣)中,減輕單式壓 力,如果還是很大,就可以每個庫在分多張表,根據(jù)hash取值或者其他邏輯判斷將數(shù)據(jù) 存儲在哪張表中.讀寫分離:數(shù)據(jù)庫原本就有主從數(shù)據(jù)庫之分,查詢在從服務(wù)器,增刪改在主服務(wù)器,.歸檔和操作表區(qū)分:建張歸檔衣,將歷史數(shù)據(jù)放入,需要操作的我數(shù)據(jù)單獨存儲.索引啊之類的創(chuàng)建,對于數(shù)據(jù)量很大,百萬級別以上的單/3如果增刪改操作不頻繁 的話,可以創(chuàng)建bitMap索引,速度要快得多.共享鎖:要等第個人操作完.釋放鎖,才能操作.更新鎖:解決死鎖
6、,別人可以讀,但不能操作.排他鎖:讀寫都被禁用.意向鎖(xlock):對表中部分數(shù)據(jù)加鎖,查詢時,可以跳過.計劃鎖:操作時,別的表連接不了這張表,數(shù)據(jù)庫事務(wù)有哪些?原子性:所有操作要么全部成功,要么全部失敗一致性:例如轉(zhuǎn)賬,個事務(wù)執(zhí)行前和執(zhí)行后必須致隔離性:防止臟讀,重復讀問題 持久性:永久性提交數(shù)據(jù)必Oracle常用函數(shù)有哪些?Concat:字符串拼接,或者| KConcat:字符串拼接,或者| | Instr:指定字符串位置Length:長度Trim:去空格Lower:小寫Upper:大寫Nvl:判斷空Replace:替換Substr:截取Floor:向下取整To_nmber:To_cha
7、r:To.date:Decode:判斷函數(shù)等等6.Sql中哪些情況可能不會走索引?查詢謂詞沒有使用索引的主要邊界,換句話說就是select *,可能會導致不走索引單鍵值的b樹索引列上存在null值,導致COUNTS)不能走索引。索引列存在空值索引列上有函數(shù)運算,導致不走索引隱式類型轉(zhuǎn)換導致不走索引。表的數(shù)據(jù)庫小或者需要選擇大部分數(shù)據(jù),不走索引!=或者0 (不等于),可能導致不走索引表字段的屬性導致不走索引,字符型的索引列會導致優(yōu)化器認為需要掃描索引大部分數(shù)據(jù)且聚簇因子很大,最終導致棄用索引掃描而改用全農(nóng)掃描方式,使用like, in等,可能導致不走素引講講分布式唯一 ID?確定ID存儲用64位
8、,1個64位二進制6是這樣的000000001100 0101,切割64位,某段二進制表示成1個約束條件,前41位為耋秒時間,后緊接9位為IP, IP之 后為自增的二進制,記錄當前面位數(shù)相同情況下是第幾個id,如現(xiàn)在有10臺機器,這個id 生成游生成id極限是同臺機器Ims內(nèi)生成2的14次方個IDo分布式唯 TD =時間戳 41位,int類型服務(wù)器編號 10,序列自增sequence o每個時間 戳內(nèi)只能生成固定數(shù)量如(1。萬)個自地號,達到最大值則同步等待下個時間戳,白墻從。 開始。將,空秒數(shù)放在最高位,保證生成的ID是趨勢逢增的,每個業(yè)務(wù)統(tǒng)、每個機房、每個 機器生成的ID都是不同的。如39
9、bit毫秒數(shù)|4bit業(yè)務(wù)線12bit機房I預(yù)留17bit序列號。 高位職2016年1月1耳1到現(xiàn)在的耋秒數(shù),系統(tǒng)運行1曾,至少需要10年x365天x24小 時X3600愁X1000邕秒=320 xl0.9,差不多39bit給秒 數(shù),每秒單機高峰并發(fā)小于10。, 差不多7bit給每忘秒的自增號,5年內(nèi)機房小于100臺機器,預(yù)留2bit給機房,每個機房 小二100臺機器,預(yù)留7bit給每個機房,業(yè)務(wù)線小于10個,預(yù)留4bit給業(yè)務(wù)線標識。64bit分布式ID (42bit斑秒+5bit機器ID+12位自增)等生成分布式工D的方式:A, 2個自增表,步長相互隔開B,時間的堂秒或者納秒C, UUID
10、 D, 64位約束條件(如上)NIO和IO的區(qū)別?第點,町o少r 1次從內(nèi)核空間到用戶空間的拷貝。Byt eBuff er. allocat eDir ect ()分配的內(nèi)芍使用的是本機內(nèi)存而不是Java堆上的內(nèi) 存,和網(wǎng)絡(luò)或者磁盤交互都在操作系統(tǒng)的內(nèi)核空間中發(fā)生oallocateDirectO的區(qū)別在于這 塊內(nèi)存不由java堆管理,但仍然在同用戶進程內(nèi)。第二點,町0以塊處理數(shù)據(jù),10以流處理數(shù)據(jù)第三點,非阻塞,阿。1個線程可以管理多個輸入輸出通道Redis內(nèi)存數(shù)據(jù)上升到一定大小會執(zhí)行數(shù)據(jù)淘汰策略,Redis提供了哪6種數(shù)據(jù)淘汰策略?LRU:從已設(shè)置過期時間的數(shù)據(jù)集合中挑選最近最少使用的數(shù)據(jù)淘
11、汰random:從已設(shè)置過期時間的數(shù)據(jù)中挑選任意數(shù)據(jù)淘汰ttl:從已設(shè)置過期時間的數(shù)據(jù)集合中挑選將要過期的數(shù)據(jù)淘汰。notenvision:禁止昵逐數(shù)據(jù)如mysql中有2千萬數(shù)據(jù),redis只存儲20萬的熱門數(shù)據(jù)。LRU或者TTL都滿足熱點數(shù)據(jù)讀 取較多,不太可能超時特點。redis特點:速度塊,0 (1),豐富的數(shù)據(jù)類型,支持事物原性,可用于存,比memecache 速度塊,可以持久化數(shù)據(jù)。常見問題和解決:Master最好不做持久億如RDB快照和A0F日志文件;如果數(shù)據(jù)比較重 要,某分slave開啟A0F備份數(shù)據(jù),漩各為每秒1次,為了主從復制速度及稔定,MS主從 在同一局域網(wǎng)內(nèi);主從復制不要
12、用圖狀結(jié)構(gòu),用單向鏈表更為穩(wěn)定M-S-S-S-So.。: redis 過期采用懶漢+定期,懶漢即get/set時候檢查key是否過期,過期則刪除key,定期遍歷 每個DB,檢查制定個數(shù)個key;結(jié)合服務(wù)器性能調(diào)節(jié)并發(fā)情況。過期淘汰,數(shù)據(jù)寫入redis會附帶1個有效時間,這個有效時間內(nèi)該數(shù)據(jù)被認為是正確的 并不關(guān)心真實情況,例如對支付等業(yè)務(wù)采用版本號實現(xiàn),redis中每份數(shù)據(jù)都維持1個版 本號,DB中也維持1份,只有當redis的與DB中的版本致時,才會認為redis為有效 的,不過仍然每次都要訪問DB,只需要查詢version版本字段即可。請描述 MyISM 和 InnoDB?YylSV采用表
13、級鎖,對Myism表讀不會阻塞讀,會阻塞同表寫,對Myism寫則會阻塞讀和寫, 即個線程獲得1個表的寫鎖后,只有持有鎖的線程可以對表更新操作,其他線程的讀和寫 都會等待。InnoDB,采用行級鎖,支持事務(wù),例如只對a列加索引,如果update.where a=l and b=2 其實也會鎖整個表,select使用共享鎖,update insert delete采用排它鎖,commit會把 鎖職消,當然select by id for update也可以制定排它鎖c請描述實時隊列?實時隊列采用雙隊列模式,生產(chǎn)者將行為記錄寫入Queuel, worker服務(wù)從Queuel消贄 新 鮮數(shù)據(jù),如果異常
14、則寫入Queue 2 (主要保存異常數(shù)據(jù)),RetryWorker會監(jiān)聽Queue 2,消 費異常數(shù)據(jù),如果還未處理成功按照定的策略等待或者將異常數(shù)據(jù)再寫入Queue2,如果數(shù) 據(jù)發(fā)生積壓可以調(diào)整worker的消費游標,從最新數(shù)據(jù)重新開始消費,保證/最新data得到 處理,中間未處理的段則可以啟動backupworker指定起止游標在消費完指定區(qū)間的數(shù)據(jù) 后,backupWorker會自動停止。DB降級開關(guān)后,可直接寫入redis (stoim),同時將數(shù)據(jù)寫入份到Retry隊列,在開啟DB 降級開關(guān)后消費Retry隊列中的數(shù)據(jù),從而把數(shù)據(jù)寫入到mysql中,達到最終致性。MYSQL 切分為分
15、片為2的、次方,例如原來分為兩個庫dO和dl均放在sO服務(wù)器上,sO同時有備 機si,擴容只要幾步驟:確保sO到si服務(wù)器同步順利,沒有明顯延遲:sO暫時關(guān)閉讀寫權(quán) 限;確保si已經(jīng)完全同步到sO更新;si開放讀寫權(quán)限;dl的dns由sO切換到si; sO開 放讀寫權(quán)限。DB的特性和隔離級別?4大特性:原子性,致性,分離性,持久性隔離級別:讀提交:寫事務(wù)禁止讀讀未提交:寫事務(wù)允許讀可重復讀:寫事務(wù)禁止讀事務(wù),讀禁止與序列化:全部禁止詳細說明:讀提交1個事務(wù)開始寫則全音噤止其他事務(wù)訪問該行。讀未提交1個事務(wù)開始 寫則不允許其他事務(wù)同時寫,但可以讀??芍貜妥x讀事務(wù)會禁止寫事務(wù),寫事物則禁止其 他任
16、何事務(wù)。序列化性能最低,全部禁止,串行執(zhí)行。MYSQL默認的是可重復讀。ICMP是什么協(xié)議,處于哪一層?Internet控制報文協(xié)議,處于網(wǎng)絡(luò)層(IP層)講一下NIO和網(wǎng)絡(luò)傳輸.NIO Reactor反應(yīng)器模式,例如汽車是乘客訪問的實體reactor,乘客上車后到售票員處 Acceptor登記,之后乘客便可休息睡覺了,到達乘客目的地后,售票員Aceptor將其喚即可。 持久TCP長鏈接每個client和曙匕如工之間有存在一個持久連接,當CCU (用戶并發(fā)數(shù)量)上 升,阻塞server無法為每個連接運行1個線程,自己開發(fā)1個二進制協(xié)議,將message壓縮至 3-6倍,傳輸雙向且消息頻率高,假設(shè)
17、gver鏈接了 2000個client,每個client平均每分鐘傳 輸1T0個message, 1個messaged的大小為幾百字節(jié)/幾千字節(jié),而server也要向client廣播 其他玩家的當前信息,需要高速處理消息的能力。Buffer,網(wǎng)絡(luò)字節(jié)存放傳輸?shù)牡胤剑瑥腸hannel 中讀與,從buff er作為中間存儲格式,channel是 網(wǎng)絡(luò)連接與buffer間數(shù)據(jù)通道,像之前的 socket 的 stream。內(nèi)存泄漏未對作廢數(shù)據(jù)內(nèi)存單元置為null,盡早釋放無用對象的引用,使用臨時變量時,讓引用變量 在推出活動域后自動設(shè)置為null,暗示垃圾收集器收集;程序避免用String拼接,用 StringBuffer,因為每個String會占用內(nèi)存一塊區(qū)域;盡量少用靜態(tài)變量(全局不會回收): 不要集中創(chuàng)建對象尤其大對象,可以使用流操作;盡量使用對象池,不再循環(huán)中創(chuàng)建對象, 優(yōu)化配置;創(chuàng)建對象到單例getlnstance中,對象無法回收被單例引用:服務(wù)器session時 間設(shè)置過長也會引起內(nèi)存泄漏。請描述平衡二叉樹.平衡二叉樹,左右高度之差不超過1, Add/加lete可能造
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑鋼材期貨鎖價采購綠色節(jié)能合同
- 汽車廣告創(chuàng)意設(shè)計及營銷合同
- 寵物糞便處理責任保證協(xié)議(住宅小區(qū))
- 游戲虛擬貨幣發(fā)行與內(nèi)容版權(quán)保護協(xié)議
- 高空作業(yè)安全盤扣式腳手架租賃一體化服務(wù)合同
- 夫妻間電子設(shè)備使用規(guī)范及忠誠度保障協(xié)議書
- Web前端開發(fā)課件 項目一 HTML文檔結(jié)構(gòu)
- DB42-T 2005.2-2023 就業(yè)創(chuàng)業(yè)服務(wù) 第2部分:創(chuàng)業(yè)擔保貸款網(wǎng)辦服務(wù)規(guī)范
- 教師心理健康學習心得體會模版
- 2023年人教版四年級語文上冊八單元測試卷及答案2
- DB63-T 2086-2022水利水電工程堆石混凝土壩施工質(zhì)量檢驗與評定規(guī)范
- 無錫惠山泥人課件
- 鎮(zhèn)海中學劍橋班入學測試卷
- 人教版八年級英語下冊第六單元教案
- 隱蔽工程(隨工檢查)驗收表
- GB∕T 32218-2015 真空技術(shù) 真空系統(tǒng)漏率測試方法
- 消防(控制室)值班記錄
- T∕CGMA 033001-2018 壓縮空氣站能效分級指南
- 工業(yè)管道的分類和分級
- 機器人任務(wù)規(guī)劃
- 易拉罐回收機設(shè)計畢業(yè)設(shè)計
評論
0/150
提交評論