• 请不要在回答技术问题时复制粘贴 AI 生成的内容
geeti
V2EX  ›  程序员

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

  •  
  •   geeti · Apr 5, 2015 · 18540 views
    This topic created in 4232 days ago, the information mentioned may be changed or developed.
    面new grad,问了他几个比较基础的网络知识,居然都不知道。
    1. ARP原理,包括arp reply, gratuitous arp
    2. TCP如何作flow control
    3. Demo一个UDP Hole Punching的例子

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

    我看应该问问路由算法
    Septembers
    Septembers
    Apr 5, 2015 via Android
    11
    起码知道OSI模型和各层主要协议名就足够了 不奢望
    helloworld00
    helloworld00
    Apr 5, 2015
    12
    2. TCP如何作flow control


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

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

    一辈子搞不出个正经东西
    binux
    binux
    Apr 5, 2015❤️3
    43
    @RIcter 3、你这个例子不是加密算法啊。。


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

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

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

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

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

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

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

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

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

    https://www.v2ex.com/t/167461#reply7

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

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

    另外,夹杂点专业术语名词也没啥问题吧,难道问你http协议的时候说,来给我讲讲“超文本传输协议”?
    Andiry
    Andiry
    Apr 6, 2015
    99
    OS kernel dev 应该了解的知识应该是内存管理,同步,调度,中断,驱动框架,文件系统,DMA,MMU/IOMMU这些吧。这么多方面的内容,随便问点什么也比什么http协议有用。
    phoeagon
    phoeagon
    Apr 6, 2015 via Android
    100
    @geeti 滑动窗口快速启动aimd
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5269 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 307ms · UTC 02:19 · PVG 10:19 · LAX 18:19 · JFK 21:19
    ♥ Do have faith in what you're doing.