第一问:TCP与UDP的区别
参考答案:
1.基于连接与无连接
2.TCP要求系统资源较多,UDP较少;
3.UDP程序结构较简单
4.流模式(TCP)与数据报模式(UDP);
5.TCP保证数据正确性,UDP可能丢包
6.TCP保证数据顺序,UDP不保证
考点:听说腾讯必考TCP,反正TCP的三次握手、四次挥手、拥塞控制必须倒背如流,熟悉到每一个细节,TCP和UDP编程的步骤、还有漏包了怎么办等等。
第二问:http与https、端口是否可以互换、HTTPS的加密方法、HTTPS如何获得密钥
参考答案:
1.HTTPS协议需要ca申请证书,一般免费证书较少,因而需要一定的费用。
2.http是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的ssl加密传输协议。
3.HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。(说到这里面试官问我,端口是否可以互换?当时很紧张脑袋一片空白,直接说了不可以,后来想了一下现在很多HTTPS好像用的80端口,心态就崩了)
4.HTTP的连接很简单,是无状态的;HTTPS协议是有ssl+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。
HTTPS 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是说 HTTPS 使用了隧道进行通信。
通过使用 SSL,HTTPS 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。
HTTPS 采用混合的加密机制,使用非对称密钥加密用于传输对称密钥来保证传输过程的安全性,之后使用对称密钥加密进行通信来保证通信过程的效率。
非对称密钥加密,又称公开密钥加密(Public-Key Encryption),加密和解密使用不同的密钥。
公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。
非对称密钥除了用来加密,还可以用来进行签名。因为私有密钥无法被其他人获取,因此通信发送方使用其私有密钥进行签名,通信接收方使用发送方的公开密钥对签名进行解密,就能判断这个签名是否正确。
对称密钥加密(Symmetric-Key Encryption),加密和解密使用同一密钥。
考点:还是应用层。由此可见。腾讯非常注重应用层的知识点,反正就是会从你的回答中一直延伸问到你不会的点为止(或者是他也问不下去??),好像其中还问了一下服务器缓存部分,也略略说了一下。
第三问:Android多线程通信
参考答案:
四种基本的线程之间通信方法
1.通过handler机制
2.runOnUiThread方法
3.View.post(Runnable r)
4.AsyncTask
考点:如果投客户端方向应该都会问,特别是安卓方向的。当时只回答了Thread类和实现Runnable,面试官有点不满意,又说了下handler,感觉勉强过这题。只说出接口是远远不够的,问出来这些方法还会问源码的实现,所以还要回去恶补一下。面试官狠狠地批评了我对源码的不熟悉- -!!!还问到volatile原理,我是直接原地死亡,感觉这里彻底凉...
第四问:栈的接口有哪些?
参考答案:
考点:也是考源码其实,回答出来API也是没用,不过最好分清楚阻塞和异常,然后源码的实现,也要很熟悉。
第五问:队列数组实现(阻塞情况,但队列头已走)
参考答案:
public Boolean EnQueue(Object e) {
if (size >= length) {
return Boolean.FALSE;
}
if (header == tail) {
header = 0;
arr[header] = e;
tail = 1;
size++;
return Boolean.TRUE;
} else {
arr[tail] = e;
tail = tail + 1;
size++;
return Boolean.TRUE;
}
}
考点:链表处理enqueue很简单嘛,然后面试官就考了个数组的,最近才开始复习数据结构,答了一半就被否定了,想了想自己的思路也是错的就说没有复习到源码。凉凉.....
第六问:聊聊HashMap
参考答案:
刷牛客用很多HashMap,用是用的很熟悉,原理也懂,当时表述不是很清楚,面试官也直接问源码去了,我就再次死亡....
这里推荐大家移驾到:https://www.cnblogs.com/chengxiao/p/6059914.html
这位大佬写的很详细,图也画得很好~
考点:也是考的java源码,个人觉得hashmap真的是个好东西,回去苦看源码吧。
第七问:有接触过什么设计模式吗(单例模式接触过吗)
考点:这个真没想到会问- -,so..I DIED 如果投客户端方向,面试官也提醒我一定要多了解这方面。
第八问:怼项目
最后少不了问我最近在做什么项目,对自己做的项目有什么看法,有没有遇到什么困难等等;面试官对我做的Android wear项目很感兴趣,着重问了我们想用什么设备测试,我说应该小米手环吧,比较成熟,感觉面试官有点失望,但是我想腾讯好像也没有这方面的开发啊- -,又接着问我小米有支持我做这个项目吗- -,面试经验不足的我吹不下去了....
心得
第一个面试就是腾讯,真的措手不及,而且我对于面试还没有真正去准备,最近都在刷题写代码。而且当时非常紧张,后来想起来,有些因为紧张答错的真的很不应该。紧张根本就是愚蠢的,一定会改正自己这个坏心态。面试官每问一个问题之后,都不要紧张,可以说:好的,我整理一下思路,然后沉默一分钟左右都是可以接受的,电面面试官都很耐心,我后来想,急急忙忙地马上回答反而显得不成熟且不认真。如果说笔试考的是数据结构、算法、逻辑能力,面试就是对计算机网络、操作系统、java编程思想及源码等基础知识的考察。还有对源码的熟悉程度吧。接下来的复习任务大概分为:算法系统刷题、源码理解、计算机网络(必须实践)、操作系统、安卓的多线程实现等等。