2019网易游戏测试开发实习电话面试总结

主要分为三次考核来记录

在线笔试

这次一共五道题,前三道题很简单,后面两道暂时没想到怎么做。但是总是有一些case过不去,所以费了很多时间,印象最深的是寻找最长的回文子串,这个很明显要使用DP去做,但是却告诉我内存超出限制,我也没想到其他的方法了,也许该题的本意就是直接暴力寻找。

总体来说,感觉还不错,至少可以通过50%的case,

第一次电话面试:技术面试

一共两位面试官。

首先是出了两道编程题

1)反转二叉树:直接递归DFS即可
2)给定五张扑克牌,大小王是通用牌,判断是否是顺子:直接寻找最长连续子串即可
编程题是通过在线共享文档来描述的,属于很简单的问题

要写一个较为详细的伪代码,然后面试官又让写一下第二道题的测试用例,我起初想的有点复杂,所以总结了所有的情况,但是根据面试官的反应来看,这道题是十分的简单的问题,不需要想那么的发展,都怪我我当时没意识到

接下来是计算机基础知识的考察,

由于我研究生的科研方向是软件工程,所以计算机网络的基本知识还可以,那么就有以下的问题。

TCP和UDP的联系和区别

1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

tcp协议和udp协议的差别 
            TCP             UDP 
是否连接     面向连接      面向非连接 
传输可靠性   可靠          不可靠 
应用场合    传输大量数据    少量数据 
速度        慢            快

参考这个博客TCP和UDP的优缺点及区别

请你设计一个可靠的UDP协议应该怎么做

简单说TCP保证了传输的准确性和相应的流量控制,而UDP不提供任何准确性保证。既然TCP提供这么多完备的方案,为什么还要大费周章地去设计RUDP呢,这里主要愿意可以用两个字概括“速度”,TCP提供了过多的保护,在及时性上做了很多的妥协,比如:控制微包(Nagle算法),延时ACK,流量控制,超时重传等,这些设计严重影响了Tcp的速度和及时性。

帧同步中的UDP帧同步方案中逻辑帧一般都在8~16帧左右,一般都在12帧以上,这要的网络传输频率决定了不可能采用TCP协议,那么如果采用UDP会出现什么问题呢?

1. 丢包,帧同步中逻辑帧在每个Client上一定是一致的,也就是说决定不能出现丢帧的情况,
2. 数据完整性,UDP协议头部虽然有16位的校验和,但是IPv4并不强制执行,也就是说UDP无法抱枕数据的完整性
3. 乱序。 UDP并不保证数据的顺序,故可能出现数据包乱序问题

以上问题任何一项都会导致Client在逻辑帧上出现不同步问题,为了解决这个问题就必须引入RUDP概念,这里的RUDP主要是解决上述的问题,并不某个RFC定义的规范。

RUDP初步简单思路,既然原生UDP有那么多痛点,那我能不能像应用层协议一样在UDP数据包头再加一段包头,从而定义为RUDP呢,答案是肯定的。首先思考RUDP需要解决哪些问题,然后根据问题加上必要的包头字段。


1. 数据完整性 –> 加上一个16或者32位的CRC验证字段
2. 乱序 –> 加上一个数据包序列号SEQ
3. 丢包 –> 需要确认和重传机制,就是和Tcp类似的Ack机制
在思考一下既然是自定义协议是不是需要一个协议号字段来过滤一些非法包,那么又可以加入一个新字段:
4. 协议字段 –> protol 字段,标识当前使用协议

综合以上字段,我们的RUDP就可以简单实现成如下:

2019网易游戏测试开发实习电话面试总结_第1张图片

参考这个博客设计一个可靠的UDP协议

微信是使用TCP还是UDP

微信通讯中使用了HTTP短连接和TCP长连接,并没有用到UDP,其中登陆验证和头像身份信息及日志等功能采用的HTTP,文本消息、语音消息、视频消息、图片消息这些使用的是TCP长连接。通过心跳包来维护长连接状态,300S一个心跳。

微信是一直保持的和服务器tcp连接吗?

微信心跳包是300s一次,google原生的一般是1680s,原因是运营商移动网关会释放tcp端口,tcp协议一般是10几分钟会换掉,udp端口资源更加紧缺,最好一分钟内一个心跳包,否则很容易断开,服务器也就不能推送信息了

接下来是操作系统基本知识

进程和线程的联系和区别

进程是表示资源分配的基本单位,线程是进程中执行运算的最小单位,

进程和线程的关系
(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位。
(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。 同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。
(3)处理机分给线程,即真正在处理机上运行的是线程。
(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

然后问到我做得PLFF Solver用到多线程还是多进程?
我使用的是CUDA的SIMT,当然是多线程,

然后是临界区和信号量

临界区:指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性

信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。为了完成这个过程,需要创建一个信号量VI,然后将Acquire Semaphore VI以及Release Semaphore VI分别放置在每个关键代码段的首末端。确认这些信号量VI引用的是初始创建的信号量

Linux ls -al

ls -al
查看文件信息
drwx------+  9 zyu  staff    306  8 19 21:15 Pictures
drwxr-xr-x+  6 zyu  staff    204  3 30 22:09 Public

第一列:文件的类型与权限
第一个字母代表文件类型:d目录,-文件,l链接文件,b设备文件里的可供存储的接口设备,c表示设备文件里的串行端口设备,如键盘鼠标等一次性读取设备
接下来三个一组,第一组为文件所有者权限,第二组为同用户组的权限,第三组为其他非本用户组的权限
第二列:有多少文件名连接到此节点(i-node)
每个文件都会将它的权限与属性记录到文件系统的i-node中,不过我们使用的目录树却是使用文件名来记录,因此每个文件名就会连接到一个i-node,这个属性记录的就是有多少不同的文件名连接到相同的一个i-node号码
第三列:所有者账号
第四列:文件所属用户组
第五列:容量大小,默认单位B
第六列:创建或最近修改日期
第七列:文件名

关于linux权限等级参考这个博客Linux设置文件读写权限

长链接如何转化为短链接

正确的原理就是通过发号策略,给每一个过来的长地址,发一个号即可,小型系统直接用mysql的自增索引就搞定了。如果是大型应用,可以考虑各种分布式key-value系统做发号器。不停的自增就行了。第一个使用这个服务的人得到的短地址是http://xx.xx/0 第二个是 http://xx.xx/1 第11个是 http://xx.xx/a 第依次往后,相当于实现了一个62进制的自增字段即可。

参考这个博客短 URL 系统是怎么设计的?

最后讲一下单例模式,解释一下

就是单个示例,Java单例模式(Singleton)以及实现

总结来说,感觉不太好,操作系统和计算机基础知识还没来得及复习,所以这些问题都说的很大

第二次电话面试:HR面试

这一轮面试就在扯淡了

首先是自我介绍,谈了我自己的项目,

如何理解软件测试?

测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。

总的来说,网易的HR面试主要是问一些项目的管理、个人性格、个人和团体的合作态度、遇到问题应该怎么做等等基本问题,没有涉及到太多的专业知识

你可能感兴趣的:(2018校园招聘)