一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

二十年的編程,教會(huì)我的五件事

 天下小糧倉(cāng) 2019-11-29

無(wú)論你是剛?cè)刖幊痰男“?,還是已經(jīng)浸潤(rùn)編程數(shù)年的資深人員。相信這篇文章都會(huì)給你帶來(lái)不一樣的啟發(fā),前人的經(jīng)驗(yàn)永遠(yuǎn)是我們最容易看到的捷徑。

二十年的編程,教會(huì)我的五件事

作者 | Erik Dietrich

譯者 |彎月,責(zé)編 | maozz

出品 | CSDN(ID:CSDNnews)

以下為譯文:

今年,我對(duì)DEV社區(qū)平臺(tái)(https:///)有了很大的了解。在Reddit眾多怒氣沖沖的評(píng)論家以及急于否定他人的鑒賞家中,這個(gè)平臺(tái)積極的正能量宛如一片綠洲,讓人眼前一亮,并為我們帶來(lái)了更廣闊的軟件世界。

這個(gè)社區(qū)非常有趣的一面是,社區(qū)中似乎有很多初學(xué)者。我經(jīng)??吹叫率肿珜懙奶右约懊嫦蛐率值奶?。所謂“新手”,指的是那些渴望成為程序員的人,他們或者在參加培訓(xùn)班,或者在尋找入門級(jí)的工作,或者只是不幸被定義為“初級(jí)”的角色。

我覺得這很有趣。相對(duì)而言,新手對(duì)該行業(yè)充滿更多熱情和興奮。而這種興奮是富有感染力。

然而,同時(shí)也讓我感受到我在這個(gè)行業(yè)中屬于前輩了。

二十年的編程,教會(huì)我的五件事

我想起了Bob Martin曾在播客或演講中說(shuō)過(guò)的一段話。

在過(guò)去的4-5年中,程序員的需求急劇增長(zhǎng),以至于程序員的數(shù)量每隔5年就會(huì)翻一番。結(jié)果是,擁有5年經(jīng)驗(yàn)的程序員在這個(gè)行業(yè)的任職時(shí)間甚至超過(guò)了該行業(yè)的一半。

二十年的編程,教會(huì)我的五件事

行業(yè)的前輩

如今,我已在這個(gè)行業(yè)中度過(guò)了20個(gè)春秋。其中的10年時(shí)間里,我的主要工作都是編寫代碼。而另外10年都在管理程序員、指導(dǎo)他們,就如何管理程序員向組織提供咨詢,運(yùn)行代碼庫(kù)評(píng)估實(shí)踐,而如今的我在從事內(nèi)容營(yíng)銷。

但是,無(wú)論身處以上哪個(gè)職位,我都在或多或少地編寫代碼。

根據(jù)上述有關(guān)程序員增長(zhǎng)速度的估算,我比這個(gè)行業(yè)中94%的人都年長(zhǎng)。

所以,總結(jié)起來(lái)說(shuō),我是一個(gè)與編程新手廝混在一起的編程愛好者。

于是,我不禁在想:“如果我可以將這段經(jīng)歷總結(jié)成一些簡(jiǎn)短的建議,再假設(shè)有人感興趣,那么我會(huì)對(duì)他們說(shuō)什么呢?”

二十年的編程,教會(huì)我的五件事

以上就是這篇文章的背景。下面讓我來(lái)談一談20年編程生涯為我?guī)?lái)的重大教訓(xùn)和收獲。

二十年的編程,教會(huì)我的五件事

最糟糕的莫過(guò)于知識(shí)重復(fù)

“避免復(fù)制粘貼的編程!”

如果你在編寫應(yīng)用程序時(shí),總是靠復(fù)制、粘貼和修改代碼,如果還沒有人因此而拿戒尺打你的手心,那么現(xiàn)在你自己動(dòng)手吧。

你應(yīng)該停止這種做法。立刻,馬上!這是一種可怕又偷懶的做法。

二十年的編程,教會(huì)我的五件事

想象一下,你有一個(gè)完美的CalculateBill方法,但是產(chǎn)品經(jīng)理猶豫著說(shuō):“我們有一部分客戶來(lái)自墨西哥,那邊的賬單計(jì)算方式不一樣?!庇谑?,你復(fù)制了這個(gè)方法,重新命名為CalculateBillMexico,并根據(jù)需要做出調(diào)整。

