解釋參考:
#include
#include
#include
#include
using namespace std;
enum tag
;typedef
struct node
}node;
typedef
struct tagnode tagnode;
//前序遍歷,根左右
vector<
int>
preorder
(node* root)
else
}return res;
}//中序遍歷,左根右
vector<
int>
inorder
(node* root)
else
}return res;
}//後序遍歷,左右根
vector<
int>
postorder
(node* root)
tagnode = s.
top();
s.pop();
if(tagnode.tag == tag:
:left)
else
}return res;
}//二叉樹層序遍歷
vector<
int>
level
(node* root)
return res;
}//輸出遍歷結果
void
visit
(vector<
int> vec)
printf
("\n");
}int
main()
什麼是事務:作為單個邏輯工作單元執行的一系列操作,要麼完全的執行,要麼完全的不執行。
事務是併發控制的基本單位。
事物的四個屬性(acid):
原子性:事務中的操作要麼不做,要麼全做
隔離性:乙個事物的執行不能被其他事物干擾
一致性:乙個事務執行之前和執行之後都必須處於一致性狀態
永續性:乙個事物一旦提交,對資料庫的改變是永久的
一般情況下,通過執行commit(提交)或rollback(回滾)語句來終止事務。
由於併發操作帶來的資料不一致性:
定義四個隔離級別以避免上面的併發問題:
可以優先考慮把資料庫系統的隔離級別設定為read committed,可以避免髒讀並且有較好的的併發效能。但是會導致不可重複讀,幻讀和第二類更新丟失的問題,這些個別場合可以由程式採用悲觀鎖或樂觀鎖來控制。
隔離級別
髒讀不可重複讀
幻讀讀未提交(read uncommitted)√√
√讀已提交(read committed)x√
√可重複讀(repeatable read)xx
√可序列化(serializable)xx
x
2019 7 2,3秋招學習筆記
當返回乙個物件不可被避免的時候,因返回的過程中產生的臨時物件,構造和析構仍被執行所以會影響到程式效率。但是可以通過特定的寫法,搭配支援 return value optimization 的c 編譯器,只需要付出乙個構造函式呼叫的代價即可完成返回值賦值。並且可以將函式宣告為inline,從而消除呼叫...
2019 7 1秋招面經學習筆記
樂觀鎖 是總是假定最好的情況,每次別人去拿資料都認為別人不會去修改,所以不用上鎖。但是會在更新的時候判斷一下在此期間別人有沒有去更新這個資料。實現方法有二,版本號機制和cas演算法。樂觀鎖是用於多讀的型別,這樣可以提高資料吞吐量。在多寫的情況下每次衝突發生,都會retry,反而降低效能。悲觀鎖總是假...
秋招和春招
和朋友最近聊起了秋招的心態,才發現以前想的事情有些過於簡單。找工作考慮的問題遠遠不是公司是否是大廠這麼簡單。一下的感想都有乙個大前提 我和我朋友都是普通人,不是聖人,沒有家財萬貫,未來都是需要自己一點一點積攢起來的。在這個大前提以外的人可以不用看了。首先是工作地點。1 你選擇的工作地點會決定你工作之...