C C 開發工程師筆試與面試題備忘(持續更新中)

2021-10-11 18:32:41 字數 4841 閱讀 8366

linux使用與命令

linux下常用軟體

cc++

stl虛函式

物件導向思想

tcp協議

http協議

高併發mysql

redis

資料結構與演算法

設計模式

中斷的概念:

sigpipe和sigint

i/o復用

select的使用和原理

epoll的使用和原理

阻塞和非阻塞

同步與非同步

多程序fork函式的返回值

殭屍程序和孤兒程序,怎麼預防和處理

多執行緒

執行緒的建立

如何確定乙個程序應該開多少執行緒

ipc通訊

不同ipc通訊方式的優缺點和應用場景:

條件變數

linux 發行版本與核心版本

linux重啟失敗原因分析

包安裝方式

lvm

ssh與telnet的區別

檢視日誌末尾

輸出到檔案

gdb如何除錯多執行緒:

valgrind:記憶體洩漏檢查工具

gprof:**效能檢查工具

預處理包含三方面的內容:巨集定義與巨集替換、檔案包含、條件編譯。

用%x列印字元陣列

scanf的使用

會導致coredump的情況:

函式返回區域性變數

函式指標與指標函式

陣列指標與指標陣列

常量指標與指標常量

float精度的判斷

fabs()

pow

記憶體管理與釋放

記憶體布局:棧堆全文代。

堆和棧的區別:

棧區由編譯器自動分配釋放。其操作方式類似於資料結構中的棧,速度較快。

堆區由程式設計師分配釋放,若程式設計師不釋放,程式結束時由作業系統**。其分配方式類似於鍊錶,一般速度較慢。容易產生記憶體碎片。堆上分配記憶體,在c中使用malloc,在c++中使用new。

malloc/free與new/delete的區別:

①操作物件不同。前者是標準庫函式,不在編譯器控制許可權之內。後者是c++的運算子,除了分配釋放空間外,還會呼叫構造或析構函式。

②用法不同。malloc返回的是void*,因此是型別不安全的,而且malloc且需手動計算要申請的記憶體位元組數。而new內建了sizeof、型別轉換和型別安全檢查功能,無需手動計算。另外注意如果使用new建立物件陣列,那麼只能使用物件的無參建構函式。

記憶體洩漏的定義與確定:

野指標

類空類中自帶的函式:

static

不考慮類,static的作用主要有三條:

①隱藏:即對其他原始檔隱藏;

②預設初始化為0:包括未初始化的全域性靜態變數與區域性靜態變數。另外未初始化的全域性變數也具備這一屬性。這是因為全域性變數和靜態不買單都儲存在bss段(即全域性靜態區);

③保持區域性變數內容的持久:即在對應函式中可持續使用。

類中static的作用:屬於乙個類但不屬於此類的特定物件。

靜態資料成員:必須在類外定義並初始化,對於const static資料成員,可以在類的定義體中初始化,但仍需在類外進行定義(只是此時無需初始化)。

靜態成員函式:通過類名呼叫。不具有this指標,因此無法訪問非靜態資料成員和非靜態成員函式。不能被宣告為const、虛函式、volatile。

全域性變數與靜態變數的異同:

const的用法

c與c++中的const的區別:

在c中,預設const是外部連線的;而在c++中,const全域性變數對其他原始檔隱藏,如果要被其他檔案訪問,需使用extern修飾。

指標常量:*p為const;

常量指標:p為const。

指標常量

const int* p;

常量指標

int * const p = &d;

在c++中使用const而非使用#define的原因:

①const常量有型別,編譯器可進行型別安全檢查;

②使用const常量可能導致更小的目標**,因為#define是盲目地替換;

③const可以執行常量摺疊(即將常量表示式計算求值)。

const修飾函式引數與返回值:

①const修飾函式返回值;

②const修飾函式引數:常用於const引用。

const在類中的使用:

①const修飾成員函式:const物件(或指向該物件的指標、引用)只能呼叫const成員函式;

