面试感想,当程序员至少应该懂点网络知识 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
geeti
V2EX    程序员

面试感想,当程序员至少应该懂点网络知识

  •  
  •   geeti 2015-04-05 01:49:52 +08:00 16571 次点击
    这是一个创建于 3848 天前的主题,其中的信息可能已经有所发展或是发生改变。
    面new grad,问了他几个比较基础的网络知识,居然都不知道。
    1. ARP原理,包括arp reply, gratuitous arp
    2. TCP如何作flow control
    3. Demo一个UDP Hole Punching的例子

    感想,不了解网络的程序员不是好码农
    第 1 条附言    2015-04-05 08:29:28 +08:00
    还真不是只问这个。这只是标准六轮面试的一部分
    117 条回复    2015-12-12 17:32:50 +08:00
    1  2  
    virusdefender
        1
    virusdefender  
       2015-04-05 02:00:55 +08:00
    上面的问题一个都不会了,现在还比较熟悉的就只有三次握手和http协议了==
    sumhat
        2
    sumhat  
       2015-04-05 02:01:48 +08:00 via iPhone
    工作了七年的码农对上述问题依然不知
    typcn
        3
    typcn  
       2015-04-05 02:10:32 +08:00   2
    程序员也分很多种啊。。。
    cosmosz
        4
    cosmosz  
       2015-04-05 02:17:40 +08:00
    面试什么职位要这些知识?
    jiang42
        5
    jiang42  
       2015-04-05 02:31:02 +08:00
    程序员分很多种 +1.。。。
    wind3110991
        6
    wind3110991  
       2015-04-05 02:35:32 +08:00
    第一个ARP原理可以简单回答下嘛~
    第二个不应该不知道啊 = =这个是关于TCP的缓存机制。 你dumptcp下,会看到一个win 字段数据,这就是窗口,可以告诉对方我现在缓存区的大小那么大,你不要发送超过这个大小的数据包过来
    第三个= =不知道也正常吧,穿透这个概念教材里也少讲到,感觉最多和面试官吹下NAT = =
    dreamtrail
        7
    dreamtrail  
       2015-04-05 03:18:19 +08:00
    这种东西要用的时候查一下就行了嘛
    Andiry
        8
    Andiry  
       2015-04-05 03:32:26 +08:00
    这有啥意义?不是每个程序员都会和网络打交道
    zerh925
        9
    zerh925  
       2015-04-05 04:03:22 +08:00 via iPhone
    不赞同楼主的想法
    ffffwh
        10
    ffffwh  
       2015-04-05 04:31:26 +08:00
    你问的没什么意义

    我看应该问问路由算法
    Septembers
        11
    Septembers  
       2015-04-05 05:10:52 +08:00 via Android
    起码知道OSI模型和各层主要协议名就足够了 不奢望
    helloworld00
        12
    helloworld00  
       2015-04-05 06:02:20 +08:00
    2. TCP如何作flow control


    用token的release速率来控制flow的速度。。。?
    lijingyu68
        13
    lijingyu68  
       2015-04-05 07:00:51 +08:00 via iPhone
    前端表示每次遇到网络问题都让后端先看看~自己查资料的速度显然不如问专门做网络相关的人来得快,何必浪费时间
    leopard080264
        14
    leopard080264  
       2015-04-05 07:44:18 +08:00 via iPad
    new grad指本科生还是硕士生?
    zts1993
        15
    zts1993  
       2015-04-05 08:04:10 +08:00 via Android
    不懂楼主要招做什么的程序员
    invite
        16
    invite  
       2015-04-05 08:17:46 +08:00
    2. TCP如何作flow control 这样的问题,就不是一般网络技术人员能回答的了。
    ming2050
        17
    ming2050  
       2015-04-05 08:21:46 +08:00 via Android
    你改招网络工程师得了
    geeti
        18
    geeti  
    OP
       2015-04-05 08:26:10 +08:00
    @helloworld00 sliding window啊,tcp的header里有一个byte是记录这个的
    geeti
        19
    geeti  
    OP
       2015-04-05 08:27:17 +08:00
    @cosmosz OS kernel developer
    billcamel
        20
    billcamel  
       2015-04-05 08:47:40 +08:00
    最讨厌这种拿着书本上的东西面试的人了。面试是为了考察一个人得聪明程度,解决问题的能力。
    ashong
        21
    ashong  
       2015-04-05 09:02:56 +08:00 via iPhone   1
    只能说lz恰巧懂得这些,就认为别人也该懂。
    程序员重要的是思维逻辑,和查找资料的能力以及学习能力,需要的知识都可以随时查资料掌握
    lanbing
        22
    lanbing  
       2015-04-05 09:07:40 +08:00
    你说的我不懂。。但是我认为别人懂的你也不一定就懂。。。每个人都有自己的领域。。
    taozhi8833998
        23
    taozhi8833998  
       2015-04-05 09:22:43 +08:00
    硕士生表示知道的也不是很清楚
    DRcoding
        24
    DRcoding  
       2015-04-05 09:23:08 +08:00
    很讨厌 中文 夹着一堆英文,能好好写中文?
    RIcter
        25
    RIcter  
       2015-04-05 09:35:05 +08:00   6
    1. 简述一下 ARP 攻击的原理;
    2. 简述常见 WAF 的工作原理以及 bypass 技巧;
    3. 为什么不推荐自己创造加密算法(不是实现),如:md5(bcrypt(xxx))

    感想,不了解网络安全、密码学基础知识的人不是好码农_(:3」∠)_
    north521
        26
    north521  
       2015-04-05 09:37:45 +08:00
    我觉得吧,好的面试官一般都是根据职位,先问下基本知识,即能不能创造产值,然后会聊聊项目,看看经验,接着引导讨论下研究的东西,看看面试者的广度和深度,这样就能判断基本水平了
    sophymax
        27
    sophymax  
       2015-04-05 09:40:25 +08:00 via iPad
    @RIcter 为什么不推荐自己创造加密算法啊
    juicy
        28
    juicy  
       2015-04-05 09:47:19 +08:00   2
    总结来说,面试就是找有缘人
    RIcter
        29
    RIcter  
       2015-04-05 09:55:41 +08:00
    thesunfei
        30
    thesunfei  
       2015-04-05 09:58:44 +08:00
    知道这个有啥用?
    est
        31
    est  
       2015-04-05 10:01:52 +08:00 via Android
    第二个题直接说 这得看你用的什么流控算法 喷回去
    Septembers
        32
    Septembers  
       2015-04-05 10:12:32 +08:00 via Android
    @RIcter 不得当的处理会降低密码学安全性
    wtbhk
        33
    wtbhk  
       2015-04-05 10:21:32 +08:00
    @DRcoding 那你借我一下你的大容量移动闪存?
    geeti
        34
    geeti  
    OP
       2015-04-05 10:30:22 +08:00
    @DRcoding 除了“Demo”可以用中文,其他的英文求教怎么说成别人可以懂得中文?
    geeti
        35
    geeti  
    OP
       2015-04-05 10:32:35 +08:00
    @billcamel 聪明人和优秀的人是有交集的两个不同集合。有很多聪明人实际碌碌无为,而很多优秀的人也不是很聪明。
    面试当然是要既考虑到基础(知识广度,深度),又考虑到创造性(算法,方案解决)。
    geeti
        36
    geeti  
    OP
       2015-04-05 10:33:46 +08:00
    @mringg 网络工程师不懂操作系统啊。职位是OS kernel dev.
    geeti
        37
    geeti  
    OP
       2015-04-05 10:37:20 +08:00
    @est TCP flow control是协议的一部分,sliding window。并不是说如何控制传输速度
    geeti
        38
    geeti  
    OP
       2015-04-05 10:38:22 +08:00
    @RIcter 求教第三个,为啥不推荐?
    Biwood
        39
    Biwood  
       2015-04-05 10:40:57 +08:00
    对于做网络安全的且技术偏底层的码农来说,这些知识还是比较重要的,对于一般的Web程序员,这些能算是加分项吧
    thedarkside
        40
    thedarkside  
       2015-04-05 10:44:01 +08:00
    当个程序员真累~~楼主开始可没说招聘的职位是OS kernel dev~~~
    xxer
        41
    xxer  
       2015-04-05 10:59:05 +08:00 via Android
    专精一方面即可
    soba
        42
    soba  
       2015-04-05 11:06:43 +08:00
    很多人活着就是为了把简单事情搞复杂把别人搞晕

    一辈子搞不出个正经东西
    binux
        43
    binux  
       2015-04-05 11:09:53 +08:00   3
    @RIcter 3、你这个例子不是加密算法啊。。


    @geeti
    1、例如『创造性』串接使用 hash 算法,其安全性取决于最弱的那个。
    2、加密算法安全性,不能依赖算法安全,而是密钥安全。
    3、自己设计的加密算法,没有经过审计,很容易犯例如字母替换这样其实很容易破解的错误。

    我不做安全的都知道,是不是可以说当程序员至少应该懂点计算机安全知识?
    RIcter
        44
    RIcter  
       2015-04-05 11:29:48 +08:00
    @binux prpr 菊苣>~<
    pinepara
        45
    pinepara  
       2015-04-05 11:49:01 +08:00
    全不记得,so what?
    lincanbin
        46
    lincanbin  
       2015-04-05 11:53:07 +08:00
    想问一下楼主:你实际工作中用到过以上知识吗?
    你问这些,在我看来不如问:如何利用HTTP协议的Header作完整性校验这个实用性可能还强一些。
    lguan
        47
    lguan  
       2015-04-05 12:03:34 +08:00
    不提职位就直接得到这种最后的这种结论,也太武断了点,唉,不是一个好码农的路过
    goophy
        48
    goophy  
       2015-04-05 12:17:46 +08:00
    额,六轮面试 -_-!
    cloudqq
        49
    cloudqq  
       2015-04-05 12:23:19 +08:00
    出题的人很武断,只可能找到自己志趣相投的。
    xjliao
        50
    xjliao  
       2015-04-05 12:23:40 +08:00
    问的有意义嘛?你确定你招的是程序员? 还是想装装逼用的?我只想说呵呵了, 请问楼主Linux的进程之间是如何通讯的? 请把红黑树写出来吧, 楼主, 不会, 去查吧.
    icanfork
        51
    icanfork  
       2015-04-05 12:36:03 +08:00 via Androd
    面试是靠缘分的。
    jyootai
        52
    jyootai  
       2015-04-05 13:01:45 +08:00
    我想LZ是面试网络工程师,祝LZ好运
    mhycy
        53
    mhycy  
       2015-04-05 13:04:55 +08:00   2
    @geeti
    第一个 ARP应答,无故ARP
    第二个 TCP流控
    第三个 UDP穿透

    都能直译出来的东西有必要写英文么?
    除了gratuitous arp都是有标准翻译的东西。。。

    其中第二条,依据不同的算法控制有不同的控制依据,发包模式。
    不指出面试者怎么知道你问的是啥?简简单单回答一个滑动窗口就能过关?
    那个窗口基于什么控制的需要回答么?

    第三个你让人家写个DEMO,上机么?给开发环境么?给远端服务器做调试环境么?
    要是纸上写你打算给多少草稿纸?还是说简述原理就行了?

    即便是内核工程师,不是网络方向的根本搞不到这块吧?
    你说程序员应该懂网络基础,是不是太武断了些?
    另外你这些也不是基础啊。。。
    soba
        54
    soba  
       2015-04-05 13:05:22 +08:00   4
    lz懂茴字八种写法吗
    ianisme
        55
    ianisme  
       2015-04-05 13:15:50 +08:00
    其实不用问得太深,问问他经常逛的论坛就行了
    xmbaozi
        56
    xmbaozi  
       2015-04-05 13:34:06 +08:00 via Android
    只知道滑动窗口机制。
    明明很很好的中文翻译,为啥要夹带英文
    0987363
        57
    0987363  
       2015-04-05 13:51:07 +08:00
    另我想起了网上流传的一个微信消息。。 一女海龟高管喷她下属。。。。
    damngood
        58
    damngood  
       2015-04-05 13:54:44 +08:00
    对于一般程序员来说, 你说的几个问题大概的东西应该还是要了解.
    但是你说要熟悉到具体一来一回的流程, 甚至是对应内核里面的数据结构这些, 对于不是专业做网络这块的可能要求有点过高了.

    现场来一个 hole punching demo 这种没必要吧. 能说说原理就好了吧.
    lilydjwg
        59
    lilydjwg  
       2015-04-05 14:14:58 +08:00
    哇擦,这么简单的问题!!
    kaneg
        60
    kaneg  
       2015-04-05 14:43:23 +08:00
    这几个问题要看楼主期望答案有多全面和深入,如果只是要回答个大概,这个要求还是可以的。如果需要详细介绍里面的原理,估计真的是专门做这方面研究的人才行。
    donkeylucky
        61
    donkeylucky  
       2015-04-05 15:21:54 +08:00
    @soba 有点这个味道
    Kilerd
        62
    Kilerd  
       2015-04-05 15:39:24 +08:00
    码了好几年,三个问题都答不出来,术业有专攻,这很正常吧。

    除非是很NB的全栈咯
    Actrace
        63
    Actrace  
       2015-04-05 15:40:13 +08:00
    面试就是找有缘人~这点没错的。
    mthli
        64
    mthli  
       2015-04-05 15:59:44 +08:00 via Android
    不知道...
    picasso250
        65
    picasso250  
       2015-04-05 16:02:06 +08:00
    楼主是第一次面别人吗。。。。
    shuiniushushu
        66
    shuiniushushu  
       2015-04-05 16:20:26 +08:00
    只懂http协议,其他的都不懂。但是要用到可以马上学。
    SmiteChow
        67
    SmiteChow  
       2015-04-05 17:19:36 +08:00
    没必要懂这么多,知道网络分层,基本的传输层和应用层协议就可以了。
    sallowdish
        68
    sallowdish  
       2015-04-05 17:36:16 +08:00
    @mhycy 接受教育不一样用的terminology自然不同,你翻译了我如果没看lz的能一一对应,还真不知道你在说的是什么。。至于是不是作为kerne dev需不需要知道先不论,但个人觉得算是基础,本科还没的前两个都是秒答,networking的入门基础课都讲过。。
    rocaltair
        69
    rocaltair  
       2015-04-05 17:40:30 +08:00
    你去阿里网易随机找20个程序员来问,我可以保证2/3的人答不出来。我觉得面试这种事吧
    1 对到口味了。你需要的技术他都有,善。要不给你找个核物理的博士,你也得哭。
    2 聪明。这点很重要,我可以认为他是一张白纸,如果他有较强的分析能力、理解能力以及学习能力,我觉得他会不会什么我不是很在意,至少如果我是一家大公司,我不会在意。
    3 学习态度以及工作态度。排除牛逼与否,这点很关键

    第一点,不是什么时候都能碰上的,只能说更接近而已。所以很多时候我去面试别人,更多的是看第二点。至于第三点,再傻,肯努力肯学习总能教出来的。
    wecan
        70
    wecan  
       2015-04-05 19:28:43 +08:00 via Android
    楼主你这是找喷啊
    crazyxin1988
        71
    crazyxin1988  
       2015-04-05 19:31:08 +08:00
    @rocaltair 不能赞更多
    老是挖掘应聘者的问题,LZ是不是也该思考一下自己的招聘思维也是否有问题
    DennyDai
        72
    DennyDai  
       2015-04-05 19:59:37 +08:00
    如果你非要这么做,招聘请加上要求CCNA
    flynngao
        73
    flynngao  
       2015-04-05 20:03:30 +08:00
    现实工作需要两种能力我认为,构建的能力和分析解决问题的能力,然后知识是服务这两种能力的,知识是可以快速学习的,但是能力,不是
    kn007/td>
        74
    kn007  
       2015-04-05 20:11:53 +08:00
    @typcn
    @RIcter
    @mhycy
    这三样都不懂的飘过。。。
    zeayes
        75
    zeayes  
       2015-04-05 21:32:25 +08:00
    六轮面试,神马公司,这么拽
    gamexg
        76
    gamexg  
       2015-04-05 21:58:51 +08:00
    Gratuitous ARP 现查的,其他的只有大体印象了。
    billwang
        77
    billwang  
       2015-04-05 22:38:50 +08:00
    感觉楼主问的这些网络知识不是懂点的层面了。
    e1eph4nt
        78
    e1eph4nt  
       2015-04-05 23:10:52 +08:00   1
    同意楼主,在这个跟贴里深深感觉到了拿无知当自豪的氛围。。。
    des
        79
    des  
       2015-04-05 23:52:07 +08:00
    看成“当程序员应该少懂点网络知识”
    liruqi
        80
    liruqi  
       2015-04-06 00:04:55 +08:00
    很好奇你们是哪家公司。不方便说,说多少人也行。
    yangff
        81
    yangff  
       2015-04-06 00:08:34 +08:00 via Android
    sigh
    jedihy
        82
    jedihy  
       2015-04-06 00:21:41 +08:00
    @geeti TCP Header里面的window是通告窗口,advertise window,不是sliding window。这个字段是16位的=2个byte。
    如果没有中间公网主机,UDP穿墙基本穿不了。
    这些东西对于OS kernel dev 确实是需要知道的。
    Andiry
        83
    Andiry  
       2015-04-06 00:30:33 +08:00
    @sallowdish 本科都没毕业当然是秒答了,等你工作个几年再来回答试试。
    sinxccc
        84
    sinxccc  
       2015-04-06 00:41:24 +08:00
    常年工作在二层三层的路由器码工表示问题 2 和 3 都得先想想才能回答,而且把握也不是十足(_)
    geeti
        85
    geeti  
    OP
       2015-04-06 01:28:13 +08:00
    @liruqi 在mountain view,非google.
    geeti
        86
    geeti  
    OP
       2015-04-06 01:34:26 +08:00
    @damngood 呃,demo就是大致说一下机制的意思。。。你理解成了implement
    geeti
        87
    geeti  
    OP
       2015-04-06 01:38:46 +08:00   1
    @e1eph4nt 国内气氛如此。浮躁,功利。
    geeti
        88
    geeti  
    OP
       2015-04-06 01:47:11 +08:00
    @zeayes 招new grad都这样。两到四轮电话面试,6-8轮onsite面试
    jarlyyn
        89
    jarlyyn  
       2015-04-06 02:47:04 +08:00
    楼主62天里换过公司么?

    t/167461#reply7

    感觉对面试者的要求程度和对自己的偏差程度很大啊。
    JackWindows
        90
    JackWindows  
       2015-04-06 03:07:23 +08:00 via iPad
    我觉得都挺简单啊,我本科刚毕业,数学系的,这些知识都是平时看着玩学来的。我大一的时候学过ccna,但是现在证书已经过期了,而且我认为ccna学到的内容根本不足以回答这三个问题;ccna是以配思科交换机为主的,真正的计算机网络还是要靠自己学。
    1. arp原理就是第一次找人的时候喊一句人名,然后那个人就跑出来应答一下嘛
    2. tcp流控就是靠window机制嘛,window决定单次连续传输的数据量,一开始挺小,然后指数增加,遇到丢包之后减半,最后进入线性增长模式。当然这是标准的拥塞控制,还有其他各种变种。
    3. udp协议的nat打洞很简单啊,预测下nat src port增长规则就好了啊,比如iptables的默认nat规则是下一条流映射到的src port加1,知道这个之后让另一方直接往预测的端口发包就可以了。当然这个还跟不同的nat实现有关,nat根据实现还分很多种模式,最难打洞的应该算是symmetry的吧。
    q397064399
        91
    q397064399  
       2015-04-06 08:07:19 +08:00 via Android   1
    1.arp属于二层协议,不涉及相关网络开发,二层根本无需了解,osi还分了7层,实际上只有4层协议,给应用程序程序员用的就是tcp udp,你招个javaee 然后说 我们要你精通 tcp/ip协议,这tm是扯犊子
    2.tcp window 大小 不学网络工程相关的基本上不知道
    3.nat穿透 不同的类型nat完全不一样
    xiparos
        92
    xiparos  
       2015-04-06 08:11:24 +08:00
    程序员也分很多种 +1
    geeti
        93
    geeti  
    OP
       2015-04-06 08:51:40 +08:00
    @jarlyyn 真服了。有什么关系么?题又不是我出的,只是我随机从题库指定给我的category里挑。我觉得挺基础,但面试的人却完全不懂,感慨一下咋了?公司所有员工(入职1年以上)每天半小时属于面试时间。
    geeti
        94
    geeti  
    OP
       2015-04-06 08:56:05 +08:00
    @jarlyyn 另外我那个帖子里是个很傻逼的问题么?会就会,不会就问,怪里怪气的有意思?
    coolcfan
        95
    coolcfan  
       2015-04-06 09:08:25 +08:00
    一直看到 OS Kernel Dev 才明白……
    建议补充一下,把职位写上……
    fgwww
        96
    fgwww  
       2015-04-06 09:13:16 +08:00 via iPad
    不会面试就别面试了。就跟去问java程序员c++模版差不多的感觉
    deepreader
        97
    deepreader  
       2015-04-06 10:28:55 +08:00
    作为一个new grad,我就是来长下见识而已。
    fullstack0xyz
        98
    fullstack0xyz  
       2015-04-06 11:22:54 +08:00
    做底层的对网络不应该很熟悉么

    非科班的野生web程序员,大概翻过(没看完)TCP/IP详解卷一,自顶向下计算机网络,第三个问题答不上,前两个还是能扯到点上。

    另外,夹杂点专业术语名词也没啥问题吧,难道问你http协议的时候说,来给我讲讲“超文本传输协议”?
    Andiry
        99
    Andiry  
       2015-04-06 11:38:33 +08:00
    OS kernel dev 应该了解的知识应该是内存管理,同步,调度,中断,驱动框架,文件系统,DMA,MMU/IOMMU这些吧。这么多方面的内容,随便问点什么也比什么http协议有用。
    phoeagon
        100
    phoeagon  
       2015-04-06 11:43:26 +08:00 via Android
    @geeti 滑动窗口快速启动aimd
    1  2  
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5526 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 48ms UTC 03:37 PVG 11:37 LAX 20:37 JFK 23:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86