发简历给老师发握手该怎么回复之后,老师发握手该怎么回复回复了[握手][握手][握手],这到底是收还是不收我

符合USB总线数据通信要求的通信协議

1.易用(热插拔、即插即用)

2、分类(按传输速率)

2、有层次性的星型结构

三、USB2.0总线逻辑拓扑结构

四、USB系统逻辑结构

1、差分信号与NRZI编码





      1)、端点是可惟一识别的USB设备的一部分一系列独立的端点构成了USB逻辑设备

      2)、每个逻辑设备有一个被主机分配的惟一地址;每个端点在设備内部有一个设备给定的端点号(端点方向+ 端点号)

      3)、每个端点都只能支持数据流入或流出(注意不是每个端点号)

      4)、每个端点在被設置前处于未知状态,不可被主机访问(端点0除外)

      4)、总线解析包格式的时候不会等待EOP而是必须在包的格式要求的最后一个字段后紧接EOP,否则该包即使格式满足要求也会被放弃

注:此后提到“包”这个概念的时候将不再包括SYNC和EOP

   1)、以标记包开始完成一个单一动作的包嘚集合

   2)、USB上的数据传输由各种类型的事务组成

   3)、所有的事务均由主机发起,设备只能应答

   4)、事务通常由请求包开始以握手包结束,但同步传输中没有握手包

   5)、根据请求包类型事务也被分为帧、建立、IN、OUT四种大类型

   6)、在高速设备中还有PING事务(只包含一个PING包和一個握手包),在高速总线上使用低速传输时一个事务可以被SPLIT包拆分

   2)、USB总线连接建立开始即由主机产生帧事务

   4)、一个SOF包中含有一个从USB總线连接建立起顺序递增的帧号

   5)、SOF事务不产生任何数据流传输和任何返回

   1)、一个建立事务由一个SETUP请求包,一个八字节长度DATA0包和一个握掱包组成

   1)、一个IN事务从IN请求包开始表明主机要求设备产生数据

   2)、如果要求的IN事务中的数据包不止一个,则必须以DATA0包和DATA1包交替(奇校驗位和偶校验位交替)

   3)、IN事务可以没有握手包若是有握手,以NAK、或STALL握手则提前结束事务

   1)、一个OUT事务从OUT请求包开始,表明主机将要產生数据

   2)、如果要求的OUT事务中的数据包不止一个则必须以DATA0包和DATA1包交替(奇校验位和偶校验位交替)

   3)、OUT事务可以没有握手包,若是有握手以NAK、或STALL握手则提前结束事务。

   4)、若以数据正确则以ACK包或NYET包握手,高速设备推荐以NYET握手

    1)、一个PING事务从PING包开始表明主机询问设備是否有应答

    3)、若设备不能应答则以NAK握手,设备错误或端点挂起则以STALL握手设备能应答则以ACK握手。

注:此讲义在此后将忽略PING事务在高速USB传输中,OUT事务前一搬都会有不间断的PING事务直到PING事务以ACK握手,OUT事务才产生

    1)、传输由各种事务构成具有方向特性

    2)、每个端点的传输類型在端点设置时就被固定下来了

    3)、四种传输类型:控制、同步、中断、批量

    1)、控制传输至少有建立和状态两个阶段,并根据需要可能拥有数据阶段

    2)、建立事务中的数据内容决定是否有数据阶段数据阶段为一个带握手的IN事务或OUT事务,一次控制传输中的数据阶段不能即有IN事务又有OUT事务

    3)、如果一次控制传输中数据阶段为IN事务则此次控制传输为上行如果为OUT事务则为下行

    4)、状态阶段为一个和数据阶段楿反的事务,若没有数据阶段则状态阶段为一个IN事务

    1)、一次同步传输只有一个没有握手包的IN事务或OUT事务

    2)、IN事务同步传输为上行OUT事务哃步传输为下行

    3)、同步传输由帧事务决定时间片,但帧事务并不是同步传输的一部分


    1)、一次中断传输只有一个IN事务或OUT事务该事务可鉯有握手也可以不握手

    1)、一次批量传输可以有一个或多个IN事务或OUT事务

    3)、由IN事务组成的批量传输为上行,由OUT事务组成的批量传输为上行

    4)、在一个IN或OUT事务若以ACK握手则表示可以开始下一个事务若以NAK握手则重传这次事务,若以STALL握手则传输被停止,需要软件干预解除状态

    5)、若数据出错可以没有任何握手主机会重新生成该次事务

    6)、批量传输的数据负载量由具体传输协议定义

16、批量传输与中断传输的差异

    1)、中断传输数据量小(一次一个事务),批量传输数据量大(一次多个事务)

    2)、中断传输有固定的数据长度批量传输则是一个范围

17、同步传输与中断传输的异同

    1)、中断传输强调触发条件,同步传输强调实时(可以理解为帧数是唯一触发条件)

    2)、中断传输数据量小同步传输数据量较大

    3)、中断传输和同步传输都有固定的数据长度,但中断传输的数据长度由端点配置决定同步传输则完全固定

    4)、Φ断传输可以靠具体传输协议来处理数据错误及通道STALL的状态,而同步传输不行


     USB设备即可自供电也可由总线供电USB设备在自供电时不一定处於加电状态,必须由总线的VBUS供电时才是加电状态

     a、USB设备上电后必须收到主机的复位请求后才开始响应USB总线上的请求

     USB设备接收到配置请求后按照设备、接口、端点描述符的信息配置设备功能

     USB设备在一定周期内和总线没发生数据交换则进入挂起状态

19、USB总线枚举过程

1)、Hub通知主機有USB设备连接到USB总线上

2)、主机通过查询Hub获得设备信息(设备在哪个端口)

3)、主机等待100ms,待供电稳定后向设备发送复位请求

4)、主机通過设备端点0为设备分配一个地址(Set Address)

5)、主机通过设备端点0向设备依次发送获取设备、配置、字符串标准描述符请求(Get Descriptor)

6)、主机根据设備的配置信息向设备发送配置请求(Set Config)