②const修飾資料成員:此時必須在建構函式的成員初始化列表中進行初始化。

inline

inline函式與巨集定義的區別:

typedef和define

引用指標和引用的區別:

容器型別和各自特點

迭代器與指標的區別

deque的使用:

記憶體池的實現

多型的實現

過載、覆蓋、隱藏的區別:

virtual關鍵字的用法。

建構函式中使用虛函式

基類的析構函式為何要設定為虛函式?

虛函式的實現

抽象類和介面類的區別

物件導向程式設計的基本原則

tcp通訊過程:

三次握手、四次揮手**

tcp通訊狀態轉移圖

linux下客戶端和伺服器端建立tcp通訊使用到的函式

怎麼提高伺服器的併發處理能力:

a. 提高cpu併發計算能力

(1)多程序&多執行緒

(2)減少程序切換,使用執行緒,考慮程序繫結cpu

(3)減少使用不必要的鎖,考慮無鎖程式設計

(4)考慮程序優先順序

(5)關注系統負載

(6)關注cpu使用率,除了使用者空間和核心空間的cpu使用率以外,還要關注i/o wait

b. 減少系統呼叫的使用

c. 考慮減少記憶體分配和釋放

(1)改善資料結構和演算法複雜度

(2)使用記憶體池

(3)考慮使用共享記憶體

d. 考慮使用持久連線

e. 改進i/o模型

(1)dma技術

(2)非同步i/o

(3)改進多路i/o就緒通知策略,epoll

(4)sendfile

(5)記憶體對映

(6)直接i/o

f. 改進伺服器併發策略

(1)乙個程序處理乙個連線,非阻塞i/o,使用長連線

(2)乙個程序處理多個連線,非同步i/o, 使用長連線

c++使用到的mysql庫:mysqlclient庫

mysql埠號:3306

mysql基礎語句、巢狀語句的使用。

獲取乙個表的前n條記錄。

資料庫索引怎麼建立,索引的優缺點:

如何提高資料庫查詢速度?有哪些優化技巧?

事務的特性acid

c++使用到的redis庫

redis的基本資料型別和操作

單鏈表與雙鏈表

紅黑樹特性

棧的應用:

用於四則運算

佇列的應用:

用於輸出倒數n行

排序演算法
氣泡排序、交換排序、選擇排序

快排堆排

鍊錶

判斷鍊錶是否有公共節點。

判斷鍊錶是否有環。

鍊錶的增刪。

查詢鍊錶倒數第k個結點。

樹二叉排序樹和鍊錶的轉換

二叉樹的前中後序非遞迴**

平衡二叉樹的基本概念

線索二叉樹的基本概念

紅黑樹的基本概念

動態規劃

bfs

dfs

最長子序列

其他演算法
用陣列實現大數乘法

實現乙個string類

實現乙個動態陣列

常用的設計模式

FPGA工程師筆試面試題(二)

1 ic設計中同步復位與非同步復位的區別 同步復位在時鐘沿才復位訊號,完成復位動作。非同步復位不管時鐘,只要復位訊號滿足條件,就完成復位動作。非同步復位對復位訊號要求比較高,不能有毛刺,如果其與時鐘關係不確定,也可能出現亞穩態。2 moore 與 mealy狀態機的特徵 兩種典型的狀態機是摩爾 mo...

後段開發工程師面試題 三

range 函式說明 range start,stop step 根據start與stop指定的範圍以及step設定的步長,生成乙個序列。range示例 range 5 0,1,2,3,4 range 1,5 1,2,3,4 range 0,6,2 0,2,4 xrange 函式說明 用法與rang...

演算法工程師 面試題與解答

可以用於分類任務,速度快,能容易地更新模型吸收新的資料。不可以,僅能用於線性問題。只有當目標和特徵是線性關係時,才能用邏輯回歸。在應用邏輯回歸時注意兩點 一是當知道模型是非線性時,不適用邏輯回歸 二是當使用邏輯回歸時,應注意選擇和目標為線性關係的特徵。深度學習可能存在過擬合問題 高方差,有兩個解決方...