BAT 电话面会问你什么问题呢?假设你突然接到了电话,面试官问你以下问题,你会说出怎样的回答呢?
以下是我的复盘,仅给大家做个参考。
讲一下你了解的排序算法?
可以根据 时间复杂度 来划分:
- 时间复杂度为 O(n²) 的主要有:冒泡排序、选择排序、插入排序。
- O(nlogn) 的主要有:快速排序、归并排序、堆排序。
- 比较特殊的有:基数排序、桶排序等。
从有序数组中找出第 K 大的数,你会用哪些方法?
比较常用的有两种方法:
- 在数组中,基于 快速排序,当分界点 mid 索引为 k-1 (从 0 开始)时,左边的数都小于 mid,右边数都大于 mid,此时分界点 mid 为第 K 大的数。注意这里改变了数组元素的位置。
- 维护一个 K 大的「大顶堆」(父节点值大于等于子节点值),遍历数组完成建堆和堆化的过程,当数组便利完成堆顶数就是第 K 大的数了。(推荐使用,不改变原有数据顺序)
这道题还能进一步扩展:找出前 K 大的数。这里快排解法思路不变,方法 2 由「大顶堆」换成「小顶堆」(父节点值小于子节点值)。
讲一下你对 TCP 协议的理解?
这个范围太广了,我也只记住一些常听见的名词。
首先,从网络的体系结构来看,TCP 协议是位于 传输层(运输层)的协议。是一种 面向连接、可靠的、基于字节流、尽最大努力交付 的传输协议。
其次,TCP 数据传输特点:无差错、不丢失、不重复、按序到达。
Telnet、SMTP、HTTP、POP3 等应用层协议都是基于 TCP 的。
TCP 传输过程可以概括为:三次握手(建立连接),四次挥手(断开连接)。
三次握手:1、客户端向服务端发送建立连接的请求;2、服务端接收到请求,发送确认连接请求;3、客户端接收到确认,发送客户端确认信息,服务端接收确认,连接建立成功。
四次挥手:1、客户端发送断开连接请求;2、服务端接收到断开连接请求,发送确认断开。3、等待一段时间后服务端发送服务端断开连接请求(处理完未发送消息);4、客户端接收到服务端确认断开、服务端连接断开请求后发送确认关闭,服务端接收确认关闭,关闭本次 TCP 连接,完成四次挥手。
介绍一下你简历中出现的 XX 项目?
主要介绍一下项目使用的技术栈、功能模块,面试官会根据你的回答针对性问你下面的问题,所以你需要对你的项目比较熟悉,最好写一份相应的文档介绍。
开发这个项目你所遇到的最大的困难?
这个各有不同,我的项目里的技术栈大部分来自于自学,而且国内这方面的资源比较少,所以通过 Github、Google、Stackoverflow 我慢慢入门了 ASP.NET MVC 最终实现了我的项目。
为什么选用这项技术?
和现有的技术栈向关联,而且对比 ASP.NET 前后端耦合,ASP.NET MVC 前后端分离的更彻底,网页的设计更方便,其中也集成了类似于 JPA 等技术,可以更快的完成一个网站项目的搭建。
对于未来三年的规划?
自己选择了计算机专业,同时对计算机、互联网也很有兴趣,希望能够在 BAT 这样的公司工作,在技术上成长更多。
岗位方向的选择?
因为面试的岗位是「移动应用开发」,随着 web 2.0 的发展,网页跨平台能力的发展,和 ios 、 Android 等原生语言开发的功能体验差距越小,相对来说网页这一块的潜力更大一些,所以希望是 web 后端的方向,但是具体工作的可以根据公司的需要来安排。
有没有什么想要问的?
问了下接下来还有哪些面试环节,以及这段时间还需要哪些准备。(因为是电话面,面试官没有讲太多,只是建议我好好做好未来几年的规划)
这些题目的答案只是我的一家之言,仅给大家做个参考,如果你有什么更好的答案不妨在留言区给出。菜鸟踩坑,希望大家都能收到自己心仪的 offer。