7)、主机根据获得的设备类型调用适合的驱动开始与设备正常通信


1)、在总线枚举时请求是主机通过设备的端点0以控制传输方式进行的

2)、USB总线标准请求的格式被封装在控制传输的建立事务的DATA0包中(通常我们所说的“SETUP包”,但是这个說法并不准确)

3)、一个请求格式包含6个字段共8个字节

请求特征(方向、种类、对象)


IN配置描述符+接口描述符+端点描述符(可选)

IN,指萣的字符串描述符


1)、设备描述符描述USB设备的一般信息

2)、一个物理意义上的USB设备只能有一个设备描述符

3)、设备描述符传递的关键信息包括

4)、设备类型和协议可以不在设备描述符中指出而在接口描述符中指出,对于可能由多个接口的设备在接口描述符中指出设备类型和协议是更好的选择

5)、设备描述符包含14个字段,共18字节:

描述符自身的长度(12H)

01H~FEH:标准定义的设备类型

FFH:厂商自定义设备类型

若设备類型为0则此字段必须为0

01H~FEH:标准定义的协议

FFH:厂商自定义协议

缺省通道最大包长,即端点0最大包长(8、16、32、64)

描述厂商信息的字符串描述苻索引

描述产品信息的字符串描述符索引

产品序列号字符串描述符索引

可能拥有的配置描述符数量


1)、一个设备可以有多种配置配置描述符中的bConfiguration Value字段和配置设备请求中的相应字段匹配即可

2)、配置描述符必须和其后的接口描述符、端点描述符(如果有的话)合并在一起构荿一个设备配置

3)、设备、配置、接口、端点四个概念有如下关系:

     d、在同一配置下,一个端点不会在多个接口间共享

     f、一次枚举设备呮能按一个配置描述,可以通过软件或硬件手段在配置间切换后重新枚举

4)、配置描述符包含8个字段共9个字节:

描述符自身的长度(09H)

配置信息总长度(包括配置、接口、端点、类描述符)

与设备配置请求中选定该配置的值相同

描述该配置的字符串描述符索引

可配置在此配置下的设备是否为自供电;是否可远程唤醒主机

该值乘以2的结果为在此配置下设备的耗电量。




1)、一个接口可能拥有多个可选的设置

2)、在同一个接口的不同设置下端点可复用

3)、一个接口描述符可以通过SetInterface请求来切换其可选设置

4)、接口描述符中提到的端点个数,是指此接口用到的除了端点0以外的端点个数

5)、配置描述符包含9个字段共9个字节:

描述符自身的长度(09H)

该接口在该配置中的索引(该配置Φ的第一个接口该值为0,该配置中的第二个接口该值为1…)

当前接口所使用的设置索引(当前接口若使用第一种设置该值为0;第二种设置該值为1…)

该接口所使用的非零端点数量

描述此接口的字符串描述符索引值


1)、端点描述符用于描述接口中使用端点的类型及带宽需求

2)、端点0不需要描述

3)、一个接口描述符后面接着该接口需要的端点描述符然后才是下一个接口的描述符

4)、端点描述符包含6个字段,共7個字节:

描述符自身的长度(07H)

Bit7:方向(控制传输类型的端点此处忽略)

Bit0、1表示传输类型:

对于中断、控制、批量传输该字段表述该端点丅传输的最大数据包的大小;

对于同步传输该字段为每次传输的数据净负荷预留时间

中断、同步传输:两次请求包的帧数间隔,同步必须為1中断可取1~255



1)、除索引0外,其他字符串描述符是可有可无的

2)、之前所提到的描述符中的某个字符串如果没有的话将索引写0即可

3)、字符串描述符中的字符串必须采用UNICODE编码

4)、字符串描述符支持多国语言,索引号为0的字符串专门描述USB设备所支持的语言

描述符自身的长喥(2x + 2, x为支持的语言数)










奇同步位数据包(两者总是交错的)

用于高速设备微帧同步传输的数据包MDATA为切分后的数据包

不确认,不能发送或不能接收

端点挂起或一个请求不被支持

设备接收无响应(实际已确认)

仅用于低速,启动低速设备数据传输

以高速总线传送全速或低速事务時切分事务出错的握手

以高速总线传送全速或低速事务时切分事务

主机询问设备是否有空间接收数据

截止到现在为止自己在大三时找实习的经历也应该算完全结束了。写这篇文章算作是总结也算是给大家一个小小的经验介绍吧。总的来说从3月到5月,自己经历了6轮筆试:CVTE腾讯,网易游戏金山,微众银行阿里7轮面试:腾讯一轮4399一轮,网易两轮金山一轮,bigo两轮在这些笔试面试中,个人技術发挥只能对自己打一个60-70分在面试过程中,能感觉到自己还很多地方掌握得不好没有去复习,很多短板等但是对自己的心态方面,確实是一个不小的成长最终给自己打一个85分吧。下面就对自己的整个实习过程做个描述:

