2018秋招小结

腾讯:java

  实习:node

    最后项目仍是没搞完,时间真的不够,项目也出现了不少问题,没有转正的机会。linux

  提早批一面:c++

    刚找人帮我内推,就收到了cdg的电话。那边好像是作数据库的,开始问了我一堆cpp高级特性,我一个都不会,而后我讲我只会stl,就问了几个简单的stl。数据库问了四个隔离级别和范式,我也不记得了。而后算法题问了个很简单的,回答完感受应该凉了。而后一刷新状态变成复试。惋惜过两天没面试就直接凉了,估计是评价过低。此次面试血亏,本身彻底没准备cpp和数据库的东西,问的问题很基础也很简单,稍微准备几个下午就能够搞定的。web

  正式批一面:面试

  (40分钟)收到现场面试邀请,跑去喜来登面试。发现又是被cdg捞了,内心仍是有点阴影的。一面挺简单的,上来先手写两道算法,第一道是给一棵二叉树,而后求左儿子节点的值的和,直接dfs遍历。第二题是给定n个有序数组,而后把他们合并成一个有序数组。裸k路归并题,而后他让我用别的方法作,想了很久只想到个分治,就是对列分治,到最后会剩一列,而后再对行分治归并排序,而后一顿分析复杂度。而后问linux的东东,问线程有哪些公用资源和私有资源,我回答了一堆内存上的,后来他说他想问的是线程私有的上下文寄存器那些。接下来平常问项目webQQ架构,大概讲了下,而后问epoll的api,问题很浅。再问我static的做用,我回答了做用在类方法,类变量,非类变量的做用,他又问做用在非类成员方法时的做用是什么,我不会,而后他告诉我是只限本文本使用。面试完他也没让我问问题,我厚着脸皮问他是什么bg他才告诉我。过了两天通知我去复试。算法

  正式批二面:sql

  (15分钟不到)五点半的面试,感受面试官估计急着去吃饭吧,面试体验不好。上来问我两题算法,估计又是剑指offer的题。第一题是给一个有序数组,问怎么求出两个值之和为k。我讲了枚举+二分,复杂度O(nlogn),再讲了枚举+hash,复杂度O(n)。他都说不够优,让我继续想。考虑到数组是有序的,能够维护一前一后两个指针,一开始左指针指向第一个元素,右指针指向最后一个元素。而后往左调节右指针,直到左指针的值+右指针的值<=k,而后继续往右移动右指针。在脑海里证实了这个算法的正确性,就跟他说了。第二道题是如今有个算法,能够等几率产生0到4这5个数,问如何利用这个方法等几率产生出0到6这7个数。一开始没什么思路,脑子也挺乱的,想了一个比较复杂的方法,各类凑二进制位,感受不是正解就没说了。由于是电话面试,我一思考一会,面试官就一直在那边“喂喂喂”,被“喂喂喂”了两次以后我就说暂时想不到。他说好,那你讲讲你作的webQQ吧,而后我大概讲了下作了什么。而后他问你在实习期间学到了什么,我讲了一堆什么OS,linux,c++等知识。而后他就问我有什么想问的,我看了下时间,才面试了十几分钟,凉凉,就没多问了。电话挂没多久,一查状态,不适合。拜拜了腾讯,第一次由于一道算法题不会就直接被挂了。关于上面那题,后来发现是很经典的问题,正解是把数字当五进制,利用第一个方法能够等几率产生一个五进制的某一位。要产生出一个大于7的数字,只须要两个五进制位,也就是rand_5() * 5 + rand_5()。而后会产生出0~24这些数字,咱们只要0~20这21个数字,当产生出21~24这些数字就从新随机。而后对获得的数字%7便可。数据库

