记录一次腾讯的面试
说起来挺魔幻的,事情起因这样滴。。
五六月份的时候,西安腾讯云子公司在boss上找我要了一份简历,给我安排了面试。
一面主要问了下项目,es6的语法,设计模式等等。。其实不是很难,只是那时候没有准备,现在去应该能过一面。。
然后前几天,成都腾讯企业微信组的hr找我(捂脸),说在简历库看到我的简历,让我去面试,我也没多想,反正就当积累经验了。
然后开始了痛苦的三个多小时。。。(下面除了算法题我琢磨出了答案,其他的只是个大纲,作为以后学习的方向)
自我介绍
上来面试官小哥哥先自己我介绍了一下,然后我大概说了一下自己的姓名,什么时候毕业,几份工作的起止时间和主要做的事。
算法题
在腾讯会议的聊天窗口发给我了一个链接,点开后是一个实时同步的代码编辑器。
第一次遇到这种面试,人有点懵,原来子公司和总公司难度差距这么大奥。。
虽然我算法很渣,但题还是要做的嘛。
四十五分钟两道题,结果时间超了,第一条我做出来了80%吧,后面大佬诱导我找到了正确答案。
第二题就简单说了一下思路,但是都不对。首先,用随机数随机,放进数据被pass了,如果随机数范围不变,会有两个元素随机到一个位置的情况,如果随机数范围变化,后面的元素就必定不会被放进已经占用的位置了,这样每个元素在每个位置的概率就不相同了。
第一题的解题思路和代码:
- 先将目标数组去重。
- 使用map将任意类型的数据当做key的特性,存储Object=>count,来记录每个对象出现的次数。
- 然后就是map的遍历取值。
反思:我一时间没有想起来使用Map,走了很多弯路,如果将原题数组中的对象换成值类型数据,是不是就非常简单了。。
ps: Map这个数据结构,我这辈子都忘不掉了(捂脸)
第二题的解题思路和代码:
第二题我google了一下,好像是一个类似lodash的库的一个源码的思想,看完发现非常简单。。唉,算法就是这么折磨人(小妖精)。
- 好像就只是遍历数组,随机一个当前范围随机数
(~~(Math.random() * (i+1))),交换两个位置的元素。
难点在于每个元素落到任意位置的概率是否相同呢?
原文中有大佬用数学归纳法做了证明。。
我也简单的分析了一下,这里取长度分别为1、2、3、4的数组分析一下,后面依次类推就行了
| 0 | 1 | 2 | 3 | |
|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 0 |
| 1 | 1/2 | 1/2 | 0 | 0 |
| 2 | 1/3 | 1/3 | 1/3 | 0 |
| 3 | 1/4 | 1/4 | 1/4 | 1/4 |
- 第一次循环,0元素在0位置的概率是1,在其他位置的概率是0。
- 第二次循环,1元素在0、1位置的概率都是1/2,在其他位置的概率是0。
- 第三次循环,2元素在0、1、2位置的概率都是1/3,在其他位置的概率是0。
- 第四次循环,3元素在0、1、2、3位置的概率都是1/4。
好了那么,总结一下:
- 数组长度为1时:0元素在0位置的概率为1。
- 数组长度为2时:0元素在0位置的概率为 1 * 1/2 = 1/2,在1位置的概率为 1/2 ;1元素在0、1位置的概率都为 1/2
- 数组长度为3时:0元素在0位置的概率为 1* 1/2 * 2/3 = 1/3 , 在1位置的概率 1/2 * 2/3 = 1/3 ,在2位置的概率为 1/3 ; 1 元素在0的概率为 1/2 * 2/3 = 1/3 , 在 1的概率为 1/2 * 2/3 = 1/3 , 在2位置的概率为 1/3 ; 2元素在所有位置的概率都为1/3。
- 依次类推。。我承认是有点绕。这是我的笨办法。。
框架
说一下自己用过哪些node框架,说一下优缺点。。
我就说了一下express,koa,nest这些,就说了express比较重,koa轻一点啊,nest写法好维护啊巴拉巴拉一些(优缺点的话网上有一堆,但是让我切身经历和感受到的真没有。。),然后说了一下express和koa中间键的区别(一个类似队列,一个类似栈)。
koa中间键有什么好处?express可以试下koa中间键的写法吗?什么情况下需要第一个中间件最后执行?
有点懵逼…
性能调优
分享一下性能调优的经历,前端,服务器,数据库都可以。
巴拉巴拉说了一点。。
源码
平时有看过node或者一些优秀框架的源码吗。
这个在论坛上看过别人分析源码,印象比较深刻。。说了一下v8的事件循环机制,每个阶段干了什么。弄懂这个基本所有的异步代码执行顺序题都是小儿科了。。所以说有条件还是要多看看原理类的东西。
其他的就没得了。。面试到这就结束了。。
ps: 挺感谢这次面试机会的,一次经验吧,面试官也很谦虚耐心,没因为我算法题菜打断我。也算是有了学习的方向吧。。另外很多东西在小公司真的是八辈子用不到也接触不到啊,只能自己琢磨。。降维打击啊。