这次阿里拜的原因主要是在面试前经历了好几次狼来了的游戏,每次打来电话都以为是面试,结果发现都不是,所以导致我以为这次也是一次乌龙,没好好重视。
面试时间:1h左右
项目
- TCP和UDP的区别
我讲到了TCP粘包的问题,然后有了第二个问题。 - 什么是粘包,后面还问我我们是怎么处理粘包的
我说我们是有定义包头包尾的,所以就算有粘包,等下次补齐剩下一部分就好。 - 为什么TCP分段是以1500分的?
其实这里我也不太清楚,之前猴子面试也被问到,我之前查了,可是没查到啊。我只能说是链路层以太网的规定,如果链路层选择其他网络传输可能会不同。 - 为什么不直接用keepAlive?
因为我说到心跳包。我说因为keepAlive在Qt上只能用标志位设置,面试官给我说可以把fd取出来设置啊,我。。。。
然后我说心跳包的里另外一个原因是时间戳,因为网关太low了,没法带时间戳。 - 心跳包多大?是单独发送的吗?
我当时说的是单独发送的,他问我确定吗。我就有点怕了,但是我一想当时校准的时间是没有问题的,所以我就很肯定的说了。然后我也补充说这样传输代价很高,我也承认。 - 并发数是多少?怎么保证并发的?
我说是新有连接就新建一个链表,有消息之后会异步通过Qt的槽和信号机制来实现。事实上也是这么做的。我觉得幸亏没有胡嘴什么多线程多进程。因为如果多线程多进程涉及非常复杂的数据同步(缓冲区),多进程开销又比较大。 - Qt的槽信号机制是什么,底层怎么实现的
这还是第一次有面试官问我Qt的问题。我说槽和信号其实都是两个处理函数,用connect连接。当有信号的时候,就触发slot的函数执行。其实这块我有点记不清。底层就不知道怎么实现了。 - 异步和同步是什么?异步底层是怎么实现的。
异步和同步概念说了。
但是异步我没看啊,晕,我只看了IO复用,我给他说异步是通过iocp实现的。他说iocp怎么实现的。我就直接时候不知道了。
Java
Java问的问题都是我很早以前看的,但是已经忘记的东西,包括限制符和JVM
- 几种限制符,分别代表什么。protected修饰的在同名的包类的其他类可不可以访问。
- 内部类有几种。public static修饰的内部类是什么(布吉岛)
- 了解JVM吗,JVM是什么
- 垃圾收集。几种垃圾收集算法比较
算法
1.刚开始让我写插入排序,然后改变主意让我写选择排序,说选择排序比较简单。呵呵,我这两个都忘记了。我就问他能不能写快排,我说选择排序忘记了。他说好,然后写完了。
- 给一个字符串让转换成HashMap
- 不让用split又转了一次。
问他我有什么说不对或者不好,他说都挺好,我就很生气,阿里面试官都这样,根本不指出你的问题,一直说你好,完了把你一挂。