C++初步總結

https://github.com/huihut/interview#-cc

基礎類型

1.枚舉,替換define。 默認從零開始逐漸爲枚舉元素+1初始化

類和對象

  1. this
    類的成員函數體是被所有對象共有; 函數體內訪問成員變量通過this->訪問
  2. 成員函數
    static,const成員函數==>只能讀取成員變量
  3. 成員變量的初始化順序
    類中成員變量的聲明順序 = 實際初始化的順序
  4. 複製構造函數 ==> 注意: 構造函數都是沒有返回值的(直接對於私有變零操作, e.g.開闢空間)
    Point(const Point& tmp)
    Point p1 = p2;
  5. explicit
  6. 賦值運算符
    Point& operator= (const Point& tmp) ==> 需要返回值的; return *this
    p3 = p2;
  7. new Point[] delete [] (void*)p
  8. std::set_new_handler(my_func); 自定義new失敗的處理函數
  9. iostream sstream
  10. 類內聲明 友元函數(訪問private成員變量)

模板庫

  1. copy on write
    複製時不開闢空間,只有修改時纔開闢空間(引用計數 = 當前變量被引用的次數)
  2. template<傳入參數>
  3. Standard Template Library
  1. container
  2. iterator
  3. Adapter
  4. 函數適配器 bind
  1. allocator static的對象
  2. std::move 右值賦值給左值,左值對象不需要新開闢空間。 區別:賦值構造函數=1.釋放原有空間 2.開闢新空間 3.深拷貝
  3. virtual table
  4. virtual baseClass 虛基類, 繼承二義性問題
  5. virtual func() = 0; ==> 抽象類 ==> 不能創建對象
  6. virtual ~析構()
  7. overload; override; oversee;

類型轉換

  1. dynamic_cast ==> 僅在子類指針向上轉型到基類指針時合法
  2. const_cast(expr) ==> 刪除expr表達式的const屬性
  3. static_cast(expr) ==> 僅在expr類型可以和T類型做隱式轉換時合法 ==> 類似於dynamic_cast??

智能指針

  1. shared_ptr obj_p(new T(…)) shared_ptr是類,對象obj_p當做指針使用
  2. weak_ptr obj_p§; p是shared_ptr; weak_ptr設計目的:https://zh.cppreference.com/w/cpp/memory/weak_ptr

系統編程

  1. 預處理(e.g.宏展開)->編譯->彙編->鏈接(e.g.動態鏈接庫)
  2. #define add(x, y) (x + y)
  3. gdb ./a.out a.out.core ulimit -c unlimited

文件操作

  1. lseek
  2. struct stat
  3. FD_ZERO,FD_SET,FD_ISSET
  4. select(max_fd+1, 讀操作集合,寫操作集合,NULL,timeout時間) return 就緒的描述字個數
  5. mmap <==> 避免用戶態和內核態頻繁的拷貝數據 return 指針指向映射後的空間

進程&管道

  1. 進程狀態的轉移圖 run->ready or wait
  2. fork(父子進程執行次序不確定性)==> return 父進程得到子進程的pid;子進程得到0 vfork(子進程先執行)
  3. waitpid
  4. fork+setsid 徹底獨立=Daemon
  5. mkfifo 管道通信 int mkfifo(const char *pathname, mode_t mode);
  6. 共享內存: shmget創建共享內存,返回標識號int;shemat獲取標識號的內存,返回內存的頭指針; shmdt,shdctl

線程

  1. pthread_create(pid,func,func的參數) pthread_join(id,pid return val)
  2. pthread_mutex_t lock;
    pthread_mutex_init(&lock, mode屬性);
  3. pthread_cond_t cond;
    pthread_cond_init(&t.cond,NULL);pthread_cond_signal(&t.cond); pthread_cond_wait(&d->cond,&d->mutex);==>阻塞等待signal
  1. 協程?資源佔據更少,就是小的處理單元,線程也可以調度協程(直觀理解: 進程裏啓很多協程做運算,進程繼續執行。 通過共享內存,channel做通信)
  2. 線程?CPU最小調度單元,(同一進程內可以互相通信,全雙工半雙工)
  3. CPU調度: 搶佔式輪轉調度 非搶佔:先來後到Queue,優先級排序 其它:多級反饋隊列,不同隊列的調度策略不同。動態調整其進程所在隊列
  4. Epoll: epoll create; epoll ctl; epoll_wait(返回監聽的事件數目)
  5. C++: 防止內存的泄露的方法?
  6. 進程線程通信機制
  7. C++和C在編譯器的不同
  8. 計算機網絡: 應用層(http,SMTP,FTP) ==> 傳輸層(TCP.UDP)socket? ==> 網絡層(IP,ARP數據的打包) ==> 數據鏈路層
  9. 用戶態 -------系統調用------> 內核態

################################################################# C++ 11

  1. lambda表達式
    外部參數捕獲{計算 + 返回}
    e.g. [my_ize](const string& i, const string& j){ return (i+j).size()>my_size?1:0; }
    e.g. std::sort(vector.begin(),vector.end(), [](const T& i, const T& j){return i > j;}
  2. exception stack = 異常的捕獲,不斷向上返回異常
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章