阿里巴巴内推面试一面——搜索事业部

体验非常好,阿里的面试官人也很好的,阿里自我介绍完了以后,第一个问题是你的论文做的是什么,我都***动哭了,当时我就说,谢谢你们,谢谢你们尊重我研究生的劳动成果,你们是第一家问我论文的公司。面试时间:50分钟
问题1.聊一下论文
问题2.聊一下学校项目
问题3.聊一下实习项目
问题4.const的用法,放在函数前面和函数里面有什么区别?
1、在函数名后面表示是常成员函数,该函数不能修改对象内的任何成员,只能发生读操作,不能发生写操作
2、在函数前面,返回值不可修改
问题5.显示类型转换和隐式类型转换static cast等?
C++中的强制类型转换一共有4种:
1.static_cast:编译时进行类型转换,可以进行正常的类型转换,子类转换成父类,Void*与其它类型的指针转换
2.dynamic_cast:运行时进行类型的检查和转换,主要用于父类和子类之间的转换
3.const_cast:去除指针或引用的const类型
4.reinterpret_cast:编译时就会进行类型的检查翻译和重新解释,用于无关系的类型转换
问题6.程序运行时,内存怎么分配?全局变量存在哪里?
问题7.根据后序和中序,算前序遍历,就口算一下就行
问题8.非递归中序遍历
问题9.连续子数组最大和
问题10.TCP为啥是3次握手,不能是两次,挥手为啥要4次不能是3次,为啥要等2MSL?
为啥3次握手?

如果两次,那么B无法确定B的信息A是否能收到,所以如果B先说话,可能后面的A都收不到,会出现问题 。

如果四次,那么就造成了浪费,因为在三次结束之后,就已经可以保证A可以给B发信息,A可以收到B的信息; B可以给A发信息,B可以收到A的信息。
下面是我在网上看到到一个博主写的很生动的实例,可以帮助像我一样的非科班懒人来理解。

为什么不能2次握手?

        这里我们用一个现实的例子来解释.就拿大家都喜欢的约会来解释.发送端相当一个男生,接收端是一个女生.一开始,男生发送一条微信告诉女生,今天晚上九点在公园见面呗,然后这条消息因为不可抗力,没有发送到女生的手机上,这时,这条消息有两个去路,一个是彻底消失,另一个是它迷失在网络中,没有找到方向.回来继续说,男生看女生没有回应,就又发了一条一样的微信,这次微信顺利的发过去了,男生女生也顺利的见面了,这一天也就这么过去了.到了第二天,那条迷失在网络中的微信重新找到了方向(真正的网络信息不可能滞留这么久,例子而已),发到了女生的手机上,女生一看,很高兴,毕竟昨天玩的很开心,以为今天又可以开心一次,就又去了,男生昨天玩了一晚上,身体跟不上,就在家躺着,也早忘了那条迷失的微信.就这样,女生在公园等了很久,很难受.

其实上面的例子已经说的很明白了,保险起见,再在具体连接里说一下.如果是两次连接,很可能发生上面的问题,如果有消息在一次tcp连接完成后才到达接收端,那么接收端以为是新的连接,就会发确认报文到接收端确认并建立连接,但发送端可能已经关闭,即使没关闭,在没有到达SYN-SENT状态时,也不会响应接收端的确认信息,接收端可能就这样等待,这在网络中就浪费了资源.

        3次握手就一定安全吗?为什么不进行4次握手?

        即使是三次握手也不能保证百分百的连接确定,想象一下这样的场景,两军对阵,A军分两部分位于两个山头,B军在两山之间,只有两个A军联合才能战胜B军,但是两个A军之间的路径就只有经过B军的一条线路.任何送信人都有可能被拦截杀掉.

 这个时候,如果两A军想联合出击,必须派出密探传送进军指令,这就有一个问题存在,假设第一次送信成功,A2知道了A1的计划,那他必须再发一一封信告诉A1自己知道了,不然A1怎么知道A2收没收到,万一信被拦截了,自己明天一个人去,不是找死.再假设A2给A1的表明自己收到信息的信也顺利发到A1了,那就安全了吗,这个时候A2就担心自己的信送没送到,万一没送到,那明天自己去,不也是找死.显然A1也知道这个问题,所以又要发送第三封信,告诉A2自己收到信了,我们再一次假设,A2收到了这第三封信,但是同样的问题又发生了,A1还是担心这第三封信送没送到,毕竟关乎生死,A2当然也知道,就只能再送信,

可以看到,这样其实是没有止境的,也是无解的,在TCP协议中,我们不使用四次,五次握手,是因为达到的效果是一样的,但是消耗更多的资源,得不偿失

为什么要4次挥手不能两次呢?

        因为服务器在接收到客户端的FIN,表示停止发送以后,服务器可能还要信息需要发送给客户端,所以先发ACK同意客户端的FIN,防止客户端重传FIN,然后服务器将消息发完后,再发FIN表示自己也要断开连接。

Time_wait2为什么会等2MSL

        客户端收到服务器的FIN后会再等一个2MSL,是为了保证服务器能收到客户端发的ACK,客户端发送ACK给服务器需要一个1MSL的时候,这时服务器要是没收到这个ACK,则会重传一个FIN,而重传的这个FIN到达客户端所用的时间也是1MSL,加一起就是2MSL,所以如果客户端等了2MSL并没有收到服务器重传的FIN的话,说明服务器已经收到客户端的ACK.。

分割线————————————————————————————————————————————————————————————————————
其实一面相对来说还是问题还是比较基础,虽然问题5我也答不出来
另外,希望找一些能一起刷题互相帮助做笔试的小伙伴,每次做笔试重新找人一起太麻烦,本人目前水平,剑指offer刷完一遍,letcode中等难度刷完100题,虽然算不上大佬,但能保证绝不坑你,水平跟我差不多的,且总是独自一个人找不到小伙伴的可以私信我,加个好友,以后可以一起,大佬的话,应该也看不上我这种水平,我也就不给您拖后腿了,诚意求小伙伴!
#阿里巴巴##面经##内推##秋招##实习#
全部评论
都给我哭😂
点赞 回复 分享
发布于 2019-08-10 11:30
是算法吗?
点赞 回复 分享
发布于 2019-08-10 11:32
还是挺基础的,简单。
点赞 回复 分享
发布于 2019-08-10 17:06
顶一个,老铁6666666666
点赞 回复 分享
发布于 2019-08-10 17:17

相关推荐

offer多多的六边形战士很无语:看了你的博客,感觉挺不错的,可以把你的访问量和粉丝数在简历里提一下,闪光点(仅个人意见)
点赞 评论 收藏
分享
1 22 评论
分享
牛客网
牛客企业服务