位元組一輪面試題

2021-10-08 09:45:56 字數 1626 閱讀 5148

1. 智慧型指標(unique_ptr、shared_ptr、weak_ptr)的區別?

unique_ptr

如名字所示,unique_ptr是個獨佔指標,c++ 11之前就已經存在,unique_ptr所指的記憶體為自己獨有,某個時刻只能有乙個unique_ptr指向乙個給定的物件,不支援拷貝和賦值。

shared_ptr

shared_ptr允許多個該智慧型指標共享「擁有」同一堆分配物件的記憶體,這通過引用計數(reference counting)實現,會記錄有多少個shared_ptr共同指向乙個物件,一旦最後乙個這樣的指標被銷毀,也就是一旦某個物件的引用計數變為0,這個物件會被自動刪除。支援複製和賦值操作。

weak_ptr

weak_ptr是為配合shared_ptr而引入的一種智慧型指標來協助shared_ptr工作,它可以從乙個shared_ptr或另乙個weak_ptr物件構造,它的構造和析構不會引起引用計數的增加或減少。沒有過載 *和 -> 但可以使用lock獲得乙個可用的shared_ptr物件

weak_ptr的使用更為複雜一點,它可以指向shared_ptr指標指向的物件記憶體,卻並不擁有該記憶體,而使用weak_ptr成員lock,則可返回其指向記憶體的乙個share_ptr物件,且在所指物件記憶體已經無效時,返回指標空值nullptr。

注意:weak_ptr並不擁有資源的所有權,所以不能直接使用資源。 可以從乙個weak_ptr構造乙個shared_ptr以取得共享資源的所有權。

2. const int *a和int *const a的區別

1)const int *a

這裡const 修飾的是int,而int定義的是乙個整值

因此*a 所指向的物件值不能通過 *a 來修改,但是可以重新給 a 來賦值,使其指向不同的物件。

eg:const int *a = 0;

const int b = 1;

int c = 1;

a = &b  //  額外:注意不能通過a來修改 b值

a = &c  //   額外:雖然c本身不是乙個常量

*a = 2  //error 為題就在這裡,不能修改通過 *a 所指向的物件值,最後賦值得物件是c,因此不能通過*a 來修改c值。

2)int *const a

這裡const修飾的是 a ,a代表的是乙個指標位址

因此不能賦給a其他的位址值,但可以修改a指向的值。

至於int const *a 和 const int *a 的意義是相同的,作用等價。

4) const int *const a

a所指向的物件及物件的值均不可改變。

關於const的點滴補充:

1、const 物件的位址只能賦值給指向const 物件的指標

2、指向const 物件的指標可以 被賦 以 乙個非const 物件的位址 

3、指向const 得指標常被用作函式的形式引數,保證被傳遞給函式的實際物件在函式得實際物件在函式中不會被修改

4、常量在定義後就不能被修改,所以它必須被初始化。未初始化的常量定義將導致編譯錯誤(上面都是在說明const得問題,所以沒有賦值,實際語句中要賦值的)

位元組二輪面試題

1 非同步改同步,要求aaa,bbb,ccc等順序列印,要求多種方法 aaa asyncnetrequest id response ccc ddd fff 等答案 訊號量的使用。2.寫出以下 的列印順序 int main print ccc return 0 答案 因為dispatch after...

位元組跳動面試題

位元組跳動面試題 http協議 http協議是乙個應用層的協議,由請求和響應構成,使用統一資源識別符號來傳遞資料和建立連線 一次http請求的基本流程一般是,在建立tcp連線後,由客戶端向服務端發起一次請求 request 而伺服器在接收到以後返回給客戶端乙個響應 response 所以我們看到的h...

位元組實習面試題

題目 給定m個不重複的字元 a,b,c,d 以及乙個長度為n的字串tbcacbdata,問能否在這個字串中找到乙個長度為m的連續子串,使得這個子串剛好由上面m個字元組成,順序無所謂,返回任意滿足條件的乙個子串的起始位置,未找到返回 1。比如上面這個例子,返回3.public class findin...