這種方法的問題在于:

  • 如果將來(lái)核心的邏輯需要調(diào)整,那么你就必須付出額外的勞動(dòng),因?yàn)槟阈枰薷膬蓚€(gè)方法。

  • 一旦發(fā)生變更,你的代碼出bug的機(jī)會(huì)也會(huì)加倍。

  • 如今你已經(jīng)建立了一個(gè)“設(shè)計(jì)模式”,隨著全球擴(kuò)張的繼續(xù),你的代碼還會(huì)因?yàn)榈谌齻€(gè)國(guó)家而衍生出第三個(gè)冗余的方法。

  • 隨著工作的進(jìn)展,你的工作量將急劇增加。

  • 在修改代碼時(shí),你遲早會(huì)因?yàn)橥浶薷乃械姆椒ǘa(chǎn)出新bug。

  • 最終,所有這些方法之間都會(huì)產(chǎn)生很大的差異,以至于你無(wú)法合理地將這些方法合并回去,并從根本上解決問題;即便沒有如此大的差異,每當(dāng)更新賬單的計(jì)算方式時(shí),你就需要進(jìn)行20次的更改。

是不是一塌糊涂?而這只是“復(fù)制-粘貼”的表面問題。

二十年的編程,教會(huì)我的五件事

復(fù)制粘貼只是一個(gè)開端

真正的問題在于系統(tǒng)中的知識(shí)重復(fù)。

系統(tǒng)中的知識(shí)重復(fù)可以以多種方式發(fā)生,而無(wú)腦地復(fù)制粘貼只是最明顯和最愚蠢的方式。知識(shí)重復(fù)的其他形式還包括:

for循環(huán)上方的代碼注釋解釋循環(huán)的開始、結(jié)束和增量。

全局變量在程序里賦了一個(gè)值,然后從配置文件中重新賦了另一個(gè)值。

數(shù)據(jù)庫(kù)表中同時(shí)包含“稅前總額”、“稅款”以及“總金額”三列。

范圍很廣的ERP系統(tǒng),CRM模塊中存儲(chǔ)了客戶信息,然后在賬單模塊中又存儲(chǔ)了一次。

對(duì)于以上所有這些情況來(lái)說(shuō),最好的打算也不過(guò)是通過(guò)恰當(dāng)?shù)牧鞒毯拖到y(tǒng)來(lái)認(rèn)真地跟蹤重復(fù)并確保同步更新。

至于一無(wú)是處的代碼注釋,團(tuán)隊(duì)的領(lǐng)導(dǎo)會(huì)警告你每次更新代碼時(shí),都別忘了檢查注釋。

還有上述的ERP系統(tǒng),銷售和會(huì)計(jì)兩個(gè)部門都需要嚴(yán)格地制定備忘錄,并通過(guò)發(fā)送正式電子郵件確??蛻粜畔⒈3滞?。

二十年的編程,教會(huì)我的五件事

而且,請(qǐng)記住,這些還只是最好的打算。

當(dāng)你為了確保同步開始構(gòu)建復(fù)雜的邏輯(那么你就必須進(jìn)行維護(hù)——請(qǐng)參照下一節(jié))時(shí),情況就會(huì)每況愈下。

也許你只需要實(shí)現(xiàn)一個(gè)數(shù)據(jù)庫(kù)觸發(fā)器,就可以在“總金額”列發(fā)生變化時(shí)確?!岸惽敖痤~”+“稅款”=“總金額”?;蛘?,你也可以編寫尷尬的狀態(tài)檢查邏輯,當(dāng)默認(rèn)的全局變量值與配置文件分配的值不匹配時(shí),記錄警告。

糟糕時(shí)候,上述情況會(huì)造成數(shù)據(jù)不同步。然而,作為程序員,你可能不必?fù)?dān)心,因?yàn)槟愕墓ぷ饕舶ㄅ宄槭裁炊嗄陙?lái)從未給某個(gè)客戶開過(guò)發(fā)票或多收了客戶很多錢。

