索引的數據結構
-
B樹
相對二叉樹來說要更矮一些,磁盤io次數更少。
M階的B樹,任意非葉子結點只有M個兒子。
非葉子結點的關鍵字個數=兒子數-1
所有葉子結點都位於同一層 -
B+樹
有n顆子樹的非葉節點含有n+1個關鍵字
葉子結點按照從小到大的順序連接,葉子結點包含全部的結點信息
所有的非葉子結點可以看成是索引的一部分,只包括子樹中最大或者最小的關鍵字
B+樹和B樹的區別
B+樹的中間結點不保存數據,磁盤可以容納更多結點元素,更加的矮胖
B+樹更穩定
B+樹的查找只需要遍歷葉子結點,B樹需要中序遍歷
堆棧
棧後進先出,是線性結構
堆是樹形結構,可以實現優先隊列
內存中的堆棧
棧是向下增長的,對是向上增長的
棧分配局部變量,堆分配程序員申請的內存空間
棧由系統自動分配,速度快。堆用new分配,速度慢。
https
在http的基礎上通過加密傳輸和身份認證保證傳輸的安全性
https在http的基礎上加入了SSL層
tcp、udp
static
- 全局變量加上static變成靜態全局變量。
沒初始化的會自動初始化爲0
在聲明他的整個文件可見,在其他文件不可見
存放在全局區 - 局部變量加上static變成靜態局部變量
在全局數據區分配內存。始終駐留在全局數據區,知道程序運行結束。作用域爲局部作用域,定義的函數語句塊結束的時候作用域隨之結束。 - 靜態函數
只能在聲明他的文件中可見
定義同名的函數不會衝突 - 類裏面的數據成員加static就是靜態數據成員
靜態數據成員在程序中只有一份拷貝,由所有對象共享訪問,靜態數據成員的值對每個對象都是一樣的。 - 靜態成員函數
爲整個類服務而不是爲某個對象服務。靜態成員函數不具有this指針,無法訪問類對象的非靜態數據成員和非靜態成員函數。
java類型
==和equals
==是直接比較兩個對象的內存地址,如果相等則是指向同一個對象的地址的
Equals比較的是對象的內容
內存分配
C++分爲堆、棧、自由存儲區、全局存儲區、常量存儲區
棧:局部變量在棧上創建,函數執行結束自動釋放
堆:程序內存動態分配
自由存儲區:
全局區:在程序編譯時已經分配好,程序整個運行期都存在
常量存儲區:存放的是const,不允許修改
多態
在基類函數前面加上virtual關鍵字,在派生類中重寫該函數,運行時根據實際類型來調用相應的函數,如果對象類型是派生類,就調用派生類函數,如果對象類型是基類,就調用基類函數。
Static變量怎麼存
堆棧分配內存
數據庫調優
- 創建索引,避免全表掃描,在where和order by上建立索引
- 避免在索引上使用計算
- 儘量將多條sql語句壓縮到一條執行(設計到建立網絡連接,權限校驗等)
- 用where替換having,having是把所有的曬出來之後纔對結果進行過濾
- Select少用*,把列名列出來
數據庫表新增一列的sql語句
alter table tableName add newColumn varchar(8) comment ‘新添加的字段’
• STL中的常用容器有哪些
• vector的容量用完了怎麼辦
• 一個空類的大小是多少
• 左連接和右連接
• left join on/where,具體給了個例子
• 分組查詢的條件關鍵字:having
篩選分組後的各種數據,where是在聚合前先篩選記錄的。Group by+having是先聚合再篩選。
單獨使用having的作用和where是差不多的。
Group by根據一個或多個列對結果集進行分組。
• 事務的隔離級別,如何實現的?
- 讀未提交 ,每次讀都是最新版本
- 讀已提交
- 可重複讀
- 串行化, 加鎖的方式避免並行訪問
數據庫事務在開始的時候會申請一個id,id隨着時間遞增,先開始的事務id小。
• TCP的三次握手、四次揮手講一下?
• 數據包出現time wait的情況?
Tcp連接四次揮手關閉連接時,主動關閉連接的以防會在最後一條ack報文後維持一段2msl(最大生存時間)的等待時間纔會進入closed狀態,這段時間主動關閉連接的一方的狀態就是time_wait.
• 進程間的通信方法講一下?
管道
消息隊列
信號量
共享內存
• 死鎖講一下?
兩個或者兩個以上的線程,由於競爭資源造成通信阻塞,若無外力的作用將無法繼續推進。
四個必要條件:
互斥
請求和保持
不可剝奪
循環等待
數據庫分頁查詢如何實現
Mysql 用limit分頁
group by怎麼過濾數據
實現線程的方式,兩種方式什麼時候用
進程間通信方式
.常用linux命令
3. 查看進程內存的命令,詳細的內容
Ps
Free
3.爲什麼可用內存較少
5.二叉搜索樹
6.快排
2.談談對mysql的理解
&&和&的區別
MySQL有幾種隔離級別
3) 講一下堆 和 棧?
4) 指針 和 引用的區別?
5) 你瞭解數據庫嗎?數據庫搜索引擎有了解嗎?
3) 你怎麼知道中信銀行?如何看待中信銀行?
待遇好、氛圍好、發展空間大、工作環境好
4) 說三點你覺得中信銀行適合你的原因
指針
鏈表和順序表
順序表是在內存中以數組形式保存的線性表
指針指向的是變量的?
繼承
一個變量可以繼承多個父類嗎
C++一個類可以繼承多個父類,多重繼承
Class和object
對象是對客觀事物的抽象,類是對對象的抽象。
對象是類的實例,類是對象的模板。
對象是new 類產生的,調用的是類的構造方法
左連接
進程線程
棧和隊列
二叉樹的遍歷,各種排序,介紹一下冒泡排序以及時間複雜度,遞歸
事務提交
事物就是一組操作,要麼都執行,要麼都不執行
事物提交就是事物裏所有操作的正常完成
事物回滾是程序或數據恢復到上一次正確狀態的行爲
New/delete、malloc/free
New和malloc申請動態內存位於堆中,無法被操作系統自動回收,需要用delete和free釋放空間
Malloc和free是C/C++的標準庫函數,new/delete是C++的運算符。
New會調用構造函數,delete會調用析構函數。而malloc和free不會調用
Malloc只分配內存,不會進行初始化類成員的工作,free也不會調用析構函數
Malloc得到的指針無類型,void*類型必須要強制轉化,new的指針是帶有類型信息的