第五十二章 流量

投票推薦 加入書籤 小說報錯

  CodeMaster_US的水平在圈內還是比較知名的,陳哲這幾天也研究了一下對方的視頻,目前是沒有看出什麼破綻來。

  編程這東西終究和真正的內容領域不同,內容領域比如寫作、vlog視頻,很容易看出一個人水平的高低,眼界的深淺,而編程很容易變得圓融如意,階段性的差別也就只有進階和入門。

  再往上看,也不是做視頻的內容。

  所以在真正開始出難題之前,誰也不知道彼此的水準。

  至於業外對於圈內人士的排行,那就是純純的門外漢見解了,一個連代碼都沒寫過幾行的人,又憑什麼去評判別人的鍵法。

  隨著直播間的開啟,屏幕上頓時出現一個白人男子的形象,看上去是個標準的美利堅紅脖子,有著茂密得幾乎遮蓋了半張臉的絡腮鬍和一件法蘭絨灰色襯衫。

  「晚上好,各位。」男人說著,目光瞥向下方的評論區。

  【毛絨偵探:晚上好兄弟。】

  【滑板傑克:老C,今天講什麼?】

  「Okay……讓我們等待一下直播間的觀眾,」他表現出蠻不在意的面容,「就如我昨天在群組裡面和大家說過的,今天我們有一件事情要做,很簡單,那就是和人約架。」

  「程序,也是戰鬥的一部分!把那個膽小鬼打得屁滾尿流!」

  CodeMaster_US躺在人體工學椅上,姿態放得很高,臉上呈現出一抹直播式的亢奮:「讓我猜猜看那個哲思小鬼是不是不敢出來了?」

  「朋友們,答應我,如果他今晚始終不敢與我對線,那就去他的評論區,轟炸他。」

  陳哲看著對方的面孔,不由感慨對方先前在私信里與自己聊天的那一口火氣,不愧是美利堅紅脖子。

  不過陳哲在這觀看對方的直播並不是怯戰了,而是先琢磨一下對方這邊的氣氛如何,稍作思索之後,陳哲就打開了自己的直播間。

  他的直播間一開始,兩邊的熱度立刻開始上升!

  【哲思的粉絲:這次怎麼晚點了?現在都八點零一了,剛剛我還在C那邊的直播間看了一會兒。】

  【沒有人類的皮膚:今天真的要和對面那個頻道主直播PK?不會是劇本吧?】

  「因為一些事情耽擱了時間,十分抱歉。」

  陳哲把攝像頭對準自己,戴著平光眼鏡的面容出現在界面里,談吐之間有著一份令人信服的中國程式設計師氣質。

  趁著現在兩個直播間還沒有牽上線,陳哲用小窗看著對面的直播,一邊觀看著兩邊的觀看人數的增長量,出乎他意料的是,似乎因為他是新人頻道主的緣故,粉絲的粘性很高,幾乎是直接追上了對面直播間裡的人數。

  【龐科:感覺今晚會有好戲看了。】

  【瓜子23:這兩位都是我關注的博主,不過就我來看,應該是哲思頻道的質量更高一些……】

  陳哲微微一怔,這直播間裡竟然還有一些中文id甚至人名閃過?

  不過這也是他的預料之中了,畢竟陳哲在做視頻之初就是看準了這方面中國學生的群體,自己的視頻也算是做起來了,有這麼一些人的粉絲構成不足為怪。

  考慮到自己的受眾問題,陳哲頓時微微一笑,去掉英語的說話口音,說了一句中文梗。

  「會贏的。」

  而這一句話一出,陳哲這邊的氣氛也就更加燥熱。

  【???】

  【不要說這種缺心眼的話啊。】

  【這是什麼意思?】

  「好,那麼現在讓我們和CodeMaster_US連線。」

  陳哲見到這上面反響熱烈,頓時也不再猶豫,關掉了那一邊的直播間小窗。

  到了這會兒,訂閱者體量的差距才體現出來,雖然是同一個量級,但是一萬訂閱者和九萬訂閱者的差距還是極大的。

  陳哲這邊的直播間人數才堪堪達到兩百,對面的人數就到了六百個,而且看上去還有上升趨勢。

  只是陳哲從來就沒有想過和對方比拼這個,今天他只是想看看自己的編程水平怎麼樣,不論是接受考題,還是出題,陳哲都有自己的一套應對措施。

  半晌,陳哲打開直播間的後台,邀請「CodeMaster_US」作為自己的嘉賓,並點擊允許加入。


  CodeMaster_US的頭像出現在屏幕上的時候,陳哲看了一眼右下角的時間。

  20:03。

  比約定時間晚了三分鐘。

  「晚上好,哲思。」CodeMaster_US的聲音從耳機里傳出來,帶著一點直播特有的亢奮,還有那種刻意壓低的沙啞,像是剛喝過酒,「終於捨得出來了?」

  陳哲沒說話,只是點了點頭。

  CodeMaster_US往後靠在椅背上,那張被絡腮鬍遮住大半的臉上露出一個笑容。他身後的背景是一整面牆的編程書籍,碼得整整齊齊,一看就是精心布置過的。

  「讓我看看……」他把臉湊近攝像頭,眯著眼睛,像是在打量什麼,「一萬二粉絲?哦不對,昨晚看的時候還是一萬一,現在又漲了點。不錯嘛,新人。」

  【C家軍:哈哈,老C開始扎心了】

  【代碼獵人:新人瑟瑟發抖】

  【Pythonista:這波心理戰可以的】

  陳哲的屏幕上飄過幾條彈幕,都是從對面直播間翻牆過來看熱鬧的。

  他沒理。

  CodeMaster_US等了兩秒,沒等到回應,臉上的笑容僵了一下。

  「怎麼,不會說話?」他往後靠回去,兩隻手搭在扶手上,「還是說,你英語不太行?要不要我慢點說?或者咱們用翻譯軟體?」

  他頓了頓,轉頭對著自己的攝像頭,做出一個誇張的表情:「哦對了,你是中國人對吧?中國人學編程確實挺多的,不過大多數都是……」他比了一個手勢,在空中劃了劃,「copy paste?」

  陳哲依然沒說話。

  【字節:???這人在說什麼】

  【哲思的粉絲:種族歧視?】

  【普通人鐵匠:取關了,什麼玩意兒】

  【C家軍:開個玩笑而已,別上綱上線】

  【C家軍:就是,中國人那麼玻璃心?】

  彈幕開始亂起來。

  CodeMaster_US看了一眼彈幕,臉上的笑意更深了。他往前傾了傾身子,盯著攝像頭。

  「怎麼,我說錯了嗎?」他攤開手,「你們中國人不是最擅長複製粘貼嗎?GitHub上那些中文注釋的代碼,十個有九個是從Stack Overflow上抄的。哦,還有那些外包項目,便宜是便宜,質量嘛……」

  他搖了搖頭,沒說完。

  陳哲這時候才開口。

  「你說完了?」

  CodeMaster_US愣了一下。

  陳哲的語氣很平靜,像是在問今天吃了什麼。

  「你說完了,」陳哲重複了一遍,「那我說兩句。」

  他頓了頓,目光落在攝像頭上,仿佛穿透屏幕,直接看著對面那個人。

  「你剛才那些話,我沒聽清。能不能再說一遍?」

  CodeMaster_US皺了皺眉:「什麼意思?」

  「意思就是,」陳哲說,「你剛才說的那些,我沒在聽。因為不重要。」

  他往後靠了靠,讓自己的臉完全出現在畫面里。

  「你約我出來,說要切磋。我來了。你開場先噴五分鐘垃圾話,我聽著。現在你噴完了,咱們是不是該開始了?」

  CodeMaster_US的表情僵住了。

  他張了張嘴,想說什麼,但又咽了回去。

  彈幕安靜了一秒,然後炸了。

  【C家軍:???】

  【C家軍:這人不按套路出牌啊】

  【哲思的粉絲:哈哈哈哈笑死,根本不在乎】

  【代碼獵人:有點東西,心理素質可以】

  【Pythonista:老C被噎住了哈哈哈哈】

  CodeMaster_US的臉漲紅了一點,被絡腮鬍遮著,看不太出來,但從他的眼神能看出來,他有點惱火。

  「行。」他坐直了身子,「你行。那咱們就正式開始。」


  他清了清嗓子。

  「規則很簡單:每人出一道題,給對方十分鐘時間。寫完了跑測試,跑不過算輸。先出題的人我,你沒意見吧?」

  陳哲點點頭:「可以。」

  CodeMaster_US往後靠在椅背上,臉上又浮現出那種自信的笑容。

  「好。那第一題——熱身題,別緊張。」

  他低頭看了一眼手邊的筆記本,然後抬起頭。

  「給定一個整數數組,寫一個函數返回數組中所有偶數的和。但如果數組中有負數,則直接返回-1。」

  他說完,往後一靠,雙手抱在胸前,等著看陳哲的反應。

  陳哲的臉上沒有任何表情。

  他低下頭,雙手放在鍵盤上。

  屏幕共享打開了,所有人都能看見他的編輯器界面。

  他開始打字。

  ```python

  def sum_even_numbers(arr):

  「「「

  計算數組中所有偶數的和。

  如果數組中有負數,返回-1。

  參數:

  arr:整數列表

  返回:

  int:偶數和或-1

  「「「

  if not isinstance(arr, list):

  raise TypeError(「輸入必須是列表「)

  #檢查是否有負數

  for num in arr:

  if not isinstance(num,(int, float)):

  raise TypeError(「列表元素必須是數字「)

  if num < 0:

  return -1

  #計算偶數和

  total = 0

  for num in arr:

  if num % 2 == 0:

  total += num

  return total

  ```

  打完,他停了一下,又補了幾行。

  ```python

  #測試用例

  if __name__==「__main__「:

  #正常情況

  assert sum_even_numbers([1, 2, 3, 4, 5, 6])== 12 # 2+4+6

  assert sum_even_numbers([2, 4, 6, 8])== 20

  assert sum_even_numbers([1, 3, 5])== 0

  #有負數

  assert sum_even_numbers([1,-2, 3, 4])==-1

  assert sum_even_numbers([-1,-2,-3])==-1

  #空數組

  assert sum_even_numbers([])== 0

  #包含0

  assert sum_even_numbers([0, 2, 4])== 6 # 0是偶數

  print(「所有測試通過「)

  ```

  他敲下回車,代碼跑起來。

  屏幕上跳出一行字:所有測試通過。

  時間:1分47秒。

  陳哲抬起頭,看著攝像頭。

  「寫完了。還有問題嗎?」

  【C家軍:???這麼快】


  【代碼獵人:還加了測試用例?】

  【Pythonista:這代碼質量可以的,有docstring有類型檢查】

  【灰色軌道:就這?熱身題而已】

  【哲思的粉絲:對面出的題也太簡單了吧】

  CodeMaster_US的表情僵住了。

  他盯著屏幕,好一會兒沒動。

  「你……」他張了張嘴,「你寫測試用例幹什麼?」

  陳哲看著他,眼神里有一點不解。

  「測試用例不是應該的嗎?」他說,「你出題的時候沒說不要測試用例。」

  CodeMaster_US又噎住了。

  彈幕又炸了一波。

  【C家軍:老C被反殺了哈哈哈哈】

  【代碼獵人:這波是專業對業餘】

  【Pythonista:確實,正經寫代碼誰不寫測試】

  CodeMaster_US深吸一口氣,把臉上的表情壓下去。

  「行。」他說,「第一題算你過了。現在輪到你出題了。」

  陳哲點了點頭:「那好,請接著。」

  陳哲出了個類似難度的題目:「寫一個函數,判斷一個雙精度浮點數的小數部分是否為0。如果是,返回true;否則返回false。」

  「這不就是正常浮點計算?坑點在0.1+0.2上吧……兩分鐘了,你看看我寫的,設了個誤差範圍,應該沒什麼問題。」白人男子把界面上的內容投給陳哲,說。

  「的確。」

  「中國人,我來出第二道題,給定一個字符串,找出其中第一個不重複的字符,返回它的索引。如果不存在,返回-1。」

  「這也很簡單,先用一次遍歷統計頻率,第二次遍歷找到第一個頻率為 1的字符,結束。」

  ……

  漸漸地,陳哲能明顯感覺到對方的題目難度從越來越往上變得仿佛碰到了某個瓶頸,對方的應對越來越遲緩,而對於陳哲來說,卻仿佛越來越輕鬆了。

  大概也是因為陳哲在基礎方面的題目沒下多少功夫,反而在深入的知識上有著不少涉獵。

  「你來!」

  CodeMaster_US在一次次的對拼中已經有點冷汗直冒,直播間的觀眾里僅僅有一些水平不差的粉絲能跟得上兩人的節奏,但是普遍吃瓜的人還有很多。

  「我來麼?」陳哲點頭。

  他低下頭,想了想,然後抬起頭。

  「我的題是這樣的。」

  他頓了頓。

  「寫一個函數,輸入一個字符串,輸出這個字符串中每個字符出現的次數,按出現次數從高到低排序。如果出現次數相同,按字符的ASCII碼升序排序。要求時間複雜度不超過O(n log n),空間複雜度不超過O(n)。」

  他說完,看著攝像頭。

  「十分鐘。」

  CodeMaster_US的表情變了,倒也不是憤怒,純屬是有點……懵。

  「就這?」他說,「這不就是統計字符頻率然後排序?這有什麼難的?」

  陳哲沒說話,只是看著他。

  CodeMaster_US低下頭,開始寫。

  一分鐘,兩分鐘,三分鐘。

  他的眉頭皺起來了。

  四分鐘,五分鐘。

  他開始刪代碼重寫。

  六分鐘,七分鐘。

  他的額頭上開始冒汗。

  八分鐘,九分鐘。

  他寫完了。

  「跑測試。」他說。

  代碼跑起來。

  屏幕上跳出一行紅字:測試失敗。

  CodeMaster_US愣了一下。

  他又看了一遍代碼,改了改,再跑。

  還是紅字。

  九分五十秒。


  陳哲開口:「時間到了。」

  CodeMaster_US抬起頭,臉上的表情複雜得像打翻了調料盤。

  「你的測試用例是什麼?」他問。

  陳哲把自己的測試代碼發到屏幕上。

  ```python

  def test_char_frequency():

  #基本情況

  assert char_frequency(「hello「)==[('l', 2),('h', 1),('e', 1),('o', 1)]

  #出現次數相同的情況

  assert char_frequency(「abcc「)==[('c', 2),('a', 1),('b', 1)]

  #空字符串

  assert char_frequency(「「)==[]

  #所有字符都不同

  assert char_frequency(「abc「)==[('a', 1),('b', 1),('c', 1)]

  #特殊字符

  assert char_frequency(「a a「)==[('a', 2),('', 1)]

  print(「所有測試通過「)

  ```

  CodeMaster_US盯著屏幕,沉默了幾秒。

  然後他抬起頭,看著陳哲。

  「你……」他張了張嘴,「你剛才出的題,你心裡有答案嗎?」

  陳哲點點頭。

  他把自己的代碼發上去。

  ```python

  from collections import Counter

  def char_frequency(s):

  「「「

  統計字符串中每個字符出現的次數,按出現次數從高到低排序。

  出現次數相同的情況下,按字符的ASCII碼升序排序。

  參數:

  s:輸入字符串

  返回:

  list:按(字符,次數)排序的列表

  「「「

  if not isinstance(s, str):

  raise TypeError(「輸入必須是字符串「)

  #統計頻率

  counter = Counter(s)

  #排序:先按次數降序,再按ASCII升序

  result = sorted(counter.items(), key=lambda x:(-x[1], ord(x[0])))

  return result

  ```

  他又加了幾行測試,和剛才發上去的一樣。

  跑測試。

  所有測試通過。

  CodeMaster_US盯著屏幕,好一會兒沒說話。

  彈幕已經瘋了。

  【C家軍:臥槽,這代碼太優雅了】

  【代碼獵人:Counter+sorted,Pythonic】

  【Pythonista:而且考慮了空字符串和特殊字符】

  【哲思的粉絲:這就叫專業】

  【C家軍:老C好像翻車了……】

  CodeMaster_US的臉色變得很難看。

  他深吸一口氣,又深吸一口氣。


  「行。」他說,聲音比剛才低了很多,「這一輪算你贏。下一輪——」

  「不用了。」

  陳哲打斷他。

  CodeMaster_US愣了一下。

  陳哲看著攝像頭,語氣很平靜。

  「你剛才的幾道題出得太簡單,我不覺得那是你的真實水平。這一題你寫不出來,我也不覺得那是你的真實水平。」他說,「你今天狀態不好,或者你根本沒把我當回事。繼續比下去沒意義。」

  他頓了頓。

  「你之前說,輸了就把付費視頻下架,贏了給我推薦。現在咱們打個平手,我不需要你下架視頻,你也不用給我推。這件事到此為止。」

  CodeMaster_US張了張嘴,想說什麼,但又咽了回去。

  陳哲看著攝像頭,笑了一下。

  「下次再約,好好準備。」

  伴隨著陳哲這一邊的黑屏,就只剩下CodeMaster_US錯愕的面龐,以及哲思頻道里變灰的頭像。

  對方的神色漸漸從錯愕忿怒變得複雜,許久才長出一口氣,和直播間的水友抱怨了幾句,也就關閉直播間,悶臉結束了這個紛擾的晚上。

章節目錄