然而,根除系統(tǒng)中出現(xiàn)的知識(shí)重復(fù)問題并積極抵制,就可以避免所有這些情況。

二十年的編程,教會(huì)我的五件事

代碼是負(fù)債

作為開發(fā)人員,我們喜歡寫代碼。寫代碼的感覺非常好,而且構(gòu)建軟件令人興奮。

此外,我們還需要學(xué)習(xí)新的語(yǔ)言、范例、框架、技術(shù)棧、工具、API和庫(kù)。我們沉浸在自己的內(nèi)心世界,享受快樂地編寫代碼的狀態(tài)。

二十年的編程,教會(huì)我的五件事

然而,沉浸在代碼世界而不自知的不止我們。

被誤導(dǎo)的禿頭老板甚至用每小時(shí)生成的代碼行數(shù)作為生產(chǎn)力的度量指標(biāo)。但是即便你沒有那么愚蠢,也很容易認(rèn)為代碼自然是越多越好。事實(shí)上,代碼是應(yīng)用程序和業(yè)務(wù)的殺手,而各個(gè)公司卻把它當(dāng)成有價(jià)值的知識(shí)產(chǎn)權(quán)。

還是忘記這些無(wú)稽之談吧。

我能理解為什么我們將代碼視為資產(chǎn)。但是實(shí)際上代碼完全是負(fù)債。

二十年的編程,教會(huì)我的五件事

少即是多

你知道有人可以用10行代碼實(shí)現(xiàn)別人要100行代碼才能實(shí)現(xiàn)的功能嗎?那么你知道比10行代碼更好的是什么嗎?那就是0行代碼。

比如,我們寫了一行代碼:

printf(“Hello World!”);

你知道這中間可能會(huì)出多少錯(cuò)嗎?

  • 這行代碼是否只能在允許控制臺(tái)輸出的環(huán)境中運(yùn)行?

  • 這個(gè)神奇的字符串將來(lái)不會(huì)成問題嗎?

  • 你不應(yīng)該記錄日志嗎?畢竟日志才是最佳實(shí)踐。

  • 你考慮過(guò)這行代碼中的安全隱患嗎?

保守地說(shuō),這行代碼可能會(huì)出10個(gè)錯(cuò)誤。那么現(xiàn)在,讓我們?cè)黾拥?行代碼。

你是否覺得2行代碼可能會(huì)出20個(gè)錯(cuò)誤?

我認(rèn)為2行出的錯(cuò)誤可能會(huì)超過(guò)100個(gè)。你可能覺得我過(guò)于悲觀,但是我認(rèn)為潛在的問題與代碼行數(shù)之間的關(guān)系更接近排列組合的個(gè)數(shù),而非線性關(guān)系。

二十年的編程,教會(huì)我的五件事

我有多年專業(yè)管理顧問的經(jīng)驗(yàn)。我做過(guò)數(shù)據(jù)驅(qū)動(dòng)代碼庫(kù)的評(píng)估,并幫助IT領(lǐng)導(dǎo)者制定有關(guān)代碼庫(kù)的戰(zhàn)略決策。

因此,我有機(jī)會(huì)查看、分析和收集大量代碼庫(kù)的統(tǒng)計(jì)信息。

如果算上我利用自動(dòng)化分析過(guò)的客戶端代碼庫(kù)之上的代碼庫(kù)的話,那么我總共收集了1000多個(gè)代碼庫(kù)的詳細(xì)統(tǒng)計(jì)信息。在獲取這些數(shù)據(jù)后,我進(jìn)行了回歸分析,以尋找相關(guān)性。

你知道對(duì)代碼庫(kù)造成負(fù)面影響最大的因素是什么嗎?代碼庫(kù)的大小。

二十年的編程,教會(huì)我的五件事

幾乎所有與代碼庫(kù)有關(guān)的問題都與代碼庫(kù)的大?。ㄒ赃壿嫶a行來(lái)衡量)有著顯著的關(guān)系。

我喜歡代碼。

我喜歡編寫代碼、研究代碼、分析代碼,并通過(guò)代碼來(lái)構(gòu)建事物。但是請(qǐng)不要誤解,代碼是一個(gè)巨大的負(fù)債。我們始終應(yīng)該努力用盡可能少的代碼來(lái)完成所有工作。

