终于轮到我来写笔试经验面经了,就在7个小时前结束了第一轮面试。这个博客也将是我博客生涯的开篇,之后应该还会有源源不断的博客,包括日常记录以及知识总结。
我现在大三,参加了腾讯的暑期实习的提前批招聘。笔试是在3天前进行的,我以为会有一些填空题或者一些主观题,但是事实证明考察内容很硬核:五道编程题两个小时。
第一道编程:无限的面值为1,2,3……n的n种硬币组成金额为S,至少多少个硬币。
非常简单,不要想复杂了,当时一看到觉得不会第一道题就要考动态规划吧。其实就是一个很简单的条件判断。
第二道:求一个序列-1,2,-3,4,-5,6……的第i项到第j项的和,也很简单。
第三道:第三题就开始有难度了,具体题目不细说了,比较有迷惑性,但是实际上就是要你算一个数学表达式
n和s的范围都是1到2000。我当时就感觉这道题估计是想让我们写大数加法和乘法,我在不久写过,但我当时估计了一下时间,因为不是很熟我可能要半个小时,加上Debug甚至要飙到一个小时,就随便用long long写了一个,跳到了下一题。
第四题:求一个整数序列(数值不超过n,包括0的自然数)中包括1到n的所有数字的最小连续子序列。
这道题猛戳我的痛点,实际上这道题的类似的字符串版本我是在leetcode看过的,而且是笔试当天看到过,但是当时就没想出来,想要留着之后再想,没有想到笔试就直接考到了……很无语。
这道题的思路我当时其实有想到,需要维持一个滑动窗口,并且需要一个数组或者map来记录每个数的出现次数。
这里贴上leetcode的链接 https://leetcode.com/problems/minimum-window-substring/
这道题我花了很多时间,因为当时觉得自己能AC。结果后来爆了零,而且最后没有时间做第五题和完善第三题,第三题得了60分。
第五题的题目稍微瞄了一下,没有时间做了,是说有n个高度不同的楼从左向右排列,还有不同的颜色,观察者在很左边远处。问题有点记不住了,大概是问观察者能看到多少种颜色。
总之最后我只得了260分,不过最后还是通过了笔试……
面试部分开始,线上面试的。先是让自我介绍,然后问项目经历,感觉自己的项目经历答得很不好……之前看到一句话说我们的简历就是面试官考察内容的目录,的确是的啊……
问题有:
C++的特性有哪些?多态的具体实现?
排序算法有哪些,各自的时间复杂度和空间复杂度是多少?
问完这个题就紧接着让我在左边的代码编辑框里面写一个快速排序。
死锁是什么,死锁避免可以怎么做?
TCP和UDP的区别有哪些?
还有一个编程题是给定两个字符串A到B,从A变到B所需要的最少操作数是多少,操作包括增加插入和删除
是的,我又在leetcode上看过,而且我又***当时没做出来也没看解。我知道要用动态规划,可当时就是没做出来。
就在刚刚没看答案,自己写了出来,感觉其实很简单。哎
leetcode:https://leetcode.com/problems/edit-distance/
还问了一个C++内存的问题,求sizeof(A)+sizeof(B)+sizeof(C),A B C都是自定义的类,类里面有属性,也有函数,还有虚函数,C继承了A和B。
这道题我是完全不知道。之后会查资料。
还有一个问题是,现在每个用户有一个日志,有些日志中有时间错乱的情况,让我思考用机器学习的方法来找出来这些日志。
我当时就懵逼了,一点思路都没有,现在也是……就胡乱说了一些东西。
估计第二轮面试是和我无缘了,总结起来还是觉得数据结构和算法是第一位的,然后leetcode真的要多刷!好好复习一下操作系统、计算机网络还有自己的项目经历吧。