V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
szxczyc
V2EX  ›  Python

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

  •  
  •   szxczyc · 2021-01-12 20:37:26 +08:00 · 7315 次点击
    这是一个创建于 1171 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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


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

    不怪写博客,写的时候写的什么东西要自己去验证。
    akakidz
        17
    akakidz  
       2021-01-12 22:52:38 +08:00 via Android   ❤️ 3
    想开一点...说不定面试官也是看了你的博客之后恶补了一下呢...
    szxczyc
        18
    szxczyc  
    OP
       2021-01-12 23:06:23 +08:00
    @akakidz 想法很危险哈哈哈哈哈哈
    webshe11
        19
    webshe11  
       2021-01-13 00:05:18 +08:00 via Android
    跟博客没关系,就算没博客,扯到一些细节的点照样被抓住狂问
    只要不是培训班三个月出来的,对面试的东西自己死磕过一些,多少就不怕面试官死磕了
    gidot
        20
    gidot  
       2021-01-13 00:28:18 +08:00   ❤️ 1
    面试官私下百度恶补,面试是内心暗笑,这个逼今天装的满分。
    zsf520zsf
        21
    zsf520zsf  
       2021-01-13 07:55:40 +08:00 via iPhone
    我就是怕面试官看到我博客要问太深的东西,就没在简历贴博客地址,然而我博文里面很多不是完全原创的,时间久了自己也忘了...
    rodrick
        22
    rodrick  
       2021-01-13 08:14:28 +08:00
    面之前把博客里文章过一遍,觉得自己忘记的没搞懂的先隐藏了,面完再加回去[狗头]
    Sunnic
        23
    Sunnic  
       2021-01-13 08:20:53 +08:00 via Android
    说的越多越坏事
    yzbythesea
        24
    yzbythesea  
       2021-01-13 08:36:09 +08:00
    i++ 非线程安全不是显而易见。。。所以你都没理解线程安全和原子操作,为什么还写在博客或者放在简历里。。。
    treblex
        25
    treblex  
       2021-01-13 08:51:19 +08:00
    我会在瞎学其他语言的时候 杂七杂八的写一篇 xx 入门,以免下次又要重新入门
    wangyzj
        26
    wangyzj  
       2021-01-13 09:12:28 +08:00
    面试官也未必懂
    towry
        27
    towry  
       2021-01-13 09:33:43 +08:00   ❤️ 2
    面试管懂不懂不重要,就算人家不是很精通,但是这是场面试,你只要能把面试官
    说服忽悠住就是你真的厉害。

    比如面试官问你 js 中 getOwnProperty 这个方法是做啥的,你支支吾吾的说是做这个的,其实你不懂。
    假如你说不记得 js 中有 getOwnProperty 这个方法,但是有 hasOwnProperty 这个方法,这个方法是...。
    这说明你是真的懂 /精通。

    一些人面试喜欢纠结面试官是不是比自己厉害,是不是啥都懂,人家是招人的,就是要招比自己厉害的人的。
    还有一些人讨论问题不抓问题根源,喜欢纠结表面的东西,什么你也不懂了怎么怎么样。但是就是不去解决问题,去思考深层的东西。

    写博客的好处是自己写的时候会去回忆思考,并且以后再看的时候可以加深印象理解。

    所以,面试和你写不写博客没关系。
    MENGKE
        28
    MENGKE  
       2021-01-13 09:45:35 +08:00
    问到我不懂的,面试结束的时候我都是让面试官给我讲讲
    NerverLibis
        29
    NerverLibis  
       2021-01-13 09:56:31 +08:00
    写博客是为了恰饭挂广告的啦,一句话让 HR 走
    RedrumSherlock
        30
    RedrumSherlock  
       2021-01-13 09:58:05 +08:00 via Android
    虽然不怎么写博客,但是我觉得写博客最有用的是把自己理解的不全面的,浅薄,甚至错误的的给纠正补充,和自己用一个东西与教别人一个东西的区别一样
    NexTooo
        31
    NexTooo  
       2021-01-13 10:00:15 +08:00
    @aaronlam 提升自我+1,虽然我没写博客,但是我自己整理了知识点做成笔记也是一个效果
    Flymachine
        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 能不用最好不用。
    keakon
        33
    keakon  
       2021-01-13 10:48:50 +08:00
    Python 没有 i++ 啊
    Wincer
        34
    Wincer  
       2021-01-13 11:27:33 +08:00
    楼主说的是 `n += 1` 吧,n += 1 会被解释成先计算 n+1 的值保存在中间变量里面,然后再将这个变量重新赋值给 n,这个操作最少包含两个步骤,自然不是多线程安全的。
    kingfalse
        35
    kingfalse  
       2021-01-13 11:59:05 +08:00
    自建博客,月均一篇
    guochao
        36
    guochao  
       2021-01-13 12:09:25 +08:00   ❤️ 1
    具体的知识点线程安全这个属于八股了,最好理解一下代码执行都发生了什么。

    博客这个,如果是作为摘抄本,是很没有必要的。经常能看到 CSDN 上面一天更新 20 篇博客,一看内容都是抄的那种,意义不大。实际上也非常厌恶这种,包括不作为的平台,因为这种垃圾生产者经常会把有价值的东西埋起来。有的博客写的非常随意,几行文字,没有任何具体的信息,也不大喜欢,因为信息总是有适用的场景的,A 解决的问题同样的方法给 B 不一定可以用。

    博客的意义在于两点,对其他人来说是共享知识的重要的途径,对于自己来说是重新审视、重新理解学过的知识的非常好的机会。

    我家里面我爹是做土木的,从小给我讲数学物理就是,先讲清楚 prerequisite,提出问题以后逐步引入新的方法或者概念,然后深入,最后留出来一个引子,让我自己朝着更深的方向做尝试。大学以后开始给别人讲东西,多多少少参照了我爹的想法,都是先一点点往回退到对方不会的地方,然后一点点引出来新的东西。再到后来写博客,虽然很多东西没有写出来,但是实际来说一篇博客从想到 idea 到写出来文章,读资料需要三天到一周写只需要一天两天,麻烦的可能从想到问题到写出来东西需要半年。文章的话一般就是问题、prequisite 、解决方法、总结的结构,作为技术博客一般也够了。
    hitmanx
        37
    hitmanx  
       2021-01-13 12:12:49 +08:00   ❤️ 1
    @Flymachine 话说“费曼学习法”的核心就是通过向一个一点不懂的人解释清楚一件事,来督促自己整理和消化学到的知识,其实本质上和写博客是一样的。
    Austaras
        38
    Austaras  
       2021-01-13 14:09:33 +08:00
    说白了别写自己都没搞懂的东西装逼,很难吗?
    zzzmh
        39
    zzzmh  
       2021-01-13 14:11:39 +08:00
    我写的都可以被问。。。因为写的都特别浅显,不太写底层。。。
    tankren
        40
    tankren  
       2021-01-13 14:12:09 +08:00
    你那个是写的还是转的。。
    a719031256
        41
    a719031256  
       2021-01-13 15:15:37 +08:00   ❤️ 2
    我写博客纯粹是当记事本用,东西多了记不住,只能写道博客里,需要时方便查找
    sheen
        42
    sheen  
       2021-01-13 15:18:16 +08:00
    @zhuangzhuang1988 我感觉写博客就是把自己的一些积累和理解总结一下,强化记忆,当然你要是说那种自己没用过,网上随便找的文章拼凑的确实没啥用
    samin
        43
    samin  
       2021-01-13 17:24:53 +08:00
    @zhuangzhuang1988

    这跟跑步是一样的 是长期才可以看出效果的东西 你写博客坚持了多久 ?
    yamasa
        44
    yamasa  
       2021-01-13 17:30:19 +08:00
    不明白 i++线程不安全说明你 CS 基础需要恶补,真的;经不住往底层问的经验,不要在面试的时候提。面试就是这样,你越写精通什么,越要有心理准备,不要打肿脸充胖子,不会就是不会。
    ruanimal
        45
    ruanimal  
       2021-01-13 17:33:15 +08:00
    python 是线程安全的啊
    Desiree
        46
    Desiree  
       2021-01-13 17:42:14 +08:00
    博客只是写给自己看的,本来给别人看就是附加分,说没用的,也在理,记录知识,博客只是一种方式,并不是结果。
    lpts007
        47
    lpts007  
       2021-01-13 17:59:30 +08:00 via Android
    @ruanimal 请问什么意思,从什么角度理解?
    ruanimal
        48
    ruanimal  
       2021-01-13 18:25:54 +08:00
    keepeye
        49
    keepeye  
       2021-01-13 18:27:55 +08:00
    这应该涉及到汇编指令非原子操作
    lewis89
        50
    lewis89  
       2021-01-13 18:50:13 +08:00
    @p2pCoder #10 不算 8 股文吧,你有兴趣可以研究我 这个博文,保障 可见性 还是有很多需要知晓 并理解的地方
    https://www.cnblogs.com/jon-winters/p/14237940.html
    Flymachine
        51
    Flymachine  
       2021-01-14 09:31:49 +08:00
    @hitmanx 啊,没错。但这么搞博客太累人了,而自己记笔记只要自己能看得懂就行。相较于博客,我更喜欢在公司内部开分享会,准备周期更长,更系统,还有真人提问,查漏补缺的效果更好。就是周期太长...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5298 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 08:17 · PVG 16:17 · LAX 01:17 · JFK 04:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.