原创 數據庫常見面試題

1 一張數據庫表,存儲的是班級學生的名字,如何檢索出同名的人 select * from class in (select name from class group by name having count(*)>1) 2 數據庫四

原创 孤兒進程,殭屍進程

孤兒進程   如果父進程先退出,子進程還沒退出那麼子進程將被 託孤給init進程,這是子進程的父進程就是init進程(1號進程).其實還是很好理解的 殭屍進程 有如果一個進程已經終止了,但是其父進程還沒有獲取其狀態,那麼這個進程就稱之爲殭

原创 強弱引用以及common段

強符號:編譯器默認函數和初始化的全局變量爲強符號 弱符號:未初始化的全局變量爲弱符號。也可以通過atrribute((weak))來指定。 編譯器關於強弱符號的規則有: (1)強符號不允許多次定義,但強弱可以共存; (2)強弱共存

原创 c/c++ static和const的用法

C語言中 static作用 如果作用於局部符號,如全局變量或者全局函數上,就是將全局符號的作用範圍限定於該文件,而其他文件不可訪問。 如果作用於局部變量,則是將局部變量變爲靜態局部變量。 const 將變量變爲常變量,即初始化後,其值

原创 c++ stl內存分配

STL源碼剖析 SGI stl中stl 的內存分配不是採用allocator類,而是採用自己寫的類alloc 這個alloc類中主要有四個函數 construct : 用於調用新建類的構造函數,其實現就是依靠placement new

原创 動態鏈接

1 動態鏈接的簡介 動態鏈接,其實就是把程序的鏈接這個過程推遲到運行時再進行。、 1.1 動態鏈接庫的好處: 各個進程共享同一個動態鏈接庫,不僅僅節省內存,而且還可以減少物理頁面的換入換出,也可以增加CPU緩存的命中率,因爲不同進程間的

原创 c/c++中內存泄漏的檢查與避免

1 valgrind valgrind支持的工具:memcheck addrcheck cachegrind Massid helgrind Callgrind 運行時必須指明想用的工具,如果省略工具名,默認運行memcheck

原创 linux內核內存管理

linux內存分佈 整個linux虛擬內存發佈如下:3G以上是內核地址,0~3G是進程地址空間。 在x86結構中,內核地址分爲三種,這三種類型的區域如下: ZONE_DMA 內存開始的16MB ZONE_NORMA

原创 數據庫三大範式

第一範式(1NF):符合1NF的關係中的每個屬性都不可再分。 這張表中,進貨屬性,銷售屬性就都不是原子的,應該再拆分。如下: 第二範式(2NF):2NF在1NF的基礎之上,消除了非主屬性對於碼的部分函數依賴。 碼就是主鍵的意思,非

原创 fopen的按文本讀寫和按二進制讀寫

二進制讀寫和文本讀寫的區別: 1. 二進制方式很簡單,讀文件時,會原封不動的讀出文件的全部內容,寫的時候,也是把內存緩衝區的內容原封不動的寫到文件中。而‘\n’ 在ascii碼中是’0x0A’。 2. 而文本方式就不一樣了,在寫文件時

原创 exit,return ,_exit退出函數關係

main函數並不是程序運行的第一個函數,在main之前,還有初始化函數init() ; main函數之後還有fini()函數收尾。 result=main(argc,argv); exit(result); 所以其實在main()函數最後