阿里:编程

  一面:(45分钟)投了蚂蚁金服cpp岗位。开始就问我acm的状况,问了会什么数据结构,而后我讲了线段树的原理,后面拓展了一点主席树的知识。再问了图论方面,讲了最大流,因为只会最基础版本的最大流,因此没讲多少。后来问我java的gc机制,才知道我被调到java岗位了,心痛,以前看的cpp知识用不上了。gc凭着春招看的那一丁点印象,讲了年轻态和老年态,而后面试官让我回去再看看,我讲错了。而后问了我作的那几个java项目,实际上我感受一点技术含量都没有,就随便讲了下,结果面试官和我同样的观点。而后我抱着试一试的心态,说要不你问问我在腾讯作的项目?而后他就问了我epoll,我就从原理开始讲,包括复杂度,原理。他又问为何用红黑树不用hash,我一时间没想到,就说两种均可以。后来想了下,hash和红黑树其实各有优缺点,hash理论上比较快,可是扩容难,除非采用一致性hash,而红黑树是稳定log。网上还看到一个说hash须要检测value,其实想了下,若是本身肯定一个key,是不须要检查value的。最后闲聊,问我有什么问题想问,我说没有了。他反问,你连咱们是什么部门都不想知道吗?尴尬一笑。原来那边是云加速部门,写java,他强调说语言不是很重要,重要的是思想。估计这几轮面试都不会问我cpp了。这轮面试复习了一些知识点,面试官建议我多看点开源代码。

  二面:(35分钟)隔了4天就来二面了,此次感受基本是吹水。问了我acm状况,绩点,为何不考研。问了我对腾讯技术的了解程度,用的什么系统,为何不用腾讯自研的tlinux,喜欢作中间件仍是业务开发。惟一问的技术就是问epoll,又把epoll讲了一遍,讲我怎么封装的。结果又问我epoll是哪一个版本的内核支持的,为何之前不用epoll。版本支持我真没了解过,为何之前不用epoll我也不知道,就猜了个可能之前内核不支持。此次面试收获到,在腾讯其实要更花多点时间研究腾讯的技术,毕竟如今有资源。我如今作的事情其实本身在宿舍也能作,浪费了各类资源真的很惋惜。(已挂)

头条:

  笔试:一轮笔试作了四题半,感受早上作题精神不太好,作得马马虎虎。一道dfs判联通块数水题,一道区间合并水题,还有道背包,一道枚举二分,一道排序贪心/dp。被枚举二分那题卡了好久,一直想着分治,最后才发现直接枚举二分就行了。果真退役后智力降低。

  一面:视频面试,一个钟左右。面试官简单地问我腾讯实习期间作的webQQ,问协议怎么定,我就讲用的Json,如今打算改成protobuf。又问了我三次握手四次挥手,就讲了握手八个点,挥手我不太清楚,就随便说了下。而后他让我写个lru缓存,我根本不知道是什么鬼,就问他能不能讲下是什么,而后我实现下,他说能够。听完发现是个缓存机制,不过有个淘汰机制,就是淘汰最后没被用过的数据。而后我一开始说建两个红黑树,一个以id为key,数据为value,一个以时间戳为key,以id为value。而后他让我想一想继续优化。我就想到把第二个红黑树改成双链表。红黑树映射下链表指针,链表指针维护下id,实现淘汰机制。代码以下:

const int MAX_SIZE 1024;
struct list {
    struct list *pre;
    struct list *suf; 
    int id;
}*head, *tail;
struct node {
    struct list *_list;
    string *val;
}
map <int, struct node *> m;
void insert(int id, string val) {
    if (m.size() >= MAX_SIZE) {
        remove();
    }
    string *_val = new string();
    *_val = val;
    node *_node = new node();
    list *_list = new list();
    tail -> pre -> suf = _list;
    _list -> pre = tail -> pre;
    _list -> val = _val;
    _list -> id = id;
    _node -> _list = _list;
    _node -> val = _val;
    m.insert(make_pair(val, _node));
}
void remove() {
    list *temp = head -> suf;
    head -> suf -> suf -> pre = head;
    head -> suf = head -> suf -> suf;
    map <int, struct node *> :: iterator it;
    it = m.find(id);
    delete it -> second;
    m.erase(it);
    delete temp;
}

string check(int id) {
    map <int, struct node *> :: iterator it;
    it = m.find(id);
    if (it == m.end()) {
        return "";
    } else {
        struct node *_node = it -> second;
        struct list *_list = _node -> _list;
        _list -> pre -> suf = _list -> suf;
        _list -> suf -> pre = _list -> pre;
        tail -> pre -> suf = _list;
        _list -> pre = tail -> pre;
        _list -> tail;
        tail -> pre = _list;
        return *(_node -> val);
    }
}
View Code

而后面试官就我简历问了一些问题,数据库那部分怎么样。其实我大部分都忘记了,,不过仍是跟他说会一点。而后他问我策略模式是什么,我不知道。他又问我接口模式是什么,我就扯了下什么编程规范,易修改等,举了个Linux系统调用的例子。感受大致还行。最后他问我有没有什么想问的,我就问了他那边是作什么的,他说作服务端开发,不过他说我不必定是他们岗位,可能头条机制是一面海选,而后继续分部门。

  二面:视频面试,一个钟左右。面试官看起来比一面面试官严肃好多。问了我实习作了什么,select和epoll的比较,多个链接活跃时哪一个效率高。我只记得epoll对多个链接活跃高的状况不适用。再问我进程间通讯方式。讲了管道,socket,共享内存,消息队列,漏了信号量。又问我共享内存怎么实现,要注意什么问题。而后问了我算法题,第一题是给多个不一样面值的硬币,再给一个面值,问最少须要多少个硬币才能构成这个面值。典型dp,随手写了个dp给他。而后第二题,给个化学表达式,问有多少个元素,递归纯模拟,一开始没想到递归,写了半天,发现不对劲。改为递归后没什么时间写,脑子也糊成一团,最后时间关系面试官说跳过了。而后问我悲观锁和乐观锁,我又简单讲了下。再问我sql,求“本月产生订单数最多的一天产生的订单数”,过久没写sql彻底不会。而后写一半,感受面试官不耐烦了,就说等通知。最后果真挂了。记录下那题SQL:select max(select count(id) from table group by left(time, 10));牛客SQL要刷起来了。。

