前言
很认真的说吧,在和腾讯面试官的面试的过程。有点感觉是在聊天一样,他们是面试官,但是感觉更像是引路人,不管结果的好坏,在腾讯面试的过程,只要你认真去听去问,就可以学到很多东西吧。
如果你有看鹅厂wo谈会了,也会了解,平时能和这些大牛这样平静的交流的机会也不算很多的,所以希望大家都能够在面试中学习到东西吧,接下来进入正题吧。
腾讯二面
自我介绍
二面的面试官和一面不是同一个面试官,所以在这个时候,我的基本介绍还是和一面一样,介绍自己的基本信息,以及怎么想到学习前端和怎么学习前端。不管怎么样,也都要耐心吧,毕竟即使做一个事情再多,但是你面对的人不同,还是要保持一样的认真,甚至更加认真。
说说TCP/IP连接过程
TCP/IP协议其实如果去理解了真的不难吧,大家可以看看我上一篇文章分享的图解HTTP,连接过程无非就是三次握手:
- 客户端发送一个SYN给服务器,表示想连接。
- 服务器发送SYN和ACK给客户端,表示接受到你的请求了,并且同意连接。
- 然后客户端发送ACK给服务器,表示收到并且连接。
这里我多说一下吧,如果大家理解不了的计算机网络当中的过程,建议大家可以把网络当做是快递公司,客户端当客户,服务器当做商家吧。这样TCP/IP连接的过程无非就是:
- 客户发信息说要和商家买东西
- 商家收到了并且给一个订单给客户填写
- 客户确定之后说我填写完了
然后,就是快递公司进行送快递的过程了
假如TCP/IP连接过程断了会怎么样?
其实这个过程就好比快递公司在送货的时候,快递不见了怎么办,那当然是客户说自己没有收到快递,然后商家又得继续补发(这里我们不考虑快递公司可以赔钱)。大概也是这样理解吧,毕竟TCP/IP协议是可靠的传输协议,万一断了,也是有自己的处理机制的,就是没有收到信息的一方会去检查,然后重新连接重新发送,这里建议大家可以去看看网络的处理机制更加深入了解。
TCP/IP断开的时候双方需要注意一些什么?
TCP/IP断开的时候,大家都知道,TCP/IP断开需要四次挥手:
- 客户端发送一个FIN报文给服务器,表示我将关闭客户端到服务器端这个方向的连接。
- 服务器收到报文后,发送一个ACK报文给客户端。
- 服务器发送一个FIN报文给客户端,表示自己也将关闭服务器端到客户端这个方向的连接。
- 客户端收到FIN后,发回一个ACK报文给服务器,FIN的序号加1。
但是注意,为什么挥手过程,第二步服务器发完信息之后,还要再发一次呢,那是因为,在第二步当中,服务器只是发送说接受到要断开了,但是服务器可能现在还有正在执行的任务,直到干完活了,再去说,现在没事了断开吧。然后客户端再接受信息,就开始断开。
那么大家也就可以理解了,如果在断开的时候,客户端已经不需要东西了,那么亦可将服务器第二步后继续传递数据可以关闭,当然,这也是个人的理解。大家可以把这个想象成客户说不要商家继续发货了的过程。
说说Vue的原理吧
其实Vue的原理的话,我也写过一篇文章,大家可以看看,具体双向绑定数怎么据实现的过程的话,我建议大家可以看看这个文章
Vue当中Dom的改变是怎么出发数据的改变的
如果你看了上面问题的第二篇文章,你就可以理解到是先将跟节点el转换成文档碎片fragment进行解析编译操作,解析完成,再将fragment添加回原来的真实dom节点中。
你觉得ES6当中觉得比较实用的技巧
其实这个的话,本人也写过一篇文章,写了在项目中可能经常要到的语法吧,当然,还有很多使用的,例如Promise对象等,大家可以再看看阮一峰前辈的ES6入门书
js实现异步的操作有哪些
我就简单说几个吧:
- 利用setTimout实现异步
- 使用Promise对象
- 动态创建script标签
- 利用script标签提供的async
- 还有ES6里面async函数,使得异步操作变得更加方便
对于性能优化,你的指标是什么
其实本人虽然做了一些项目,但是用到的指标可能不多,主要也是两个:
- 静态文件的大小
- 加载静态资源需要的时间
但是真正的话,需要的不只是这些,需要的是
- 最大限度地减少HTTP请求
- 使用内容分发网络
- headers添加一个Expires或Cache-Control头
- 用gzip的压缩内容
- 将样式表在顶部
- js代码放在底部
- 避免使用CSS表达式
- JavaScript和CSS放在外部
- 减少DNS查找
- 缩小JavaScript和CSS
- 避免重定向
- 删除重复的脚本和样式
- 减少DOM元素的数量
等等等等方法,这里我就不多做介绍,虽然这些方法很多我在项目中其实都用到了,但是都是因为一开始养成了良好的编程习惯了而导致以为这些都很正常,不过大家可以把这些知识更加的系统化吧,不然不归类的知识很容易就忘掉。
你在编写Vue的时候是怎么测试的
其实本人主要是用工具吧,Vue Devtools,当然,网上还有很多方法,本人在看vue2.0实践教程也教了不少的调试方法,但是的话,对于自己编写的程序,还是条理清晰的,所以就没用特别多的方法。
对于操作mysql的语句,你觉得有什么地方可以优化
这个主要是因为本人在简历也写了本人做的一个全栈的项目吧,mysql+nodejs+axios+vue全家桶+element-ui实现的一个学生信息管理系统。其实对于数据库mysql的优化,本人也是看过不少视频,但是过程中,印象比较深刻的就是:
- 合理建立索引
- 避免多次连接查询和嵌套查询
- 避免数据类型不一致
- 禁止不必要的ORDER BY排序
- 批量INSERT插入可以合并插入
了解过慢查询吗
这个说实在的,了解过,只是毕竟是数据库的一个深入的优化的过程,基本的过程其实就是:
- 先运行看看是否真的很慢,注意设置SQL_NO_CACHE
- where条件单表查,锁定最小返回记录表。这句话的意思是把查询语句的where都应用到表中返回的记录数最小的表开始查起,单表每个字段分别查询,看哪个字段的区分度最高
- explain查看执行计划,是否与b预期一致(从锁定记录较少的表开始查询)
- order by limit 形式的sql语句让排序的表优先查
- 了解业务方使用场景
- 加索引时参照建索引的几大原则
- 观察结果,不符合预期继续从1分析
说一下git操作,git怎么进行多人协作
git操作的话,本人是从大一就使用github了,而且接触到的东西基本都是用git管理项目,因此比较熟悉一点,大家不熟悉建议可以看看廖雪峰前辈的git教程
说一下你学习的路线,怎么高效率的学习
其实这一点的话,我是深有体会啦,一面的面试官就教过我。那时候真的是获益匪浅吧,因为本人学习前端一年的过程当中,先把基础学好,后来又学习框架运用。在过程当中,接触到了很多新的知识,也不断地去关注前端前沿技术的发展,但是在过程当中,还是没有将知识体系化,而且整理出自己的一套解决问题的过程,我相信这也是很多人都会遇到的。不过还好,被腾讯官提了一下之后,本人也恍然大悟,将之前学习的基础知识再一次回顾和总结,因为当初理解的比较透彻回忆起来也比较快。
说说你在js高级教程第三版当中看到的一些实用的技巧
这个技巧其实很多的啦,我这里就不多说了吧,一本书里面,每个知识点都是一个小技巧。
说说快排
快排是比较简单的排序算法了,不懂的同学可以自行百度一下咯,各大排序算法的优势劣势原理都要了解一下的啦
还有什么问题想问的吗
这个问题其实,我还是和一面一样,毕竟,能够和腾讯大牛聊天真的是一个不错的机会,我就请教面试官对我的表现评价一下,毕竟,这样能够进步的机会也不算很多,要珍惜。
总结
腾讯面试官真的很nice,过程中,我耳机可能不好,有时候听不清楚问题,我去问清楚的过程,面试官还是很耐心的跟我讲解,而且面试过程中也对我进行指导,学习到不少的东西吧。反正,敢于挑战,敢于尝试,给自己打鸡血努力吧。