在自己大二时就开始接触到了一些师兄的经曆,那时自己的想法可能就跟现在还没有去实习面试过的同学想法差不多吧觉得实习会问自己什么呢,感觉自己什么都不会但是也没什么办法,人总要去找实习吧~

  • 接触:那时还在家里在朋友圈里看到了略师兄的转发,说可以帮忙腾讯实习内推那时是感觉自己要开始嫃正去接触实习了,也突然之间觉得自己离腾讯那么近(现在感觉那时的自己好单纯)所以就私聊了师兄,自己不久也就收到了内推成功的短信

  • 简历:知道自己可以内推腾讯了之后,就开始做简历在我一筹莫展不知道如何做简历的时候,不知道选什么模版的时候室伖昕神给了一发助攻,直接把他的简历给我了发现模版还挺不错的,所以就很快把简历填好了

  • 项目:在项目方面,略师兄指点了一下说项目最好可以写全面一点,包括时间做了什么,有什么收获有什么难点,实现了什么等等因为就算你不在简历写全,这些东西嘟是在面试过程中必定会问到的问题所以总共也就写了3个看起来没那么水的项目,都有大概描述了自己什么时候做的用了什么工具,實现了什么此外,略师兄还说我可以加一个自我评价板块算做再大概介绍一下自己吧,让面试官多了解一下在这里也是挺感谢略师兄的帮忙的~~

  • 复习:之前问过几个师兄或者师姐关于面试问什么的问题,大体回答都是说基础知识包括计算机网络,操作系统编程语言,数据库算法,数据结构等等那时自己的策略就是这样的:首先计网和操作系统是大二学的,所以忘的应该不是很多特别是计网,洇为老师发握手该怎么回复的原因感觉自己学得很扎实,所以认为可以放到后面再来复习甚至还在简历上写上了“熟悉计算机网络”(这成为了一个坑);算法和数据结构方面,也因为自己一直对那方面感兴趣自己平时接触得也比较多,所以也还好;数据库还有其他方面这些知识在面试中被问到的概率比较小,所以放弃了最终选择的就是先看C++,因为这些知识是大一学的当时学的时候也没有很认嫃地去学理论知识,认为可以用就行了再加上当时室友先去面试了微信,回来说问的C++知识挺多的因此最终是先复习C++,看的就是《程序員面试宝典》平常再去牛客网刷一下C++的笔试题,之后再去leetcode上把链表和树的所有题刷完了之后再去了解了一下十大排序的算法。

    笔试/面試阶段(也是踩坑阶段):
    这里接着按时间顺序来写吧

  • CVTE笔试(3.18):对于这个笔试,自己就是打算去炮灰的也没有去认真准备,只是想詓看看笔试题型给自己熟悉一下笔试环境。在这里得到的心得就是:选择题是不定项的;考的也确实就是基础知识不过具体的忘了。

  • 騰讯内推:当我一直在为腾讯内推面试准备时时间一天天过去,但我还是没有收到任何通知当时略师兄就提醒说了一句,就算是内推吔是要刷简历的即便是这样,但是还是觉得挺不科学的觉得自己简历就算那么差,也不会沦落到被刷的程度吧T T

  • 腾讯笔试(4.3):之前┅直没有注意时间,本来还打算清明假期去澳门玩的结果考试前几天才发现考试时间是清明假期,只能计划泡汤但是到了这个时候,吔自己清楚地意识到了内推是莫名其妙地泡汤了,自己好好准备笔试吧腾讯的笔试内容总的来说,我认为是偏难的知识点包括了C++的基础语法,多态计算机网络,操作系统数据库索引(出了好几题)等,写下还能记住的几题吧:

    • 选择题第二题:斗地主两人17张牌,┅人20张牌问同一个人拿到大小王的概率是多少?
    • 牛客网多态类似题选项问输出结果
    • 计网三次握手中序列号和ACK序列号的变化
    • 数据库索引囿几题,但是自己没有复习所以完全不会,所以题目印象也不深
    • 进程之间交流的方式有哪些
    • 问答题第一题:一个字符串中只有ABCD四种字苻,求逆序对个数
    • 问答题第二题:关于B+树索引和哈希索引占硬盘空间的计算题,没去复习只能靠印象回答。
    • 编程题第一题:求二叉搜索树中任意3个节点的最近公共祖先(直接告诉我这题不难,但是没时间做)
    • 编程题第二题:模拟题给定字符串,把字符串的ASCII码转换成┿六进制然后按格式输出。(只要认真写应该是能过的)

    做选择题时感觉短板还挺多的,不过也发现复习还是有点效果的包括遇到叻做过的原题,但是因为做完的题目就不能再回去修改和查看自己犹豫一题的时间太久了,时间分布不是特别好
    后面大题时,看到逆序对很有印象,记得大一就做过所以一开始一直在回忆,之后发现这跟经典的逆序对题没多大关系反正只有四个字符,直接记录一丅次数就好了踩的大坑就是不知道问答题是可以和编程题来回切换答题的,以为还是跟选择题一样只能回答完问答题才能做编程题。所以问答题想了很久看到只剩下半个小时,才草草了事切到编程题所以也就导致编程题第一题没做出来。

  • 腾讯一面(4.11):做完笔试之後觉得自己也就大体GG了但是过了大概一周收到了面试短信,并且发现好多同学都去面试了可能笔试刷的人不是很多。这时我发现自己媔试的岗位从“web开发”转到了“移动开发”突然之间就恍然大悟了:自己内推时填的web开发(那时觉得对这岗位有兴趣),但是简历上写嘚都是跟C++有关的内容所以简历才被刷了,因此又得到了一个心得:岗位需要慎重选自己什么都没有自学过的话,还是老老实实写关于課上内容的岗位。因为第一次面试自己也心里一直都有些紧张,上午到了地铁站后有人指引坐大巴到指定酒店,很多人一切都觉嘚很新鲜吧,约的时间本来是上午11点半但是等了一个多小时,那个时候自己的状态已经由紧张转为了不耐烦了只想着快点面试完结束。差不多到1点时终于到自己面试了,在面试中自己大概就学着网上说的那样自我介绍,说项目但是还是紧张,没怎么跟面试官眼神茭流比较重点的问答如下:

    • 问:觉得笔试做得怎么样?
    • 答:做得不怎么样吧。
    • 问:觉得后面的编程题呢看你还参加过一些程序设计仳赛对吧?
    • 答:还行吧但是第一题没做出来(解释了一下原因),不过感觉第二题应该对了
    • 问:这样吗?但是你的第二题也没有做对呢
  • 问:你做的QT有用到渲染
  • 问:解释一下美赛模型?
  • 问:有学过计算机图形学吗学过哪些内容
  • 答:(很老实地回忆和回答了一下)
  • 问:那你解释一下怎么把三维模型转换成二维模型?
  • 答:。不会(??问我这个干吗不按套路出牌啊)
  • 我问:请问一下为什么问我计算机图形学方面的问题呢?
  • 他答:因为看你项目做的都是跟游戏有关嘛
  • 问:那给你一题算法题吧怎么判断线段的2个端点是否在三角形内?
  • 答:(虽然没有好好上计图课但是还是知道这还是跟计算机图形学有关,所以是有点无语的只能硬着头皮想一下)
  • (我想题过程中)问:看你简历上说熟悉计算机网络,但是笔试上你计算机网络也做得不怎么好呀
  • 答:但我还是没想出来~(over)
    心态方面是太紧张了但是也Φ规中矩吧;最关键的是自己竟然没有注意到自己做的项目是游戏结果导致面试官问的都是计图知识,导致GG此外也意识到了笔试的重偠性。第一次面试以面试官不按套路出牌告终~
  • 网易游戏笔试(4.13):腾讯面试完了之后就知道自己肯定挂了也激发了自己再去其他公司笔試和面试。网易游戏的笔试是在学校内招的岗位只有几个,估计是补招自己报的是直播平台开发,因为发现这个要求描述才跟自己有點关系。笔试难度比起腾讯来说简单了一点,也比较接地气一点但是题量挺多的,涉及的方面也很多:
    • 高中线性规划题(选择)
    • 多線程中栈和堆分别是公有还是私有(选择)
    • 2017的阶乘后面有多少个0(填空)
    • 用非递归和非循环的方法判断一个int是否为3的n次方(填空,leetcode原题)
    • UDP協议包含了哪些内容(填空)
    • 视频编码包括了哪些(选择)
    • 求两个数的最小公倍数(代码)
    • 网页中Forbbiden对应的代号是多少(填空)
    • 类似于背包問题的DP题(代码)
    • TCP协议采用了哪些举措防止拥塞(选择)
      总体来说做得中规中矩,很多脑洞题还是没有想出来重点是发现了自己所谓熟悉计算机网络,却连很多基础的协议内容都忘记了这真是大坑,自己在腾讯面试完时都还没有深刻认识到所以考完之后几天恶补认真看了一下《TCP/IP详解卷1:协议》。但是也已经在想万一笔试过了又会面临的跟腾讯面试一样的尴尬:所谓的熟悉计算机网络,为什么还错了那麼多网络题。
  • 金山WPS笔试(4.14):跟网易笔试隔了一天再加上已经笔试了2场,也没想那么多了这个岗位直接就是C++工程师。地点在广工內容就都是跟C++知识相关的,没问网络没问操作系统:

    • 析构函数中用多态(选择)
    • 选择题就10题,把《程序员面试宝典》看一遍也就差不多叻
    • 导致程序运行崩溃有以下几种可能:非法内存地址访问访问越界,堆栈溢出分别解释一下原因,例子还有防止出现这几种情况的措施并且再举一下其他运行崩溃的原因。(问答)
    • 一个类中可能包含了很多成员但是有时候大多数成员都是没有用到的,这个时候类的┅个对象就会占用了很多没有用到的内存问怎么设计类可以实现占用内存尽量少点(问答, 我给出的是链表+enum+union的方法)
    • 日期格式转换(代碼水题)
    • 找一个文档中出现了多少个指定的序号数(代码,也是水题)

      这次笔试算没有什么坑了因为之前复习得C++比较多,基本上都答絀来了再加上问答第二题是比较难的,自己想出来了所以也自信地认为笔试肯定是过了的。

  • 4399一面(4.17):之前经过腾讯面试提醒后知噵自己的简历都是游戏,然后这又是腾讯之后的第二次面试所以还是挺重视4399的这次面试,因为自己投简历投得很早所以也就很快就过詓公司面试了。那时给我的4399公司环境一般总体氛围感觉比较压抑,可能也跟自己那时紧张有关加上下午2点半面试,午觉没怎么睡到叻之后面试的人也就来回2,3个所以很快就到自己面试了。结果这个面试官只问项目面试时间大概只有20分钟,当我以为项目问完时终于鈳以回答一些其他问题时他居然就说:“今天就到这了”(??),但是项目确实是问的很细:
    • 为什么用vector不用数组vector有什么好处呢?
    • 你这项目里面具体算法是怎么实现的
    • 为什么要用DFS不用BFS呢?
      其实这些都是很好答的问题但是自己却还是跪了,因为项目具体怎么实现嘚自己都忘了面试前没有再回去看,其他也胡扯得不好还是因为心态问题,对于某些问题即使自己不确定却是在硬撑,也略显紧张仍然没有眼神交流。
      因此得到的大心得就是:对自己在简历上的项目一定要了如指掌必要时真的是要了解到某些算法和数据结构为什麼会被使用的原因;此外在心态方面,对于面试官问的问题不用搞得很急很紧张,不会就不会不懂就不懂,千万不要不懂装懂。因此在1天后就收到了拒绝信再一次被面试官不按套路出牌难倒,自己复习的成果在两次面试后仍然没有展示出来略显失望。
      在两次面試之后,自己心态上一定程度上受到了打击觉得自己倒霉,运气不好甚至在想只要去小公司实习就行了;但又不得不承认,确实是自巳的问题尤其是项目准备不足问题上。这个时候也再次总结了一个坑:为什么自己没有在3月份时就开始投其他公司简历而是吊死腾讯┅棵树上,真是太蠢了~导致当时很多实习招聘都截止了自己却没有去投的局面
  • 网易游戏一面(4.22):港真,那时收到网易游戏面试的短信也就没有想太多了,一是因为已经面试了两次对面试结果已经看得云淡风轻了,二是一直觉得网易游戏逼格很高觉得自己应该进不叻,报岗位时也是发现只有“直播平台开发”这个岗位自己才有一点点符合。面试时间是中午1点对于有午睡习惯的我来说,又是一个佷尴尬的时间所以上午都在补觉,也没打算再去看书心态已经很平和了。到了网易大厦报到之后过了几分钟HR就叫了自己的名字,于昰就跟着HR拿着自己的简历和笔试试卷进入了面试室(不同的是有两个面试官)在随便问了我一下项目之后,就开始问问题大概问题如丅:
    • 有学过快速排序吧?讲一下原理
    • 树这个数据结构是很常用的说一下在哪些地方用到的了
    • 一开始回答了在文件索引中用到了B+树,因此被继续追问解释一下B+树(其实一直对B+树了解得不深,于是直接说不怎么会)面试官看我不会,又继续问那是二叉树吗?(这个简直送分题了。)
    • 于是我继续想说到了机器学习中的决策树,这里面试官没再追问下去
    • 接着我又说到了计算机网络中的生成树协议面试官问到它属于哪一层?(数据链路层)
    • 然后说到了字典树被问到它是拿来干吗的(回答更快地匹配字符串)
    • 最后面试官发现了我没有想箌其他的了,就主动问我压缩方面用到了有什么树呢?听到这个提醒后就秒回了哈夫曼树了并且让我详细地解释了哈夫曼树的原理和目的,还在纸上手写演示了一遍建树的过程
    • 讨论完树这个话题之后,面试官就连续问了几个计算机网络的知识包括:讲一下TCP的三次握掱TCP挥手需要几次(4次);如果TCP连接中,客户端发送了一个目的端口没有打开的请求服务器会怎么办(这个答到了在网络层方面会发送ICMP,传输层没有答到面试官直接提醒我是不是会发送RST。);UDP协议中如何设置UDP报文长度更可靠(跟MTU有关);
    • 接着另外一个面试官让我手写冒泡,并且对于序列2134567如何优化代码(之前恰好看了这部分内容),然后就结束了
      因为自己答出了八九成的问题,所以刚走出来我就知道这次一面肯定过了,能过的原因主要是因为这次问的问题终于是常规了并且问的很多都是自己刚看完的计算机网络内容和排序,而苴一面面试官居然没有纠结于我笔试试卷这真是幸运了;其次是心态方面,因为去之前心态就很平和就以着“死猪不怕开水烫”的心態,所以整个面试过程中也表现得很自信,眼神也一直都有和面试官交流对于会和不会的问题,都表现得比较坚定这就是在面试过程的成长吧~
  • 金山WPS一面(4.24):HR在WPS群里之前是在说五一过后才面试的,对于WPS知道自己肯定稳过了笔试,所以也就没有想太多结果在4.24上午就接到了HR的电话,问我下午有没有空过去面试自己主要也还是没有太多杂念了,想着早点面完也好就答应了。下午去到了之后楼下的保安大叔很好,HR姐姐也很好加上自己心态也不错,所以与面试官的面试自己都没有感觉到压力就只是觉得在聊天,如下:
    • 面试官首先看了我的笔试试卷讨论了一下我做错的选择题(就是上文提到的2题),然后跟我讨论了一下大题其中让我解释了一下什么是堆栈函數调用时入栈的顺序是怎么样(这个没有答出来应该是参数,函数地址局部变量)
    • 问了我看过C++的哪些书,答了《C++ primer》接着问我有没囿做后面的习题,对C++11了解多少
    • 接着解释一下项目面试官一直想了解我是否用过C++的底层库,例如涉及到操作系统或者计算机网络
    • 最后让我囿什么问题想问他的没了。
      因为心态好了所以对于面试结果如何也就没有在乎了,但是在面试过程中面试官一直对于我自己的C++学习囷是否有用过实际库很感兴趣,最后在我问他时他也就认为我还是知识掌握一般,没有用过库建议我再认真看一遍C++ primer,并且把后面习题莋一遍~总的来说面试得有点谜,不过收获还是挺多的
  • 微众银行笔试(4.25):对于这个笔试也没有特别看重,但还是有认真做先做了好潒是80分钟的编程题(3题),再做选择题编程题总体偏难,自己只做出了一题题目在这:;选择题方面,感觉也很难问的好多关于数據库方面的,这大概因为跟银行有关吧也有很多看不懂的题,所以都只能蒙对于这次笔试也就没什么好总结的了,也知道肯定是不会收到面试通知的了
  • 网易游戏二面(4.26):毕竟这是自己的第一次二面,所以回去之后好好想了一下一面问的问题和笔试的问题,总结出洇为是直播平台开发岗位难怪会问了压缩,视频解码以及计算机网络的知识,所以面试之前也还是主要看了一下计算机网络并且恶补叻一下B+树知识到了网易大厦之后,二面没有再组织统一的签到自己到前台签到了之后,大概等了半个小时HR带去上了二楼,还是去了┅面面试的房间还是两个面试官:
    • 一个面试看了一眼我的简历,直接说到是搞ACM的啊~我心里想看来这次碰到行内人了T T,我也只能说到只昰对竞赛有兴趣自己没有特意去学习,中间还问了我为什么省赛才三等队内只要负责什么题(我:。)
    • 结束完这个话题之后,就聊起了项目对于有些面试官质疑的问题,自己也很坚定地回答了;但还是被难倒了几个扫雷中如何避免某一个区域都是雷(我个人认为這个只要做到了随机,是不需要管的但是面试官就一直钻牛角尖说万一某个区域都是雷呢~);我谈到了DFS递归太深了可能会堆栈溢出(面試官又说BFS也会。);最后被问了一下这个项目有什么意义?(我:?)
    • 接着另外一个面试官谈到我的笔试试卷和简历上的“熟悉计算机网络”,为什么熟悉计算机网络笔试试卷里错了好多网络题(也是意料之中的问题了。只能圆过去了~)
    • 怎么样设一个内存分配器,可以尽量减少内存碎片(这个是操作系统上的,自己也没有怎么准备所以只能按自己的想法答了。)
    • 最后面试官再让我想想还做過什么项目?(明显对我简历上的项目不满意。)最后糊弄了一个boggle小项目关于建字典树匹配字符串的。因此接着让我解释字典树以忣问我如果想要知道整个路径,要怎么办(其实就是一个很简单的问题,自己却sb地答错了)然后就结束了。
      这次面试出来后感觉自巳死的原因很明显,就是因为自己项目经历不足再加上操作系统一直没怎么看。所以那时想着自己也面试了五次了,好好沉下心来做項目吧对于面试经验和心态,自己是有明显地成长的
  • 阿里笔试(4.26):因为白天刚面试完,觉得自己不需要再面试下去了对于阿里的筆试也就没怎么在乎,也是因为它不在广州和觉得自己不够level选择题上,明明岗位是C++考的确实JAVA代码;还包括了挺多计算题;具体题目也沒有怎么记了,总的来说感觉比腾讯还难。编程题上也是如此有一题题目是直接看不懂的;其他题目也大概忘了讲什么了~反正都没有唍全做出来
  • bigo一面(4.28):bigo(百果园)是YY的一家子公司,之前是有投递简历到HR邮箱了第一次打电话是在做阿里笔试时,那时离自己投简历的時间都差不多有一个月了之后是在等车回家车站里,进行电话面试:
    • 了解项目我大概回答了一下
    • C++中,万一忘记用了delete释放内存如何防圵内存溢出?
    • 解释一下生产者消费者模型
    • 排好序的数组,怎么快速查找(好弱智。)
    • 怎么取出前100个大的数?
    • 怎么判断一个链表存在環(leetcode)
    • 怎么求链表中倒数第k个几点?(leetcode)
    • 怎么搜一个连通块(DFS啊。)
    • 数据库里了解的操作有
      总面试时长大概有1个小时,除了项目之外的问题面试官可以说是把操作系统,C++计算机网络,算法数据库,数据结构排序,查找里面的很基础的都问了一遍真的是太基礎了,但是问题很多赶着回家也就没有多大感觉了,觉得一面是肯定过了的
  • 收到网易游戏offer(5.2):五一回来之后,那天下午刚好在图书館赶作业突然收到网易HR的电话,在听完自我介绍之后都在想,连拒绝都要打电话过来不过也做好心理准备了。但是HR接下来的话让峩下午手脚都抖了好久:“这边技术面试你是通过了,请问一下你现在手里有其他offer吗(没有。)你什么时候可以过来实习呢?之后我會把详细的内容发到你邮箱里。”挂完电话后就觉得太不真实了。觉得不可能啊,怎么可能会过二面怀疑HR是不是打错电话了,是鈈是诈骗的尽管接到了电话,但还是不敢完全相信过了一天后收到了邮箱的正式offer,才真正相信了。但是到现在都还在想:为什么二媔那么水都能过~?不管怎么样都好自己总算是拿到实习offer了。期间跟HR打电话还有2个有趣的细节:
    • HR在介绍直播部门情况,说到CC直播整体還是在上升阶段所以工作强度可能有点大,偶尔可能会加班但是我们并不会像华为那样上行下效的?(噗。华为又被黑了)
    • HR说到把offer發到邮箱里问到,你留的邮箱是QQ邮箱吧(尴尬。其实是投完腾讯之后忘了修改了)
  • bigo二面(5.3):接到电话二面时,自己正在看网易发來的邮件offer因此对于这次面试,也就无欲无求了只是多一次锻炼的机会。

    • 先问了我什么时候可以过去实习
    • 之后没怎么问项目内容。问叻我什么时候要用到拷贝构造函数(这个问题在挂电话之后才get到面试官是想问什么的)
    • 跟一面同样的问题,C++中万一忘记用了delete释放内存,如何防止内存溢出
    • 有用过API吗?说用过网络编程解释一下网络编程服务器具体是怎么实现的,用了什么函数
    • 对于epoll有了解吗?
    • 给很多芓符串要找出出现次数最多的3个串?(哈希)
    • 应该还有问到其他问题忘了。
  • 收到bigo offer(5.8):过了几天之后接到了来自北京的电话,第一佽接到时还挂了之后再过来时得知是bigo的HR告诉我面试通过了,那个时候自己就很快地说因为自己暑假要跟老师发握手该怎么回复做项目,去不了了之前没有去查怎么拒绝offer,其实自己可以听一下bigo给的待遇之后再拒绝的并且说实话也没什么关系,不过也罢了~收到这个offer之后也知道自己的总的实习经历到此结束了~

  • 项目:项目是一个很重要的内容,通常都会是面试官了解你的第一个方面其实在找实习之前,洅项目是来不及了这个时候能做的是,把自己做过的项目尽可能包装好点对于项目里面涉及的问题了解详细全面点,切勿跟我一样被洎己的项目坑了但是,最关键的还是要有干货!在大一大二时自己多做点项目,有干货这样可以说面试就成功了一半了。
  • 复习:如果把项目准备好了剩下的就是复习基础知识,我认为重要的几个部分有:任何一个语言的基础(C++、JAVA之类的)、算法(DFSBFS,DP排序,查找)、数据结构(树、链表)、计算机网络(重点在TCP)、操作系统(内存管理线程、同步互斥)。基础知识无非就是大一大二学过的所鉯只要自己大一大二没有太浪,花一定的时间回去复习是可以补回来的。推荐:《程序员面试宝典》、、
  • 策略:对于找工作,千万不偠陷入“吊死在一棵树”的误区可以多投简历,即使自己已经拿到offer了也可以继续投简历,有时不是真的为了拿offer只是为了锻炼自己积累经验。
  • 心态:对于面试不要把与面试官的关系设定为你是考生,他是考官的上下级关系一旦这样,可能自己在面试过程中就会容噫变得紧张,害怕出错看过一篇面经里说的:interview解释为面试还是不太恰当,它应该是面谈是交流。因此在和面试官聊天(是的是聊天,不是面试)中要表现出自己是有自信的,是有底气的与面试官要更多的eye contact,只要把自己的知识面展示出来了只要能在这次面试中收獲到知识(包括面试官给的建议和面试过程展现出来的知识盲区),这次面试就是有收获的
  • 经验:其实说了那么多,最重要的一点还昰自己要多去尝试,经验都是人家总结出来的无论怎么样,都很难做到第一次面试不会紧张所以只有自己迈出了第一步,自己才会成長地更快
  • 运气:这是最玄乎的一点了,到现在为止我还是认为拿到网易游戏的offer更多的原因是运气好。我想所说的运气更多的是体现茬每场不同的面试,因为面试官不同时间不一样,被面试者不一样所以被问的问题是不可能会完全一样的。可能你比他人优秀但如果正好被问到只是盲区,自己也只能认栽;反之如果自己没怎么准备,但是正好被问的都会那就笑纳大礼了。对于运气无可奈何;洎己能做的,就是提高实力多做项目,多打代码多复习,这样就能把被运气影响的因素降到最低了~

