作者:勿忘心安~~
鏈接:https://www.nowcoder.com/discuss/197611
來源:牛客網
1 C++基礎:
(1)多態是怎么樣的?寫個樣例?
https://www.cnblogs.com/yichengming/p/11427811.html
(2)c和c++的區別
https://www.cnblogs.com/yichengming/p/11427890.html
(3)什么是虛函數?什么是純虛函數?
虛函數是允許被其子類重新定義的成員函數
虛函數的聲明:virtual returntype func(parameter);引入虛函數的目的是為了動態綁定;
純虛函數聲明:virtual returntype func(parameter)=0;引入純虛函數是為了派生接口。(使派生類僅僅只是繼承函數的接口)
(4)基類為什么需要虛析構函數?
防止內存泄漏。假如沒有虛析構函數,釋放一個由基類指針指向的派生類對象時,不會去觸發動態綁定,則只會調用基類的析構函數,不會調用派生類的析構函數。派生類中申請的空間則得不到釋放導致內存泄漏。
(5)當i是一個整數的時候i++和++i哪個更快?它們的區別是什么?
考慮內建數據類型時,它們的效率差別不大(去除編譯器優化的影響)。所以在這種情況下我們大可不必關心。
現在讓我們再考慮自定義數據類型(主要是指類)的情況。此時我們不需要再做很多匯編代碼的分析了,因為前綴式(++i)可以返回對象的引用,而后綴式(i++)必須產生一個臨時對象保存更改前對象的值並返回(實現過自定義類型++運算符定義的就知道),所以導致在大對象的時候產生了較大的復制開銷,引起效率降低,因此處理使用者自定義類型(注意不是指內建類型)的時候,應該盡可能的使用前綴式地增/遞減,因為他天生體質較佳。
此外,++i返回的是對象的引用,是一個可以修改的左值。
(6)當i是一個整數的時候i++和++i哪個更快?它們的區別是什么?
reserve()用於讓容器預留空間,避免再次分配內存;capacity()返回在重新進行分配以前所能容納的元素數量。
(7)如何初始化const和static數據成員
通常在類外申明static,但是static const的整型(bool,char,int,long)可以在類中聲明且初始化,static const的其他類型必須在類外初始化(包括整型數組)。
(8)static和const分別怎么用,類里面static和const可以同時修飾成員函數嗎?
https://www.cnblogs.com/yichengming/p/11428100.html
(9)指針和引用的區別
本質上的區別是,指針是一個新的變量,只是這個變量存儲的是另一個變量的地址,我們通過訪問這個地址來修改變量。
而引用只是一個別名,還是變量本身。對引用進行的任何操作就是對變量本身進行操作,因此以達到修改變量的目的。
注:
(1)指針:指針是一個變量,只不過這個變量存儲的是一個地址,指向內存的一個存儲單元;而引用跟原來的變量實質上是同一個東西,只不過是原變量的一個別名而已。如:
int a=1;int *p=&a;
int a=1;int &b=a;
上面定義了一個整形變量和一個指針變量p,該指針變量指向a的存儲單元,即p的值是a存儲單元的地址。
而下面2句定義了一個整形變量a和這個整形a的引用b,事實上a和b是同一個東西,在內存占有同一個存儲單元。
(2)可以有const指針,但是沒有const引用(const引用可讀不可改,與綁定對象是否為const無關)
注:引用可以指向常量,也可以指向變量。例如int &a=b,使引用a指向變量b。而為了讓引用指向常量,必須使用常量引用,如const int &a=1; 它代表的是引用a指向一個const int型,這個int型的值不能被改變,而不是引用a的指向不能被改變,因為引用的指向本來就是不可變的,無需加const聲明。即指針存在常量指針int const *p和指針常量int *const p,而引用只存在常量引用int const &a,不存在引用常量int& const a。
(3)指針可以有多級,但是引用只能是一級(int **p;合法 而 int &&a是不合法的)
(4)指針的值可以為空,但是引用的值不能為NULL,並且引用在定義的時候必須初始化;
(5)指針的值在初始化后可以改變,即指向其它的存儲單元,而引用在進行初始化后就不會再改變了。
(6)"sizeof引用"得到的是所指向的變量(對象)的大小,而"sizeof指針"得到的是指針本身的大小;
(7)指針和引用的自增(++)運算意義不一樣;
(8)指針使用時需要解引用(*),引用則不需要;
(9)什么是
- emplace / empalce_front / emplace_back
- 面向對象的?面向對象的特性?有什么優點,比面向過程的語言好在哪?
- · 模板特化
- · 定位內存泄露
- C語言是怎么進行函數調用的?
- C語言參數壓棧順序?
- C語言如何處理返回值?
2 操作系統
(1)進程間七大通信方式
管道(Pipe)、命名管道(Named pipe)、信號(Signal)、消息隊列(Message queue)、共享內存(Shared memory)、套接字(Socket)、信號量(Semaphore)
https://blog.csdn.net/zhaohong_bo/article/details/89552188
命名管道和無名管道
- 堆棧溢出
- 進程和線程(https://www.cnblogs.com/qianqiannian/p/7010909.html)
- 守護進程、僵屍進程、孤兒進程,守護進程的作用是什么?
- · 協程
- 一個文件被刪除了,沒有被釋放是什么原因呢?
- 弱類型、強類型、動態類型是什么(https://blog.csdn.net/endlessseaofcrow/article/details/80350347)
- 自旋鎖(https://baike.baidu.com/item/%E8%87%AA%E6%97%8B%E9%94%81/9137985?fr=aladdin)
- 進程棧和線程棧的區別(https://blog.csdn.net/yangkuanqaz85988/article/details/52403726)
- · OPEN的過程
- READ的過程
- WRITE的過程 (https://blog.csdn.net/csu_max/article/details/38623053)
- 操作系統是如何調度進程呢(https://blog.csdn.net/qq_35642036/article/details/82809812)
- 消息隊列
- · malloc函數具體實現原理
- 死鎖的原因?條件?如何預防?又如何避免?如何解除?
- 線程是如何綁定到具體的cpu
- 什么是綁核?實現方式?
- 進程的調度算法
3 TCP網絡
- 概率題
假設一段公路上,1小時內有汽車經過的概率為96%,那么,30分鍾內有汽車經過的概率為?
- 字節序與網絡字節序
- 超時重傳、快速重傳
- 客戶端服務器通信死鎖如何處理?
1) HTTP協議與TCP/IP協議的關系
2) 如何理解HTTP協議是無狀態的
3)什么是長連接、短連接?
4)TCP協議的長連接和短連接優點和缺點
- · 什么是MD5?
- · 阻塞式IO使用場景
- · 什么是TCP粘包
- · 拒絕服務攻擊DOS
- XSS,SQL
- · HTTPS建立連接的過程
- 常用的HTTP請求頭與響應頭
HTTP請求頭:
HTTP響應頭:
TCP是如何保證有序傳輸的?
- · POST可以獲取數據嗎?就是實現GET方法?
4 數據結構與算法:
- 堆排序和快速排序 or 快排為什么快呢?
- 哈希表如何設計?需要利用到磁盤空間。
- STL中hash_map擴容發生什么?
5 數據庫
6 其他知識
- UTF8和GD2312的區別
- C++多線程對10個文件進行排序