tplink有笔试,笔试题目大部分选择题是智力题,少数两道考了c,还有一些香农定理等。然后问答题问了一个测试的思路,问了路由器的一些基础知识,还有大概两个编程设计题,编程题是考的字符串的排列。
笔试后大概3天收到面试通知。去了之后了解到这次的面试一共有4轮。
1面:hr面+技术面
hr面20分钟左右,就是正常的聊天。会问到奖学金以及比赛以及一些对求职的看法。
技术面40分钟
--介绍项目,针对项目问了问题,例如最难的地方
--了解实习项目,问测试思路。
--问到测试的工具是否有了解。为什么选择测试。
--问到机器学习算法LR和SVM 的原理
LR:线性回归模型,通常用作二分类,从训练数据特征学习出一个0/1的分类模型,以样本特征的线性组合作为自变量使用logistic将自变量映射到0-1上。
SVM:支持向量机,平面切分;
--python中的except,很久没看python语法了,可能还是需要回头再复习一下。
try...except...else,except 相当于java中的catch吧。
--重写和重载的区别
重写:发生在子父类间,需要参数列表相同,返回值类型相同(Java5及以前)。
重载:发生在同一类间,参数列表不同,函数名相同,返回值类型不做限定。
--值传递与参数传递
Java总是采用值传递(普通类型和引用类型),函数参数是其一个拷贝,对其更改不影响本来的值。
--内存泄漏如何检测
不能被GC回收却占有内存(可达但是不可用),常见于静态集合类,监听器,链接等等
预防:确认一个对象无用后将其设置为null
常用工具:Optimizeit Profiler,Purify等检测java程序运行时对象的申请释放,内存情况。
--Java项目:没有做过
--问到了笔试题里面的一个题目,测试路由器。问是否有更好的办法。并手写自己的解答方案。
--线程死锁的原因
竞争非剥夺性资源,进程推进的顺序非法
条件:互斥(只能有一个进程用),请求和保持(已经保持了一个资源,但又提出了新的请求),不剥夺,环路等待。
解决方法:加锁顺序,加锁时限,死锁检测
--http请求过程
域名解析->发起tcp的三次握手->建立连接后发起http请求->服务器响应,发回html页面->浏览器解析html页面
--tcp与udp的区别,及应用场景
tcp:文件传输,发送和接收邮件,远程登录
udp:及时通信(qq),在线视频,语音电话
--域名解析
DNS域名解析系统: 本地域名服务器代主机进行查询,在本地域名服务器及主机都有缓存。域名->ip地址
--ipv4环境下访问ipv6地址,网络的问题需要再进行复习
方案一:4to6的隧道
方案二:自建VPS S-S服务器
方案三:购买支持ipv6的VPN
--是否获得了实习的offer
2面
3天后收到2面,视频面试,还是去的酒店里公司提供的电脑。由于网络原因只进行了视频,没有桌面共享。
1.因为第二个项目写的是关于SSL协议的。问了SSL协议的链接过程。
客户端发送协议版本号,一个客户端生成的随机数,以及客户端支持的加密算法。
服务器确认加密算法,发送服务器证书,一个服务器端生成的随机数。
客户端确认证书有效,生成一个新的随机数,用公钥进行加密,发送给服务器端。
服务器端使用私钥进行解锁。
客户端与服务器端根据定好的加密算法,用过程中生成的三个随机数生成对话秘钥,之后的加密都采用这个秘钥。
2.哪些情况下会进行客户端证书的验证
单向验证:只验证服务器端证书,未被屏蔽的情况下所有用户都可以访问
双向验证:客户端也需持有CA证书,服务器端进行验证,只有服务器端允许的用户才能使用。一般用于企业级应用对接。
(1). 浏览器发送一个连接请求给安全服务器。 (2). 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。 (3). 客户浏览器检查服务器过来的证书是否是自己信赖的CA中心所签发的,如果是,就继续执行协议。如果不是,客户浏览器就给客户一个警告消息,警告客户这个证书不是信赖的,询问客户是否需要继续。 (4). 接着客户浏览器会比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。 (5). 服务器要求客户发送客户自己的证书,收到后,服务器验证客户的证书,如果没有通过验证,拒绝链接。如果通过验证,服务器获得用户的公钥。 (6). 客户浏览器告诉服务器自己所能够支持的通讯对称密码方案。 (7). 服务器从客户发送过来的密码方案中,选择一种加密程序最高额密码方案,用客户的公钥加过密通知浏览器。 (8). 浏览器针对这个密码方案,选择一个通话密钥,接着用服务器的公钥加过密后发送给服务器。 (9). 服务器接收到浏览器传送过来的消息,用自己的私钥解密,获得通话密钥。 (10).服务器、浏览器接下来的通讯都是用对称密码方案,对称密钥是加过密的。 |
3.对称加密和非对称加密
对称加密:加密和解密使用的是同一个秘钥。DES,AES,3DES
非对称加密:加密解密采用不同的秘钥。RSA,ECC
4.tplink有面试记录,又问了一面不知道的lr模型,以及和svm的区别。
5.如何在udp上搭建安全的连接
需要在udp上层搭建自己的协议,实现类似于TCP的确认应答,超时重传,有序接收。采用UDP数据包加序列号或时间戳。目前有RUDP,UDT,RTP。
RTP提供有效负荷类型识别,乱序重排和利用时间戳的媒体有效播放。 RTCP监控服务质量,也提供在一个当前进行的会话中传送关于参加者的信息作用。 RTP对于下层协议是独立的,它能够工作在像TCP/IP,ATM,帧时延等类型的网络上。 如果被下层网络支持,RTP支持利用多路技术的对于多点的数据传输。 RTP序列号也能被用来确定包的合适位置。例如在视频解码,包无需按序解码。 |
6.登录页面如何进行测试
1.测试的流程:需求分析,测试点的提取,设计测试用例,测试
2.按测试类别进行分类
功能测试:我认为可以按接口测试的方法进行,如果存在调用其他接口也存在接口测试的必要。
0. 什么都不输入,点击提交按钮,看提示信息。 1.输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。 2.输入错误的用户名或者密码, 验证登录会失败,并且提示相应的错误信息。 3.登录成功后能否能否跳转到正确的页面 4.用户名和密码,如果太短或者太长,应该怎么处理 5.用户名和密码,中有特殊字符(比如空格),和其他非英文的情况 6.记住用户名的功能 7.登陆失败后,不能记录密码的功能 8.用户名和密码前后有空格的处理 9.密码是否加密显示(星号圆点等) 10.牵扯到验证码的,还要考虑文字是否扭曲过度导致辨认难度大,考虑颜色(色盲使用者),刷新或换一个按钮是否好用 11.登录页面中的注册、忘记密码,登出用另一帐号登陆等链接是否正确 12.输入密码的时候,大写键盘开启的时候要有提示信息。 |
界面测试:
1.布局是否合理,2个testbox 和一个按钮是否对齐 2.testbox和按钮的长度,高度是否复合要求 3. 界面的设计风格是否与UI的设计风格统一 4. 界面中的文字简洁易懂,没有错别字。 |
性能测试:
1.打开登录页面,需要几秒 2.输入正确的用户名和密码后,登录成功跳转到新页面,不超过5秒 |
安全测试:
1.登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取) 2.用户名和密码是否通过加密的方式,发送给Web服务器 3.用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript验证 4.用户名和密码的输入框,应该屏蔽SQL 注入攻击 5.用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击) 6.错误登陆的次数限制(防止暴力破解) 7. 考虑是否支持多用户在同一机器上登录; 8. 考虑一用户在多台机器上登录 |
可用性测试:
1. 是否可以全用键盘操作,是否有快捷键 2. 输入用户名,密码后按回车,是否可以登陆 3. 输入框能否可以以Tab键切换 |
兼容性测试:
1.主流的浏览器下能否显示正常已经功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等) 2.不同的平台是否能正常工作,比如Windows, Mac 3.移动设备上是否正常工作,比如Iphone, Andriod 4.不同的分辨率 |
7.项目是否是用到https,证书如何签发。
证书可以自己制作。
国内许多公司的做法:自己做根证书CA(自己充当类似于VeriSign的角色),然后让用户下载安装根CA(当然了,其中只含有公钥)到机器中,12306就是这样干的(SRCA就是12306的根证书),然后再自己给自己颁发服务器证书,这样用户机器上也有他的CA,服务器发来的服务器证书也是这本CA颁发的,当然也顺利通过了 |
8.5万个人的年龄如何进行排序
忘记问是将人和年龄作为一个类进行考虑,还是直接考虑年龄的排序就可以。回答的是第二种。
首先常用的快排等等nlogn的算法都是可行的。面试官问是否有更快的算法。因为年龄一般在0-150以内,所以可以采用额外的空间来换取时间。遍历,对应年龄的计数+1,然后再次遍历辅助空间进行输出即可。
9.智力题
25匹马,从里面选出最快的3匹,每次只能最多5只一起比,最少需要几次。
选择出最快的一匹马需要5*5的比赛选出最快的5只,然后再比一次,就是6次。
第二名会在第一轮第一组的第二名和第二轮的第二名中产生,此时7次。其余三组没有成为第二的可能。
第三名:第二名是第二轮第二名的情况,第三名应是第二轮的第三名和第一轮第一组的第二名以及第一轮第二组第二名之间最快的。这种情况8次。第二名是第一轮第一组第二名的情况,第三名应是第二轮第二名和第一组第三名之间的比较。也是8次。
10.java的垃圾回收机制及system.gc()是否会立马进行
system.gc()只是通知jvm准备进行一次垃圾回收,往往不会立即执行甚至不会执行。
其实当我们直接调用System.gc() 只会把这次gc请求记录下来,等到runFinalization=true 的时候才会先去执行GC,runFinalization=true 之后会在允许一次system.gc()。之后在call System.gc()还会重复上面的行为。 |