你好呀,我是歪歪。
週末的時候吃了一個瓜,真的是太好吃了。
雖然 2022 年都還沒過半,但是我個人已經把這個瓜評選為年度前三了。很久沒有吃過這麼有質量,又讓我酣暢淋漓的瓜了。
事情這樣的,我在知乎上刷到了這樣的問題:
按理來說,我是一個數學渣的,這種關於數學的問題我一般都不是很感興趣。我甚至都不記得我高考的時候數學考了多少分了。
但是,我還是鬼使神差的點了進去。
沒想到,這一點進去,我就陷進去了。
題目大概是說 B 站上有個 up 主說自己高考數學的時候差不多 35 分鐘就把題做完了,最後考了 149 分。
這個 up 主其實挺好的,我還專門去看了一下他之前的視訊,他今年一月份發的視訊裡面說自己是在美國攻讀博士學位,學的是純數學專業。
然後他的高考數學分數沒有問題,因為他後面曬了自己的成績單,但是由於沒有可以佐證的證據, 35 分鐘這個時間特別有爭議了。
大家圍繞著這個時間就開始吵起來了。
一撥人說應該問題不大,一撥人說絕無可能。
於是就出現了下面這樣的一個回答,我先給你全文截個圖:
https://www.zhihu.com/question/522084520/answer/2394053852
總體意思就是有個不願意透露姓名的、參加過數學奧林匹克大賽的數學大佬,他說他覺得沒有人可以在 35 分鐘之內高考數學拿到 149 分。
他還立下了獎金 100w 的戰書:
在 2022 年 6 月 7 日中午 12 點集合,等當天試卷出來之後全網直播,40 分鐘之內 145 分以上即可,參賽費 1 萬,挑戰成功獎金 100 萬。
他也知道知乎上能人輩出,所以特別歡迎大家來打他的臉。希望大家幫他擴散這個訊息,讓更多的人看到,如果能湊夠十個人就開搞。
此訊息一處,各路吃瓜豪傑聞風趕到。我給你看看這個回答的資料:
3.3w 人點贊,6805 條評論,5736 人追更,1.7w 人收藏,很恐怖的資料了。
因為答主最後一次更新在 3 月 20 號。至今已經過去了 2 個多月了,我當然第一時間是想知道截止現在有多少人報名了。
所以我想在評論區裡面找到答主關於這方面問題的回覆。
但是 6800 多條評論,這麼多評論直接影響到我吃瓜的速度了。知乎網頁版上分頁就分了 121 頁,而且裡面還夾雜著特別多的「檢視回覆」:
「檢視回覆」,就是下面這種樓中樓的情況:
我翻了幾頁,我就發現事情不對,這瓜雖然好吃,但是一頁頁的翻的話,吃起來也太費勁了。
你知道,我是程式設計師嘛。
所以...
知乎的評論我看了一下,特別的好扒,結構也不算複雜。
從開發者工具中看到的介面和響應是這樣的:
你看它的這個介面,裡面有個 limit=20&offset=0,猜也能猜出來,limit=20 的意思是一頁顯示 20 條,然後 offset=0 說明它是基於偏移量來做的分頁。
然後返回的資料中有一個 paging 的屬性。
很重要,所以我把這個屬性單獨拿出來說:
前兩個屬性不多說了,分別用來標識當前是否第一頁和最後一頁。
接著有個 next 和 previous,表示上一頁和下一頁。你注意看這兩個屬性唯一的差別就在 offset 上,一個是 0,一個是 20,也就是說一頁顯示 20 個。
totals 代表有 2417 條資料。一頁 20 個,所以一共 121 頁。
那麼問題就來了,明明前面說了 6805 條評論,這裡怎麼只有 2417 條呢?
這個差距也太大了吧?
是的,我開始也有這個疑問,於是我隨便找了一個"檢視回覆"點了一下:
在開發者工具裡面看到了這樣的請求和響應:
看到介面名稱的時候,我一瞬間都懂了。
前面的 2417 條,是 root_comments。每個 root_comments 下面會掛很多 child_comments。
拿個實際的資料來說,就是這個意思:
所以我的策略是先把 root_comments 都拿下來。
我想要拿到的資料應該是誰評論了什麼內容,這個內容有多少人點贊,對應的資料是這樣的:
所以這個程式寫起來很簡單,就這麼幾行程式碼:
從輸出的結果來看,是沒有毛病的:
但是我發現一個神奇的事情是這樣的:
當我獲取到 offset=420 的時候,只給我返回了兩條資料再然後就全是空了:
一直到 offset=2420 ,也就是最後一頁,都是空的:
我不理解,但是我也找不到為什麼,猜測應該是觸發到了他們的某個限制策略了吧。
我前面不是說了知乎是根據偏移量分頁的嘛,很有可能的一個邏輯就是當 offset 大於某個值的時候,系統認為這個值不合理,覺得你有可能是在刷資料,那麼我就不給你資料了。
我想找找其他的貼文來論證我的觀點,但是一時間竟然沒有找到一個回答下面有超過 5000 個評論的貼文,所以這條路沒有走通。但是也側面證明了,這確實是一個神貼,在整個知乎都屬於少部分的情況,出點奇奇怪怪的異常也是很正常的嘛。
但是我發現了另外一個問題,其他評論不多的貼文,比如我之前寫的一篇關於成都的,只有 722 個評論。
當我點選評論的時候是這樣的:
彈窗加上下拉瀑布流的形式進行的展示,和手機上的展示類似。根本就看不到什麼分頁資訊,這才是偏移量分頁的正確開啟方式。
因為可以帶著上一次返回的資料的最大 id 去做 limit 查詢,這也是巨量資料量的情況下,一個非常好的分頁手段。
具體好處就不展開了,老八股文了,說多了沒意思。這是隻是一個應用場景而已。
回到我們的神貼中,前面我說了它下面是有分頁的,但是通過介面存取到 offset=440 的時候,只展示了兩條資料之後,就沒有資料了。
也就是說介面最多隻返回 442 條 root_comments 型別的資料。442,一頁 20 條,一共 23 頁。
所以我只需要在評論頁上點選到 23 頁,就能證明我的觀點。
首先我直接點選最後一頁的時候,是一片空白,和我們程式表現一致:
然後,我就從第一頁開始,一頁頁的點,點到 23 頁的時候,果然是符合我的猜測的:
雖然後面還有接近 100 頁,但是全是空白頁,這應該是知乎的一個 BUG 吧?
算了,不深究。
先能拿多少資料就拿多少資料,牢記使命,吃瓜的時候要跟著主線走,先把主線劇情打通關。
千萬不要因為走的太遠,而忘記自己吃瓜的初衷。
現在的主線就是 root_comments。
而我已經把 root_comments 的資料拿到了,還要獲取對應的 child_comments 怎麼搞呢?
還是得找到對應的介面才行。
當點選評論下面的「檢視回覆」時,介面是這樣的:
其中有一串神祕的數位,10093095452,這是什麼玩意?
我也不知道,但是我知道這是一種 restful 風格的請求,所以這個數位,是一個入參。
既然是獲取 root_comments 下的 child_comments,這個入參一定和 root_comments 有關。
於是我拿著這串數位直接去搜尋了獲取 root_comments 時的第一頁返回資料:
你看我標註了五角星的地方,原來這串神祕數位,就是每個 root_comments 的 id 呀。
而且還有一個意外收穫,我發現返回的資料結構裡面有個 child_comment_count 屬性,這個資料就是代表這個 root_comments 下面有多少個評論。
所以,我在解析 root_comments 的時候,只需要判斷一下對應的 child_comment_count 屬性是否為 0。不為 0,則說明是有回覆的,按照前面說的 restful 的方式獲取資料即可。
也就是在程式中加入這樣的邏輯:
而 handleChildComment 的關鍵其實就是拿到這個 url,後面的程式碼就和解析 root_comments 基本一致:
把程式碼跑起來,控制檯紀錄檔列印的嘩嘩的:
檢查了一下,看起來沒有毛病。
接下來就更簡單了,把資料搞到資料庫裡面去就完事了。
最後一共拉取到了 4267 條資料:
距離 6800 條評論還差一點,原因前面說了,當 offset 大於某個值的時候,介面就沒有返回資料了。
這不重要,反正大部分資料都拿到了。
接下來就是安心吃瓜了。
因為我最關心的是答主說了些什麼事情。
所以我首先過濾了一下 cna777 這個答主的所有回覆:
這個吃瓜的姿勢就很舒服了。
從答主的回答來看,好像截至 5 月 26 號,只有三個人報名,如果到 6.1 還沒有 10 個人的話,可能今年就不會組織了。
果然是吃瓜的人很多,但是都真的只是吃瓜而已。
其中我還看到答主有這樣的一個評論,有點意思,我當然要看看上下文是什麼了。
前面扒評論的時候我說了,我把 root_comments 的 id 存下來了,所有隻需要過濾指定的 id,就能找到上下文:
原來是有人質疑答主是否有這麼多錢。這個沒啥意思,但是我驚訝的發現這個 root_comments 的 id 下面居然有 197 條評論。
是一個非常有爭議性的評論,所以我看了一下評論的內容:
然後找到了對應的頁面上的評論,把這 197 條評論全部看完了:
總結起來就是說這個叫做 kiki 的同學,說他是高中數學老師,他覺得這個挑戰可以完成,但是不知道為什麼,即使非常多的吃瓜群眾叫他展現一波實力,他也一直顧左右而言它,並不正面應戰。
主要是質疑答主是否能拿出這 100w,這個質疑也在其他的評論中出現過。
但是我就奇怪了,要是真的有實力就直接去報名啊。主要是現在報名的人都沒有 10 個,大家就開始懷疑答主能否拿出 100w。然後借題發揮,輸出自已的各種觀點。
這個邏輯的先後順序也不對的嘛,答主不是多次說了嘛,等報名人夠 10 人了,他會去gz處進行公正的嘛。
接著我想看看哪個評論的話題性是最大的,也就是 root_comments 的 child_comment_count 數是最大的。
我擷取了排名前十的資料:
第一位是一名叫做「無亡」的使用者,他說:
我要挑戰 天津考生 天津卷常年 40 分鐘以內寫完 很多次 150
然後下面有 610 個回覆:
從評論上看這個哥們好像確實報名了,也是第二個報名的。
瞬間覺得這真的是個人才啊,於是想去他的主頁看看這是何方神聖。
結果...
這是牛逼吹的太大,兜不住了,自己就銷號了?
這裡答主說的「退乎」的人,應該就是這個「無亡」同學吧:
所以,這個故事告訴我們什麼?
口嗨一時爽,裝逼要謹慎。
回覆第二多的是這個:
很多吃瓜群眾都願意對這個比賽進行眾籌,我粗略的算了一下,好像大家的錢加起來,距離 100w 也不算特別遠了。
說真的,要是這個活動辦起來,我也願意花錢買個門票,看看應戰的人到底是何方神聖。
翻了很多評論,反正就是有幾個人裝逼說問題不大,但是一叫報名就各種各樣的藉口。
然後我換了一個視角,按照評論點贊數最高進行排序:
前 10 前面,我最喜歡的是這個評論:
真的是這樣的,只要在任何的社交平臺裡面討論到跑步相關的話題,總是有人冒出幾個特別的離譜的成績,吹的是有板有眼的。
但是真的要說線上下來對線,真刀真槍的幹一場,馬上各種各樣的理由就來了,反正就是不承認自己在吹牛逼。
包括這個評論下面也是,大家又開始關於跑步成績吵起來了。
用我們程式設計師的話說就是:no bb,show me code.
還在評論裡面發現了一個角度刁鑽的哥們:
他居然想組局對賭,真的是處處是人才啊。
我還發現了特別多的評論是"cy",我也不懂是啥意思。就搜了一下,原來是「插眼」的意思。
要說插眼,我就懂了。我盲僧插眼賊溜。
有 10 分之一的評論都是 cy:
評論區還有特別多的瓜可以吃,但是我就不一一列舉了。
我接著就去了 B 站,我看到了兩個相關的視訊。
第一個是這個:
https://www.bilibili.com/video/BV1Va411t7CV/?spm_id_from=333.788.recommend_more_video.2
這個 up 主的自我介紹是這樣的:
我高考數學 148 分,考入清華基課班競賽業餘選手,教了 12 年數學。但是做題巔峰事情的我應該也做不到,但是我聯絡報名了大眾組,重在參與。
這哥們,一看就是實在人,實力線上,但是不輕易裝逼,報個大眾組,賺個噱頭,穩得一筆。
這個視訊下面有個評論是把我看笑了:
我也來裝一個,本人高考728分,現在在麻省理工數學系讀博,本科期間總共發表了接近500篇sci,研一的時候讀到過哥德巴赫猜想,花了我兩天才解決掉,也因此獲得過菲爾茲獎,我想說,高考我50分鐘做完數學滿分,但這也算我的極限了,因為我是看到題目就想到答案,再加上寫的時間,如果寫的再快點最少也要40幾分鐘吧,40分鐘以內根本不可能。裝完了,爽!
很好的諷刺了這個話題下面的一些「裝逼犯」。
而我想說的是:兄弟,別光喝酒,吃幾顆花生米啊,邊吃邊說。
第二個視訊是這個:
https://www.bilibili.com/video/BV1sP4y1M7K4/?spm_id_from=333.788.recommend_more_video.-1
這個大佬給出的結論是有可能。因為考試之前是可以提前十分鐘拿到試卷,但是不能動筆的。
我依稀記得好像確實是先拿到了試卷,但是不能動筆。至於是提前多久那就不記得了。
大佬說,有這十分鐘,完全可以通過口算,把選擇題和填空題做完。
是的,沒聽錯,可以通過口算,秒殺高考數學絕大部分的選擇題和填空題:
聽的我一愣一愣的:這特麼還是人嗎?
這瓜越往後面吃,我越覺得人和人之間的參差是巨大的。在這些學神面前,我都不好意思說自己是學渣。
在我吃完瓜,寫完文章之後,我發現答主更新了:
太遺憾了,居然沒有把局組起來。到最後,還是隻有三個人報名了。
但是答主表示明年還能再來,只要湊夠十人我們隨時可以開始。
那麼,這個叫做「李笑」的、不在國內無法參賽的、看起來很厲害的使用者,不知道到時候會不會迎戰:
我相信你是個大佬,只不過你拿學歷說事兒的樣子,真的 low。
另外,我是真的想這個活動舉辦起來,有主辦方,有贊助商的那種,然後全平臺直播。
對了一定要有解說,不然我是真的看不懂。
雖然這些題我是不會了,但是吃瓜,我一定站在最前線。