寫了部落格被面試官看到了,還說部落格不錯,抓著一個底層的點狂問,感覺要窒息了。
部落格裡寫了 Python 的執行緒不安全是因為 i++;等 C 語言的庫原生就不是執行緒安全的,導致 Python 也不是執行緒安全的。然後被瘋狂問 i++你怎麼理解非執行緒安全?怎麼想的?從底層理解解釋一下?感覺要死了
PS:面試官人很好,就是我太菜了,哭了哭了(´•̥ ̯ •̥`)
Total: 51
-
🤔過了中二期,不寫 blog,大部分人寫 blog 是浪費時間,又感覺自己努力的一件事情,實際上有沒有提升,自己最知道了
-
寫原創性觀點,不然真沒意思。
-
i++不安全,你不會加鎖嗎
-
說實話,蠻難理解為什麼 i++不是執行緒安全的,也就是非原子操作。
-
@liuxu #4 高階語言使用了臨時記憶體,i 增加後再賦值到 i 的記憶體中,所以非原子了。但是彙編有 inc 指令,編譯器沒優化嗎,還是有什麼特殊性。。
-
@zhuangzhuang1988 我感覺寫 blog 是把自己理解了的東西 比如說跳錶的結構 沒感覺浪費時間 就是忙的時候就堅持下來
-
@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 #7 不好意思,我又查了一下,inc 指令也是非原子操作,需要 LOCK 字首才能原子操作,而且 inc 不會修改 cf 暫存器,add 會修改
https://www.felixcloutier.com/x86/inc -
光 inc 指令也不足以保證執行緒安全,如果有多個核心同時執行了一個 inc 指令呢?
你可以參考下 Linux 核心的 atomic_inc
https://elixir.bootlin.com/linux/v5.11-rc3/source/tools/arch/x86/include/asm/atomic.h#L49 -
這問題其實挺常規,挺八股的,涉及語言的記憶體模型以及作業系統基礎
主記憶體和 cpu 多級快取 以及暫存器,計算肯定是 cpu 計算,然後賦值運算同步到主記憶體
上面說到的 inc 命令,這東西涉及效能問題,我不是科班出生,對彙編瞭解不多,但是這東西本質和快取系統設計差不多,如果把直接編譯 inc 這種可以保證原子的操作,肯定就犧牲了多級快取的效能,各語言也提供了對應的++對應的原子操作,畢竟大多數程式碼 i++操作,不是在多執行緒環境下執行的,直接這麼編譯,大多數 i++操作效能都會變差 -
-
從結果角度來看,我覺得這裡其實取決於面試官的兩種心態取向。
A:這個人答不出的問題蠻多的,不太行。
B:這個人懂的東西蠻多的,還不錯。
對於前者的話,在意的是給你 10 個問題你能回答出幾個,那自然是淺顯的問題更好。
對於後者的話,在意的是你最多能回答出多大範圍的問題,那當他提出更深的問題的時候,其實潛意識中已經認為你能夠回答出更淺顯的問題了。 -
不懂那些說些部落格是浪費時間的人是怎麼寫部落格的。。。
-
我覺得認真去寫部落格,的確是能一個讓自己從頭到尾弄懂一個問題的方式,也是能靠這種方式去梳理自己知識體系。雖然,後面會因為記憶曲線的問題而忘掉大部分細節。但是,如果回頭再去看一下還是能迅速把細節輪廓建立起來。
-
@zhuangzhuang1988 別的不說,寫一下部落格整理一下東西順帶寫個思維導圖,記得更牢固。這是真的
-
想開一點...說不定面試官也是看了你的部落格之後惡補了一下呢...
-
@akakidz 想法很危險哈哈哈哈哈哈
-
跟部落格沒關係,就算沒部落格,扯到一些細節的點照樣被抓住狂問
只要不是培訓班三個月出來的,對面試的東西自己死磕過一些,多少就不怕面試官死磕了 -
面試官私下百度惡補,面試是內心暗笑,這個逼今天裝的滿分。
-
我就是怕面試官看到我部落格要問太深的東西,就沒在簡歷貼部落格地址,然而我博文裡面很多不是完全原創的,時間久了自己也忘了...
-
面之前把部落格裡文章過一遍,覺得自己忘記的沒搞懂的先隱藏了,面完再加回去[狗頭]
-
說的越多越壞事
-
i++ 非執行緒安全不是顯而易見。。。所以你都沒理解執行緒安全和原子操作,為什麼還寫在部落格或者放在簡歷裡。。。
-
面試官也未必懂
-
面試管懂不懂不重要,就算人家不是很精通,但是這是場面試,你只要能把面試官
說服忽悠住就是你真的厲害。
比如面試官問你 js 中 getOwnProperty 這個方法是做啥的,你支支吾吾的說是做這個的,其實你不懂。
假如你說不記得 js 中有 getOwnProperty 這個方法,但是有 hasOwnProperty 這個方法,這個方法是...。
這說明你是真的懂 /精通。
一些人面試喜歡糾結面試官是不是比自己厲害,是不是啥都懂,人家是招人的,就是要招比自己厲害的人的。
還有一些人討論問題不抓問題根源,喜歡糾結表面的東西,什麼你也不懂了怎麼怎麼樣。但是就是不去解決問題,去思考深層的東西。
寫部落格的好處是自己寫的時候會去回憶思考,並且以後再看的時候可以加深印象理解。
所以,面試和你寫不寫部落格沒關係。 -
問到我不懂的,面試結束的時候我都是讓面試官給我講講
-
寫部落格是為了恰飯掛廣告的啦,一句話讓 HR 走
-
雖然不怎麼寫部落格,但是我覺得寫部落格最有用的是把自己理解的不全面的,淺薄,甚至錯誤的的給糾正補充,和自己用一個東西與教別人一個東西的區別一樣
Add a reply