V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
geeti
V2EX  ›  程序员

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

  •  
  •   geeti · 2015-04-05 01:49:52 +08:00 · 15755 次点击
    这是一个创建于 3550 天前的主题,其中的信息可能已经有所发展或是发生改变。
    面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 这样的问题,就不是一般网络技术人员能回答的了。
    mringg
        17
    mringg  
       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」∠)_
    li24361
        26
    li24361  
       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的进程之间是如何通讯的? 请把红黑树写出来吧, 楼主, 不会, 去查吧.
    belin520
        51
    belin520  
       2015-04-05 12:36:03 +08:00 via Android
    面试是靠缘分的。
    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
        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天里换过公司么?

    https://www.v2ex.com/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   ·   实用小工具   ·   3588 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 04:51 · PVG 12:51 · LAX 20:51 · JFK 23:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.