二十年的編程,教會(huì)我的五件事

高級(jí)開發(fā)人員:信任,但要自行驗(yàn)證

23歲時(shí),我開始了第一份軟件工程師的工作,我非常敬佩公司里的高級(jí)開發(fā)人員。Paul、Raymond、Chris、Ken,他們都有20年的經(jīng)驗(yàn),我至今仍然記得每一個(gè)人,而他們熟練使用多種編程語(yǔ)言的能力也讓我看傻了眼。

我從他們那里學(xué)到了很多東西。

二十年的編程,教會(huì)我的五件事

我之所以提到這些,是因?yàn)槲蚁脒^(guò)渡到接下來(lái)要說(shuō)的話。

如果你是這個(gè)行業(yè)的新手,那么可能就會(huì)像我一樣,認(rèn)為團(tuán)隊(duì)里高級(jí)開發(fā)人員的每句話都是金玉良言。而且如果你幸運(yùn)的話,很多高級(jí)開發(fā)人員確實(shí)是不可多得的人才。

然而,并非所有高級(jí)開發(fā)人員的水平都相同。

回想起來(lái),我上面提到的同事都是優(yōu)秀的程序員,我從他們那里學(xué)到了很多東西。但是,我也明白在我的職業(yè)生涯中,最初的經(jīng)歷都很幸運(yùn)。

很多公司擁有很多出色的高級(jí)開發(fā)人員,但也有很多公司擁有的高級(jí)開發(fā)人員較少,或者他們的高級(jí)開發(fā)人員在技術(shù)上并不過(guò)關(guān),但是這些高級(jí)開發(fā)人員仍然任職很久,遲遲沒有被解雇,甚至可能得到晉升,頂著“高級(jí)”或“首席”的頭銜。

這種現(xiàn)象非常普遍,甚至有人稱之為“專家級(jí)初學(xué)者”。

二十年的編程,教會(huì)我的五件事

我說(shuō)這些是為了警告你,有很多高級(jí)開發(fā)只是表面上裝出來(lái)的,實(shí)際上并不稱職。

因此,在你是新手時(shí),沒有確鑿的證據(jù)就不應(yīng)該質(zhì)疑他們,但不要輕易假設(shè)他們告訴你的是對(duì)還是錯(cuò)。你需要自行驗(yàn)證(最好不要當(dāng)著他們的面)。

二十年的編程,教會(huì)我的五件事

TDD(測(cè)試驅(qū)動(dòng)開發(fā))不僅有效,而且還可以積極地改變編程的方式

在涉及任何與編程或技術(shù)相關(guān)的問題時(shí),身處該行業(yè)的我們都會(huì)帶有偏見。

  • IDE與輕量級(jí)編輯器之爭(zhēng)?

  • 蘋果、Windows還是Linux?

  • 你如何看待PHP?

  • 制表符還是空格?

只要提到以上任何一個(gè)建議,就會(huì)看到持有強(qiáng)烈見解的人們吵得沸反盈天。因此,考慮到所有這些因素,我意識(shí)到我自己也陷入了類似的境界:“順TDD者是生存還是毀滅”。

我的目的不是給你洗腦,而是分享我的經(jīng)驗(yàn)。

二十年的編程,教會(huì)我的五件事

大約在10年前,我對(duì)TDD持懷疑態(tài)度。請(qǐng)注意,我不是一個(gè)單元測(cè)試懷疑論者,剛開始的時(shí)候我就同意這是一種很有幫助的做法。

但是對(duì)于TDD?我不太確定。

我決定寫一篇博客,介紹為什么TDD并不是那么出色。

但是,我不想就此事寫一篇文章表達(dá)站不住腳的廉價(jià)觀點(diǎn)。因此,我決定嚴(yán)格按照TDD建立一個(gè)小型客戶項(xiàng)目,然后我就可以在文章中寫:“我花了幾周的時(shí)間來(lái)驗(yàn)證TDD,結(jié)果卻并不美麗?!?/p>

然而,命運(yùn)總是充滿了意外驚喜。

二十年的編程,教會(huì)我的五件事

