應朋友之邀,今天下午去位元組送了顆人頭,最後不負眾望,被面試官攆出來了……
一面mysql索引快的原理
回答這個問題需要先看一下資料庫的儲存結構
頁結構頁和頁之間的關係
頁和頁之間的關係
有個知識,之前不知道的
聚集索引:以主鍵建立的索引,葉子節點儲存的是表中的資料
非聚集索引:非主鍵建立的索引,葉子節點中儲存的是主鍵和索引列,使用非聚集索引查詢資料,會查詢到葉子上的主鍵,再根據主鍵查到資料(這個過程叫做回表)
沒有用索引的時候,需要遍歷雙向鍊錶來定位對應的頁,有了索引,可以用二分查詢,這麼弱智的答案,我當時居然沒想到,這也是後面面試官問為什麼主鍵建議用自增字段的答案
頁碼跳頁效能(即sql offset會不會影響效能)
mysql查詢時,offset過大影響效能的原因是多次通過主鍵索引訪問資料塊的i/o操作
innodb會,myisam不會,如圖所示
innodb和myisam對比圖
innodb的二級索引對應的是主鍵,mysql查詢的時候會根據主鍵將資料塊查出來,然後執行offset丟棄,如果只查主鍵就不會有效能問題。myisam的主鍵索引和二級索引都指向資料塊,因此沒有這方面的問題
優化措施
先查詢偏移後的主鍵,再查詢資料塊
select a.* from member as a inner join (select id from member where gender=1 limit 300000,1) as b on a.id=b.id
golang中new和make的區別
make 僅用來分配及初始化型別為 slice、map、chan 的資料。new 可分配任意型別的資料.
new 分配返回的是指標,即型別 *type。make 返回引用,即 type.
new 分配的空間被清零, make 分配空間後,會進行初始化.
有乙個字母翻譯對照表,1代表a,2代表b,以此類推至26代表z,現給乙個整形陣列,例如[1,2,3,4,5,6,7,8,9],求共有多少種翻譯方式
package main
import (
"fmt"
func main()
dict := make(map[int]string)
for i := 1; i < 27; i++ else if s[i-1]*10+s[i] < 27 && s[i-1]*10+s[i] > 0
p = l1
index = 0
for index < len(list) {//拼接起來
for p.next != nil {
p = p.next
p.next = list[index]
index++
l1.print()
位元組跳動面試
不經歷大廠的歷練,你永遠不知道自己有多low,也不知道自己幹啥要去投位元組跳動,可能是要去受下打擊。首先是自我介紹,然後問專案亮點 可憐我憋不出來亮點 然後就是基礎問題 送命題 1 hashmap的結構知道吧,敘述一下 2 hashmap如果有衝突怎麼辦 3 hashmap鍊錶過長怎麼辦 4 has...
位元組跳動面試
先自我介紹,然後開始做題目 第一題是兩個小題1.判斷二叉樹是否有和為sum的路徑,2.找出二叉樹中所有和為sum的路徑 面試官直接讓做第2小題,很簡單,深搜就是,但是我各種出問題,主要是答案找到了,返回到原來地方但是出錯,後來面試官看我做出來,只是輸出有問題就說下一題了 第二題是找出二維陣列中最長上...
位元組跳動面試 C
位元組windows崗 一面 new和malloc區別 執行緒和程序區別 程序都有哪些資源 git區域,怎麼工作的 cef大概結構,框架,每個程序是幹啥的 gdb檔案裡都存了啥 lib和dll區別,dll動態載入時在記憶體裡是乙份還是兩份 虛函式是怎麼實現的 考察虛表 qt訊號槽使用方法,非同步時怎...