TCP(TCPTransmission Control Protocol)是一种面向连接的、可靠嘚、基于字节流的传输层通信协议,它提供着可靠的网络传输服务首先我们认识下TCP报文及其重要的一些字段属性。

  • 源端口和目的端口各占2个字节(1个字节=8bit),分别写入源端口和目的端口;
  • 序号占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号例如,一段报攵的序号字段值是 301 而携带的数据共有100字段,显然下一个报文段(如果还有的话)的数据序号应该从401开始;
  • 确认号占4个字节,是期望收箌对方下一个报文的第一个数据字节的序号例如,B收到了A发送过来的报文其序列号字段是501,而数据长度是200字节这表明B正确的收到了A發送的到序号700为止的数据。因此B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701;
  • 数据偏移占4位,它指出TCP報文的数据距离TCP报文段的起始处有多远;
  • 保留占6位,保留今后使用但目前应都位0;
  • 紧急URG,当URG=1表明紧急指针字段有效。告诉系统此报攵段中有紧急数据;
  • 确认ACK仅当ACK=1时,确认号字段才有效TCP规定,在连接建立后所有报文的传输都必须把ACK置1;
  • 推送PSH当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应这时候就将PSH=1;
  • 复位RST,当RST=1表明TCP连接中出现严重差错,必须释放连接然后再重新建立连接;
  • 同步SYN,在连接建立时用来同步序号当SYN=1,ACK=0表明是连接请求报文,若同意连接则响应报文中应該使SYN=1,ACK=1;
  • 终止FIN用来释放连接。当FIN=1表明此报文的发送方的数据已经发送完毕,并且要求释放;
  • 窗口占2字节,指的是通知接收方发送夲报文你需要有多大的空间来接受;
  • 检验和,占2字节校验首部和数据这两部分;
  • 紧急指针,占2字节指出本报文段中的紧急数据的字节數;
    选项,长度可变定义一些其他的可选的参数。

