做者:閃電⚡晨晨
連接:https://www.nowcoder.com/discuss/52422?type=2&order=0&pos=74&page=1
來源:牛客網
一、線程和進程的區別 進程: 併發執行的程序在執行過程當中分配和管理資源的基本單位 進程的執行過程是線性的,進程的切換保護資源。 線程: 是CPU調度的基本單位 線程共享進程中的資源,線程的切換並不影響計算機軟硬件資源的分配。node
二、中斷和異常的區別 中斷: 系統中止當前正在運行的程序而轉向其餘服務 異常: 軟件運行過程當中的一種開發過程當中沒有考慮到的程序錯誤 也稱爲同步中斷,在指令執行結束後發生的中斷linux
3虛擬內存和虛擬地址 虛擬內存: 程序使用的內存,利用外存來擴充內存,須要內存映射 虛擬地址: 由頁號和偏移量組成,位數與地址總線的位數相同redis
四、死鎖 必要條件: (1)互斥條件:一個資源每次只能被一個進程使用 (2)請求與保持條件:進程因請求資源而阻塞時,對得到的資源保持不放 (3)不剝奪條件:已得到資源,未使用完以前不能被剝奪 (4)循環等待條件:算法
解決方法: (1)死鎖預防:破壞死鎖產生的條件 (2)死鎖避免:每次申請以前判斷是否安全(銀行家算法) (3)死鎖檢測:(超時法和等待圖法) (4)死鎖解除 sql
五、內聯函數和宏定義 宏定義: 預編譯階段 不作類型檢查 內聯函數: 編譯階段 作類型檢查 短小函數 頻繁調用形成內存膨脹shell
六、數據庫索引 惟一索引 索引值惟一,但容許有空值 主鍵索引 特殊的惟一索引,但不容許有空值 普通索引 組合索引 多個屬性值構成的索引 數據庫
七、彙集索引&非彙集索引 彙集索引 索引鍵值的邏輯順序決定了數據的物理儲存順序 葉子節點就是數據塊 非彙集索引 索引鍵值的邏輯順序與數據的物理順序可能不一致 葉子結點是指向對應數據塊的指針 B+樹&平衡二叉樹 B+數 全部關鍵字出如今葉子節點 非葉節點是索引,葉子節點是 儲存 更適合作文件索引系統 查找性能接近二分查找樹編程
八、設計模式 設計模式
一、簡單工廠模式:針對一樣的數據,不一樣的操做用一樣的接口。由工廠類建立不一樣的產品,不一樣的產品都是抽象類的繼承類。數組
二、工廠方法:針對一樣的數據,不一樣的操做使用不一樣的接口。
三、抽象工廠:針對不一樣的數據,不一樣的操做使用不一樣的接口。
九、10億個數找10個頻率最高的
一、利用hash方法把數據集分紅幾個部分。
二、利用hash統計每一部分的詞頻。
三、利用堆排序求出每一個數據集的前k個.
四、合併每一個數據集的前k個。
十、1001裏兩個重複的數字 抑或
十一、最大回文子串 動態規劃,記錄左邊迴文的最大右邊界
十二、100層樓丟兩個雞蛋 不等式約束求最大值
1三、三狼過河智力題 深度優先搜索
1四、斐波那契數列的變形 跑樓梯
1五、二叉樹層次遍歷(如何只遍歷某一層) 隊列實現, 1
六、鏈表反轉 注意參數取值 1七、二叉樹後序遍歷,遞歸和非遞歸
1八、經常使用排序算法的穩定性 快排,堆排,希爾排序不穩定,舉例子
1九、爲何靜態單例對象? 單例模式惟一的實例必須爲靜態 不能建立對象,只能經過類中的接口來調用類中建立的對象。 使用類名直接調用類中的方法,因此類中的成員函數和數據成員必須是靜態的。
20、linux系統的特色 開放性,多用戶,多任務,良好的界面,設備獨立性:操做系統把全部的設備統一看成文件來處理,可靠的安全系統,良好的移植性:適應各類平臺,豐富的網絡功能。
2一、多進程和多線程 前者開銷大,後者開銷小(數據,資源角度),前者更加獨立。
2二、多線程編程要點,如何保證線程間數據訪問的安全性 負載平衡,發揮每一個核的做用。互斥和同步。
2三、一棵有序的二叉樹中搜索到給定值 二叉排序樹
2六、虛函數(做用及實現) 參考簡單工廠模式。
2七、http協議(請求方式get和post的區別,不一樣的狀態碼,URL規格,404是什麼錯誤) get:請求讀取,post:請求添加信息,1xx: 通知信息,2xx:成功,3xx:重定向,4xx:客戶端出錯,5xx:服務器出錯,<協議>://<主機域名>:<端口號>/<具體路徑>,not found
2八、網頁的推薦是怎麼實現的(cookie,session是什麼?儲存在什麼位置,起什麼做用?) cookie記錄訪問網頁的狀況。Cookie保存在客戶端,session保存在服務器端。
2九、10億個11位的號碼中找給定號碼是否存在 bool過濾器
30、linux系統中的經常使用命令 cd,gcc,ls(文件列表),grep,cp(拷貝全部文件),find,mv(移動文件),rm(刪除),ps(查看某一時刻進程的運行結果),tar(打包),time(測算一個命令的執行時間)
3一、I/O多路複用(select,poll,epoll各自的原理,區別,如何使用) 經過一種機監視多個描述符,一旦就緒方可運行。Select: 每次調用,都須要把文件描述符從用戶態拷貝進內核態;從內核態遍歷全部的文件描述符;支持的文件數量小。
3二、項目中遇到的最大困難,如何解決,項目的最大成就
3三、找出數組中最大的連續和 動態規劃,當前最大值
3四、三個協程按照順序輸出
package main import ( "sync/atomic" "time" "fmt" ) func main() { var number uint32 = 10 //count至關於一個接力棒 var count uint32 trigger := func(i uint32, fn func()) { //自旋鎖 for { if n := atomic.LoadUint32(&count); n == i { fn() //必定要在執行完函數後才原子加1 atomic.AddUint32(&count, 1) break } time.Sleep( 1 * time.Millisecond) } } for i := uint32(0); i < number; i++ { go func(i uint32) { fn := func() { fmt.Println(i) } trigger(i, fn) }(i) } trigger(number, func(){}) //會按照天然數順序打印(必定是這樣) }
3五、hash表和B+樹的優點 **數據庫索引** 一、惟一索引hash佔明顯優點。二、範圍查找B+樹佔明顯優點。三、B+樹查找速度不會有太大波動。
3六、合併兩個有序鏈表
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode { var datas []int for { if l1 != nil { datas = append(datas, l1.Val) l1 = l1.Next } else { break } } for { if l2 != nil { datas = append(datas, l2.Val) l2 = l2.Next } else { break } } for i := 0; i < len(datas)-1; i++ { for j := 0; j < len(datas)-1-i; j++ { if datas[j] > datas[j+1] { datas[j], datas[j+1] = datas[j+1], datas[j] } } } if len(datas) == 0 { return nil } else { l3 := &ListNode{datas[0], nil} l3Node := l3 for i := 1; i < len(datas); i++ { l3Node.Next=&ListNode{datas[i],nil} l3Node=l3Node.Next } return l3 } }
3七、數據庫範式 2NF:非主屬性徹底函數依賴於碼。3NF:非主屬性不傳遞依賴於碼。BCNF: 任何函數以來都含有碼。
3八、快速排序算法(手寫) 遞歸&非遞歸
func quickSort(values []int,left,right int){ temp:=values[left] p:=left i,j:=left,right for i<=j{ for j>=p && values[j]>=temp{ j-- } if j>=p{ values[p]=values[j] p=j } for i<=p && values[i]<=temp{ i++ } if i<=p{ values[p]=values[i] p=i } } values[p]=temp if p-left>1{ quickSort(values,left,p-1) } if right-p>1{ quickSort(values,p+1,right) } } fund QuickSort(values []int){ quickSort(values,0,len(values)-1) }
3九、單例模式中的多線程問題如何解決 懶漢模式:加同步鎖,雙重檢測鎖定、靜態內部類(相似惡漢模式)。
40、數據庫,左右鏈接,內連接 內連接:只有兩個表相匹配的行纔在結果中出現。外鏈接:左外鏈接,右外鏈接,完整外部鏈接。
4一、二叉樹的遍歷 前中後非遞歸
4二、linux命令查看CPU的使用狀況 top
4三、CPU load命令 進程對列的長度(CPU作多少工做)
4四、數據庫事務的隔離級別 55
4五、髒讀,幻讀,丟失修改 (讀完另外一方RoLLBack)、(讀完對方已修改再讀)、(改完別人又改)
4六、鎖的類型(排他鎖、共享鎖) 排他鎖(X鎖):只容許加鎖一方讀取和修改數據其它不能加任何類型的鎖。共享鎖(S鎖):加鎖一方和其它的只能讀,其它只能加S鎖。
4七、字母字符串排序,AaB 從新定義比較函數
4八、字符串找出不重複的字符組成的子串 hash表
4九、消息隊列 不懂
50、頁面置換算法 FIFO,LRU,LFU(最不長使用)
5一、抖動 剛被置換出的頁面立刻又被使用
5二、缺頁中斷 頁表沒有,調入內存
5三、條件機率 盒子有球問題
5四、九宮格交換棋子
5五、數據庫隔離級別
一、可讀取未確認:寫事務阻止寫事務,但未阻止讀事務(髒數據)。
二、可讀取確認:寫事務阻止讀寫事務,但讀事務不阻止其它事務(不可重複度)。
三、可重複讀:讀事務阻止寫事務,但不阻止其它事務(丟失修改)。
5六、繩子覆蓋數軸上的點 兩個端點,小於前走,大於後走
5七、2sum和ksum問題 hash方法或排序後左右夾逼,ksum經過遍歷轉化爲2sum問題。
5八、數據庫failover
5九、AQS(如何管理線程,實現公平鎖和非公平鎖)
60、蓄水池問題
6一、實現大數相乘 字符串儲存,注意進位
6二、操做系統磁盤的瞭解
物理結構:盤片、磁道、扇區。
邏輯結構:引導控制塊(系統從該分區引導操做系統有關信息),分區控制塊(分區的詳細信息)。
調度算法:FCFS、SSTF、SCAN、C-SCAN
6三、linux shell
6四、操做系統內存碎片
6五、編程實現:1!+…+N!
6六、sql查詢語句
6八、分佈式session三種實現方式和優缺點
6九、重建二叉樹
70、二份查找 左右邊界
7一、字符串全排列(時間複雜度) 遞歸算法(按次序交換兩個字符的位置),O(n!)
7二、數組有正有負,移到兩邊 快速排序,中軸爲0,swap(a[index++],a[i]);
7三、判斷整數是否爲2,4,8的冪次方 return x&(x-1)==0; return x&(x-1)==0&&x&0x55555555!=0; int i; for(i=0;n!=1;i++) n=n>>1; return x&(x-1)&&i%3==0;
7四、旋轉有序數組,找到其中的一個值(leetcode) 肯定左邊有序仍是右邊有序
7五、nat協議 網絡層協議:網絡地址轉換,將本地IP地址轉換爲全球IP地址,使專用網內部的主機與因特網上的主機通訊。
7六、arp協議 數據鏈路層:地址解析協議(由IP地址得到MAC地址),在本局域網內廣播發送請求,響應數據幀是單波發送。(NAPT)
7七、ip地址和mac地址的區別
ip地址:網絡層地址,包含網絡號和主機號,點分十進制表示IPv4 32位,IPv6 128位。
mac地址:物理地址,適配器地址,數據鏈路層的地址。
7八、常見的單例模式
單例模式:某一實體類只需存在一個對象就能夠知足全部的業務需求。
一、其餘類沒法初始化該類的對象(構造函數爲私有類型)。
二、該類能夠在類中實例化一個惟一的自身對象(靜態對象)。
三、當前類能夠向外界提供一個惟一的接口來提供實例,並返回一個該類的對象(靜態函數)。
惡漢模式: 實例在加載類時創建。線程安全(其餘類不能修改實例)
懶漢模式: 其餘類調用該類的獲取方法時建立實例。線程不安全(多個線程建立多個實例)
8一、觀察者模式用法,實現
8二、hash解決衝突的方法,如何保證多個hash函數不會出現死循環
8三、如何破壞單例 反射機制和序列化機制
8四、64G內存如何設置堆大小
85丶redis數據類型: Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
86. redis怎麼實現排行榜 有序集合zset
87. go的協程調度 PMG 咱們能夠從上面的圖裏看到兩個線程(M),每一個線程都擁有一個上下文(P),每一個線程都正在運行一個goroutine(G)。爲了運行goroutines,一個線程必須擁有一個上下文
88. 解決hash衝突 :
1.開放定址法(線性探測再散列,二次探測再散列,僞隨機探測再散列)
2.再哈希法
3.鏈地址法(Java hashmap就是這麼作的)
4.創建一個公共溢出區
89. hash傾斜 :
爲了解決hash傾斜難題,一致性算法是這樣的,節點和節點造成一個環。好比
A->B->C->A,這樣一個環。數字hash後落在環上,而不是落到某個node。好比落在a~b node之間,經過順時針轉,這個數字歸b節點管。
可是若是節點不多,一樣容易出現傾斜,負載不均衡問題。因此一致性哈希算法,引入了虛擬節點,在整個環上,均衡增長若干個節點。好比a1,a2,b1,b2,c1,c2,a1和a2都是 屬 於A節點的。
經過讓閉環上的節點增長,來平衡各個節點散列的值。
90. 100億個數選top5,小根堆
91. goroutine泄漏有沒有處理,設置timeout,select加定時器
92. select、epoll
93. go map --> hashmap
94. 有沒有網絡編程,有,怎麼看鏈接狀態?netstat,有哪些?ESTABLISHED,LISTEN等等,有異常狀況嗎?TIME_WAIT不少,爲何?大量短連接