面经—2019网易实习初试

开始是一些废话,可以跳过——

前几天网易来学校宣讲,然后当天投简历并线上笔试,过几天就发来面试通知了。昨天(本来是写“今天”,但昨天没写完,今天继续写)去了网易大厦面初试。
点到我名字之后,我被带到了几个小会议室,是用玻璃隔开的,带我们来的前辈见讨论室里面还在面试,于是招呼我们在外面等一会,给我们拿了椅子(很细心)。我在其中一个讨论室前面坐着,等待里面面试的人出来,跟我一起等待的还有其他几个人。
过了大约十分钟,里面的人出来了,但面试官没有招呼下一个进入,过了几分钟,我就主动去敲一敲门,面试官似乎正在电脑前忙其他事,不过点了点头说可以进来了。然后等了十几秒她(没错,是“她”)做完手头的事情,看了一下我的简历,然后让我先做个自我介绍。
下面我把问到的问题总结一下(可能有遗漏),并说说我的感想。

以下回答可能会有不全面的地方,仅供参考。

  1. 自我介绍
    我先讲了自己的基本信息,主修的基础课程,然后讲了计算机网络的一个小项目,并谈到了我写博客的习惯。

  2. 有没有了解使用UDP协议的开源的代码
    因为我在自我介绍和简历中提到了一个计算机网络的项目,内容是在传输层使用UDP,在应用层模拟TCP的功能。所以面试官跟我说网上有一些使用UDP的一些开源的例子,问我有没有了解或者使用。由于这一次项目的是要求在应用层实现TCP的一些功能,比如可靠数据传输,流控制,拥塞控制等,所以并没有考虑过使用开源的代码,于是我就直接说没有了解过,是在应用层直接实现的。

  3. 那你是怎么实现TCP的功能的?
    首先是可靠数据传输,要先知道数据出错了,所以设计的报文中加了一个checksum,之后要让发送方知道错了,所以要有ACK,再为了实现流水线传输,则要给报文加一个序列号,然后就是重传机制,是结合GBN和SR的,接收方会缓存失序的报文段,发送方只会重传未确认的一个报文段,而不必像GBN一样重传后面的所有已发送报文,因为可能接收方已经缓存了这些报文了,重传只是浪费资源。在说到这里的时候,面试官追问我如果一直没到怎么办,一直缓存下去吗?当时以为是要我回答缓冲区要设置一个上限,(后来想想原来是我没说清楚这是重传机制,面试官误以为我没有重传)。然后在最后,我又赶紧补一句超时重传。(其实我确实没有把重传解释清楚,超时重传差点忘了说,三个冗余的ACK也没有提到)。到这里面试官似乎要开始问下一个问题了,后面的流控制和拥塞控制我没有继续说下去。(当时要是头脑再清醒一些的话后面这两个我应该会继续说)

  4. TCP断开连接的过程?
    TCP断开连接的过程也叫“四次挥手”,因为TCP是双全工的,客户端和服务端都可以主动发起断开连接的请求。这里假设客户端发起。客户端首先会向服务端发起一个FIN报文,FIN表示finish,然后进入FIN_WAIT_1状态,服务端收到这个报文之后,会进入CLOSE_WAIT状态,并给客户端发送一个ACK,但是它可能还有数据没有发送完,所以会继续向客户端发数据。客户端收到这个ACK后进入FIN_WAIT_2状态。等到服务端数据发完了,再给客户端发一个FIN报文,FIN和ACK都为1,客户端收到之后,给服务端发一个ACK报文,这个时候两边就都断开连接了。(当时现场表达的时候没有这么流畅,那几个状态转移还有点犹豫,并且还漏了服务端的LAST_ACK状态,还有客户端最后还要进入TIME_WAIT状态等一段时间再断开连接也没有提到。不过面试官对我的回答相对还是比较满意,没有指出的我问题,不知道她听出这些漏洞没有,或者其实没要求我要说这些细节?)
    关于四次挥手的全过程,参考我的另一篇文章:计算机网络——TCP四次挥手过程详解

  5. 讲一下事务是什么?有哪些特点?有哪些隔离级别?MySQL默认是哪个隔离级别?
    (这几个问题不是一次性问完的,而是一步步追问)

    • 事务是一系列操作的一个序列,它要求满足几个特点。比如它最基本的一个特点就是原子性,意思就是说事务的几个操作要不就全部执行完,要不就全部撤销,比如abort。
    • 这是第一点,那事务还有哪些特点?
      事务有四个特点,分别是原子性、一致性、隔离性还有。。持久性!隔离性是针对并发操作的,如果没有并发,那么其实原子性已经足够让它满足一致性了,但是由于有并发的操作,所以事务中的操作可能会交叉进行,这就必须有隔离性,使得一个事务的未提交操作对其他事务是不可见的。
    • 那数据库有哪些隔离级别?
      有四个隔离级别:未提交读,提交读,可重复读,可串行化。
    • 好的,平时有没有真正使用过数据库,使用了什么数据库?
      有,MySQL。
    • 好的,那MySQL的默认隔离级别是什么?
      Emmm,是可串行化吧。。我猜。。(后来知道其实是可重复读,回想起来我不应该瞎猜,还不如直接说不知道)
  6. 解释递归,没有终止条件会怎样?

    • 了解递归吗?解释一下什么是递归?
      递归从代码上的体现就是一个函数自己调用自己本身,那被调用的函数本身又调用了自己,所以会一直循环下去。
    • 那会不断循环下去吗?
      所有要有一个终止条件,就是有一个if语句可以让它停下来。
    • 那如果没有这个终止条件呢?
      那循环太多次的话就会导致栈溢出吧。
    • “很好~”
  7. 为什么数据库比文件效率高?
    可能是因为数据库的索引用了B+树吧,它搜索的的时间复杂度可以达到O(logn)。(这个问题我现在还没有得出结论,甚至面试官是故意说反了,还是说要看情况讨论。等以后搞清楚了我再补一篇博文,不过网上还是有挺多这方面的知识的)

  8. 什么是关系型数据库?
    关系型数据库是指数据与数据之间是有关系的,体现在表上面。其实表是由ER图转换而来的,一个实体可以转化成一个表,如果联系是1对N的,则可以把联系合并到N的那一方的表,如果是M对N的,则必须新建一个表来表示这种关系。

  9. 知道C++吗?C++的内存结构是怎样的? 或者说所有语言都差不多。
    首先会有一个,临时变量会存在栈里面,过了这个作用域就会被自动销毁(回收);,则是使用了new动态分配空间,需要程序员手动delete销毁;然后还有一个方法区,里面有个常量池,Java的String就是放在常量池里面的,new出来的String会对应堆中的一个空间,但其实堆里面的对象也是存储了一个指向常量池的地址。(后来发现还说漏了一个,就是数据段。)
    下面是网上找来的c++内存结构图:
    在这里插入图片描述
    其中:
    .bss (Block Started by Symbol) 和.GVAR (global value,也叫.data) 合称为GVAR 。
    .bss 存放程序中未初始化或初始化为0的全局变量和静态变量,静态分配,具体体现为一个占位符,并不给该段的数据分配空间,只是记录数据所需空间的大小,在程序开始时通常会被清零。
    .GVAR用来存放程序中已经初始化的非零全局变量和静态变量,静态分配。
    TEXT也称为代码段(Code),就是上面说到的方法区,用来存放程序执行代码,同时也可能会包含一些常量(如一些字符串常量等),该段内存也为静态分配。

    text和data段都在可执行文件中,由系统从可执行文件中加载;而bss段不在可执行文件中,由系统初始化。

  10. linux使用ls命令的时候,调用了哪些函数?
    这个没有了解过,只知道ls是用来列出当前目录下的所有文件和子目录的。
    Linux执行ls,会引起哪些系统调用

  11. linux 如果一个进程陷入死循环该怎么关掉?
    不知道。。点关闭吗。
    网上找来的回答:

    • ctrl+c 强制结束(这个其实我知道,但应该不会是要让我回答这个吧?)
    • 或者另起一个终端,然后 ps -ef|grep 程序名,得到进程号,用kill -9 进程号
    • linux下结束死循环
  12. fork跟一般的函数有什么区别?
    (不知道区别是什么意思,于是我就答了我对fork的理解)fork的返回值是不一定的,如果是在父线程,返回值为0,如果在fock创建的子线程中,返回值为线程号。(刚发现我好像答错了,fork是用来创建新进程的,而不是线程)

  13. 子线程和父线程有什么区别?
    (又是问区别,同样不太能理解题意,所有又答了自己的理解)。如果一个进程没有多线程的话,那它自己本身就是一个主线程,当创建了子线程时,子线程会有自己的栈数据,但跟主线程共享全局数据。

  14. 你的这个安卓项目,使用了web Socket,是用来干什么的?
    这是用来实现多人聊天的。因为http是一个“拉”的协议,它只能由客户端主动向服务端请求数据,所以做不到后台转发用户的消息,所以用了web socket来达到转发消息的效果。

  15. 好了,我要了解的差不多就到这里,你还有什么问题要问的吗?
    请问结合我今天的表现,我还需要学习一些什么方面的东西?或者说,如果要来网易实习,我还需要学些什么?给我的回答是:虽然我不知道你们学校的课程安排是什么,不过不管怎么说,。。balabala。。等这些基础永远都是最重要的。你今天表现得很好,很不错。(这句话我记得不只说了一遍,挺幸运的,觉得初试应该能过)
    然后我又问是不是还有二面?回答是:他们之后会安排,大概在一周之内应该会发邮件通知你的。
    然后就是道谢,互相道别。
    完。

