写了博客被面试官看到了,还说博客不错,抓着一个底层的点狂问,感觉要窒息了。
博客里写了 Python 的线程不安全是因为 i++;等 C 语言的库原生就不是线程安全的,导致 Python 也不是线程安全的。然后被疯狂问 i++你怎么理解非线程安全?怎么想的?从底层理解解释一下?感觉要死了
PS:面试官人很好,就是我太菜了,哭了哭了(´•̥ ̯ •̥`)
1
zhuangzhuang1988 2021-01-12 20:41:15 +08:00 via Android 4
🤔过了中二期,不写 blog,大部分人写 blog 是浪费时间,又感觉自己努力的一件事情,实际上有没有提升,自己最知道了
|
2
snxq1995 2021-01-12 20:42:50 +08:00 via Android
写原创性观点,不然真没意思。
|
3
Kasumi20 2021-01-12 20:44:00 +08:00
i++不安全,你不会加锁吗
|
4
liuxu 2021-01-12 20:47:58 +08:00
说实话,蛮难理解为什么 i++不是线程安全的,也就是非原子操作。
|
5
liuxu 2021-01-12 20:49:34 +08:00
@liuxu #4 高级语言使用了临时内存,i 增加后再赋值到 i 的内存中,所以非原子了。但是汇编有 inc 指令,编译器没优化吗,还是有什么特殊性。。
|
6
caiji11 2021-01-12 20:50:07 +08:00 1
@zhuangzhuang1988 我感觉写 blog 是把自己理解了的东西 比如说跳表的结构 没感觉浪费时间 就是忙的时候就坚持下来
|
7
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 |
8
liuxu 2021-01-12 21:05:56 +08:00
@liuxu #7 不好意思,我又查了一下,inc 指令也是非原子操作,需要 LOCK 前缀才能原子操作,而且 inc 不会修改 cf 寄存器,add 会修改
https://www.felixcloutier.com/x86/inc |
9
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 |
10
p2pCoder 2021-01-12 21:10:03 +08:00
这问题其实挺常规,挺八股的,涉及语言的内存模型以及操作系统基础
主内存和 cpu 多级缓存 以及寄存器,计算肯定是 cpu 计算,然后赋值运算同步到主内存 上面说到的 inc 命令,这东西涉及性能问题,我不是科班出生,对汇编了解不多,但是这东西本质和缓存系统设计差不多,如果把直接编译 inc 这种可以保证原子的操作,肯定就牺牲了多级缓存的性能,各语言也提供了对应的++对应的原子操作,毕竟大多数代码 i++操作,不是在多线程环境下运行的,直接这么编译,大多数 i++操作性能都会变差 |
11
icyalala 2021-01-12 21:15:46 +08:00
|
12
also24 2021-01-12 21:24:09 +08:00 1
从结果角度来看,我觉得这里其实取决于面试官的两种心态取向。
A:这个人答不出的问题蛮多的,不太行。 B:这个人懂的东西蛮多的,还不错。 对于前者的话,在意的是给你 10 个问题你能回答出几个,那自然是浅显的问题更好。 对于后者的话,在意的是你最多能回答出多大范围的问题,那当他提出更深的问题的时候,其实潜意识中已经认为你能够回答出更浅显的问题了。 |
13
musi 2021-01-12 21:47:09 +08:00
不懂那些说些博客是浪费时间的人是怎么写博客的。。。
|
14
aaronlam 2021-01-12 22:03:46 +08:00
我觉得认真去写博客,的确是能一个让自己从头到尾弄懂一个问题的方式,也是能靠这种方式去梳理自己知识体系。虽然,后面会因为记忆曲线的问题而忘掉大部分细节。但是,如果回头再去看一下还是能迅速把细节轮廓建立起来。
|
15
szxczyc OP @zhuangzhuang1988 别的不说,写一下博客整理一下东西顺带写个思维导图,记得更牢固。这是真的
|
16
nightwitch 2021-01-12 22:38:50 +08:00 1
|
17
akakidz 2021-01-12 22:52:38 +08:00 via Android 3
想开一点...说不定面试官也是看了你的博客之后恶补了一下呢...
|
19
webshe11 2021-01-13 00:05:18 +08:00 via Android
跟博客没关系,就算没博客,扯到一些细节的点照样被抓住狂问
只要不是培训班三个月出来的,对面试的东西自己死磕过一些,多少就不怕面试官死磕了 |
20
gidot 2021-01-13 00:28:18 +08:00 1
面试官私下百度恶补,面试是内心暗笑,这个逼今天装的满分。
|
21
zsf520zsf 2021-01-13 07:55:40 +08:00 via iPhone
我就是怕面试官看到我博客要问太深的东西,就没在简历贴博客地址,然而我博文里面很多不是完全原创的,时间久了自己也忘了...
|
22
rodrick 2021-01-13 08:14:28 +08:00
面之前把博客里文章过一遍,觉得自己忘记的没搞懂的先隐藏了,面完再加回去[狗头]
|
23
Sunnic 2021-01-13 08:20:53 +08:00 via Android
说的越多越坏事
|
24
yzbythesea 2021-01-13 08:36:09 +08:00
i++ 非线程安全不是显而易见。。。所以你都没理解线程安全和原子操作,为什么还写在博客或者放在简历里。。。
|
25
treblex 2021-01-13 08:51:19 +08:00
|
26
wangyzj 2021-01-13 09:12:28 +08:00
面试官也未必懂
|
27
towry 2021-01-13 09:33:43 +08:00 2
面试管懂不懂不重要,就算人家不是很精通,但是这是场面试,你只要能把面试官
说服忽悠住就是你真的厉害。 比如面试官问你 js 中 getOwnProperty 这个方法是做啥的,你支支吾吾的说是做这个的,其实你不懂。 假如你说不记得 js 中有 getOwnProperty 这个方法,但是有 hasOwnProperty 这个方法,这个方法是...。 这说明你是真的懂 /精通。 一些人面试喜欢纠结面试官是不是比自己厉害,是不是啥都懂,人家是招人的,就是要招比自己厉害的人的。 还有一些人讨论问题不抓问题根源,喜欢纠结表面的东西,什么你也不懂了怎么怎么样。但是就是不去解决问题,去思考深层的东西。 写博客的好处是自己写的时候会去回忆思考,并且以后再看的时候可以加深印象理解。 所以,面试和你写不写博客没关系。 |
28
MENGKE 2021-01-13 09:45:35 +08:00
问到我不懂的,面试结束的时候我都是让面试官给我讲讲
|
29
NerverLibis 2021-01-13 09:56:31 +08:00
写博客是为了恰饭挂广告的啦,一句话让 HR 走
|
30
RedrumSherlock 2021-01-13 09:58:05 +08:00 via Android
虽然不怎么写博客,但是我觉得写博客最有用的是把自己理解的不全面的,浅薄,甚至错误的的给纠正补充,和自己用一个东西与教别人一个东西的区别一样
|
32
Flymachine 2021-01-13 10:41:27 +08:00 1
我更喜欢记笔记而不是写博客。剪藏功能是真的好使。
博客的问题是写这东东更多的是给别人看的,不自觉就会换思维方式,写起来太累了。 但写博客是个好习惯。 没必要对答不上来太紧张。我面试答不上来的题多了去了,也没影响到对方录用我。 i++的问题只要用过 C/C++写过多线程就会遇得到。C/C++没有多线程安全特性的库多了去了。就是 C++的 STL 库,比如 vector 和 string,都不是线程安全的。因为一旦考虑到多线程安全,就会损失运行效率。C/C++对此很斤斤计较,越是通用的库,越计较。于是你看到很多基于 C/C++的高级语言,比如说 PHP,会有两个版本——Non Thread Safe 和 Thread Safe,就是这种情况的体现。 至于楼上那些依赖于编译器优化的做法,老实说不太符合编程规范中对“可移植性”的要求。语言标准里未有规定,需要依赖于编译器实现的行为,属于“Undefined Behaviour” (未定义行为, 简称 UB)。这种“黑科技”不是不能用,因为确实可以节省开发精力,提升运行效率。但你必须要知道这种东西对“可移植性”的破坏,然后小心谨慎地去使用它们。一般来说,UB 能不用最好不用。 |
33
keakon 2021-01-13 10:48:50 +08:00
Python 没有 i++ 啊
|
34
Wincer 2021-01-13 11:27:33 +08:00
楼主说的是 `n += 1` 吧,n += 1 会被解释成先计算 n+1 的值保存在中间变量里面,然后再将这个变量重新赋值给 n,这个操作最少包含两个步骤,自然不是多线程安全的。
|
35
kingfalse 2021-01-13 11:59:05 +08:00
自建博客,月均一篇
|
36
guochao 2021-01-13 12:09:25 +08:00 1
具体的知识点线程安全这个属于八股了,最好理解一下代码执行都发生了什么。
博客这个,如果是作为摘抄本,是很没有必要的。经常能看到 CSDN 上面一天更新 20 篇博客,一看内容都是抄的那种,意义不大。实际上也非常厌恶这种,包括不作为的平台,因为这种垃圾生产者经常会把有价值的东西埋起来。有的博客写的非常随意,几行文字,没有任何具体的信息,也不大喜欢,因为信息总是有适用的场景的,A 解决的问题同样的方法给 B 不一定可以用。 博客的意义在于两点,对其他人来说是共享知识的重要的途径,对于自己来说是重新审视、重新理解学过的知识的非常好的机会。 我家里面我爹是做土木的,从小给我讲数学物理就是,先讲清楚 prerequisite,提出问题以后逐步引入新的方法或者概念,然后深入,最后留出来一个引子,让我自己朝着更深的方向做尝试。大学以后开始给别人讲东西,多多少少参照了我爹的想法,都是先一点点往回退到对方不会的地方,然后一点点引出来新的东西。再到后来写博客,虽然很多东西没有写出来,但是实际来说一篇博客从想到 idea 到写出来文章,读资料需要三天到一周写只需要一天两天,麻烦的可能从想到问题到写出来东西需要半年。文章的话一般就是问题、prequisite 、解决方法、总结的结构,作为技术博客一般也够了。 |
37
hitmanx 2021-01-13 12:12:49 +08:00 1
@Flymachine 话说“费曼学习法”的核心就是通过向一个一点不懂的人解释清楚一件事,来督促自己整理和消化学到的知识,其实本质上和写博客是一样的。
|
38
Austaras 2021-01-13 14:09:33 +08:00
说白了别写自己都没搞懂的东西装逼,很难吗?
|
39
zzzmh 2021-01-13 14:11:39 +08:00
我写的都可以被问。。。因为写的都特别浅显,不太写底层。。。
|
40
tankren 2021-01-13 14:12:09 +08:00
你那个是写的还是转的。。
|
41
a719031256 2021-01-13 15:15:37 +08:00 2
我写博客纯粹是当记事本用,东西多了记不住,只能写道博客里,需要时方便查找
|
42
sheen 2021-01-13 15:18:16 +08:00
@zhuangzhuang1988 我感觉写博客就是把自己的一些积累和理解总结一下,强化记忆,当然你要是说那种自己没用过,网上随便找的文章拼凑的确实没啥用
|
43
samin 2021-01-13 17:24:53 +08:00
|
44
yamasa 2021-01-13 17:30:19 +08:00
不明白 i++线程不安全说明你 CS 基础需要恶补,真的;经不住往底层问的经验,不要在面试的时候提。面试就是这样,你越写精通什么,越要有心理准备,不要打肿脸充胖子,不会就是不会。
|
45
ruanimal 2021-01-13 17:33:15 +08:00
python 是线程安全的啊
|
46
Desiree 2021-01-13 17:42:14 +08:00
博客只是写给自己看的,本来给别人看就是附加分,说没用的,也在理,记录知识,博客只是一种方式,并不是结果。
|
48
ruanimal 2021-01-13 18:25:54 +08:00
|
49
keepeye 2021-01-13 18:27:55 +08:00
这应该涉及到汇编指令非原子操作
|
50
lewis89 2021-01-13 18:50:13 +08:00
@p2pCoder #10 不算 8 股文吧,你有兴趣可以研究我 这个博文,保障 可见性 还是有很多需要知晓 并理解的地方
https://www.cnblogs.com/jon-winters/p/14237940.html |
51
Flymachine 2021-01-14 09:31:49 +08:00
@hitmanx 啊,没错。但这么搞博客太累人了,而自己记笔记只要自己能看得懂就行。相较于博客,我更喜欢在公司内部开分享会,准备周期更长,更系统,还有真人提问,查漏补缺的效果更好。就是周期太长...
|