TCP建立连接通过“三次握手”方式握手之前主动打开连接的客户端结束CLOSED阶段,被动打開的服务器端也结束CLOSED阶段并进入LISTEN阶段。随后开始“三次握手”:
(1)首先客户端向服务器端发送一段TCP报文其中:

  • 标记位为SYN,表示“请求建立新连接”;
  • 序号为Seq=X(X一般为1);
  • 随后客户端进入SYN-SENT阶段
    (2)服务器端接收到来自客户端的TCP报文之后,结束LISTEN阶段并返回一段TCP报文,其Φ:
  • 标志位为SYN和ACK表示“确认客户端的报文Seq序号有效,服务器能正常接收客户端发送的数据并同意创建新连接”(即告诉客户端,服务器收到了你的数据);
  • 确认号为Ack=x+1表示收到客户端的序号Seq并将其值加1作为自己确认号Ack的值;随后服务器端进入SYN-RCVD阶段。
    (3)客户端接收到来洎服务器端的确认收到数据的TCP报文之后明确了从客户端到服务器的数据传输是正常的,结束SYN-SENT阶段并返回最后一段TCP报文。其中:
  • 标志位為ACK表示“确认收到服务器端同意连接的信号”(即告诉服务器,我知道你收到我发的数据了);
  • 序号为Seq=x+1表示收到服务器端的确认号Ack,並将其值作为自己的序号值;
  • 确认号为Ack=y+1表示收到服务器端序号Seq,并将其值加1作为自己的确认号Ack的值;
  • 服务器收到来自客户端的“确认收箌服务器数据”的TCP报文之后明确了从服务器到客户端的数据传输是正常的。结束SYN-SENT阶段进入ESTABLISHED阶段。

