1. 程式人生 > >2009-2010小結(四)抑鬱重重

2009-2010小結(四)抑鬱重重

目錄:

在正式轉到 H 手下之前,有件小事,不知道這件事有沒有對後來起什麼影響,但願是我多慮了。那一次L1出差一週,所帶的我這邊專案交給H代管。有一次發不知道正式的還是非正式的release notes,H問我,SVN number要不要寫的?我理解成他問我先前做法是怎樣的,於是順口回答說:不需要的。H說,你寫上吧。我說好。我隱隱突然意識到不對勁,他只是代管一下,怎麼會改變一些既定做法?

沒有預料到之後不久,便有了前文所說的行政上的調整,這個專案也歸H了。之後有一次臺北的產品經理髮需求過來,要新增的一項功能是,在Win7工作列新增圖示。經過一番調研之後我跟他彙報說,這事兒正規途徑做不了,微軟特意不允許以程式設計方式新增工作列圖示的;真要做只有hacking方法,blabla。言下之意是想讓他拒絕掉這個需求。沒想到他居然同意了用hacking手段!這在L1時代是完全不可能發生的,哪怕是一點點沒有正規文件給出的方法都不許使用,寧可少點功能。同意歸同意,他又不表示立即實施,時不時來問一下你準備如何如何,然後探討探討。

過一兩天,有一次他又跑過來(位置還沒換,所以隔得比較遠),說,這功能我可不可以讓D來做呀?我奇怪了:當然可以啊!(你說了算麼)於是他表示要讓D來做。那我就扔著,不做,網上東逛逛西看看。又過了一兩天,那一天下午他過來讓我加班,因為那功能需要做好。我又奇怪了,不說讓D來做了麼,做沒做好,關我毛事啊,怎麼又讓我加班呢?由於這是第一次他讓我加班,我什麼也沒說。到了晚上,我不管三七二十一,把那個他準備讓D做的功能給做了——不是說因此加班麼,那我給你搞定不就完事了?不知道他葫蘆裡賣的什麼藥。看到SVN提交的郵件以後,他又立馬跑過來,帶點驚訝地問我,你改了?然後又來看程式碼,問這問那,最後離開。

大家可能猜到了,我的期待徹底破滅,接下來是一段極其抑鬱的生活。開始的時候加班是挺少,幾乎沒有。但是偶爾有的話,不會是那種任務很明確的,但就是讓你呆著,好在都不是很晚。

關於剛才那個專案,還有另一番進展。不久以後,H突然跑過來跟我說,這個專案也差不多了,剩下的都是些維護工作了,我想把它先轉給M(當時是我和M一起維護)和D,再慢慢轉給D,把你們兩個都空(解脫)出來。我說我手上只有這一件事了,那我幹什麼?他語焉不詳地說了些什麼,意思表示得好像是還有別的什麼(重要)事情讓我幹。於是這專案便開始慢慢從我手上溜走。猛然間我感到一陣害怕,我手上都沒事了,公司留我做什麼?H是不是有什麼想法?可是看H平時和和善善的,也很難揣摩他能有什麼歹意。

接下來給我做的事情,是陸陸續續的好多survey。一開始叫survey一下Windows驅動。我問,公司有這樣的專案麼?他說有,並舉了例子。好,我去survey。過了些天,我看他給的那個例子就是個簡單的WinIO驅動,告訴我通訊協議我大概也能抄一個吧。於是我跟他彙報,那個例子基本上看得懂了,接下來要看什麼/幹什麼?他像之前每次跟他彙報時一樣,為難地擡起頭,使勁想了想,然後叫我去看下檔案系統過濾驅動。

好,看就看,找些電子書,挑一些可看性比較強的,列印了二三十頁下來,慢慢磨。又過了些日子,覺得資料上面說的我大致能理解了,但是由於框架實在是太龐大了,不想去實驗,就跑去問,這方面公司到底有什麼要做的麼?H說他覺得這些技術蠻有用的,以後肯定會用到的,云云。嗯?敢情是想拿我當技術儲備?我就是survey帝啊!

再後來,讓我去survey一下某品牌機自帶的一鍵還原軟體。我特意問,我們要做這個的?他說要的。於是我就拿著那個本子折騰來折騰去,耗了個把月吧。到最後實在想不出可以幹什麼,於是天天格它硬碟,拿著自己寫的demo程式還原之。期間H偶爾過來看看,大多數時間不太理。

