面试还是不写或者少写博客

2021-01-12 20:37:26 +08:00
 szxczyc

写了博客被面试官看到了,还说博客不错,抓着一个底层的点狂问,感觉要窒息了。

博客里写了 Python 的线程不安全是因为 i++;等 C 语言的库原生就不是线程安全的,导致 Python 也不是线程安全的。然后被疯狂问 i++你怎么理解非线程安全?怎么想的?从底层理解解释一下?感觉要死了

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

7361 次点击
所在节点    Python
51 条回复
zhuangzhuang1988
2021-01-12 20:41:15 +08:00
🤔过了中二期,不写 blog,大部分人写 blog 是浪费时间,又感觉自己努力的一件事情,实际上有没有提升,自己最知道了
snxq1995
2021-01-12 20:42:50 +08:00
写原创性观点,不然真没意思。
Kasumi20
2021-01-12 20:44:00 +08:00
i++不安全,你不会加锁吗
liuxu
2021-01-12 20:47:58 +08:00
说实话,蛮难理解为什么 i++不是线程安全的,也就是非原子操作。
liuxu
2021-01-12 20:49:34 +08:00
@liuxu #4 高级语言使用了临时内存,i 增加后再赋值到 i 的内存中,所以非原子了。但是汇编有 inc 指令,编译器没优化吗,还是有什么特殊性。。
caiji11
2021-01-12 20:50:07 +08:00
@zhuangzhuang1988 我感觉写 blog 是把自己理解了的东西 比如说跳表的结构 没感觉浪费时间 就是忙的时候就坚持下来
liuxu
2021-01-12 20:54:29 +08:00
@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:05:56 +08:00
@liuxu #7 不好意思,我又查了一下,inc 指令也是非原子操作,需要 LOCK 前缀才能原子操作,而且 inc 不会修改 cf 寄存器,add 会修改

https://www.felixcloutier.com/x86/inc
LGA1150
2021-01-12 21:07:33 +08:00
光 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:10:03 +08:00
这问题其实挺常规,挺八股的,涉及语言的内存模型以及操作系统基础
主内存和 cpu 多级缓存 以及寄存器,计算肯定是 cpu 计算,然后赋值运算同步到主内存
上面说到的 inc 命令,这东西涉及性能问题,我不是科班出生,对汇编了解不多,但是这东西本质和缓存系统设计差不多,如果把直接编译 inc 这种可以保证原子的操作,肯定就牺牲了多级缓存的性能,各语言也提供了对应的++对应的原子操作,毕竟大多数代码 i++操作,不是在多线程环境下运行的,直接这么编译,大多数 i++操作性能都会变差
icyalala
2021-01-12 21:15:46 +08:00
https://godbolt.org/z/6rh7c4
看看在线汇编就知道了

博客还是要写的,写自己弄懂的内容。
also24
2021-01-12 21:24:09 +08:00
从结果角度来看,我觉得这里其实取决于面试官的两种心态取向。

A:这个人答不出的问题蛮多的,不太行。
B:这个人懂的东西蛮多的,还不错。


对于前者的话,在意的是给你 10 个问题你能回答出几个,那自然是浅显的问题更好。
对于后者的话,在意的是你最多能回答出多大范围的问题,那当他提出更深的问题的时候,其实潜意识中已经认为你能够回答出更浅显的问题了。
musi
2021-01-12 21:47:09 +08:00
不懂那些说些博客是浪费时间的人是怎么写博客的。。。
aaronlam
2021-01-12 22:03:46 +08:00
我觉得认真去写博客,的确是能一个让自己从头到尾弄懂一个问题的方式,也是能靠这种方式去梳理自己知识体系。虽然,后面会因为记忆曲线的问题而忘掉大部分细节。但是,如果回头再去看一下还是能迅速把细节轮廓建立起来。
szxczyc
2021-01-12 22:32:32 +08:00
@zhuangzhuang1988 别的不说,写一下博客整理一下东西顺带写个思维导图,记得更牢固。这是真的
nightwitch
2021-01-12 22:38:50 +08:00

不怪写博客,写的时候写的什么东西要自己去验证。
akakidz
2021-01-12 22:52:38 +08:00
想开一点...说不定面试官也是看了你的博客之后恶补了一下呢...
szxczyc
2021-01-12 23:06:23 +08:00
@akakidz 想法很危险哈哈哈哈哈哈
webshe11
2021-01-13 00:05:18 +08:00
跟博客没关系,就算没博客,扯到一些细节的点照样被抓住狂问
只要不是培训班三个月出来的,对面试的东西自己死磕过一些,多少就不怕面试官死磕了
gidot
2021-01-13 00:28:18 +08:00
面试官私下百度恶补,面试是内心暗笑,这个逼今天装的满分。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/744327

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX