面試還是不寫或者少寫部落格

Python szxczyc • at 2021-01-13 20:07:56 • 4 Views

寫了部落格被面試官看到了,還說部落格不錯,抓著一個底層的點狂問,感覺要窒息了。

部落格裡寫了 Python 的執行緒不安全是因為 i++;等 C 語言的庫原生就不是執行緒安全的,導致 Python 也不是執行緒安全的。然後被瘋狂問 i++你怎麼理解非執行緒安全?怎麼想的?從底層理解解釋一下?感覺要死了

PS:面試官人很好,就是我太菜了,哭了哭了(´•̥  ̯ •̥`)

Total: 51
  • zhuangzhuang1988 2021-01-12 21:25:42
    🤔過了中二期,不寫 blog,大部分人寫 blog 是浪費時間,又感覺自己努力的一件事情,實際上有沒有提升,自己最知道了
  • snxq1995 2021-01-12 21:25:42
    寫原創性觀點,不然真沒意思。
  • Kasumi20 2021-01-12 21:25:42
    i++不安全,你不會加鎖嗎
  • liuxu 2021-01-12 21:25:42
    說實話,蠻難理解為什麼 i++不是執行緒安全的,也就是非原子操作。
  • liuxu 2021-01-12 21:26:42
    @liuxu #4 高階語言使用了臨時記憶體,i 增加後再賦值到 i 的記憶體中,所以非原子了。但是彙編有 inc 指令,編譯器沒優化嗎,還是有什麼特殊性。。
  • caiji11 2021-01-12 21:26:42
    @zhuangzhuang1988 我感覺寫 blog 是把自己理解了的東西 比如說跳錶的結構 沒感覺浪費時間 就是忙的時候就堅持下來
  • liuxu 2021-01-12 21:26:42
    @liuxu #5

    相關文章表示 i++會編譯成
    mov ecx,dword ptr [i]
    add ecx,1
    mov dword ptr [i],ecx ;i 自增


    所以就很奇怪,明明可以 inc <mem>的


    inc, dec — Increment, Decrement
    The inc instruction increments the contents of its operand by one. The dec instruction decrements the contents of its operand by one.
    Syntax
    inc <reg>
    inc <mem>
    dec <reg>
    dec <mem>

    Examples
    dec eax — subtract one from the contents of EAX.
    inc DWORD PTR [var] — add one to the 32-bit integer stored at location var
  • liuxu 2021-01-12 21:27:42
    @liuxu #7 不好意思,我又查了一下,inc 指令也是非原子操作,需要 LOCK 字首才能原子操作,而且 inc 不會修改 cf 暫存器,add 會修改

    https://www.felixcloutier.com/x86/inc
  • LGA1150 2021-01-12 21:27:42
    光 inc 指令也不足以保證執行緒安全,如果有多個核心同時執行了一個 inc 指令呢?
    你可以參考下 Linux 核心的 atomic_inc
    https://elixir.bootlin.com/linux/v5.11-rc3/source/tools/arch/x86/include/asm/atomic.h#L49
  • p2pCoder 2021-01-12 21:28:42
    這問題其實挺常規,挺八股的,涉及語言的記憶體模型以及作業系統基礎
    主記憶體和 cpu 多級快取 以及暫存器,計算肯定是 cpu 計算,然後賦值運算同步到主記憶體
    上面說到的 inc 命令,這東西涉及效能問題,我不是科班出生,對彙編瞭解不多,但是這東西本質和快取系統設計差不多,如果把直接編譯 inc 這種可以保證原子的操作,肯定就犧牲了多級快取的效能,各語言也提供了對應的++對應的原子操作,畢竟大多數程式碼 i++操作,不是在多執行緒環境下執行的,直接這麼編譯,大多數 i++操作效能都會變差
  • icyalala 2021-01-12 21:28:43
    https://godbolt.org/z/6rh7c4
    看看線上彙編就知道了

    部落格還是要寫的,寫自己弄懂的內容。
  • also24 2021-01-12 21:26:43
    從結果角度來看,我覺得這裡其實取決於面試官的兩種心態取向。

    A:這個人答不出的問題蠻多的,不太行。
    B:這個人懂的東西蠻多的,還不錯。


    對於前者的話,在意的是給你 10 個問題你能回答出幾個,那自然是淺顯的問題更好。
    對於後者的話,在意的是你最多能回答出多大範圍的問題,那當他提出更深的問題的時候,其實潛意識中已經認為你能夠回答出更淺顯的問題了。
  • musi 2021-01-12 22:25:43
    不懂那些說些部落格是浪費時間的人是怎麼寫部落格的。。。
  • aaronlam 2021-01-12 22:27:43
    我覺得認真去寫部落格,的確是能一個讓自己從頭到尾弄懂一個問題的方式,也是能靠這種方式去梳理自己知識體系。雖然,後面會因為記憶曲線的問題而忘掉大部分細節。但是,如果回頭再去看一下還是能迅速把細節輪廓建立起來。
  • szxczyc 2021-01-12 23:24:10
    @zhuangzhuang1988 別的不說,寫一下部落格整理一下東西順帶寫個思維導圖,記得更牢固。這是真的
  • nightwitch 2021-01-12 23:25:10

    不怪寫部落格,寫的時候寫的什麼東西要自己去驗證。
  • akakidz 2021-01-12 23:26:10
    想開一點...說不定面試官也是看了你的部落格之後惡補了一下呢...
  • szxczyc 2021-01-12 23:28:10
    @akakidz 想法很危險哈哈哈哈哈哈
  • webshe11 2021-01-13 00:27:10
    跟部落格沒關係,就算沒部落格,扯到一些細節的點照樣被抓住狂問
    只要不是培訓班三個月出來的,對面試的東西自己死磕過一些,多少就不怕面試官死磕了
  • gidot 2021-01-13 01:24:10
    面試官私下百度惡補,面試是內心暗笑,這個逼今天裝的滿分。
  • zsf520zsf 2021-01-13 08:26:39
    我就是怕面試官看到我部落格要問太深的東西,就沒在簡歷貼部落格地址,然而我博文裡面很多不是完全原創的,時間久了自己也忘了...
  • rodrick 2021-01-13 08:27:39
    面之前把部落格裡文章過一遍,覺得自己忘記的沒搞懂的先隱藏了,面完再加回去[狗頭]
  • Sunnic 2021-01-13 08:25:39
    說的越多越壞事
  • yzbythesea 2021-01-13 09:24:39
    i++ 非執行緒安全不是顯而易見。。。所以你都沒理解執行緒安全和原子操作,為什麼還寫在部落格或者放在簡歷裡。。。
  • treblex 2021-01-13 09:25:39
    我會在瞎學其他語言的時候 雜七雜八的寫一篇 xx 入門,以免下次又要重新入門
  • wangyzj 2021-01-13 09:27:39
    面試官也未必懂
  • towry 2021-01-13 10:23:39
    面試管懂不懂不重要,就算人家不是很精通,但是這是場面試,你只要能把面試官
    說服忽悠住就是你真的厲害。

    比如面試官問你 js 中 getOwnProperty 這個方法是做啥的,你支支吾吾的說是做這個的,其實你不懂。
    假如你說不記得 js 中有 getOwnProperty 這個方法,但是有 hasOwnProperty 這個方法,這個方法是...。
    這說明你是真的懂 /精通。

    一些人面試喜歡糾結面試官是不是比自己厲害,是不是啥都懂,人家是招人的,就是要招比自己厲害的人的。
    還有一些人討論問題不抓問題根源,喜歡糾結表面的東西,什麼你也不懂了怎麼怎麼樣。但是就是不去解決問題,去思考深層的東西。

    寫部落格的好處是自己寫的時候會去回憶思考,並且以後再看的時候可以加深印象理解。

    所以,面試和你寫不寫部落格沒關係。
  • MENGKE 2021-01-13 10:25:39
    問到我不懂的,面試結束的時候我都是讓面試官給我講講
  • NerverLibis 2021-01-13 10:26:39
    寫部落格是為了恰飯掛廣告的啦,一句話讓 HR 走
  • RedrumSherlock 2021-01-13 10:26:39
    雖然不怎麼寫部落格,但是我覺得寫部落格最有用的是把自己理解的不全面的,淺薄,甚至錯誤的的給糾正補充,和自己用一個東西與教別人一個東西的區別一樣
Add a reply
For Commenting you need to Login. If you dont have a Account you need to Register.