DevOps技能樹知識整理 |【筆記目錄】
前言這裡紀錄 DevOps 面試常見的知識點,主要是參考了這個 github repository: DevOps Exercises 和 ByteByteGo 的 GitHub Repo 所做的筆記整理
可能會花很久時間才能夠全部整理完成~
DevOps GeneralPython
Basic Data Types
OOP / Class
Raise Exceptions
Regex
Async
File Manipulation
OS
lambda
decorator
Flask
文章: Python for DevOps |【DevOps技能樹】
Networking
TCP/UDP
OSI Model
CIDR
Mac Addr.
CSMA/CD
NAT
DNS
ICMP
TLS/SSL Handshake
Route Table
...
Git for DevOps 筆記 |【DevOps技能樹】
Basic
Q:你要如何確認一個目錄是一個 git repository?
檢查是否有 .git 文件
Q:請解釋什麼是 git directory, working directory, staging area
Git目錄:適用於儲存項目歷史紀錄的地方。包含所有 commit history, branch, label 等資料,存放於專案目錄中的 .git 資料夾內。
Git 目錄其實就是負責管理版本的主要資料存放地,可以透過 git log 命令查看資訊
工作目錄目前正在操作的專案目錄。在工作目錄中,git 會去提取 Git 目錄中的某個特定版本(正常會是最新版本),並將檔案提取出來,讓使用者可以直接編輯跟修改。
使用者對於工作目錄的變更並不會自動被 git 偵測,需要手動進行 add 以及 commit 進行更新。
Staging Area(暫存區)是一個臨時空間,可以讓你 ...
最短路徑總和 | Medium | LeetCode#64. Minimum Path Sum
前言
這是第一次寫 Multidimensional DP 的時間小於 20 min 就 AC !! 值得紀念一下 ~
題目敘述
題目難度:Medium
題目描述: 題目給了一個 m x n 大小的二維整數陣列 grid,陣列中的值為非零整數,請找到從網格左上角走到右下角的最小路徑和, 在每一格每次只能選擇往下或是往右邊走
解法一開始的想法一開始的想法一樣還是要找子問題,從左上角起點每次可以選擇往右或往下,而終點會是陣列中 [m-1][n-1] 的位置,最短路徑和可以從終點加上他的上面或左邊那格一路回朔回起點, 因此這會是一個大量重疊的子問題,因此可以用 DP 中的 Recursion + Memoization 來解決。
我的解法 - Recursion + Memoization1234567891011121314151617181920class Solution { ...
旋轉鏈結串列 | Medium | LeetCode#61. Rotate List
題目敘述
題目難度:Medium
題目描述: 給定一個 Linked List 的 head,選轉整個 List k 次後回傳新的List head
解法一開始的想法
看題目給的範例測資,可以知道所謂旋轉就是尾端的 node 插入到 List 前端作為新的 head,而這個操作要進行 k 次,一開始的想法就是很直觀, 找到尾端節點,插入到首端,然後遞迴操作
先前的解法123456789101112131415161718192021222324252627282930313233/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} ...
三角形 | Medium | LeetCode#120. Triangle
題目敘述
題目難度: Medium
題目敘述: 題目給定一個2D陣列 triangle,求從最頂端走到最底端的最小路徑總和值
對於每個 row 只能往下一層走,並且每次都會有兩種走法,假設現在在當前row的位置是 i,則下一層能夠選擇繼續走到 i 或者是 i+1 的位置。
123456範例: 2 3 4 6 5 74 1 8 3最短路徑總和會是: 2 + 3 + 5 + 1 = 11
解法一開始的想法想法其實也還蠻單純的,就是每層都可以有選或不選特定路徑,由於要找最短的路徑和, 因此需要兩條路徑都選擇,比較回傳結果大小 ,然後選小的回傳,這樣整體遞迴呼叫完畢後就能夠求出最短路徑和。
我的解法Recursive1234567891011121314151617181920212223class Solution {public: int helper( ...
合併排序陣列 | Easy | LeetCode#88. Merge Sorted Array
題目敘述
題目難度:Easy
題目敘述: 題目給定兩個整數陣列 nums1, nums2,並以 非遞減的順序排序(non-decreasing order) ,並且給定整數 m 以及 n 分別代表兩個陣列中有多少元素。 題目要求合併兩個陣列,並且一樣已非遞增的順序存放,需要將 nums2 的元素合併到 nums1,而不需用函數返回,nums1 函數的長度會是 m+n 而前 m 的元素會是原先 nums1 中的元素。
可以看上面範例圖中的第一個測資,nums1 中的0會被 nums2 取代掉,並且 m 為3,由於是非遞減排序的陣列,因此0不算是元素之一。
解法一開始的想法我的想法就是先將 nums2 的部分填補到 nums1 多出來的地方,在去排序
我的解答1234567891011121314151617181920class Solution {public: v ...
拆分字句 | Medium | LeetCode#139. Word Break
題目敘述
題目難度:Medium
題目描述:給定一個字串 s,以及一個字串形成的陣列 wordDict,若 s 可以被分割成一個或多個 wordDict 當中的單字序列,則回傳 True
Note that the same word in the dictionary may be reused multiple times in the segmentation.
解法一開始的想法s 中的每個字元可以 選或不選,每次形成一個子字串,就去跟 wordDict 進行比較看當前子字串是否存在於 wordDict 當中,一旦嘗試過每個子字串,則回傳結果。
我的解答1234567891011121314151617181920212223242526class Solution {public: vector<int> dp; bool helper( ...
Q1. Make Array Elements Equal to Zero | Easy | LeetCode Weekly Contest
前言
這算是第一次做 LeetCode Weekly Contest 的紀錄,今天是心血來潮上來打,所以準備考的時候只剩下沒多少時間,但我還是菜雞,因此就專攻第一題試水溫,寫完後就停止
題目敘述
題目難度: Easy
題目敘述: 題目給定一個整數陣列 nums,並且需要先選定一個起始點 curr,其中 nums[curr] =0。從起始點可以選擇往左走或往右走,接著可以重複下面的步驟:
若 curr 超出範圍 [0, n-1] 則步驟停止
透過加減 curr 值來實現向左和向右移動,curr 增加: 向右移動,curr 減少: 向左移動
移動後一旦 nums[curr] > 0 則
需要將 nums[curr] 值減一
反轉當前的移動方向
朝新方向前進一步
當移動結束時,所有元素值都歸零則被視為 Valid,請回傳總共有幾種 Valid 的走法
解法一開始的想法首先會 ...
最長遞增子序列 | Medium | 300. Longest Increasing Subsequence
題目敘述
題目難度: Medium
題目敘述: 題目給定一個整數陣列 nums,回傳所有可能的遞增子序列中最長的長度
子序列(Subsequence) 可由原先陣列中刪除多個元素來得到,但不可更動其元素順序,其中遞增子序列代表元素由左至右數字漸增
Ex. [5,8,3,2,4,5,9,15,7,20]其子序列包含:[5,8,4,5,20] 非遞增子序列[2,4,9,15] 遞增子序列[15,7,20] 非遞增子序列[5,9,15,20] 遞增子序列
解法一開始的想法一開始的想法比較偏向暴力解,一開始先思考要怎麼手動找出遞增子序列,並且要找到最長的。
對於 nums = [10,9,2,5,3,7,101,18]
1234567i=0 [10,9]i=1 [10,2]i=2 [10,5]i=3 [10,3]i=4 [10,7]i=5 [10,101]i=6 [10,18] -&g ...
回文子字串 | Medium | LeetCode#647. Palindromic Substrings
題目敘述
題目難度: Medium
題目敘述: 給定字串 s,回傳 s 中有多少回文子字串,回文代表字串從前往後讀等於從後往前讀都是一樣的字串。
解法一開始的想法我的想法就是可以遞迴處理,每次可以讀取一段字串,之後用一個函數檢查是否是回文,如果是,就將字串加入結果列表,
12345678910111213s = "abc"a -> Check if palindromicab -> Check if palindromicabc -> Check if palindromicac -> Check if palindromicb -> Check if palindromicbc -> Check if palindromicc -> Check if palindromiclist = [a,b,c]return list ...