虎牙:

  一面:(40分钟)看妇联看一半突然打电话过来,吓了我一跳。他说没看到我简历,让我自我介绍一下。介绍完就问我STL有什么容器,vector和list的差异,这些都是很简单的。而后又问我除了容器还有什么,我说lower_bound?而后他说对,还有sort这些。而后问我有没有接触过网络编程,好比TCP,UDP的区别,怎么保证TCP可靠,我回答握手保证网络是稳定的,而后中途有重传机制,和滑动窗口,他说是这些保证的吗?我突然有点虚,就回答不知道,应该是吧,而后pass。而后问我算法题,问无序数组怎么找到两个数的和为指定数字,一开始没反应过来,就讲了排序二分,复杂度nlogn,后来反应过来说了个hash,复杂度on。而后面试官就问hash若是全部数字都在一条链上怎么办,我说那就换了模数?随机数与或一下?他说总有运气很差的时候嘛。我当时就???如今想一想他应该是要我讲红黑树之类的。不过复杂度同样是nlogn啊。而后问我有没有了解B+树,我说MySql用的就是B+树,而后他问为何用B+树而不用红黑树。我只有一点印象是和内存读取有关,而后模模糊糊讲了下,就pass了。(实际上是和磁盘IO读取有关)而后他又问我线程安全,解释概念,而后怎么保证。我又继续乐观锁悲观锁讲一讲,而后他就问不加锁怎么保证原子加法,我说cas,他说不用cas呢,我又讲了volatile,不过突然想起这东西也不能保证,继续pass。而后又问我有个线程不断写入一个数字,有个线程在读这个数字,此时数据已经写入主存,什么状况下会出现读的线程读到了还没被写以前的数据。我想到的只有寄存器和三级缓存,而后他说排除这些。。我就想不到了,pass。再问我对linux命令的熟悉状况,问怎么看全部进程的PID,我说ps -ef加awk输出某一列。而后又问怎么查看全部端口被多少个进程占用了,我说我只会一个端口的,直接netstat -apn | grep xxx | wc,而后他让我去学下怎么看全部端口的。最后轮到我问问题了,问了他技术栈,用什么语言,他说用cpp,而后用腾讯的开源框架,名字不记得了。整体上感受面试比较简单,不像阿里头条那样很深刻问问题,主要是考察知识面广度。并且最后没问他那几个不会的问题,感受血亏。

网易互娱:选错岗位,投了运维岗,笔试完凉凉,编程题都没有。

星空计划:

  公司在番禺那边,师兄在的创业公司,规模不大。

  一面:

    面试官是wxg出来的,也打过acm,很好交流。面试官先给我30分钟写算法题,是说给一个字符串a,而后你最少须要在这字符串后面补多少个字符使得a变成回文串。很明显是求后缀最长回文子串,直接manacher就能够了,复杂度O(n),不过我不会手写manacher,墨迹半天都没写出来。而后以后和面试官讲了思路,面试官问有没有n2的作法,我。。。讲了两个n2暴力。后面就是对着简历问了,问项目架构,从信息发出到对面接受的过程。对协程的了解,并指出了我对libco的一些误解。整体不是很难,都是问我作过的东西,看个人熟悉程度。以后和师兄简单聊聊天,拿到口头offer。

