秋招準備100天 10

2021-09-23 20:47:57 字數 3014 閱讀 8737

設計模式

命令模式

本來可以將命令作為乙個抽象類,每個命令寫成乙個具體類,然後客戶端直接呼叫具體命令類。

對於命令模式,大家可能 心存疑慮,明明是乙個很簡單的呼叫邏輯,為什麼要做如此的複雜,為什麼不直接reciver的excute方法就可以實現功能?呼叫邏輯複雜,是為了如果後續命令的增加, 能夠應對後續需求的變化。簡單的只是開發起來方便,但對後續的維護則是困難。除此之外,使用命令模式的另乙個好處是可以實現命令記錄的功能,可以在呼叫者裡面使用乙個資料結構來儲存執行過的命令物件,以此可以方便地知道剛剛執行過哪些命令,並可以在需要是恢復。並且可以在呼叫者中執行日誌的記錄。

命令模式

也就是說,invoker類是具體的執行者,command類是封裝命令,其中資料成員有invoker物件,receiver類是接收者類,client物件直接傳送命令給receiver,這樣就把請求和具體實現分開了,而且最重要一點是,可以在receiver物件中,建立乙個容器物件儲存命令,可以實現命令撤銷和重做。

命令模式解析

職責鏈模式
當乙個請求發出時,低階處理者級別不夠,處理不了,就會把這個請求發給更高一級,所以這個請求就像在職責鏈上傳遞,直到有乙個物件處理它。

handler類:抽象處理類,包含自己類的物件,代表比此物件高一級物件

concreate類:具體處理者類。可訪問它的後繼者,如果可以處理就處理,不能處理,就發給後繼者。

缺點:如果處理不當,請求會一直沒人處理,陷入死迴圈

中介者模式
中介者模式

當同事類之間存在相互影響的時候,也就是說,a類物件改變,b類物件也會改變,這時候用中介類來降低耦合。

享元模式
享元模式

訪問者模式
todo

演算法

n皇后問題

輸出有多少可能組合。

bool isvalid(vector& mat,int i,int j) 

return true;

}int dfs(vectormat,int i,int n)

for (int j = 0; j < n; j++)

}return res;

}

判斷兩個字串是否為變形詞
兩個字串,s1,s2,如果兩個字串包含的字元一樣,但是順序可能不一樣,就說這兩個是變形詞。

方法1:1.先判斷兩個字串長度是否相同 2. 遍歷字串,用陣列儲存每個字元出現的次數。 3.比較兩個陣列每個index的數值是否相同,出現相同的話就說明不是變形詞。

bool helper(string s1,string s2) 

for (auto ch : s2)

map2[ch]++;

for (int i = 0; i < 128; i++)

return true;

}

方法2:第一種方法,建立了兩個陣列,其實只需要乙個陣列,記錄str1中的字元出現頻次,然後遍歷str2,當出現字元ch,map[ch]-1就可以,當出現<0的情況,返回false;

bool helper(string s1,string s2) 

for (int i = 0; i < s2.size(); i++)

return true;

}

字串中數字子串的和
給定乙個字串,包括數字,字母,各種符號,當出現』-『號時,看連續』-『個數,奇數個數代表是負數,偶數個數代表正數,比如說,「a-1bc–12",那麼包含數字-1和12.

方法1:遍歷字串,用乙個flag標誌符號,當出現』-『,就連續判斷之後的字元還是否為』-』;當出現數字時,連續判斷之後出現的是否為數字。當數字開始前的符號為』-『才會用flag標誌。

int helper(string s) 

i--;

int t = stoi(temp);

res += flag ? t : -t;

flag = true;

}if (s[i] == '-')

i--;}}

return res;

}

todo
去掉字串中連續出現k個』0『的子串
字串中會出現k個』0『,去掉後,返回去掉後的字串,比如」120000300「,k= 2,則處理後結果為」1200003「。

方法1:

string helper(string s,int k) 

else

num = 0;

}s[pos++] = s[i];

}if (num == 2)

pos = pos - 2;

return s.substr(0,pos);

}

判斷兩個字串是否為旋轉字串
s1 = 「12345」,那麼s1的旋轉字串有」23451「,」34512「,」45123「,」51234「,」12345「。所以給定兩個字串s1,s2,判斷是不是互為旋轉字串。

方法1:把s2從第乙個字元開始,每乙個字元都放到最後一位,判斷兩個字串是否相同。

bool issame(string s1,string s2) 

return false;

}

方法2:另str= str2 + str2,然後判斷str中是否包含子串str1,因為str包含所有旋轉子串。

秋招準備之rabbitmq

mq三大好處 rabbitmq,訊息是存放在queue中。訊息確認。如果在消費者執行過程當初出現了意外 宕機 rabbitmq沒有收到訊息回執,就會傳送給其他消費者執行。rabbitmq服務重啟的情況下,也不會丟失訊息,我們可以將queue與message都設定為可持久化的 durable 分發機制...

秋招準備 演算法 排序(總)

1.ques 簡單介紹選擇排序 選擇排序通過在每一輪迴圈中選擇出極值,然後將之與未排序好區域的某個端點作交換,完成一次排序。比如,第一輪選出最小值,此時的未排序區是0 n 1,則將這個最小值與0號陣列元素作交換,完成排序,以此類推,外迴圈n次之後完成排序。中間變數 儲存每次排序最小值的temp,最小...

2023年秋招演算法崗需要準備什麼?

找工作準備過程中,收集了一些個人覺得對演算法崗有用的資料,以我的水平也很難評定出哪些資料的含金量高,稍微有些參考意義就都收藏了。cv公司 按城市分類 amusi cv company list ai求職攻略 amusi ai job notes 深度學習面試寶典 amusi deep learnin...