又想到一件事。某個加班的晚上,忘了是為了除錯什麼,H讓我過去看他調。可能由於之前某一次他看到我開著OllyDgb玩(我只是會一些很簡單的操作,知道怎麼斷住MessageBox罷了),他自言自語地嘀咕“那個叫什麼名字來著”,然後打開了OllyDbg。他又問我是怎麼操作的。我說我是截哪個函式,然後怎麼怎麼瞎看的。於是看他操作。只見他按鍵飛快,F8長按,整個螢幕滾下去,過會兒又作不對勁狀,重新開始,又是飛快狀,不知道他要幹什麼,於是我忍不住開口了,跟他說,我當時是先這樣,然後看什麼什麼,大概可以得出什麼結論。然後他有點兒照做的意思,可是過會兒又是操作飛快,整個螢幕在閃,看不出什麼思路。我琢磨著他是不是沒怎麼用過這玩意兒啊,不會用就別拿出來顯啊,拿你拿手的出來嘛。於是我又多話了。後來我也覺得我“提示”得多了,想不說,可是又覺得他是期待我說的樣子;想說,又覺得他沒叫我插嘴的樣子;想走,又覺得他沒叫我走的樣子。十分尷尬。只好有一搭沒一搭地說著。後來H終於怒了:你走!我一愣,懷疑是不是沒聽清楚,確定好像是真的,於是飛也似地跑了。半個小時以後,H拿了一些巧克力來分給我們,算是了結。之後我再也不敢在他面前提/玩OllyDbg,要玩就玩WinDbg,因為WinDbg我基本上完全不會用。

轉眼到了年關,H給我的考核還是不錯的。據模糊瞭解,不管是獎金還是漲幅,似乎都在平均水平之上。這裡還要感謝下財務的W姐,給雙薪的時候把我的實習期也算進去了,多少有點點心理安慰。

過年回來後仍是無所事事,3月初H到米國總部去了一趟,更加沒事情做。M和D一直做著之前哪個專案的維護工作。H回來後,帶來了米國老大們的一些新主意,M和H一個老部下L3以及H自己被H安排來做這件事。大約三月底左右吧,H手上有多出一個專案,是手上將個新專案的升級更新程式。他自己開始搭最初框架,然後扔一點活給我和另一個同事做。沒過多久,H又表示要將它丟給我。他說,我們要重視一些設計工作。於是他拿StarUML畫了些圖,跟我說這個調了那個,那個調了誰。對著程式碼一看,果然不錯,完全事實描述。可是你那些圖僅僅表達了你是怎麼做的,這怎麼夠?一點也沒看出來為什麼要這樣設計。當時我第一次看到什麼時序圖啊,還有點抵制,這點我要做自我批評。雖然圖不會看,可是程式碼還是會看的。不誇張的說,這整個程式碼一團糟,各種糟糕。一堆單件(一堆全域性變數);業務程式碼中會充斥著一大段API呼叫序列(底層API沒有封裝到一兩句話表達業務的程度);還有那個 WinInet 的返回結果裡,case 到 timeout 之類的,老是來個 OnConnectFail(),搞得像個框架,可是正確的情況又直接刷刷刷寫下來了,不見什麼OnConnectSucceed(),到底哪部分框架那部分是用框架?僅僅一處小小的多執行緒部分,搞得到處鎖。總而言之,一個模組,互相糾纏著的幾個類,一層結構。為了搞個執行入口,居然建了個MFC SDI專案,在檔案選單建了一項來進入整個模組。

大家可能懷疑我說得太誇張了,這一點我不能舉出什麼證據。當然,也許牛逼的人喜歡看糾結的程式碼,這是水平。像我這樣的菜鳥只喜歡看簡單的程式碼,除非有必要才增加模組和層次,這才變得複雜一點點。我從那時起開始懷疑技術到底是什麼,是不是多會用幾個API就是技術達人?