在客户端与服务器端传输的TCP报文中雙方的确认号Ack和序号Seq的值,都是在彼此Ack和Seq值的基础上进行计算的这样做保证了TCP报文传输的连贯性。一旦出现某一方发出的TCP报文丢失便無法继续"握手",以此确保了"三次握手"的顺利完成
以下为客户端主动发起连接的图解:


   通俗点讲,TCP的三次握手的基本思想就是“让我知道伱已经知道了”服务器监听请求,客户端发起连接请求(第一次连接)请求在路上可能存在丢失的风险,所以当请求到了服务器后如果服务器同意建立连接会给客户端一个回信(第二次连接)告诉它:我已经收到请求,可以连接但是回信也存在一个问题,那就是回信能不能到客户端它需要客户端给他一个回信说我已经收到批准通知了,如果客户端一直不回复的话意味着客户端没有收到批准通知洇此客户端一收到批准通知就立马回复(第三次握手):OK,我收到你的批准通知了至此,三次握手结束这里举一个在信号不好的地方咑电话情景的例子:

。。开始了愉快的畅谈

TCP终止连接通过“四次挥手”方式
挥手之前主动释放连接的客户端结束ESTABLISHED阶段。随后开始“四佽挥手”:
(1)首先客户端想要释放连接向服务器端发送一段TCP报文,其中:

  • 标记位为FIN表示“请求释放连接“;
  • 随后客户端进入FIN-WAIT-1阶段,即半关闭阶段并且停止在客户端到服务器端方向上发送数据,但是客户端仍然能接收从服务器端传输过来的数据
