後端工程師面試-Python技巧篇
針對面試中常見的Python技巧做練習並記錄相關延伸知識。
演算法氣泡排序法請用氣泡排序法(Bubble sort)將數列由小到大排序。
1234567891011121314151617181920212223def bubble_sort(seq): # Time complexity: O(n^2) # Space complexity: O(1) size = len(seq) if size <= 1: return seq i, j = 0, 0 while i < size: j = i + 1 while j < size: if seq[i] > seq[j]: seq[i], seq[j] = seq[j], seq[i] # swap(n, n+1) j += 1 i += 1 return seqassert bubble_sort([]) == []assert b ...
後端工程師面試-資料庫篇
前言前陣子進行環球誠信後端工程師面試,試題為資料庫操作各種問題,過程中發現滿多沒用過的語法以及過去比較少用SQL處理複雜的事務,事後再針對考題進行複盤練習。
原始碼在phantom_mask專案的Django新增一個uinterview應用,實現考題上所有需要的測試資料以及各項考題單元測試。Github code
指令
匯入測試資料python manage.py insert_uinterview_test_data
所有試題測試輸出python manage.py test_uinterview
單一試題測試輸出pymanage test_uinterview --show_sql 1 --case 1
show_sql: 是否顯示已執行SQL,預設為0
case: 測試試題編號,範圍為1~17
題目一Question如果客户的deliver_date和order_date相同,則該訂單為real-time order,否則都為plan order 查 詢表格中real-time order所佔的百分比,四捨五入到小數點後2位。
123456789============== ...
LeetCode - 陣列中的數值代表每天的股價,請找出最多能賺多少錢
題目以下範例中的陣列數值代表每天的股價,在只能有交易一次的條件下,請找出最多能賺多少錢
範例:Example 1:Input: [7,1,5,3,6,4]Output: 5
Example 2:Input: [7,6,4,3,1]Output: 0
Example 3:Input: [1,2,3,2,1]Output: 2
Example 4:Input: [1,2,3,2,1,7]Output: 6
解法一Github code
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291 ...
LeetCode - N個整數數列,請找出該數列連續元素的最大和
題目給出N個整數數列,請找出該數列連續元素的最大和。
Example 1:Input: [1,2,-3,4,5]Output: 9
Example 2:Input: [10,-5,7,6,-1,-3]Output: 13
Example 3:Input: [-1,-2,-3,5,6,-1,10,11,-3]Output: 21
Example 4:Input: [1,2,3,2,1,1]Output: 6
解法一Github code
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899def count_max_sum(arr): if len(arr) == 0: print('input is empty.') ...
PyCharm環境設定
pycharm-settings
避免文字過長格式化後導致行數過多。路徑Preferences -> Editor -> Code Style -> Markdown
豐富的markdown語法支援,可支援PlantUML與Mermaid語法。路徑Preferences -> Languages & Frameworks -> Markdown
12導致, Cause, cau-se避免, Avoid, av-oid
將Test/Prod環境安裝在同一台主機問題
前言與前同事討論關於他所在公司MIS想把專案(專案服務都有容器化)的測試與生產環境都安裝在同一台主機上,但後端工程師是認為應該把測試與生產環境拆開成兩台不一樣虛擬機上。
在公司裏其實滿常發生不同職務對同一件事情有不同看法,但如何做出最後決策的方法可能很多種,例如:
老闆已經有想法,那就照老闆的想法當決策,出錢的最大,最後責任也是老闆承擔。
MIS(DevOps)部門有想法,那就溝通看看,最終還是以MIS部門想法為主,畢竟責任歸還是這部門要承擔。
後端工程師也有想法,如果老闆或MIS部門願意交換彼此想法,那就值得溝通看看,這篇文章也主要針對這情況進行溝通的探討。
想法針對此議題進行思考:
方案A: 測試與生產環境都安裝在同一台主機上。(老闆與MIS頃向此方案)
方案B: 測試與生產環境拆開成兩台不一樣虛擬機上。(個人與前同事頃向此方案)
在大家都有不同想法時,我可能會先詢問對方用方案A有哪些好處以及回饋個人對方案A可能面臨到的壞處。後續再提供方案B的好處與壞處,這樣大家就可以對明確的好處跟壞處進行討論,而不是對方案的抽象概念進行討論,這樣討論的結果可能會更有建設性。
因個人頃向的 ...
iOS開發備忘錄
swiftUI語法學習當您學過android / css佈局,會有一些佈局知識以及關鍵字的瞭解,因此在學習SwiftUI基本上可以用這些關鍵字+swiftui進行谷歌搜尋,就可以找到相對應用法,例如:
想Image元件做左邊padding就會收尋swiftui padding left 10px[搜尋結果]
想對垂直佈局(VStack)做左邊對齊就會收尋swiftui vstack align left[搜尋結果]
SceneDelegate start with ViewController1234567891011121314151617181920212223class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOpt ...
Python備忘錄
建立虛擬環境12345python3.11 -m venv venv #python3.9 -m venv venv # Install package from requirements.txtpip install -r requirements.txt
命名規範參考PEP 8代碼規範
Django Mock當後端工程師定義好api schema後,需要再花時間把商業邏輯進行實作,這段時間前端工程師只能等待,為了讓前端工程師可以先進行開發,可以先使用mock的方式來模擬後端api的回傳結果,這樣前端工程師就可以先進行開發,等到後端工程師完成實作後,再將mock的程式碼關閉,改成呼叫後端api。
範例參考
1234567891011121314151617181920212223242526272829303132333435363738# pip install pip install django-mock-queries# Modelclass Account(models.Model): class Meta: verbose_name = ...
Python print效能測試
目的針對Python print效能測試,用實際數據進行比較。
環境
測試方法
測試結果12345678910111213# 10萬次回圈測試條件: 進行10.0萬次回圈,不列印任何字元,消耗時間為0.003秒測試條件: 進行10.0萬次回圈,列印10個字元,消耗時間為0.962秒測試條件: 進行10.0萬次回圈,列印100個字元,消耗時間為1.64秒測試條件: 進行10.0萬次回圈,列印100個字元且換行,消耗時間為9.797秒# 100萬次回圈測試條件: 進行100.0萬次回圈,不列印任何字元,消耗時間為0.02秒測試條件: 進行100.0萬次回圈,列印10個字元,消耗時間為9.753秒測試條件: 進行100.0萬次回圈,列印100個字元,消耗時間為16.41秒測試條件: 進行100.0萬次回圈,列印100個字元且換行,消耗時間為97.132秒
結論print確實會消耗更多的執行時間。
在10萬次回圈下
『列印100個字元且換行』消耗時間為『不列印任何字元』的9.797/0.003=3266倍
『列印100個字元』消耗時間為『不列印任何字元』的1.6 ...
Linux系統管理備忘
帳號權限管理用root做SSH登入,被駭客風險?
如果root遠端登入且是用密碼做認證,因為所有系統是以root當帳號名稱,所以駭客可以只針對密碼進行暴力破解密碼進而駭進系統。
如果用其他名稱當帳號(例如kkevin)做SSH登入,駭客必須猜中你的帳號才能進行密碼暴力破解。
如果用root做SSH登入且是用private rsa key做認證,這樣駭客想破解難度就會高於密碼認證很多。
如果用kkevin用密碼做認證且kkevin有sudo權限,安全性就會在kkevin密碼的複雜度。
ssh-keygen12345反向代理, Reverse Proxy, re-ver-se pro-xy風險, Risk, ri-sk駭客, Hacker, ha-ker暴力破解, Brute Force, bru-te for-ce駭進系統, Hack into the system, hack into the system