centos7裝wordpressseo站內(nèi)優(yōu)化和站外優(yōu)化
1.extern關(guān)鍵字
1)誕生動機:在一個C語言項目中,需要再多個文件中使用同一全局變量或是函數(shù),那么就需要在這些文件中再聲明一遍
2)用于聲明在其他地方定義的一個變量或是函數(shù),在當前位置只是聲明,告訴編譯器在鏈接階段去其他地方找。?
?2.strcpy的缺陷
1.沒有長度檢查。
2.不返回有用的錯誤信息。
3.安全性問題。
2.1如何避免
1.可以使用strncpy函數(shù),這個函數(shù)允許指定要復制的最大字符數(shù),從而可以避免緩沖區(qū)溢出。
注意事項:如果源字符串的長度大于 n,那么目標字符串可能不會以空字符結(jié)尾。所以在使用 strncpy 后,可能需要手動確保目標字符串以空字符結(jié)尾,以避免后續(xù)字符串操作出現(xiàn)問題。
2.可以使用strlcpy函數(shù),這個函數(shù)保證strlcpy 函數(shù)在復制字符串時會確保目標字符串以空字符結(jié)尾,并且最多復制指定的長度減一的字符數(shù),以留出空間給空字符。
?3.重載,重寫,覆蓋,隱藏的區(qū)別
重載:在一個類中,函數(shù)名相同,參數(shù)列表不同。
重寫:在派生類中,有和基類虛函數(shù)同名,同參數(shù)列表,同返回類型的函數(shù),用于改變基類虛函數(shù)的行為。
覆蓋:在C++中覆蓋和重寫同義
隱藏:在派生類中有與基類中非虛函數(shù)同名的函數(shù),可以導致在派生類作用域中基類函數(shù)被隱藏。
4.踩內(nèi)存
“踩內(nèi)存”(memory corruption)通常是指程序錯誤地訪問或修改了不屬于它應(yīng)該訪問的內(nèi)存區(qū)域。
4.1產(chǎn)生原因:
緩沖區(qū)溢出
野指針
數(shù)組越界訪問
5.水平觸發(fā)和邊緣觸發(fā)
?
6.select/poll和epoll
????????select 和 poll 并沒有本質(zhì)區(qū)別,它們內(nèi)部都是使用「線性結(jié)構(gòu)」來存儲進程關(guān)注的 Socket 集合。 在使用的時候,首先需要把關(guān)注的 Socket 集合通過 select/poll 系統(tǒng)調(diào)用從用戶態(tài)拷貝到內(nèi)核態(tài),然后由內(nèi)核檢測事件,當有網(wǎng)絡(luò)事件產(chǎn)生時,內(nèi)核需要遍歷進程關(guān)注 Socket 集合,找到對應(yīng)的 Socket,并設(shè)置其狀態(tài)為可讀/可寫,然后把整個 Socket 集合從內(nèi)核態(tài)拷貝到用戶態(tài),用戶態(tài)還要繼續(xù)遍歷整個 Socket 集合找到可讀/可寫的 Socket,然后對其處理。
????????很明顯發(fā)現(xiàn),select 和 poll 的缺陷在于,當客戶端越多,也就是 Socket 集合越大,Socket 集合的遍歷和拷貝會帶來很大的開銷,因此也很難應(yīng)對 C10K。
????????epoll 在內(nèi)核里使用「紅黑樹」來關(guān)注進程所有待檢測的 Socket,紅黑樹是個高效的數(shù)據(jù)結(jié)構(gòu),增刪改一般時間復雜度是 O(logn),通過對這棵黑紅樹的管理,不需要像 select/poll 在每次操作時都傳入整個 Socket 集合,減少了內(nèi)核和用戶空間大量的數(shù)據(jù)拷貝和內(nèi)存分配。 ????????epoll 使用事件驅(qū)動的機制,內(nèi)核里維護了一個「鏈表」來記錄就緒事件,只將有事件發(fā)生的 Socket 集合傳遞給應(yīng)用程序,不需要像 select/poll 那樣輪詢掃描整個集合(包含有和無事件的 Socket ),大大提高了檢測的效率。