wordpress簡(jiǎn)介怎么改東莞seo收費(fèi)
1、tcp的重傳機(jī)制有哪幾種?具體描述一下
最基本的超時(shí)重傳
超過(guò)時(shí)間就會(huì)重傳
三個(gè)重復(fù)ACK 快速重傳
減少等待超時(shí)、
接收方可以發(fā)送選擇性確認(rèn)
不用重傳整段
亂序到達(dá) 可以通知哪些丟失 重復(fù)數(shù)據(jù)重傳
2、override和final?
override可寫(xiě)可不寫(xiě)
寫(xiě)出來(lái)就是顯式聲明 虛函數(shù) 重寫(xiě)基類(lèi)了 更加清晰
void doSomething(int x) override { // 使用 override 關(guān)鍵字// 派生類(lèi)中的實(shí)現(xiàn)}
final是最后一代的意思 沒(méi)辦法繼續(xù)繼承了 無(wú)法被重寫(xiě)了的意思
3、epoll的邊緣觸發(fā)和水平觸發(fā)?
水平是默認(rèn)的-這個(gè)沒(méi)有疑問(wèn),只要fd有沒(méi)有處理的事件,就不斷通知應(yīng)用程序。
假設(shè)一個(gè)套接字上有數(shù)據(jù)可讀,水平觸發(fā)模式下,只要該套接字上還有數(shù)據(jù)可讀,每次調(diào)用 epoll_wait 都會(huì)返回該事件,直到數(shù)據(jù)被完全讀取。逐步處理數(shù)據(jù)
的場(chǎng)景。
邊緣觸發(fā):高效愛(ài)的,減少系統(tǒng)調(diào)用次數(shù),僅僅狀態(tài)變化才通知一次。
從無(wú)到有才能通知一次。適用于事件發(fā)生立即處理大量的數(shù)據(jù)
。減少重復(fù)通知。必須干完才能給你新派活。
4、tcp的滑動(dòng)窗口?
滑動(dòng)窗口為了流量控制
發(fā)送方和接收方之間動(dòng)態(tài)調(diào)整發(fā)送和接受速度 防止網(wǎng)絡(luò)擁塞和丟包
先商定初始窗口大小----不超過(guò)窗口范圍發(fā)送數(shù)據(jù)包-----ack返回能接受的大小----滑動(dòng)到新的窗口發(fā)送新的數(shù)據(jù)。
5、stl的常用容器及其底層實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)?
vector:動(dòng)態(tài)數(shù)組 增長(zhǎng)是兩倍增長(zhǎng)
deque:雙端隊(duì)列(鏈表)
list:雙向鏈表
queue:一般用deque 也可以list
set:紅黑樹(shù) 自平衡二叉查找樹(shù) set不重復(fù)
map:紅黑樹(shù) 鍵值對(duì)
unordered_set 和 unordered_multiset:哈希表 無(wú)序 平均o1 最壞o1
6、static的用法和作用?
函數(shù)內(nèi)靜態(tài)變量:只初始化一次 它在函數(shù)調(diào)用結(jié)束后依然存在,并在下次調(diào)用時(shí)保留上次的值。
void counter() {static int count = 0; // 只初始化一次count++;std::cout << "Count: " << count << std::endl;
}int main() {counter(); // 輸出: Count: 1counter(); // 輸出: Count: 2counter(); // 輸出: Count: 3return 0;
}
上面的例子可以看出來(lái) 每次調(diào)用counter函數(shù) 都不會(huì)把他置為0 而是保持上一次不變了 才能加
全局靜態(tài)變量-全局靜態(tài)函數(shù):作用域限制在自己的文件 不能被其他文件訪問(wèn) 防止沖突 (命名)
類(lèi)中的靜態(tài)變量 靜態(tài)成員函數(shù):這就是歸為類(lèi) 而不是某個(gè)實(shí)例的屬性了 不實(shí)例化 Example 類(lèi)的情況下直接通過(guò)類(lèi)名調(diào)用。
7、智能指針?
這個(gè)不寫(xiě)了 感覺(jué)是必考
8、虛函數(shù)、虛表指針?
有虛函數(shù)就有虛表
虛表里面是虛函數(shù)地址
虛表指針指向虛表
通過(guò)虛表指針找到虛表 找到對(duì)應(yīng)的函數(shù)指針 再調(diào)用函數(shù)
每個(gè) Base 對(duì)象有一個(gè) vptr,指向 Base_vtable;
每個(gè) Derived 對(duì)象有一個(gè) vptr,指向 Derived_vtable。
調(diào)用虛函數(shù)時(shí),通過(guò)對(duì)象的 vptr 指針確定實(shí)際調(diào)用的函數(shù)。
class Base {
public:virtual void func1() { /* ... */ }virtual void func2() { /* ... */ }
};class Derived : public Base {
public:void func1() override { /* ... */ } // 重寫(xiě)基類(lèi)的 func1void func3() { /* ... */ } // 派生類(lèi)獨(dú)有的函數(shù)
};對(duì)于 Base 類(lèi),它的虛表可能看起來(lái)像這樣:Base_vtable:
+---------------------+
| Base::func1 address |
+---------------------+
| Base::func2 address |
+---------------------+而對(duì)于 Derived 類(lèi),它的虛表可能看起來(lái)像這樣:Derived_vtable:
+---------------------+
| Derived::func1 address | // 重寫(xiě)后的函數(shù)地址
+-----------------------+
| Base::func2 address | // 沒(méi)有重寫(xiě),指向基類(lèi)的函數(shù)地址
+-----------------------+
9、內(nèi)存碎片?
不能有效利用的零散空間 影響系統(tǒng)性能和使用效率
有兩種:外部碎片 內(nèi)部碎片
外部碎片指的是由于內(nèi)存塊的分配和釋放操作導(dǎo)致可用的空閑內(nèi)存被分割成許多小塊,這些小塊分布在整個(gè)內(nèi)存空間中,而每個(gè)小塊都不足以滿足新的內(nèi)存分配請(qǐng)求。即便系統(tǒng)總的空閑內(nèi)存足夠,但因?yàn)樗鼈儾贿B續(xù),導(dǎo)致無(wú)法分配給需要較大連續(xù)空間的請(qǐng)求。
內(nèi)部碎片指的是分配的內(nèi)存塊內(nèi)部未被使用的部分。由于內(nèi)存分配器一般會(huì)按照一定的對(duì)齊要求(如8字節(jié)或16字節(jié)對(duì)齊)來(lái)分配內(nèi)存,所以分配的內(nèi)存塊可能會(huì)比實(shí)際需要的稍大,導(dǎo)致一部分內(nèi)存未被使用。
10、索引的優(yōu)缺點(diǎn)?
優(yōu)點(diǎn):加速檢索 提高效率 可以條件查詢(xún)
缺點(diǎn):增加空間 降低寫(xiě)入性能 還要維護(hù) 有可能失效
11、索引可以用哪些數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)?
B樹(shù) 多路搜索自平衡搜索樹(shù)
B+樹(shù) 變種 葉子節(jié)點(diǎn)怎么怎么樣
哈希表
跳表(多層鏈表 查找變成logn)
前綴樹(shù)trie 就是用于前綴匹配
236. 二叉樹(shù)的最近公共祖先
給定一個(gè)二叉樹(shù), 找到該樹(shù)中兩個(gè)指定節(jié)點(diǎn)的最近公共祖先。
百度百科中最近公共祖先的定義為:“對(duì)于有根樹(shù) T 的兩個(gè)節(jié)點(diǎn) p、q,最近公共祖先表示為一個(gè)節(jié)點(diǎn) x,滿足 x 是 p、q 的祖先且 x 的深度盡可能大(一個(gè)節(jié)點(diǎn)也可以是它自己的祖先)?!?/p>
class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root == nullptr || root == p || root == q) return root;TreeNode *left = lowestCommonAncestor(root->left, p, q);TreeNode *right = lowestCommonAncestor(root->right, p, q);if(left == nullptr) return right;if(right == nullptr) return left;return root;}
};