好了言歸正傳,這個專案脫離demo,要變得正式一點,H讓我把他整成一個 Windows Service。好,我整,去掉哪個MFC的框,重新建了個 Service 的框架,然後入口放進去。我以為很輕鬆的一件事。結果,編譯不過,一看,有寫程式碼用了MFC的類,CFile啦,CFindFile啦,,,好在總量不是很恐怖。我去跟H說,程式碼裡有一些用到MFC的,Windows Service有沒有介面,加上涉及到的一些功能用MFC也不見得多方便,都改為Win32 API吧。H不置可否,大意上說了句,程式裡用MFC我覺得蠻常見的,大多數都用的吧。我反駁了句,那也看場合啊,我們現在完全沒必要引入MFC這個大依賴麼。H沒有再說什麼。我回頭將它們全部改掉,用CreateFile,FindFirstFile……。這邊剛改完,H又提交了一部分程式碼,又是CFindFile,像是剛才什麼都沒跟他說過似的。日!繼續改!

接下來兩天,一直在考慮這個東西丟給我我能維護多久。思來想去覺得會堅持不住,我非常不願意一個系統從一開始就是“老系統”。於是給H發了封郵件,說這些程式碼雖然“有設計”,可是結構化不是很到位,然後給了一張通俗的框圖,表示這塊幹什麼那塊幹什麼,這塊只知道什麼只需要處理什麼,那塊又如何,而不用大家誰都知道誰。H過來表示“是啊”的感慨,然後又說了一些不著邊際的話(也許是著邊際的,只不過我沒記住),最後什麼決定也沒做出。接下去幾天,我時不時追問他,可不可以動手改,他總是用一些話來搪塞,大概是些——“我覺得…總體是好的,只是,……”,“我覺得OK啊,不過明天的版本先出了”。我在問的同時,也在積極準備著,終於,在某個不得不改的時刻,我把它們全提交上去了。原來的程式碼仍舊放在那個目錄不動,我不敢特意去做刪這個動作,太敏感。過了一會兒,大概H看到郵件了,又跑過來問:改了?會不會有什麼問題?云云。

——這是我在H手下乾的最傻逼的事情,沒有之一。這件事我跟一些人提過,今天把它完整的寫出來,也期待大家批評。我盡我的努力使我的描述儘可能客觀,但主觀性仍然是不可避免的。關於那個程式碼是不是真有那麼糟糕,是最容易帶有主觀性的,請大家自行判斷吧,我只能說很糟糕。做這件事情之前曾請教過M到底做不做好,M說如果為了專案好就應該做。回想起這一番,我有時候心理陰暗面來了,也會懷疑M那時候是不是陰我。不過M似乎沒有陰我的動機,可能在L1手下我比他稍微春風得意一些,但在H手下他明顯比我滋潤,沒必要啊。(M如果看到請別介意哈。)

之後挺明顯的感到H不願意管這個專案了,也有點選擇性不瞭解該專案。經常有什麼新需求就答應下來,也不考慮現有設計能不能容納,我過去問他,他又裝作不知道的樣子,只說這怎樣怎樣就可以了,是可以做的。我又問那麼這個改過之後接下來那些部分可能要改的可能不會改的,我好做應對,他又不知道了。不知道可能是選擇性的,但是對於需求的控制他這是發自內心的。因為在他自己也參與的那個專案裡,也是不停地改,三天兩頭改,最後H跟PM鬧起來,乾脆不理PM了。後來只好請QA MM J姐幫忙中轉。所以現在我想,他原來那個一層式結構確實是適合這樣折騰的。反觀L1帶的東西,幾乎所有未來一兩個月內的新需求,都是不會傷害到現有基本框架的,很多都是落入我們的預測的,往往變成了改個配置項這樣簡單的事情。曾經滄海難為水啊。當然H也會設配置項,可是設定的時候沒有邏輯性,某個選項代表什麼沒法用一句話概括出來,大多數只能總結為,某個選項開啟表示PM某個需求所要求的功能開啟。

關於H,我想我可以可以寫好多好多。

H曾經看到我寫 CString.Relpace(“{PlaceHolder}”,“XXX”),問,為什麼不用 sprintf 呢?我無言以對。
H看到我開著IE,會問,你為什麼不用Firefox?我無言以對。
H看到我開著IE,會問,你為什麼不用Chrome?我無言以對。
H看到我開著IE,嘆了口氣,你就是個微軟迷……我,我作委屈狀。
H看到我在Word裡打公式,會問你為什麼不用Mathtype?我無言以對。
H看到我寫登錄檔,會問,你為什麼不寫ini檔案?我不知道我寫ini了他會不會問我為什麼不寫登錄檔。
……
從此討厭“為什麼不”的問法。