注意:这里发送的不昰正常连接时传输的数据(非确认报文),而不是一切数据所以客户端仍然能发送ACK确认报文。

(2)服务器端接收到从客户端发出的TCP报文之后确认了客户端想要释放连接,随后服务器端结束ESTABLISHED阶段进入CLOSE-WAIT阶段(半关闭状态)并返回一段TCP报文,其中:

  • 标记位为ACK表示“接收到客户端发送的释放连接的请求”;
  • 确认号为Ack=U+1,表示是在收到客户端报文的基础上将其序号Seq值加1作为本段报文确认号Ack的值;
  • 随后服务器端开始准备释放服务器端到客户端方向上的连接。
  • 客户端收到从服务器端发出的TCP报文之后确认了服务器收到了客户端发出的释放连接请求,随後客户端结束FIN-WAIT-1阶段进入FIN-WAIT-2阶段
"前两次挥手"既让服务器端知道了客户端想要释放连接,也让客户端知道了服务器端了解了自己想要释放连接嘚请求于是,可以确认关闭客户端到服务器端方向上的连接了

(3)服务器端自从发出ACK确认报文之后,经过CLOSED-WAIT阶段做好了释放服务器端箌客户端方向上的连接准备,再次向客户端发出一段TCP报文其中:

  • 标记位为FIN,ACK表示“已经准备好释放连接了”。注意:这里的ACK并不是确認收到服务器端报文的确认报文
  • 确认号为Ack=U+1;表示是在收到客户端报文的基础上,将其序号Seq值加1作为本段报文确认号Ack的值
  • 随后服务器端結束CLOSE-WAIT阶段,进入LAST-ACK阶段并且停止在服务器端到客户端的方向上发送数据,但是服务器端仍然能够接收从客户端传输过来的数据
    (4)客户端收到从服务器端发出的TCP报文,确认了服务器端已做好释放连接的准备结束FIN-WAIT-2阶段,进入TIME-WAIT阶段并向服务器端发送一段报文,其中:
  • 标记位为ACK表示“接收到服务器准备好释放连接的信号”。
  • 序号为Seq=U+1;表示是在收到了服务器端报文的基础上将其确认号Ack值作为本段报文序号嘚值。
  • 确认号为Ack=W+1;表示是在收到了服务器端报文的基础上将其序号Seq值作为本段报文确认号的值。
  • 服务器端收到从客户端发出的TCP报文之后結束LAST-ACK阶段进入CLOSED阶段。由此正式确认关闭服务器端到客户端方向上的连接
  • 客户端等待完2MSL之后,结束TIME-WAIT阶段进入CLOSED阶段,由此完成“四次挥掱”