以下是这次面试的感想:

  • 这次的面试官还是很随和的,全程微笑,而且不会故意刁难,即使答错了也会说没关系。
  • 自我介绍还挺重要的,这是引导面试官问自己比较熟悉的知识点的黄金机会,因为面试官也不会说故意刁难面试者,还是愿意问一些比较符合面试者能力的问题的,所以自我介绍的时候就应该多说说自己擅长的东西,或者自己做过的比较熟悉的项目。比如我这次就说了计算机网络的项目,因为这一门学得比较好,果然一说完,前几个问题就都是计网的,差不多都能答得上来,给了面试官一个好的印象,也给回答后续问题增加了信心。
  • 除了自我介绍,简历也在一定程度上决定了跟面试官讨论话题的走向,在面试的过程中,面试官一般是通过简历引发问题的,所以简历上做过的项目一定要写自己熟悉的,还有能力技能也要符合自身情况,写了哪些方面的,面试之前最好准备充分,因为拿不准就会被问到,要是一问三不知,就有点尴尬了。
  • 发现这次问了好多都是基础知识,好在刚好最近有复习到这些,回答得还行,虽然有一些答不上来,但那些大部分都是基础之外的东西,之后可以慢慢了解(但能答得上来的话肯定更加分啦),基础知识答好了可以给面试官很好的印象,因为基础好,说明学习能力不差,有潜力,其他不懂的以后都可以学习补回来。
  • 虽然以上好像描述得这次面试好像很从容似的,但其实我知道这只是初试而已,相对比较简单,下次应该会更难,心里还是有点压力的。

这是我的第一次职场面试,希望以上的描述,能对你有所帮助。共勉,ヾ(◍°∇°◍)ノ゙。

猜你喜欢

转载自blog.csdn.net/Runner1st/article/details/88674623
今日推荐