小马智行:

  公司在南沙区,单程过去都要两个钟。公司环境感受ok。

  一面:手写代码,写个求最大子树和,直接dfs。再写个消去连续出现的两个字符,直接栈维护。而后问stl的基础,vector的内存管理之类的,而后问个人webQQ,讲下架构,感受比较轻松。

  二面:手写代码,写个hash_table,支持插入,删除,修改,全局修改。前三个都很容易实现,全局修改须要加lazy操做,利用时间戳维护,也不难。而后继续讲webQQ架构,被怼得有点惨,问了一堆架构问题,怎么设计,为何要这么设计,若是这样设计会不会更好之类的,不少次都讲不出来。还问怎么在这个架构上实现分布式,若是改为多进程会不会更好,若是不用长链接,改为短链接可不能够。我说长链接不用屡次验证,他反问验证代价很高吗?我就不知道怎么说了。问了挺多问题的,有一些问题其实以前思考过,可是没有实践过也不知道本身思路是否正确。

  三面:手写代码,给定m个左闭右开区间,和一个n,问[1, n]这些数字是否被这m个区间覆盖。由于区间可能很大,因此我选择直接对区间排序,而后区间合并,再check合并后的区间是否覆盖[1, n]。面试官原本想问我webQQ,后来想一想算了,前面面试官都问过了。而后看我简历,问我openGL,从调用一个api到打印出直线这个过程,中途经历了什么过程,从软件到硬件都讲下。我一脸懵逼。而后改问设计模式,问多例模式须要注意什么,口胡半天,讲注意生成对象实例的个数,多线程要加锁,而后就问对锁的了解。我讲了linux上的锁的种类。面试官问何时用自旋锁,衡量标准是什么,我就说看加锁到解锁的时间长短,短用自旋锁,避免阻塞带来的资源消耗,面试官也没说是否是。而后问我熟悉的算法,我说数据结构,而后问我会不会kd-tree。我说了解过,不记得了。而后问我经常使用的数据结构,讲了下线段树,主席树,讲了下区间第k大的作法。最后轮到我提问,由于问题基本问了前面面试官了,我就问下有没有什么建议。建议就是不熟的不要写简历上,好比openGL。否则会给面试官一种我都会/不会的错觉。

  hr:简单聊天,以为面试怎么样,为何想来小马,指望薪资。指望薪资原本想问个白菜价,结果hr说没有白菜价。。而后话题就跳过了。最后送了我一个小礼物,一本记事本和笔。

  总结:整体来讲,算法题偏简单,架构部分我思考欠缺,经验也不够。最后收到了offer,应该是白菜。

bigo:

  bigo的面试老是出其不意,晚上九点多接到面试通知,让我明天9点半早上过去那边面试。过久没早起,差点睡过头,挣扎着起了床。公司在番禺万达广场那边,离地铁站也不远。公司母公司为yy,和yy虎牙一栋楼。在公司等了一会才开始面试。

  一面:感受面试官有点猛,往死里问,看我简历一边问,问我webQQ架构的细节,在发送的时候如何保证一致性,和发送的前后顺序,讲了半天。而后给我三道选择题,第一道是tcp发包,给出三次握手中第一个包的信息,问第二个包多是什么,考察标志位和ack号。第二题是个智商题,8个球,有一个球比较轻,问最少几回能够称出是哪一个球比较轻,分两次便可,每次分红三份。第三题是个c语言题,unsigned short转成unsighed int的结果,由于是unsigned,不会有符号位问题。而后让我手写个大数加法,我直接倒过来一顿模拟,不过没考虑符号位,不过他也没让我改了。

  二面:二面被怼到怀疑人生,问一个进程在写一个文件的时候,另外一个进程删除了这个文件,会发生什么。我不会,后来百度后才知道文件会有两个连接数,一个硬连接数,一个进程连接数,文件只有在两个连接数都被删除后才会被真正地释放掉,因此结果应该是能够正常删除,而后也能够正常写,可是写完进程释放掉文件后文件就被释放了。全程都是问我会不会xxx,讲一下,问了cpp高级特性,不过我只能讲个皮毛。而后问我算法题,问有n个木桩,能够蓄多少水,很经典的题,印象中是单调队列。当场想了个假算法,而后被hack掉了,而后平常智商掉线,头昏脑胀,就说不会了。感谢面试官给我机会,换了一题。给n个数,数字大小0~n-1。算出最小没出现过的正数。直接在原数组上hash,统计哪些数字出现过,在原数组hash要用交换,好比你要记录下标为k这个数字,就要swap(a[k], a[a[k]])。手写完,修复了数组溢出一位的bug,而后结束二面。觉得会挂,没想到过了。

  三面:三面感受比前面都轻松,对着简历问。先问我那webQQ,继续怼我如何保证一致性的问题。当两个进程异步通讯时挂了怎么办,而后我提了一个消息队列机制,而后他问如何判断信息是否无效,我又提了一个超时机制,而后利用红黑树和链表实现了这个超时机制(有点相似头条问的那个LRU实现)。而后问我IOC是什么,我简单讲了下,他说我理解的有点问题,而后跟我讲了一下,而后让我用cpp实现一下,其实就是cpp实现反射。而后我提出if (className == "xxx") return xxx();这种方式,他说不够好,可不能够用xml作。而后我问可不能够宏定义或者模板,他说这是一种方法,可是这是编译期作的,有没有运行时期实现的方法,最后想不到,他也没给我机会问。而后手写算法,写个非递归中序遍历,xjb写了下,没太大问题。

  hr面:比较轻松,随便聊天,问手上有什么offer,面试评价,指望薪资之类的,我提了30w,低点也能够考虑。hr很nice,交流没想象中那么尬。

  总结:收到了offer,薪资超过我指望,bigo福利不是通常好,应该是sp。

相关文章
相关标签/搜索