自從我改了H的程式碼之後,H就經常的說我的程式都是同步的,沒法即時退出。限於水平問題,當時沒一下子理解。好在是個服務程式,業務上也需要持續不斷跑,只有關機或者關閉服務的時候停止就可以了。這時候我安全退出和系統來強制結束的表面效果沒多少差異。等我明白這個問題之後,在9月份的第二版本中,我把這個問題全部改掉了,不留一絲同步的影子,H之後便沒說什麼了。只是第二版的上線,由於對TP提供API等等,需要H對外公佈。而H處於對此不管事狀態,加上別的專案也比較緊,一直沒上,直到我離職,也只是內部release,沒有出正式版。

自從改了H的程式碼之後,H就不太讓我碰C++的東西了,有一次H曾讓我去survey FileFox 外掛。當時看了兩天,寫了個 Hello word 級別的外掛,然後報告survey結束,有什麼正式需求。結果讓繼續survey,並被問有沒有做這個方向的興趣,有的話可以和Linux端的人一起做那方面的專案。我或委婉或直接地表示不要寫js,不要為mozilla的野心服務,不看好FireFox平臺,我要繼續玩C++。過了些日子,被要求二選一,FireFox外掛,或者Windows下的可能涉及D3D的另一個專案。我斷然選擇了後者。這個專案一開始也是在H手上的,可是不知為什麼後來突然被L2拿去了。L2派手下T來做,因為我那時已經為此survey了一些時候了,便讓T和我一起做。這時候才感到L2的好啊。除了加班,對於L2我真的挑剔不出什麼了——據說L2現在也會安排周任務了。我想多花些時間在L2的專案上,H又說他這邊的更新程式任務重,那邊的優先順序低,有一次主動為我向那個專案告假2周,導致後來我進度上落後於T,其實這邊也就是幾個頑固bug而已。

