日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

寫了5年P(guān)ython才沉淀的7條工程習(xí)慣,從調(diào)包俠到扛住線上事故

寫了5年P(guān)ython才沉淀的7條工程習(xí)慣,從調(diào)包俠到扛住線上事故 寫了 5 年 Python從一個(gè)只會(huì)寫腳本的“調(diào)包俠”到能在生產(chǎn)環(huán)境里扛住流量、排查線上事故的工程師中間真的踩過不少坑。有些坑是文檔里查不到的有些坑只有你被 on-call 電話叫醒、盯著日志翻到天亮才會(huì)真正記住。今天不分享框架源碼也不講算法優(yōu)化就聊聊我這 5 年下來最終留下的 7 條 Python 工程習(xí)慣。這些習(xí)慣不是從哪本書里抄的而是被線上事故、代碼評(píng)審、團(tuán)隊(duì)協(xié)作逼出來的。如果你正在寫 Python或者你團(tuán)隊(duì)里的 Python 代碼總出幺蛾子這篇內(nèi)容應(yīng)該能給你一些參考。1. 先定牢“類型邊界”再談代碼復(fù)用1.1 從一次接口事故說起先講個(gè)真實(shí)經(jīng)歷。早年在某公司維護(hù)一個(gè)支付回調(diào)模塊上游傳來一個(gè) JSON里面有個(gè)amount字段。當(dāng)時(shí)圖省事代碼里直接if data[amount] 100判斷也沒做類型轉(zhuǎn)換。某天上游改了字段格式把數(shù)字字符串100.00傳了進(jìn)來比較結(jié)果完全正常但后面做金額計(jì)算時(shí)字符串和浮點(diǎn)數(shù)混在一起出現(xiàn)了小數(shù)點(diǎn)精度問題直接導(dǎo)致一筆訂單對(duì)賬差了 1 分錢。排查了整整兩個(gè)晚上最后發(fā)現(xiàn)是類型邊界沒管好。這件事給我的教訓(xùn)是Python 是動(dòng)態(tài)語言但不代表你可以在工程代碼里“放飛自我”。動(dòng)態(tài)類型給你靈活也把責(zé)任推給了調(diào)用方和未來的維護(hù)者。你寫函數(shù)時(shí)自己知道參數(shù)是什么類型但三個(gè)月后的你跟現(xiàn)在的你完全是兩個(gè)人更別說團(tuán)隊(duì)里還有其他人。1.2 我最終留下的類型標(biāo)注習(xí)慣我現(xiàn)在寫任何新模塊都會(huì)遵循這幾條所有函數(shù)參數(shù)和返回值都加類型標(biāo)注type hints即使只是def foo(x: int) - str這樣的基礎(chǔ)標(biāo)注。數(shù)據(jù)類用dataclass定義而不是只靠 dict 傳遞結(jié)構(gòu)。這樣字段名、默認(rèn)值、類型都一目了然也方便 IDE 補(bǔ)全和靜態(tài)檢查。涉及外部接口的數(shù)據(jù)結(jié)構(gòu)用pydantic或dataclass做一層顯式校驗(yàn)和轉(zhuǎn)換絕不讓“裸 dict”穿過服務(wù)邊界。在 CI 里跑mypy把它當(dāng)成強(qiáng)制檢查項(xiàng)而不是可選的錦上添花。有人說 Python 加類型標(biāo)注麻煩但我算過一筆賬寫標(biāo)注的時(shí)間大概是寫函數(shù)體時(shí)間的五分之一但能省掉排查類型 bug 的時(shí)間可能是十倍。尤其是服務(wù)多了之后調(diào)用鏈一長類型標(biāo)注就是一張隱性的接口文檔。1.3 動(dòng)態(tài)語言的邊界在哪里當(dāng)然不是所有代碼都要上類型。臨時(shí)腳本、一次性數(shù)據(jù)處理我從來不用mypy因?yàn)椴恢档谩N业呐袛鄻?biāo)準(zhǔn)是這段代碼的生命周期是否超過一周是否需要被其他人調(diào)用是否要跟外部系統(tǒng)交互如果三個(gè)問題里有一個(gè)“是”就值得加類型標(biāo)注和校驗(yàn)。另外還要注意類型標(biāo)注不等于運(yùn)行時(shí)校驗(yàn)。def foo(x: int)并不會(huì)在傳字符串時(shí)自動(dòng)報(bào)錯(cuò)。如果你需要嚴(yán)格校驗(yàn)必須靠pydantic或者在函數(shù)入口手動(dòng)isinstance。我之前就用pydantic統(tǒng)一管理所有 HTTP 請(qǐng)求和響應(yīng)的模型既做了類型約束又自動(dòng)生成了文檔還順便處理了反序列化一舉三得。提示如果你還在用裸 dict 傳遞業(yè)務(wù)數(shù)據(jù)趁早換成 dataclass 或 pydantic。這個(gè)習(xí)慣越早養(yǎng)成后面重構(gòu)的痛越少。2. 配置不進(jìn)代碼環(huán)境與依賴嚴(yán)格分離2.1 那段被配置文件支配的歲月我見過最離譜的代碼是把數(shù)據(jù)庫密碼直接寫在 Python 文件里硬編碼成全局變量然后整個(gè)團(tuán)隊(duì)共享。更離譜的是這個(gè)代碼還被提交到了代碼倉庫最后因?yàn)橐粋€(gè)內(nèi)部工具掃描泄露了生產(chǎn)環(huán)境的連接信息不得不緊急改密碼、重建實(shí)例。那是我第一次意識(shí)到配置管理不是“以后再說”的事而是工程底線。后來我接手過一套老系統(tǒng)配置全部堆在一個(gè)settings.py里里面寫了開發(fā)、測試、預(yù)發(fā)、生產(chǎn)四套配置通過一個(gè)ENV環(huán)境變量來切換。看著好像沒問題但每次上線都心驚膽戰(zhàn)因?yàn)橹灰腥烁牧艘恍锌赡芫蜁?huì)影響所有環(huán)境。某次預(yù)發(fā)環(huán)境連了生產(chǎn)庫還跑了一次數(shù)據(jù)遷移差點(diǎn)釀成大事故。2.2 環(huán)境管理與依賴鎖定的利器現(xiàn)在我的習(xí)慣是代碼庫里不出現(xiàn)任何環(huán)境相關(guān)的配置值只出現(xiàn)配置引用。環(huán)境變量來了填進(jìn)去配置中心來了從遠(yuǎn)端拉代碼本身永遠(yuǎn)不知道自己是跑在哪套環(huán)境。具體做法分三層12-factor 風(fēng)格配置所有配置項(xiàng)從環(huán)境變量讀取代碼里只有os.getenv(DB_HOST)這類調(diào)用。本地開發(fā)用.env文件統(tǒng)一管理用python-dotenv加載但這個(gè)文件不提交到 git。依賴環(huán)境也要隔離用venv或poetry管理虛擬環(huán)境用requirements.txt或poetry.lock鎖定精確版本。所有新依賴必須通過鎖文件變更不能直接 pip install 到全局。我偏好poetry因?yàn)樗岩蕾嚬芾?、虛擬環(huán)境、打包發(fā)布統(tǒng)一起來了pyproject.toml 里直接寫清依賴范圍和 Python 版本比純 requirements 文件更清晰。團(tuán)隊(duì)新人來了一條命令poetry install就能把環(huán)境拉起來省得互相問“你裝的什么版本”。2.3 環(huán)境變量、配置中心怎么選小團(tuán)隊(duì)、單體服務(wù)環(huán)境變量完全夠用。但服務(wù)多了以后環(huán)境變量管理會(huì)變得混亂——幾十個(gè)服務(wù)每套環(huán)境幾十個(gè)變量靠人工維護(hù)很容易出錯(cuò)。這時(shí)候就需要配置中心了比如 etcd、consul、或云廠商的配置管理服務(wù)。我的選擇邏輯很簡單服務(wù)數(shù)少于 5 個(gè)環(huán)境變量 .env 文件夠用。服務(wù)數(shù)多于 5 個(gè)但配置量不大用配置中心拉取啟動(dòng)時(shí)拿不到配置就直接失敗避免帶病啟動(dòng)。配置變更頻繁需要?jiǎng)討B(tài)刷新選帶推送能力的配置中心而不是重啟服務(wù)。配置中心雖然好用但也會(huì)引入新依賴。我們?cè)谀硞€(gè)項(xiàng)目里跑了 consul但忘了處理它掛掉的情況結(jié)果配置拉不到服務(wù)全部起不來。后來加了本地緩存作為兜底即使配置中心掛了也用上一次的緩存啟動(dòng)再配合告警提醒人工介入。注意代碼里盡量不要用try/except吞掉配置加載異常。配置缺失時(shí)要及時(shí)暴露出來最好在啟動(dòng)階段就 fail fast否則線上服務(wù)可能半死不活看似在運(yùn)行實(shí)際功能全壞。3. 日志不是打出來就完事要能“撈得回來”3.1 線上排障時(shí)日志的救命場景有一回線上告警說某個(gè)接口成功率驟降。我打開日志平臺(tái)輸入服務(wù)名和關(guān)鍵字結(jié)果刷出來的全是格式不一的文本有的行是print打出來的有的行是logger.info寫的還有的日志里根本沒帶請(qǐng)求 ID完全沒法把一次用戶請(qǐng)求的完整鏈路串起來。最后只能靠猜先看 Nginx 日志找到出錯(cuò)的請(qǐng)求再根據(jù)時(shí)間戳去翻應(yīng)用日志效率極低。那次之后我才明白日志不是“有就行”而是要有“可查詢性”。所謂可查詢性就是你能在短時(shí)間內(nèi)通過一組固定維度把某一次請(qǐng)求的所有相關(guān)日志全部撈出來。3.2 結(jié)構(gòu)化日志與日志追蹤ID我現(xiàn)在打日志只用一個(gè)標(biāo)準(zhǔn)結(jié)構(gòu)化 JSON 日志。每一條日志包含時(shí)間、級(jí)別、logger 名稱、消息、上下文數(shù)據(jù)用 json.dumps 統(tǒng)一序列化或者直接用python-json-logger這類庫。為什么用 JSON因?yàn)槿罩鞠到y(tǒng)里可以按字段索引不用寫正則去摳文本。最關(guān)鍵的是追蹤 ID。每個(gè)請(qǐng)求入口生成一個(gè)trace_id或者叫 request_id通過中間件注入到 context 里然后所有業(yè)務(wù)日志都帶著這個(gè) ID。這樣排查問題時(shí)只需要按 trace_id 搜索就能把一次請(qǐng)求的訪問日志、業(yè)務(wù)日志、異常堆棧全部串在一起。Python 里實(shí)現(xiàn)這個(gè)有很多方式老項(xiàng)目我會(huì)用contextvars加一個(gè)日志過濾器在日志格式化時(shí)自動(dòng)把 trace_id 塞進(jìn)記錄里業(yè)務(wù)代碼根本不用手動(dòng)傳參。新項(xiàng)目直接上 OpenTelemetry 這類鏈路追蹤框架一步到位。3.3 日志級(jí)別的工程約定級(jí)別這件事團(tuán)隊(duì)里必須有共同語言。我踩過最典型的一個(gè)坑是有人把重要業(yè)務(wù)操作放在logger.debug結(jié)果生產(chǎn)環(huán)境日志級(jí)別是 INFO關(guān)鍵信息全丟了也有人用logger.error打普通業(yè)務(wù)流程導(dǎo)致告警刷屏真正的故障被淹沒。我現(xiàn)在定的約定是DEBUG開發(fā)調(diào)試線上默認(rèn)關(guān)閉。INFO記錄業(yè)務(wù)節(jié)點(diǎn)的關(guān)鍵事件比如下單、支付、狀態(tài)變更帶有可追蹤的 trace_id。WARNING可能有風(fēng)險(xiǎn)但不影響主流程比如重試、降級(jí)、稍后處理。ERROR發(fā)生了會(huì)影響單次請(qǐng)求或功能的問題需要記錄異常堆棧和上下文數(shù)據(jù)。CRITICAL系統(tǒng)級(jí)故障必須觸發(fā)立即告警。這條清單我寫了放在團(tuán)隊(duì) wiki 里新人來了先讀一遍。告警規(guī)則只匹配 WARNING 和 ERROR且必須有對(duì)應(yīng)的 trace_id否則視為無效日志。心得日志里不要搜集身份證號(hào)、密碼、token 這類敏感信息但可以把脫敏后的值放進(jìn)去。我見過有人把完整手機(jī)號(hào)打進(jìn)日志最后數(shù)據(jù)庫被脫敏日志卻沒脫敏成了新的泄露出口。4. 單元測試是給未來合作者的“安全網(wǎng)”4.1 為什么寫測試是對(duì)別人的負(fù)責(zé)很多人覺得“這段代碼我自己跑通了不用寫測試”但工程代碼的目標(biāo)不是“在我電腦上能跑”而是“在任何環(huán)境里、任何時(shí)間、任何人都能安全地改動(dòng)”。有測試兜底你才敢重構(gòu)沒測試兜底每一次改動(dòng)都是高空踩鋼絲。我印象最深的一次某同事改了一個(gè)工具函數(shù)把默認(rèn)參數(shù)從None改成了空列表結(jié)果下層模塊直接復(fù)用了這個(gè)函數(shù)導(dǎo)致所有請(qǐng)求共享同一個(gè)列表內(nèi)存越積越多最后服務(wù) OOM。如果那個(gè)工具函數(shù)有一個(gè)簡單的單元測試測試?yán)锒鄠饕粋€(gè)值再斷言兩次調(diào)用互不影響這種問題根本走不到線上。4.2 測試金字塔與常用工具我現(xiàn)在寫測試遵循金字塔原則底層單元測試最多覆蓋純函數(shù)和業(yè)務(wù)邏輯中間層集成測試驗(yàn)證模塊間的交互頂層端到端測試只覆蓋關(guān)鍵核心鏈路數(shù)量很少。Python 里我最常用的組合是pytest功能強(qiáng)大、fixture 靈活能跑參數(shù)化用例。pytest-cov統(tǒng)計(jì)覆蓋率但我不追求 100%只要求核心模塊 90% 以上。responses或respxmock HTTP 請(qǐng)求測服務(wù)調(diào)用。factory-boy生成測試數(shù)據(jù)比手寫 fixture 清晰。fixture 的使用有個(gè)要點(diǎn)不要把 fixture 寫成“一個(gè)函數(shù)造一個(gè)對(duì)象”而是盡量小而可組合。比如我定義一個(gè)userfixture一個(gè)orderfixtureorder 依賴 user。這樣測試用例里可以自由組合不用的數(shù)據(jù)不會(huì)白造跑起來也快。4.3 如何讓測試不拖累開發(fā)速度很多人拒絕寫測試是覺得“寫測試?yán)速M(fèi)時(shí)間”。但我發(fā)現(xiàn)只要把測試放進(jìn)常規(guī)開發(fā)流程反而能省時(shí)間。我的做法是寫完一個(gè)功能先寫這個(gè)功能的最小測試用例然后跑一遍確認(rèn)測試能不能抓住 bug。不需要一次寫全先把主干覆蓋了后面再迭代補(bǔ)充邊界測試。測試能跑多快單元測試應(yīng)該控制在幾秒以內(nèi)。如果測試超過幾十秒團(tuán)隊(duì)就會(huì)不喜歡跑最終淪為“沒人跑的擺設(shè)”。我有個(gè)原則所有單元測試全部內(nèi)存化用 SQLite 或 mock 替代外部服務(wù)不依賴真實(shí)數(shù)據(jù)庫和網(wǎng)絡(luò)。集成測試單獨(dú)用一個(gè) marker 標(biāo)記只在 CI 的特定 job 里運(yùn)行。這樣可以保證日常開發(fā)pytest -m unit在一分鐘內(nèi)跑完。CI 里面再加一道強(qiáng)制門檻覆蓋率下降不能超過 1%新增代碼的行覆蓋率要高于 80%。一開始會(huì)覺得苛刻但跑一段時(shí)間后團(tuán)隊(duì)寫代碼時(shí)就會(huì)本能地思考“這段邏輯怎么測”反而促使他們寫得更容易測試。提醒mock 要節(jié)制。過度 mock 會(huì)讓測試變成“自嗨”根本測不到真實(shí)邏輯。比如把一個(gè)外部 HTTP 調(diào)用 mock 成返回值卻忘了真實(shí)接口是異步還是同步這種測試毫無意義。寧可少寫幾個(gè)偽測試也要保證每個(gè)測試真的能代表一段真實(shí)行為。5. 異常與錯(cuò)誤處理讓失敗也成為接口的一部分5.1 裸except的慘痛教訓(xùn)Python 的except特別容易濫用。我見過無數(shù)代碼try: do_something() except: pass這個(gè)寫法相當(dāng)于告訴計(jì)算機(jī)“不管出了什么錯(cuò)你都別吭聲?!苯Y(jié)果就是錯(cuò)誤被吞掉服務(wù)繼續(xù)跑但狀態(tài)已經(jīng)錯(cuò)了。我處理過最慘的一個(gè) case某定時(shí)任務(wù)里裸捕獲了所有異常導(dǎo)致數(shù)據(jù)庫寫入失敗也沒人發(fā)現(xiàn)連續(xù)跑了三天產(chǎn)生了大量臟數(shù)據(jù)最后只能人工清洗。所以我的第一條鐵律是永遠(yuǎn)不要用裸except。至少要寫except Exception因?yàn)閑xcept:連KeyboardInterrupt和SystemExit也會(huì)捕獲容易讓程序無法退出。更合理的是按具體異常類型捕獲比如except ValueError、except KeyError讓錯(cuò)誤處理有針對(duì)性。5.2 自定義異常體系與錯(cuò)誤碼為什么需要自定義異常因?yàn)閮?nèi)置異常只能表達(dá)“什么類型錯(cuò)了”不能表達(dá)“業(yè)務(wù)哪里錯(cuò)了”。我給你看一個(gè)反例某個(gè)服務(wù)里到處raise ValueError(用戶不存在)然后調(diào)用方統(tǒng)一except ValueError結(jié)果參數(shù)校驗(yàn)錯(cuò)誤也被當(dāng)成用戶不存在處理返回給前端的是完全錯(cuò)誤的信息?,F(xiàn)在我習(xí)慣為每個(gè)模塊定義異常基類比如class ServiceError(Exception): 業(yè)務(wù)服務(wù)基礎(chǔ)異常 class UserNotFoundError(ServiceError): code USER_NOT_FOUND message 用戶不存在 class PaymentFailedError(ServiceError): code PAYMENT_FAILED message 支付失敗上層捕獲ServiceError然后根據(jù)code映射 HTTP 狀態(tài)碼和錯(cuò)誤提示。不同模塊的異?;ハ喔綦x即使同名也不會(huì)混淆。同時(shí)針對(duì)網(wǎng)絡(luò)調(diào)用、數(shù)據(jù)庫操作這類可能臨時(shí)失敗的場景我會(huì)定義重試策略。常用的庫有tenacity可以配置重試次數(shù)、間隔、哪些異??芍卦嚒V卦囍会槍?duì)瞬時(shí)故障比如連接超時(shí)、數(shù)據(jù)庫鎖沖突業(yè)務(wù)邏輯錯(cuò)誤比如余額不足不能重試否則會(huì)造成重復(fù)扣款。5.3 防御式編程與Fail Fast防御式編程不是到處加if判斷而是在“邊界入口”上做防御。我的習(xí)慣是外部輸入、配置值、依賴服務(wù)的返回值這三個(gè)地方必須做校驗(yàn)。內(nèi)部函數(shù)之間相信類型標(biāo)注和測試不做多余檢查。校驗(yàn)不通過時(shí)越早暴露越好。我寧可啟動(dòng)時(shí)因?yàn)榕渲脼榭斩罎⒁膊幌胱尫?wù)跑著跑著才在某個(gè)角落報(bào)錯(cuò)。這就是 fail fast 的原則錯(cuò)誤發(fā)生的位置越接近發(fā)生點(diǎn)排查成本越低。再分享一個(gè)細(xì)節(jié)不要用assert做數(shù)據(jù)校驗(yàn)。Python 的assert在運(yùn)行python -O時(shí)會(huì)被禁用線上環(huán)境如果開啟了優(yōu)化所有斷言都會(huì)失效。我在老項(xiàng)目里見過一堆a(bǔ)ssert校驗(yàn)前端傳參結(jié)果某人加了優(yōu)化選項(xiàng)發(fā)布線上直接失去了校驗(yàn)?zāi)芰髁朔欠▍?shù)也沒人攔。所以只有開發(fā)者自測時(shí)可以用 assert對(duì)外輸入校驗(yàn)必須用顯式的 if raise。6. 函數(shù)式抽象與依賴注入解耦的思維練習(xí)6.1 全局變量和隱式依賴的壞味道我見過最讓人頭疼的代碼是函數(shù)內(nèi)部直接引用全局變量比如config load_config() def process(): timezone config[timezone] return ...如果哪天config變了或者沒有全局定義這個(gè)函數(shù)就會(huì)莫名其妙地失敗。更麻煩的是測試要為這個(gè)函數(shù)準(zhǔn)備環(huán)境得先設(shè)置全局變量但pytest里全局變量的作用域很容易互相污染一組用例跑完另一組拿到的是殘留狀態(tài)。我后來學(xué)會(huì)一個(gè)判斷標(biāo)準(zhǔn)如果函數(shù)離開“全局環(huán)境”就跑不起來說明它有隱式依賴。隱式依賴越多代碼就越難理解、越難測試、越難復(fù)用。6.2 依賴注入的輕量實(shí)現(xiàn)依賴注入聽起來很高大上但 Python 里根本不需要框架。最簡單的做法就是通過函數(shù)參數(shù)傳依賴def fetch_user(user_id: int, db: Database) - User: ...測試的時(shí)候傳一個(gè) mock 的db就行。不需要 singleton不需要 global不需要魔法。這個(gè)簡單習(xí)慣能解決 90% 的耦合問題。有人會(huì)說“每個(gè)調(diào)用點(diǎn)都要傳 db太麻煩。”我的回應(yīng)是麻煩一點(diǎn)換來的是清晰的調(diào)用鏈和可測試性。如果參數(shù)傳遞過多可以用一個(gè)Context對(duì)象把這些依賴打包但不建議用一個(gè)萬能參數(shù)到處傳。對(duì)于類對(duì)象我通常使用構(gòu)造函數(shù)注入class OrderService: def __init__(self, payment_client: PaymentClient, db: Database): self.payment_client payment_client self.db db這樣寫的好處是每個(gè)類的依賴都在構(gòu)造簽名里清清楚楚團(tuán)隊(duì)里做代碼 review 時(shí)一眼就能看出這個(gè)類依賴了哪些外部服務(wù)方便評(píng)估風(fēng)險(xiǎn)和替換 mock。6.3 抽象接口與實(shí)現(xiàn)分離在 Python 里抽象有兩種方式一種是寫 ABC抽象基類一種是直接用“鴨子類型”只要實(shí)現(xiàn)了同名方法就可以。對(duì)于大型業(yè)務(wù)模塊我傾向于定義接口協(xié)議用typing.Protocol來表明“這個(gè)模塊需要什么樣的依賴”而不是強(qiáng)制繼承 ABC。舉個(gè)實(shí)際例子某項(xiàng)目里有郵件發(fā)送服務(wù)最開始直接用了某個(gè)第三方 SDK 的MailClient到處from mail_sdk import MailClient。后來要換供應(yīng)商所有引用點(diǎn)都要改。我重構(gòu)時(shí)定義了一個(gè)協(xié)議class MailSender(Protocol): def send(self, to: str, content: str) - bool: ...然后將第三方 SDK 封裝在一個(gè) adapter 類里業(yè)務(wù)模塊只依賴MailSender。換供應(yīng)商時(shí)只需要新增一個(gè) adapter業(yè)務(wù)代碼零改動(dòng)。這樣做的另一層好處是測試時(shí)只需要 mock 一個(gè)符合MailSender協(xié)議的對(duì)象不需要 mock 任何第三方 SDK 的內(nèi)部結(jié)構(gòu)。抽象隔離了變化也隔離了外部庫對(duì)我們代碼的污染。心得不要一開始就抽象過度設(shè)計(jì)比重復(fù)代碼更討厭。我通常是在“第二次要用相同邏輯”時(shí)才開始提取接口。第一次用完就抽象往往假設(shè)錯(cuò)了方向反而讓結(jié)構(gòu)更亂。7. 代碼審查與自動(dòng)化把習(xí)慣固化成團(tuán)隊(duì)紀(jì)律7.1 代碼審查不是找茬寫好個(gè)人代碼是一回事團(tuán)隊(duì)協(xié)作又是另一回事。我越來越發(fā)現(xiàn)代碼審查Code Review不是為了揪出誰的 bug也不是為了證明誰更厲害而是為了“分享上下文”。我在 review 里最想看到的是這段代碼為什么這么寫有沒有考慮邊界評(píng)論區(qū)里能提出問題也能記錄決定。我給自己定了一個(gè) review 清單每次看別人代碼都過一遍有沒有裸except、空分支、被靜默吞掉的異常有沒有配置硬編碼在代碼里有沒有全局可變狀態(tài)在模塊之間被共享有沒有函數(shù)做了兩件以上的事新增的依賴能不能避免有沒有更輕量的方案日志有沒有帶 trace_id字段結(jié)構(gòu)是否統(tǒng)一測試是否覆蓋了成功路徑和至少一種失敗路徑這個(gè)清單不在工具里而在腦子里。每次 review 都對(duì)著過一遍既快又穩(wěn)。時(shí)間久了寫代碼的人也會(huì)自動(dòng)先照這個(gè)清單自查。7.2 用自動(dòng)化工具減少口舌之爭Review 里最浪費(fèi)時(shí)間的是“格式問題”和“命名問題”。比如有人用單引號(hào)、有人用雙引號(hào)有人 tab 縮進(jìn)、有人空格縮進(jìn)為了這些吵架毫無價(jià)值。所以我的 CI 里直接集成了一整套自動(dòng)化檢查black統(tǒng)一代碼格式拒絕手工調(diào)格式。isort統(tǒng)一 import 順序。flake8或ruff檢查未使用的變量、重復(fù)定義、潛在語法錯(cuò)誤。mypy靜態(tài)類型檢查。pre-commit在本地 commit 之前就跑一遍上述工具。用pre-commit的最大好處是在代碼進(jìn)入倉庫之前就把低級(jí)問題攔住了。CI 里的檢查成了一個(gè)兜底真正需要人看的只有邏輯問題。配置pre-commit其實(shí)不復(fù)雜新建一個(gè).pre-commit-config.yaml把black、isort、ruff加進(jìn)去然后pre-commit install即可。團(tuán)隊(duì)統(tǒng)一配置誰機(jī)器上跑不過誰就不能提交。剛開始大家會(huì)抱怨“麻煩”但跑一周之后沒人再愿意手工調(diào)格式了。7.3 提交信息與分支規(guī)范提交信息看似無關(guān)緊要但在回滾和追溯時(shí)特別重要。我堅(jiān)持用 Conventional Commits 風(fēng)格feat: 增加訂單導(dǎo)出功能 fix: 修復(fù)金額精度丟失問題 chore: 更新依賴版本 refactor: 重構(gòu)支付模塊的異常處理 ^這個(gè)格式讓git log變得可讀也有人會(huì)用 changelog 自動(dòng)生成版本記錄。但更重要的是分支命名、提交信息要和任務(wù)系統(tǒng)關(guān)聯(lián)起來。比如分支用feature/order_export提交信息里帶#123這樣的任務(wù)編號(hào)這樣以后查一個(gè)問題能直接從 git 記錄跳到任務(wù)上下文甚至翻到當(dāng)初的討論記錄。還有一條鐵律絕不直接向 master/main 推送代碼所有變更都必須通過 Pull Request/Merge Request。這條規(guī)則的背后不是流程潔癖而是為了強(qiáng)制代碼經(jīng)過至少一次 review 和 CI 檢查。哪怕是你自己的個(gè)人項(xiàng)目我也建議走一遍這個(gè)流程——至少能讓你自己回看一遍。經(jīng)驗(yàn)代碼審查的回復(fù)里盡量用“建議”“可以考慮”“我擔(dān)心”這樣的語氣而不是“你錯(cuò)了”“必須改”。工程協(xié)作本質(zhì)上是在管理風(fēng)險(xiǎn)不是在爭輸贏。好的 review 文化決定了一個(gè)團(tuán)隊(duì)能走多遠(yuǎn)。7 條習(xí)慣講完了都是我這幾年流水線里真刀真槍趟出來的。寫 Python 容易但把 Python 寫出工程感靠的不是某一個(gè)炫技語法而是這些看似瑣碎的日常約束。我個(gè)人最深的體會(huì)是這些習(xí)慣不是枷鎖而是保護(hù)網(wǎng)。有了類型邊界、結(jié)構(gòu)化日志、單測兜底和自動(dòng)檢查我反而敢大膽重構(gòu)代碼了——因?yàn)槲抑谰退愀腻e(cuò)了測試和日志也會(huì)第一時(shí)間告訴我。如果你也剛開始帶項(xiàng)目不妨從其中一兩條開始推行不用一步到位。少踩一個(gè)坑就是賺到。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
蜜桃狠狠色伊人亚洲综合网站| 亚洲欧美在线观看2021| 丰满人妻一区二区三区四区| 天天操天天干一区二区| 人人操人人摸人人看人人插| 99青草| 蜜臀99999| 外国免费性情大片| 中文字幕一区电影在线观看| 日欧毛片久久| 精品妇女一区二区三区| 97操碰| 久久久人妻| 日韩免费高清大片在线| 午夜影美女日鸡鸡天天视频国产| 久久草大香蕉| 91视频成人福利网站在线一区 | 91看黄片| 国产夜夜艹| 密臀成人视频久久久| 91成人久久| 欧美少妇第一页| 少妇大屁屁| 国产二区三区粉嫩在线| 亚洲91网站| 中文字幕丝袜| 99re28在线观看| 无码不卡亚洲成?人片| 97在线精品观看视频| 黄在线| 欧洲熟妇xxXx欧美老妇裸体| 宅男午夜在线视频| 日本媚薬中文字幕在线| 欧美黄色大香蕉一区二区| 另类综合另类| 青青草综合在线| 亚洲伊人a线观看视频| 五月丁香影院| 花花AV导航| 综合91网| www.婷婷| 一区二区高清视频| 亚洲1区| 四虎 精品 WWW| 久久黄色性爱视频| 91亚·色| 97视频在线观看网站| 久久岛国| 入口操逼网站| 日韩不卡码| 另类图片天天影视| 蜜乳AV网址| 97国伦国色| 国产精品久久久久9999小说| 日韩探花精品在线视频| 在线天堂999| 免费亚洲国产精品久久一区| 天天影视亚洲| 欧美日韩国产色图在线| 加勒比五月天| 日韩熟女操逼| 欧美色图片91| 精品丰满熟妇人妻一区| 大香网站| AV色图| 91综合色噜噜| 自拍盗摄一区| 97在线免费| 人人操av| sewuyueav| 夜夜天天噜狠狠爱2021| 久久天天躁日日躁狠狠躁| 美女久久久| 97av在线视频| 新精精品久久精品| 一本大道不卡一二三区| 宗合情欲网| 91综合网站| 色婷婷久久| 日韩色女精品| 青青操综合网| 久久精品中文| 黄片免费久久久久久久| 天天综合有色网| 久久超碰97| 久久久久久国产精品| 青青草导航在线视频| 日本精品高清一二区一本到| 亚洲第一男人天堂| 青青草中文-久久青草精品一区二区三| 欧美日韩亚洲五月天婷婷| 人妻另类| 91久热| 久久m| 淫淫总合网| 日本不卡高清视频| 久久精品国产亚洲AV无码做| 操逼天美3区| 日本一区二区三区精品| 热久日综合| 91精品微拍福利| 久久综合中文国产| 天天视频网站黄| 高树玛利亚无码流出| 手机看片91人妻| 在线啊啊啊啊| 国产一区二区三区免费视频在性观看| 欧美熟女丝袜| 精品久久久久,69国产成人精| 综合色好色| 毛片视频白嫩| 操逼操逼视频操逼| 怡红院亚洲怡春院av| 尤物国产一区在线观看| 91亚洲最新在线| 日韩成人精品中文字幕| 亚洲在线a| 少妇蜜汁| 99999re| 黄色污污污污污污网站| ji熟女.com| 美女91色黄18| 床上啊啊啊一区二区三区| 欧美成人性活片| 超碰97在线 欧美 国产| 亚洲第一狼人丝袜美女另类| 人妻少妇无码 | 麻豆60秒| 91综合无码| 中文字幕 人妻不满 在线视频| 久久久天美| 乱精品一区字幕二区| 日本人妻最新在线中| 天堂在线一区二区| 天堂俺去俺来也www久久婷婷| 日本啊啊啊啊啊视频| 久久 国产 无码| 九九亚洲色在线观看| 欧美色婷婷| 成人小说视频在线精品欧美| 2019男人的天堂| 五月丁香大香蕉| 久久这里只精品免费福利| 丝袜色综合| 乱精品一区字幕二区| 亚洲国产成人精品999| 欧美第二页午夜| 久热这里| 18禁中文字幕| 97久久国产| 91欧美另类| 三级三级三级日本99| 100啪啪视频大全| 五月天精品| 久草婷婷| 日本一级婬片试看三分钟| 日韩精品午夜操呦呦不卡影院| 亚洲熟妇无码一区二区三区| 激情综合五月天| 最新av中文字幕高清| 久久有码视频| 欧亚成人在线视频| 中文字幕在线观看视频www| 91日韩| 黄久在线| 99999精品视频| 婷婷久月| 啪一啪免费视频| 久久超碰网| 97伪v| 欧美老妇综合网| 久久精品美女一区| 男女无套 免费网站| 超碰97综合网| 超碰免费欧美7| 97一区二区蜜臀| 天天日天天干天天整| 欧美啪啪啪91| 97一本大道亚洲一区| 东京太热久久久| 人妻熟女av国产网站| 肉动漫无遮挡h在线观看| 欧美日日人人天天| 欧美亚州色的图| 91新在线欧美| 色婷婷基地| 午夜寂寞欧美| 国产福利一区二| 亚洲狠| 亚洲精品欧美专业| 一二三啪啪专区| 日韩啪啪啪啪啪| 十八禁啪啦拍视频无遮挡| 国产一进一出视频网站| 中文字幕精品免费一区二区| 日韩啊V| 少妇色| 激情综合网亚洲| 欧美97网| 熟女少妇视频| 可乐操在线| www.91欧美| 老熟妇综合| 色婷婷综合久久中文字幕雪峰| 久久精品欧美一区蜜桃| 亚洲女毛多水多21P| 国产精品嫩草影院午夜两性| 久久国产在线一区二区| 综合色一区三区二区| AV色五月天| 午夜天天碰综合视频| 操逼操网| 97综合久久| 后入式福利| 日韩精品三级片长长久久| 国产少妇与亚洲av| 有码免费观看| 精品一区二区三区最新| 好看的91视频| 蜜桃久久久久久久久久久久| 91色堂| 一区二区视频你懂的| 久草精品国产蜜臀| 91精产一区二区三区| 久草资源在线视频官方总站日韩丝袜美腿| www.高清无码诱惑一区.com | 欧洲射精91| 十八禁黄色成人网站观看| 刺激精品视频| 97亚洲资源| 国产欧美日韩臀| 亚洲少妇诱惑| 久久欧洲| 欧美成人综合| 乱操9999| 加勒比综合a∨| 蜜臀一二三区| 色路综合| 亚洲中文字幕熟女| 国产亚洲日韩在线三区黑人| 操逼操逼视频操逼| 日韩一区二区三区四区五区| 日韩精品视频在线观看一卡二卡| av资源在线播放天堂| 天天日日夜夜| 久久久久久91香蕉国产| 丁香7月婷婷| 国产精选视频| 日韩免费a级毛片无码a∨| 毛片一区二区| 国产操逼视频在线观看| 久操凹凸视频| 亚洲一区二区性爱电影| 超碰免费人人| 欧美视频在线第3页| 亚洲色图20p| 亚洲精品97中文字幕| 91精品免费| 大香蕉线| 一级@啪啪视频| 国内自拍 日韩激情 99| 一区=区三区视频| 日韩欧美偷拍美女视频| 日本色日夜干| 欧亚乱色熟女一区二区| 欧美日韩丝袜 | 男女激情黄色网址| 香蕉在线一区二区三区| 欧美97视频| 久久精品超碰| 国产亚洲中文不卡二区| 中文字幕精品资源在线| 日韩人妻资源在线看| 久久精品视频在线观看| 蜜臀久久99精品久久久久久婷婷| 国产一在线观看| 九九Av| 乱老熟女一区二区三区| 美女91| 国产在线能看的你懂的| 性饥渴少妇av无码毛片| 欧美99热| 青青草在线成人视频| 天天情欲宗合网| 日产操逼| 99久热| 欧美男人亚洲天堂| 麻豆三极片| 曰韩av中文字幕专区| 综合网~91综合网| 国产91丝袜在线播放蜜月| 久久久久亚洲Av无码专区老牛影视| 两女互慰AV高潮喷水在线观看| 九九色图| 97视频在线视频| 青春草莓视频在线观看网址| 99热免费| 九九九久| 中日韩久久久| 99色婷婷中文字幕乱色| 精品人妻中文字幕高清| 99久久九九| 99九九久久| 亚洲激情欧美色图 | 欧美亚洲日本视频久久久| 嗯嗯啊啊亚欧精品| 精品九九九九九| 五月丁香六月婷综合成人综合| 四季AV一区二区凹凸精品小说| 天天综合中文字幕 91| 国产福利第一视频| 夜夜嗨老熟女AV一区二区三区| 欧美成熟性爱精品| 丁香五月电影| 九九九九一区| 亚洲一区二区三区AV无码| 欧美中文狠| 91欧洲国产成人久久精品网站| 国产高潮AA片免费看| 青青草久久| 在线岛国新天堂8| 欧美久久草熟女| 久久系列| 青娱乐av在线| 国产精品美女久久久久久网站| 国产玖玖| 亚洲精品人体| 色色婷婷五月| 欧美日韩人妻精品一区二区三区| 国产午夜激片Av毛片不卡| 九九国产热| 日本一级真人黄色性爱视频| 青青青国产| 免费AV中文网在线观看| 操我啊啊啊啊啊| 久久狠狠色噜噜狠狠狠狠97| 中文字幕乱碼在线| 精品国产乱码久久久| 九九色精品| 亚洲图片偷拍欧美| 操逼逼无码| 蜜臀99久久精品久久久久久| 婷婷伊人网| 精品制服美女中文一区二区三区| 韩国一级做A片免费的| 日韩黄色小说| 日韩人妻一区二区精品| wwe 天天干.com| 岛国黄片网站| 小骚逼被操的爽不爽| 中文字幕在线观看永久| 怡红院亚洲怡春院av| 手机看片1024你懂的国产| 青青草一区二区三区四| 99久视频| 蜜臀久久99精品久久久电影| 色999人与兽| 91色色网站| 亚洲三级网址久久最新| 看大黄色大片原件| 丝袜狂射91| 国产精品一区二区 尿失禁| 国产AV线| 亚洲最大91网| 三级激情网站| 一区二区无码视频| 欧美亚洲性爱一区二区| 亚洲第一页第二页激情| 国产偷人妻精品一区二区在线| 亚洲成人无码影院| 久热精品在线| 九九成人| 国内毛片热久久思思热| 内射中国少妇高清视频免费视频| 91久久婷婷| 免费试看60秒| 夜夜 中文视频rt| 欧美极度丰满熟妇hd| 老熟女综合网| 狠插 制服 自拍| 操逼视频色| 欧美成人精品一区二区男人蜜臀| 懂色AV一区二区三区| 久久性爱视频99| 超碰这里有精品| 日本岛国黄色网址| 乱伦强奸区日韩| 后入式在线免费观看60秒| 郑州宾馆老熟女露脸啪啪| 精品人妻一区二区三区四区| 久久不卡一区二区| 人人人摸人人| 淮穴色AV| 91色堂| 五月天婷婷色| 黄色大片视频在线免费看| 亚洲污一污二| 乱精品一区字幕二区| 亚洲欧洲自拍图片专区满春格| 人妻五十路在线| 丁香六月婷婷久久综合| 18禁精品网站在线看| 麻豆传媒一区二区在线观看| 亚洲日韩AV视色| 国产女人和拘做爰视频| 欧美亚洲综合高清在线| 青草园大香蕉| 青青青操| 亚洲欧美日韩综合在线尤物| 中文乱码字幕观看| 大香伊人在线一区| 欧亚免费视频| 少妇啪啪自拍| 日本操逼视频免费| 久久亚洲日韩国产欧| 九久9热| 日韩中文字幕二区| 大香焦A片| 91春色| 中文字幕无码不卡啪啪| 熟女欧美日韩综合婷婷| 很很干很很操| 免费公开人人操| 免费a v| 中文字幕久久亚州无码| 午夜性| 夜夜操狠狠操| 热99这里只有精品| 国产无码精品无码| 青草精品视频-日本久久久久网站| 躁躁日曰躁2020| 国产精品久久久亚洲一区| 一级久久性爱视频| 日韩av电影成人在线| 久热热| 精品无人区麻豆乱码1区2区图片| 亚洲性综合| 色婷婷蜜臀av| 国产精品肉丝自拍| 亚洲欧美激情另类色图| 91久久久久久久久18| 少妇xx精品| 国产乱伦性爱区| 精品视频一区二区| 九九九国产| 久久婷婷苹果| 熟妇人妻一二三区免费| 91模特在线观看| 久久原创中文| 亚州图片第一页| av72网| 日韩美女高潮喷水视频| 91天堂视频| 国产大片精久久久久久| 嗯~啊~快点 死我视频| 国产亚洲人妻综合日韩 久久| 日韩免费性爱视频在线观看| 亚洲AV无码国产成人| 三级三级三级a级全黄三| 亚洲国产精品有声| 超碰在线观看av不卡| 韩三级a视频在线观看| 蜜臀99久久精品久久久久| 97国产精品久久久久| 欧美激情亚洲情色| 国产免费一区| 久久久一二三四区| 亚洲综合色图欧美| 青草精品视频一日本久久久久网站| 插B在线观看| 欧美成人一区二区| 国产精品第一页国产大屁股视频免费区i| 99操| 人妻天天爽| 欧美一区二区三区成人性生活| 国产盗摄美女如厕大神作品在线观看| 大香网伊人久久综合网eew| 欧美在线大香蕉| 性色中出| 日韩资源网| 97精品久久久久久久| 亚洲综合99999| 人妻内射一区二区在线视频| 亚洲揄拍网| 大屁股熟女一区二区三区| 久久骚| 农村少妇久久久久久久| 成年无码动漫av片无尽在线| 97色碰| 亚洲综合网91| 色网色网色网色网色网色| 91neishe| 91精品少妇搡搡搡| 伊人网青青| 在线播放成人网站| 日本 情色 1区2区3区| 色色福利| 伊人国产av| 97久久国产精品| 天天躁日日躁狠狠躁| 强奸国产精品视频| 麻豆三极片| 欧美体内射精| 男人的天堂va| 五月丁香六月综合缴清无码 | 国内毛片国产欧美拍| 欧美美女自慰一区二区三区| 亚洲欧美天| 亚洲综合中文字幕有码| 超碰社区97| 天美传媒婬乱在| 超碰色综合| 亚洲精品无码成人久久久99| 岛国艾薇凹凸视频天堂| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 午夜精品久久一区二区| 日本国产亚洲一区在线观看| 亚洲囯产精品女人久久久| 日韩中文字幕在线视频观看| 激情深爱五月天| 亚洲欧美综合色| 激情啪啪视频| 91视频精品| 亚欧美天堂在线| 100啪啪视频大全| 亚洲drav色图| 91狠狠色丁香婷婷综合久久精品| 欧美大干日韩| 精品视频专区| 欧美日韩狠狠爱| 另类TS人妖一区二区三区| 天天插天天操| 91总综合网| 久久久极品| 操逼日批| 婷婷精品| 欧美在线视频观看一二三四区高清 | 国产亚洲日韩在线三区黑人| 久久精品欧美一区蜜桃| 夜夜嗨TV| 日本性爰一道本| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 成人性爱视频在线看| 日韩AV一区二区三区四四| 99精品久久久久久| 1000部熟女视频在线观看| 肉嘟嘟www视频在线观看高清| 亚洲中文制服诱惑| 亚洲第一页色网| 欧亚乱色熟女一区二区| 亚州人妻| 夜夜欢天天干| 中文字幕av乱伦| 欧美后入视频| 欧美成年人性爱视频免费观看| 99综合视频| 狠狠爱夜夜干| 香蕉久久AⅤ...| 蜜桃在线观看一区二区三区| 99热这里只有精品18| 色小视频蜜乳| 99re在线视频国产| 精品中文字幕第一页| 日韩女优在线| 精品久| 入口操逼网站| 96久久久精品| 又大又长又粗又爽又黄| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 性色一线| 草草草草视频| 青青草日韩无码| 好湿好紧视频| 91在线精品| 久久综合久色欧美综合狠狠| 欧亚性爱在线视频| 国产一区麻豆免费观看| 国产无码成人无码| 日本免费不卡二区| 婷婷婷婷婷婷久久久久| 校园春色之综合网| 97精| 国产少妇肉丝在线观看| 国产馆| 婷婷色色网| 又黄又硬又粗又长国产视频| 久精品无码av一区二免费国产在线观看| 天天内射| 人干人人人操人人摸| 偷拍综合亚洲| 国产精品香蕉热久久新品| 久久亚洲天堂| www.色婷婷色综合| 99热精品在线观看| 六六久久日韩不卡| 中日韩免费看男女操逼大全| 99精品丰满人妻无| 98人妻精品一区二区色欲| 欧美人妻精品| 日本成熟少妇A∨网站| 在线 亚洲 网爆 自拍| 美女操逼A A| 99热精品国产| 黄片色区软件| rivers-china.com| 床上啊啊啊一区二区三区| 伊人91| 午夜情侣自拍网站| 大香蕉黄色一级片免费看| 久热久| 肉嘟嘟www视频在线观看高清| 91精品人妻五十路| 日本色婷婷| 超碰97丝袜| 抽查国产福利主播| 宅男影院久久久,99| 亚洲999综合| 亚洲AV无码成人精品久久| AV女资源| 少妇蜜汁| 日韩精品一区二区日韩| 国产精品大屁股999| 色色热| 在线毛片片免费观看| 久久超碰98| 亚洲乱伦图片视频| 欧美亚州综合网图片| 色妹子A V| 国产极品精品美女视频| 国产自偷| 啊嗯好大视频在线观看| 欧美另类精品xxxx| 97在线视频免费看| 欧美少妇内射| 人人扣人人操| 肏逼视频日本| 牛牛久久国产精品视频一二三| 久久精品国产亚洲AV成人直播| 天天射日日干| 91AV天堂| 精品 码产区一区二-1080P高清在线www-B029AV| 无码高清操逼| 久久久久久中文| 男人下部插入女人下部| 高清成年美女黄网站免费大全| 日韩天天综合| 91精品成人| 91丨九色丨东北熟女| 亚洲一区日韩精品| 在线观看啊啊啊啊啊| 亚洲精品丝袜| 2024人人操人人摸| 少妇高潮流水av免费| 超碰天天去日穴| 男人天堂.AB| 国产精品亚洲一区二区三区四区| 人妻天天爽天天爽三区| 国产av色网| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 成人AV素股で擦久久| 手机在线人成免费视频| 成人线上超碰| 91天天综合在线| 亚洲自拍欧美国产首页网曝 | 欧美日韩在线视频网站| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 色综合久久夜色精品国产天堂 | 国产激情综合| 少妇同性| 精品人妻一区二区三区日产| 成人网站 免费观看| av一区二区三区四区五区久草臀| 麻豆天美传媒毛片| 成人欧美一区二区三区黑人一| 久9爱经典视频| 婷婷视频网| 上床啊啊啊| 91久久青青草原精品| 有码专区最新中文字幕有码| 以及麻豆国产入口在线观看免费| japan日本高清乱xxxx| 午夜呻吟欧美| 最新国产精品| 国产白嫩精品久久| 9国产超碰| 激情六月天| 欧美激情精品| 五月婷婷六月丁香| 久草资源在线| 欧美视频在线第3页| 大香蕉久久| 日韩女优在线| 干超碰碰熟女| 欧洲中文字幕| 超清福利精品视频在线| 超碰综合色| 欧亚性爱啪啪| 91综合天天| 青青11操操操操操操操操| 热99这里有精品综合久久| 欧美香蕉视xxx| 成年人三级黄色片视频| 东北操逼| 日韩另类色图| 成人自拍三级在线观看| 99re这里| 成人精品在线观看| 啊啊啊无码| 蜜臀AV一区二区三区激情综合| 成人a级高清视频在线观看| 久久久99久9| 美国一区二区三区视频| 国产精品农村妇女| 欧美 传媒 麻豆 日韩 偷拍| 黑人精品成人一区二区三区 | 亚洲欧洲网站免费观看| 97视频在线播放| 狠狠图片青青草| 无套内射性感少妇视频| 欧美青青草视频| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 亚洲日本激情| 久9久9久9久9久9久9| 日韩伦理视频| 免费视频a级毛片免费视频| 午夜舔阴达高潮视频免费看| 中文字日本乱码| 久久五月天婷婷| 在线观看成人性爱免费小视频| 久久久久极品| 欧美欲色| 91 刺激在线| 国产精品无码论坛| 亚洲熟女精品| 日韩啊V| 亚洲无码一区成人免费午夜| 欧美91精彩| 午夜精品一区二区三区三上悠亚| 黄色视频特级毛片| 日本操逼视频不卡直接放| 熟女少妇视频| 日韩精品国模| 欧美色图人妻| 免费久久9999| 亚洲另类久操网| 婷婷九月| 欧美操逼一二三区| 91一起操| 日韩AV无码中文一区二区| 五月天久久综合网| 亚洲伊人久久综合97| 精品少妇一区二区| 黑人粗大V S日韩女优视频| 制服中出中文人人精品| 天美欧美国产| 98超碰日本| 夜夜骑操视频| 五十路成人在线视频二区三区| 成人精品欧洲亚洲| www.av不卡中文字幕| 色悠久久久av| 在线女人91| 欧美最婬乱婬爆婬性视频 | 蜜臀99久久精品久久久懂爱| 日韩小电影| 日本孕妇一区二区视频操逼免费看 | 97久久精品不卡| 夜夜爽夜夜摸夜夜操免费视频| 无码久| 亚洲女人毛茸茸91| 欧美亚洲丝袜人妻制服中文99| 欧洲精品二区| 女性91网站| 丝袜人妻av一区二区| 99久国产精品午夜性色福利| 国产一级内射无挡观看| 免费的很黄很污的全部视频| 精品一久久久| 国产精点久久久成人| 人妻人人澡人人爽人人| 五月综合激情| 天美传媒AV国产在线| 久久婷婷电影网| 综合欧美日本三级| 嗯嗯啊啊的视频| 欧美乱欲| 操逼无码一区| 天堂精品在线| 90后后入| 国产懂色精品国产av| 九九久久国产精品| 明星性猛交ⅹxxx乱大交| 在线观看AV片| juliaann丝袜大战黑鬼| 牛牛AV人人夜夜澡人人爽| 先锋精品av色鲁| 后入式999| 亚洲无码一二三区| 欧美色图片91| 激情熟女12P| 91在线视频免费中出| 女色综合| 夜夜夜久久| 久久产精品一区二区三区电影| 伊人久久88国产女| 国产成人五月天丁香花| 丁香九月激情| 久久香蕉国产线看观看亚洲女人 | 沈阳熟女高潮对白视频| 伊人97超碰| 色香AV| av婷婷色网| 久久久精品中文字幕爱豆| 九九拍拍精品视频在线播放| 国产传媒午夜理伦精品| 色制服丝袜夫妻av一区| 大香蕉久| 青女偷拍网| 色穴精品| 欧美国产精品| 久久原创中文| 五月天久久久| 欧美色www亚洲国产阿娇要播| 九九英色视频| 日本一区二区不卡精品| 亚洲色图片区| 人妻密肉在线观看| 国产特级毛片AAAAAA高潮流水| 精品一二三区女同| 婷婷视频网| 婷婷综合伊人一区| 欧美 亚洲 大香| 日本乱人伦片中文三区| 欧美网站免费| 狠狠2050在线观看| 久久久久久久久久久免费精品| 中文字幕jul-617人妻熟女| 欧美影音在线| 精品国产无码中文| 天天日天天色| 啊啊啊好大好深| 欧美黄色片AAAAA| rivers-china.com| 婷婷综合| 欧美综合第一页| 夜夜爽爽爽| 国产极品馒头逼| 亚州操操穴网| 乱伦日本中文自拍| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 午夜久久一区二区无码中出| 中国黄色特级精品一区二区三区片| 家庭乱伦国产| 欧美影音在线| 久久高清欧美国产| 天天综合网日韩7799| 91九九九小逼| 99热久| 国产操操日韩三级黄| 老鸭窝成人| 日日天天久久啊啊aaa| A 天堂在线观看视频| 欧美性爱日韩高清| 奶水 人妻 哺乳 在线| 99re这里| 91精品久久综合熟女| 国产福利电影| 亚洲女人91| 色婷婷一区二区三区久久午夜成人不| 日日日啊啊啊| 久久久蜜桃一区二区三区| 国产 热久久久久国产精品| 神马午夜久久| 高颜值美女口爆高潮浪叫| 欧美伦乱爱| 久久精品72| 1956日韩精品| 色婷婷电影| 亚洲中文一区二区三区视频| 八戒无码国产午夜福利| 欧美在线|亚洲| 日韩精品第3页| 精品国产乱码久久久久久久久1 | 伊人精品视频| 国产农村妇女精品一二区| 欧美日韩色图片| 激情干在线| 探花在线免费观看视频国产一区| 亚洲色图尤物视频| 最新国内自拍av免费| 男同专区一区二区三区在线| 亚洲丝袜二区在线| 黑人在线91| 3P丝袜熟女 色综合| 综合网少妇| 97久久久久| 超碰在线一区| 精品一区二区国产日韩| 免费αV在线视频| 操人人| 日韩精品黄片免费观看| 色色色欧美| 国产成自自拍在线观看| 一摸二插三插| JIZZJIZZ亚洲女人被躁| 强奸乱伦麻豆| 美女露胸露尿口| 97国产伦理| 97久久网| 手机看片日韩人妻| 草草影院最新网址| 欧美激情中文字幕另类小说| 破苞ⅩXXX性无码动漫无码| 操91| 久久综合中文国产| 黑人干亚洲| 亚洲激情视频| 91午夜无码| 天天干2019| 99re在线视频国产| 久草资源在线视频官方总站日韩丝袜美腿 | 日本天天干天天搞一区| WWW美腿丝袜香蕉中文| 欧美黑人精品在线播放| 强奸乱伦大香蕉| 91干熟女| 亚欧美天堂在线| 大肉棒导航| 伊色久人大在线| 亚洲无码太久| 天天干天天拍| 国产精品乱人伊人网| 天天弄欧美| 欧美精品欧美精品系列| 日本2020一区二区| 先锋激情∨在线视频播放| 欧美人妻二区三区| 亚洲激情欧美色图| 久夜操| 亚洲91在线| 国产欧美在线观看免费观看| 亚洲国产一级精品毛一级精品看免费视频 | 亚洲性爱成人| 亚洲AV乱码专区国产噜噜亚洲| 综合久久久久久久综合网| 人人摸人人干| 岛国小电影| 日韩一级二级三级免费看完整版国语版 | 欧美色院| 污啪啪啪视频| 中文字幕一区二区三区人妻不卡| 婷婷AV一区二区三区| 天天干1区2区在线| 女人喷水视频在线观看| 天天热精品| aaaa少妇高潮大片| 91精品少妇搡搡搡| 中文字幕在线日亚州9| 97在线免费公开视频| 在线观看AV片| 色哟哟av| 97色婷婷| 男女日B国产| 先锋激情∨在线视频播放| 一区不卡在线观看av| 国产一区二区视频在线播放| 大香蕉欧美国产日韩高潮| 综合网亚洲1| 欧美极品| 久久久久99999| 天操老女人| 中文字幕免费看| 26UUU欧美激情一区二区| 天天躁日日躁AAAXX| 久久综合av| 综合五月婷婷| 欧美乱色| 一二三四日本视频高清| 婷婷九月| 99亚亚热| 亚洲最大91网| AV九九| 中文字幕成人| 亚洲欧美精品91| 色播五月婷婷| 麻豆天美电影一区二区| 九九热免费视频| 人人摸人人干| 偷拍欧美综合| 超碰97起碰| 国产精品视频电影| av婷婷色网| 操我啊啊啊啊啊| 加勒比日本在线| 天天操人人操骚逼网站| 日日干男人的天堂| 天天草AV| 啊啊啊啊嗯嗯在线久久久| 国产精品噜噜噜日日日| 国产尤物在线三区| 欧美性猛交美女自慰91| 欧美日韩性爱无码| 亚洲色图亚洲无码强奸乱伦| japan日本高清乱xxxx| 日韩一级特黄av毛片| 久久婷婷综合国际产色怕| 97操操| 污啪啪啪视频| 亚洲aw毛茸茸在线| 日本精品国产视频| 91欧美性| 中文字幕诱惑制服人妻丝袜美丝袜美| 亚洲午夜蜜臀| 热热色91| 午夜小电影在线插入淫高潮| 国产高清精品一区二区三区毛片 | ji熟女.com| 日本操BAV| 91成人久久 | www欧美91| 骚女天天综合网| 国产精品久久久 | 在线观看日韩av不卡| 久久久久久久久久久久久久久性生活视频 | 欧美九九九| 亚州色综合| 国产精品剧情| 国产精品嫩草久久久久| 做爱A级亚欧| 国产精品熟女乱伦| 欧美精品成人亚洲| 亚洲人妻熟妇三十三区| 超碰在线在公开超碰在线在公开| 91精品91久久久久77777俄罗斯老妇姓x| 中文字幕av亚洲精品| 在线一道啪| 色色操| 男生女生啊啊啊啊| 少妇高潮九九九九九九九| 无码78| 国内亚洲精彩视频在线| 亚洲精品色| 亚洲精品天天影视综合网| 精久久久| 97操| 岛国视频免费在线观看| 久久久一级| 亚洲色图 综合| 91麻豆天美传媒在线| 欧美日韩性爱电影在线| 99自拍视频| 女同性恋一区二区三区精品视频| 男女性扦B| 最新日本中文字幕| 欧美日韩中文亚洲v在线综合| 又黄又爽在线观看视频| 人人操人人射人人干| 天天影视色香欲综合网小说| 国产乱码精品一区二区三区四川| 亚洲 中文 女同| 欧洲大香蕉| 精品综合久久久久久五月天| 女人双腿搬开让男人桶| 啊啊啊 在线观看| 国产精品久久久九九九| 亚洲精品97| 欧美激情性久久久久久| 国产成人+综合亚洲+天堂| 亚洲精品一卡二卡三卡福利视频网站 | 精品成人av一区二区三区在线| 成人综合网 欧美| 劲爆欧美人妖三区91| 少妇久久| 国产日产精品久久快鸭的功能介绍| 天天干少妇| 久久综合av| 久操精品| 久久露脸国产老熟女| 日韩ab网 | 后入式在线免费观看60秒| 欧美激情内射| 一区二区三区 日韩欧美| 亚洲另类久操网| 亚洲 欧美 日本 国内 首页| 又大又长又粗又爽又黄| 美国美女AV在线| 91视频女生| 思思热er精品视频| 一道本久久棕合爱| 一二视频神马久久传媒| 嫩草在线视频| 亚洲18禁| 大色网久久| 性爱乱伦一区| 99re6国产精品99re| 爱妃国产亚洲视频中文字幕| 97超碰色五月| 亚洲视频精选| 殴美大黄片| 熟妇激情| 青娱乐国产盛宴视频| 成人色女网| 欧洲在线性爱视频| 国模一区二区三区| 亚洲日韩狠狠撸视频| 欧美久久伊人| 好爽免费视频,| 久久永久无码人妻视频| 男女激情黄色网址| 午夜激情床戏激情| 一区二区影视| 丁香五月性| 欧美亚洲清纯| 国语av最新自产拍在线观看| 极品粉嫩少妇视频| 成人小说另类在线| 色综合一区二区三巨| 粉嫩av一区二区三区天美传媒| 操比国产| 中文欧丝袜诱惑| 欧美黄色大片在线观看| 第四色亚洲色图| 国产精品日韩在线一区| 欧美精品偷拍| 天天色,天天干,天天干| 69人妻精品丰满熟女区| 无码人妻一区二区三区色欲aⅴ| 91九色丨国产丨爆乳| 欧美日本成人一区二区| 肉丝网站91| 91人精品妻入口| 三上制服丝AV| 日韩中文字幕国产| 91五月天| 91在线超高颜值国产| 久久综合女优| 国模艳艳啪啪一区| 亚洲欧美综合网站| 国模无码一区二区三区在线| 夜夜高潮夜夜爽国产伦精品| 久久女婷| 欧综合网| 成人无码专区精品视频| 日韩人妻有码免费视频| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 99这里只有精品| 后入式免费视频| 青青草在线视频人人想人人上| 久久精品国产精品一区| 免费看污网站| 翔田千里一区二区三区奶水| 99视频这有这里有精品| 亚洲一级性爱视频免费看| 9长久久精品| 亚洲国产一区二区三区四区国产| 男人的天堂无码| 国产欧美亚洲精品a第2页| 欧美综合天堂| 亚洲有薄码区日本系列中文字幕| 日韩欧洲操屄视频|