對(duì)TDD的幡然醒悟

那天真是尷尬又怪異。確切來(lái)說(shuō)是好幾天。

整個(gè)過(guò)程非常漫長(zhǎng),我所作的一切都非常笨拙且不自然。我記錄了一條又一條筆記,作為證明TDD很糟糕的證據(jù)。

然而,后來(lái)發(fā)生了一件有趣的事情。

我對(duì)這種笨拙的范例非常著迷,每天我都花4-5個(gè)小時(shí)編寫代碼,但中間并沒有停下來(lái)實(shí)際運(yùn)行應(yīng)用程序,檢查我的更改是否有效。換做往常,每隔10分鐘我就會(huì)運(yùn)行一次應(yīng)用程序,檢查程序是否正確,看看我的更改是否確實(shí)有效。

在發(fā)現(xiàn)自己已經(jīng)寫了幾個(gè)小時(shí)的代碼后,我啟動(dòng)了應(yīng)用程序,嘆了口氣,以為接下來(lái)就是長(zhǎng)達(dá)幾個(gè)小時(shí)的調(diào)試。畢竟,我推遲了將近30個(gè)周期。

然而,神奇的事情發(fā)生了,一切都能正常工作。

二十年的編程,教會(huì)我的五件事

第一次運(yùn)行,一切都很完美,竟然沒有出現(xiàn)一個(gè)異常,也沒有發(fā)生任何意料之外的事情。我花了幾個(gè)小時(shí)編寫代碼,中途并沒有檢查GUI,也沒有在運(yùn)行時(shí)驗(yàn)證,但一切都能正常工作。

最終,我寫了一篇與預(yù)想截然相反的關(guān)于TDD的文章。從此我就踏上了這條不歸之路。

我學(xué)習(xí)了這項(xiàng)技術(shù),掌握了這項(xiàng)技術(shù),教授了有關(guān)該技術(shù)的課程,并對(duì)開發(fā)人員進(jìn)行了指導(dǎo)。但此外之外,我還檢查了單元測(cè)試對(duì)代碼庫(kù)的影響,發(fā)現(xiàn)這些影響無(wú)疑都是正面的。

所以,你也可以嘗試學(xué)習(xí)TDD,你絕不會(huì)后悔。

二十年的編程,教會(huì)我的五件事

證據(jù)才是王道

到目前為止,在這篇文章中,我提到了有關(guān)代碼庫(kù)的評(píng)估實(shí)踐,還討論了經(jīng)驗(yàn)數(shù)據(jù)。最后讓我再介紹一下職業(yè)生涯的最后一課。

證據(jù)就是一切。

代碼審查可以作為一種有教育意義的授權(quán)活動(dòng)。同時(shí),代碼審查也可以抹殺一個(gè)人的靈魂。

不過(guò),通常代碼審查都在啟發(fā)性體驗(yàn)和毫無(wú)意義的爭(zhēng)吵之間來(lái)回?fù)u擺。

你可能會(huì)聽到“設(shè)計(jì)不佳”或“效率不高”之類的反饋。你也可能會(huì)說(shuō)這些話。而且,你極有可能會(huì)在沒有任何證據(jù)的情況下聽到或說(shuō)出這樣的話。

你需要改正這一點(diǎn)。

二十年的編程,教會(huì)我的五件事

證據(jù)的重要性

如果有人在代碼審查或其他形式的團(tuán)隊(duì)或組織協(xié)作中,以惡劣的態(tài)度對(duì)待你,那么你就應(yīng)該拿起證據(jù)的武器。如果你想就某件事情向管理層或領(lǐng)導(dǎo)層提出任何想法,那么也應(yīng)該拿出證據(jù)。

證據(jù)可以幫你贏得辯論、組織、領(lǐng)導(dǎo)角色和職業(yè)發(fā)展。

你不同意團(tuán)隊(duì)廣泛使用全局變量的做法?不要做無(wú)謂之爭(zhēng),你需要證明。

我所說(shuō)的“證據(jù)”并不是指尋找類似于“全局變量的弊端”等文章,或拿權(quán)威人士嚇唬人。我的意思是查找代碼庫(kù)中沒有全局狀態(tài)的模塊,并對(duì)照這些模塊與JIRA問題票的發(fā)生率。

