個人面經整理中信銀行

索引的數據結構

  1. B樹
    相對二叉樹來說要更矮一些,磁盤io次數更少。
    M階的B樹,任意非葉子結點只有M個兒子。
    非葉子結點的關鍵字個數=兒子數-1
    所有葉子結點都位於同一層

  2. B+樹
    有n顆子樹的非葉節點含有n+1個關鍵字
    葉子結點按照從小到大的順序連接,葉子結點包含全部的結點信息
    所有的非葉子結點可以看成是索引的一部分,只包括子樹中最大或者最小的關鍵字

B+樹和B樹的區別
B+樹的中間結點不保存數據,磁盤可以容納更多結點元素,更加的矮胖
B+樹更穩定
B+樹的查找只需要遍歷葉子結點,B樹需要中序遍歷

堆棧
棧後進先出,是線性結構
堆是樹形結構,可以實現優先隊列

內存中的堆棧
棧是向下增長的,對是向上增長的
棧分配局部變量,堆分配程序員申請的內存空間
棧由系統自動分配,速度快。堆用new分配,速度慢。

https
在http的基礎上通過加密傳輸和身份認證保證傳輸的安全性
https在http的基礎上加入了SSL層

tcp、udp

static

  1. 全局變量加上static變成靜態全局變量。
    沒初始化的會自動初始化爲0
    在聲明他的整個文件可見,在其他文件不可見
    存放在全局區
  2. 局部變量加上static變成靜態局部變量
    在全局數據區分配內存。始終駐留在全局數據區,知道程序運行結束。作用域爲局部作用域,定義的函數語句塊結束的時候作用域隨之結束。
  3. 靜態函數
    只能在聲明他的文件中可見
    定義同名的函數不會衝突
  4. 類裏面的數據成員加static就是靜態數據成員
    靜態數據成員在程序中只有一份拷貝,由所有對象共享訪問,靜態數據成員的值對每個對象都是一樣的。
  5. 靜態成員函數
    爲整個類服務而不是爲某個對象服務。靜態成員函數不具有this指針,無法訪問類對象的非靜態數據成員和非靜態成員函數。

java類型
==和equals
==是直接比較兩個對象的內存地址,如果相等則是指向同一個對象的地址的
Equals比較的是對象的內容

內存分配
C++分爲堆、棧、自由存儲區、全局存儲區、常量存儲區
棧:局部變量在棧上創建,函數執行結束自動釋放
堆:程序內存動態分配
自由存儲區:
全局區:在程序編譯時已經分配好,程序整個運行期都存在
常量存儲區:存放的是const,不允許修改

多態
在基類函數前面加上virtual關鍵字,在派生類中重寫該函數,運行時根據實際類型來調用相應的函數,如果對象類型是派生類,就調用派生類函數,如果對象類型是基類,就調用基類函數。
Static變量怎麼存

堆棧分配內存

數據庫調優

  1. 創建索引,避免全表掃描,在where和order by上建立索引
  2. 避免在索引上使用計算
  3. 儘量將多條sql語句壓縮到一條執行(設計到建立網絡連接,權限校驗等)
  4. 用where替換having,having是把所有的曬出來之後纔對結果進行過濾
  5. 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根據一個或多個列對結果集進行分組。

• 事務的隔離級別,如何實現的?

  1. 讀未提交 ,每次讀都是最新版本
  2. 讀已提交
  3. 可重複讀
  4. 串行化, 加鎖的方式避免並行訪問
    數據庫事務在開始的時候會申請一個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的指針是帶有類型信息的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章