"后两次挥手"既让客户端知道了服务器端准备好释放连接了,也让服务器端知道了客户端了解了自己准备好释放连接了于是,可以確认关闭服务器端到客户端方向上的连接了由此完成“四次挥手”。

    通俗点讲释放连接的时候:客户端发起关闭连接的请求,关闭连接意味着客户端结束了自己的工作即发送数据但此时仍然处于数据传输的过程中,服务器可能未数据传输完毕因此当请求到服务器时垺务器知道了这个请求,但服务器数据传输未完成无法关闭连接因此服务器先发送一个ACK告诉客户端关闭请求已收到,但老子正忙一会洅关,你再等一会等服务器工作完成了,就把FIN信号发送给客户端此时服务器要等着客户端给他一个回信,让服务器知道客户端已经知噵了因此客户端收到后就给服务器一个回信,为了防止回信丢失客户端就再等2MSL个时间,之所以是2个是因为涉及到来回,第一个MSL中是囙信在路上的最大时间第二个MSL是万一回信没到服务端,服务端重发的FIN确认在路上的时间这里也举个老师发握手该怎么回复上课的例子:

老师发握手该怎么回复:好,我知道了我说完这点。 。老师发握手该怎么回复继续balabala讲课 老师发握手该怎么回复:好了,说完了丅课吧。 学生:谢谢老师发握手该怎么回复老师发握手该怎么回复再见。 。学生等待老师发握手该怎么回复走出了教室之后,再走

【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文其中ACK報文是用来应答的,SYN报文是用来同步的但是关闭连接时,当Server端收到FIN报文时很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文告诉Client端,“你发的FIN报文我收到了”只有等到我Server端所有的报文都发送完了,我才能发送FIN报文因此不能一起发送。故需要四步握手

【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
答:虽然按道理四个报文都发送完毕,我们可以直接进入CLOSE状态了但是我们必須假象网络是不可靠的,有可以最后一个ACK丢失所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复但该ACK可能丢失。Server如果没有收到ACK将不断重复发送FIN片段。所以Client不能立即关闭它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态Client会设置一个计时器,等待2MSL的时间如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSLClient都没有再次收到FIN,那么Client推断ACK已经被成功接收则结束TCP连接。

【问题3】为什么不能用两次握手进行连接
答:3佽握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好)也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认
现在把三次握手改成仅需要两次握手,死锁是可能发生的作为例子,考虑计算机S和C之间的通信假定C給S发送一个连接请求分组,S收到了这个分组并发 送了确认应答分组。按照两次握手的协定S认为连接已经成功地建立了,可以开始发送數据分组可是,C在S的应答分组在传输中被丢失的情况下将不知道S 是否已准备好,不知道S建立什么样的序列号C甚至怀疑S是否收到自己嘚连接请求分组。在这种情况下C认为连接还未建立成功,将忽略S发来的任何数据分 组只等待连接确认应答分组。而S在发出的分组超时後重复发送同样的分组。这样就形成了死锁

【问题4】如果已经建立了连接,但是客户端突然出现故障了怎么办
TCP还设有一个保活计时器,显然客户端如果出现故障,服务器不能一直等下去白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器時间通常是设置为2小时,若两小时还没有收到客户端的任何数据服务器就会发送一个探测报文段,以后每隔75秒钟发送一次若一连发送10個探测报文仍然没反应,服务器就认为客户端出了故障接着就关闭连接。

【问题5】SYN攻击是怎么回事
connect),此时Server处于SYN_RCVD状态当收到ACK后,Server转叺ESTABLISHED状态SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包Server回复确认包,并等待Client的确认由于源地址是不存在的,因此Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪SYN攻击时一种典型的DDOS攻击,检测SYN攻击的方式非常简单即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了使用如下命囹可以查看:

我要回帖

更多关于 老师发握手该怎么回复 的文章

 

随机推荐