二十年的編程,教會(huì)我的五件事

你們團(tuán)隊(duì)中是否有人要求你不要使用你選擇的庫(kù)或API,只是因?yàn)槟撤N模棱兩可的性能問題?你會(huì)服氣嗎?

那就證明這個(gè)人錯(cuò)了。實(shí)際動(dòng)手試試看。

你需要習(xí)慣于動(dòng)手實(shí)驗(yàn),而不是大聲表達(dá)自己的觀點(diǎn)或加倍考慮。這可以直接驗(yàn)證你自己的想法。

有時(shí),你會(huì)意識(shí)到自己的懷疑是對(duì)的。而有時(shí),你會(huì)意識(shí)到自己錯(cuò)了,這都很有價(jià)值。

但更重要的是,你可以提出別人無(wú)法反駁的論點(diǎn),并樹立勤奮和正確的好名聲。這種做法還可以幫助你克服看似無(wú)法克服的困難,例如“我只是個(gè)新人,而他是高級(jí)工程師(專家級(jí)初學(xué)者)”。

更進(jìn)一步,這還可以為你的職業(yè)發(fā)展奠定基礎(chǔ)。

編寫代碼的能力可以讓你收獲一份收入豐厚的職業(yè)。能夠編寫代碼并通過(guò)證據(jù)提供技術(shù)和業(yè)務(wù)上的決策可以確保你的職業(yè)生涯迅速取得成功。

二十年的編程,教會(huì)我的五件事

你是否愿意聽取以上意見?

我感覺這篇文章富有哲理。實(shí)際上,我是在芝加哥飛往休斯敦的飛機(jī)上寫下了這篇文章,當(dāng)時(shí)的我端著一杯酒,又無(wú)法使用wifi。在百無(wú)聊賴中,我只能與空姐交談,然后就回憶起了我的職業(yè)生涯。

我認(rèn)為如果你足夠努力,就可以就這些觀點(diǎn)進(jìn)行辯論。

但是,我不打算將這些作為一成不變的編程法則或某種專業(yè)行為的準(zhǔn)則。我會(huì)把這些我在職業(yè)生涯中所學(xué)到的教訓(xùn)作為課程,并附上警告事項(xiàng),因?yàn)檫@些只是我個(gè)人的觀點(diǎn)。

最后,希望這些意見對(duì)你有所幫助。你可以自行決定是否聽取這些意見。

原文:https://daedtech.com/5-things-ive-learned-in-20-years-of-programming/

本文為 CSDN 翻譯,轉(zhuǎn)載請(qǐng)注明來(lái)源出處。 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产一区二区在线免费| 韩国激情野战视频在线播放| 亚洲三级视频在线观看免费| 深夜少妇一区二区三区| 日韩美女偷拍视频久久| 久久精品亚洲情色欧美| 亚洲欧美日韩综合在线成成| 欧美性欧美一区二区三区| 成人你懂的在线免费视频| 日本精品最新字幕视频播放| 色欧美一区二区三区在线| 精品综合欧美一区二区三区| 国产肥妇一区二区熟女精品| 精品国自产拍天天青青草原| 国产精品视频一级香蕉| 一级片二级片欧美日韩| 清纯少妇被捅到高潮免费观看| 国产免费黄片一区二区| 91精品视频全国免费| 精品欧美日韩一二三区| 国产欧美性成人精品午夜| 国产亚洲不卡一区二区| 人妻精品一区二区三区视频免精| 国产欧美一区二区三区精品视| 亚洲一二三四区免费视频 | 熟女高潮一区二区三区| 99国产精品国产精品九九| 免费国产成人性生活生活片| 经典欧美熟女激情综合网| 国自产拍偷拍福利精品图片| 亚洲男人的天堂就去爱| 丝袜诱惑一区二区三区| 国产又爽又猛又粗又色对黄| 五月的丁香婷婷综合网| 国产人妻精品区一区二区三区| 日韩一区二区三区嘿嘿| 日本免费一本一二区三区| 欧美一区二区黑人在线| 日韩精品日韩激情日韩综合| 国产精品免费不卡视频| 欧美日韩一级aa大片|