其中一個bug是crash,各種表現。最後查出是crash在InternetOpenUrl的函式裡。摸索了一段時間後,發現使用過 SH 系列 API 後,在某些機器上就會 100% crash,為此當時還在這裡發了一篇文章。把 SH 去掉之後,現象平息了一陣子。後來,隨著測試的深入,又報了。這下可沒辦法了。H自己也沒辦法。再很後來很後來,我找到了一篇微軟的文章,說 WinInet 不支援在 Service 裡使用,並建議轉用 WinHttp。至於為什麼用WinInet,這裡又有一段故事。很早的時候,在我剛進去不久的時候,當時那個專案也有網路互動,當時年少無知的我找了一段例子,是socket的。(那個作者還寫了這麼一句註釋://If it works, it is written by masterz, otherwise I don't know who write it.)我用它搞了個支援 Http Get 和 Http Post 的小玩意兒。後來專案轉到H手上的時候,H看了說,你為什麼不用WinInet呢?你的不能支援跳轉,不能支援https,並給了一堆WinInet函式名。(可是他為什麼不指導我完善它呢?)我說我當初並不知道WinInet的存在,並問他改嗎。他說不用改了。所以後來他把升級更新程式的網路下載模組丟給我的時候,我就用WinInet了。好,回到現在,我發了封郵件給H,說WinInet在Service中不被支援,這可能是crash的原因,建議使用WinHttp,並告知WinHttp在沒有打SP1的XP裡不支援。他回覆說他覺得“OK”,但是他認為需要支援不帶SP1的XP。這相當於被變相打回了。但是他有沒有因此宣佈此bug可以不修復,之後的日日夜夜,J總是因為這個bug的各種表現來找我。

H自己手上那個專案據說忙得很,他和M、L3甚至忙到天天加班,卻從不要我加班,也不讓我參與。有時候碰上幾個介面的,M說ATL寫介面不方便,H就叫我寫個網頁,M在外面套個IE控制元件,這才零星有我一點點事。有一次我跟V姐抱怨了幾句,說在H手下被邊緣化了,什麼都沒我的事。V說怎麼會啊,H每次說起你都說你挺不錯的,他很喜歡你的。(是嗎?)也不知道V有沒有幫忙傳達過什麼,第二天H就讓我加班,找的理由是我寫的介面跟他們也是有關係的,要發版本,要確保沒問題。我就做著網上隨便逛逛,最後跟他們一起回去。之後每次加班H都要叫上我了,大部分時間事情都不是很多,我就當放鬆下,大家一起玩玩,再蹭頓晚飯了。其實到了這時,由於長期無事,倒是有點期待加班了,之前對於加班的憎恨也不知不覺地化解了。我細細地觀察了H的加班,其實跟L2的加班是一模一樣的,都是沒有明確的下班目標,都是由於臨近發版本,都是由於更早的時候沒有做好任務安排以至於到了快發版本了才發現時間不夠。

我手上那個升級程式的專案,H幾乎沒怎麼管過,搞得我每天都不知道做什麼。我只知道大約幾個月後要釋出。至於周任務、月任務,都是沒有的。有一次H可能真的被他那邊的事情糾纏地搞不清楚了,終於召集他手下所有人,把接下去幾天的任務說了下,並且也說了這件事誰做那件事誰做。他是畫在白板上的,我們都沒抄下來,結束的時候拿手機拍了下。我滿以為他會發郵件再通知一遍的,哪知道神馬也沒有。我不知道他開那個會幹嘛來著,也許不是為了明確我們的任務,只是為了用我們所有人的力量為他整理思路而已。

長期的空閒狀態讓我壓抑,並且效率明顯降低。同樣一件事,現在的我比兩年前的我肯定完成得慢很多。我開始擔心自己的前途問題。我現在寫的所有關於H的,都是在空閒的時候反反覆覆回憶過的、思考過的,我很驚訝我盡然花了這麼多精力去思考那麼多事,也驚訝盡然有那麼多事讓我久久不能忘懷。我總結了H的一些特點:

  1. 不看郵件。往往發給他的郵件了,過了大半天跑過來問,告訴他郵件裡寫了,回答我沒看。
  2. 不看文件。每次看他開啟WORD文件,就滾得老快,像很熟悉似的,但找不著要找的內容。
  3. 喜歡在談業務的時候說技術名詞。(例:本來說升級程式連線上伺服器了應該查詢什麼資訊,會被描述成:我們會發一個TCP包,……)
  4. 喜歡在談上層業務的時候時時刻刻問底層實現。(例:跟他說“連上伺服器了,然後怎麼怎麼”,會被打斷問:是一次TCP連線嗎?)
  5. 喜歡在談上層技術的時候問下層實現。(例:明明我們用的全是HTTP層次的API,非得每次說TCP包)
  6. 以為只有技術問題。(例:明明某些bug只是我們這樣定義,QA認為應該那樣定義,只是定義問題,爭論不下去找他,他會先問我,“你這樣做有什麼困難?”)
  7. 沒有邏輯。(例:有一次好像企圖讓某應用程式包含升級程式,想讓被包含著的升級程式又包含該應用程式。)
  8. 沒有業務概念。跟他講話沒法跟他概括出功能名詞,提“某某功能”。如果要提某某功能,只能把這功能的全部API呼叫序列羅列一遍,他才能精確明白我在說什麼。同樣,他會用某些技術詞彙來描述某某功能,我也聽不懂。甚至不知道什麼意思自造詞,如:“我記得XP的是支援System Level的MUI的,Vista開始才支援Application Level的MUI的。”從來沒有明白過這兩個Level是什麼意思,雖然我知道MUI在XP和Vista裡有區別。
  9. 沒有設計理念,雖然會畫UML,忠實表達他程式碼是怎麼寫的。
  10. 不會拒絕需求,也不會預測需求以利於提前設計。
  11. 不主動向上請示。遇到我不好決定的事情,去問他,他也不好決定,也不問上級,也不做個有預測性的決定,任由我不知所措。
  12. 開會經常閒扯,每次被他打斷好多次,不侷限於部門內的會議裡。讓人不能專心。可能他認為這是製造輕鬆氛圍的方式。
  13. 怕給別的部門造成任務。所以不管某些內容應不應該放在我們這邊做,經常認為需要自己做,以為讓別人做是態度不端正,“事情總是要做的”。那個升級程式的第二版,之所以要設計API,就是為了不要包含各種應用程式的複雜需求,但TP同事說下載失敗了,他就來問我,你有沒有做重試啊。我說當然沒有啊,我只是給出了一種機制讓他知道是成功還是失敗了,要不要重試、用怎樣的重試策略,明顯應該他來麼。見我堅決,他又裝著很抱歉的樣子,跟TP同事說我們重試沒有做,你們那邊方不方便做一下……
  14. 怕別人給自己造成任務。Test case 評審的時候,見J列了好幾屏的case,他就抱怨說,你們搞得也太細了吧,這麼多條,能測完麼?那一次QA老大A義正言辭的說:這些需求,這些功能,本來需要這麼多case來保證;這些都是我們分內的事,不管多還是少,只要是我們該做的,我們就要做。聽得我暗暗感動了一番,自此以後總是在心裡默默地欽佩他。
  15. 不給別人發言機會。就算自己業務不熟,也搶別人話,結果傳達的總是有偏差。聽他溝通以及與他溝通都是很辛苦的,不知道在談業務還是在談技術,反正一會兒這個一會兒那個,很具有跳躍性。有一次他讓某同學做主題演講,分享前階段survey的內容,結果人家放了PPT開講,他在下面的補充佔了80%的時間,上面那個倒像是主持人了。
  16. 最重要的一點,不花心思好好安排別人的任務,總是專心寫程式碼,與民爭活。

剛到他手下的時候,我總覺得不對勁,我前前後後跟他談過好多次(當然後來死心了不找他談話了)。有一次他說“我可能對於自己作為RD還是作為Leader,身份上沒有區分清楚”,僅這一點,既然自知,何必佔這個位置呢?不是每個人都能管人的,這要影響到別人的職業生涯,還要影響到公司的人員流失問題,後果非常嚴重啊。他的組,從09年中手下十多號人,到現在的三四個人。有點點想法的人,要麼去別的公司了,要麼去別的部門了。我想他沒有好好思考過。倒是給離開的人編好了冠冕堂皇的理由,以便與人解釋。

用一個已經離職的同事的話說,XX專案,從需求、技術、搭框架、寫程式碼,H都能一個人搞定,要我們幹什麼。
另一個同事說:H是個全才,但他不會做Leader。

我想,H要是一個和我平級的同事,除了對他沒有設計理念這一點不看好以外,我應該也會蠻崇敬他的吧,畢竟人家會用這麼多API呢。

H還說,對於專案,我必須親手搭個框架寫寫程式碼,才能知道水有多深。可是,你要親手體驗水有多深又是何必呢,讓手下人告訴你水有多深不也一樣麼?

今年六月份,公司有一次計劃外的加薪,H對我還是很給力的;年中的獎金也不少。另有一次我生病了,H叫了另一個有車的同事一起把我送回住處,還幫燒了開水,噓寒問暖一番後才離開。還有當初是H讓我第一次通過了一面,從而拿到人生第一個offer……可以說,除了具體工作上,H對我真的還是非常不錯的,他也曾幾次和J訴說:我覺得我對他還是不錯的啊。也許我不該對他有那麼多看法。可是,每次有不同意見,你為什麼老是以“我覺得你對我有意見”強制結束討論並且不問具體“意見”呢?

我記得CppBlog裡有一位貌似從事管理的朋友發了一些文章,說要如何如何管理,並要如何永不重用某些手下。我一對照,某些情節和H的做法非常相似,於是在評論裡比較激烈的回覆了他,希望他的手下好運。

本篇就寫了兩個晚上了,就到這裡吧,字裡行間可能充滿了怨懟,如果影響您心情了,小弟這廂給您賠禮了。下一篇將談談離職始末。關於我對H的種種,我知道也是充滿了偏見的,如果有做得/想得不對的,希望大家多些批評,多多糾正。

----------華麗的分割線,如果以後又想起H其人其事忍不住想新增,就加在後面----------

2009年3月,公司要搞QT培訓,H部門,也就是我所在的部門出人的。但是H壓根兒沒跟我說有這回事。後來別的組的人都在各自老大的通知下知道了,我是本組的卻不知道。H從米國回來後問我有沒有去聽啊,我說沒有。我不知道他為什麼認為我已經知道了這個訊息了。搞得好像我沒興趣似的。不過這培訓我確實可能沒興趣,演講者一般只是介紹API使用,鮮有自己的思考。關鍵在於H通知不到位。

posted on 2011-01-25 22:17 溪流 閱讀(1881) 評論(10)  編輯 收藏 引用 所屬分類: Other