头条1 2 3面经

国内某985 鹅厂微信实习生 本科菜鸡

连续三面,差不多4小时

一面:

首先问了项目,聊了挺久的项目

算法:

1. 两个相交的单链表,找出交点

2. 给一棵树,找出路径和为n的路径

基础:

1. static关键字

2. 在一个函数内定义一个static对象,什么时候构造和析构。如果这个函数从没被调用,会怎么被析构

3. tcp连接和断开

4. 服务器大量close_wait状态,可能是什么原因,怎么解决

一面还有很多问题的,忘了。。。

一面感觉:那个两个相加的单链表的算法,我提出的算法他没见过,然后我证明,然后balabala说的不好,然后跳了。。。

这也是一面唯一一个感觉面的不好的地方


二面:

1. 设计LRU ***,查找复杂的O(1), 过期淘汰

数据库:

2. 联合索引, 最左匹配

3. 假如有联合索引<a,b>,查询where a=xx and c == yy,会用到联合索引么 为什么

4. 如果数据库主键是单调严格递增的,有一个图片,通过url带上id访问,然后查询数据库,会有什么影响

5. 上面那个问题,引出一个情景题,如何设计一个序列生成器,能够单调递增,但是不是严格递增的 ?保存在内存中,宕机怎么办?多个进程怎么办?

这个问题和面试官聊了很久,因为我在微信这边不久前看到过序列生成器

6. 解决并发情况下,使序列生成器生成的id唯一。还有就是在分布式系统,多机服务器怎么办?

7.

long multiply(int m,int n) {

long score;

score = m * n;

return score;

}

这段代码会有什么问题? 然后就说了一下m*n溢出

8.

请问下面的程序一共输出多少个 “-”?,执行一次下面的程序,总共生成了多少个进程?

#include <stdio.h>

#include <sys/types.h>

#include <unistd.h>

int main(void) {

int i;

for(i=0; i<2; i ) {

fork();

write(1, "-", 1);

}

wait(NULL);

wait(NULL);

return 0;

}

我说了6次,然后解释了一遍

9. 然后说把write换成printf会多少个'-', 我算了一下,说8次,原因是printf是有缓存的

10. c语言程序的内存模型

11. 聊redis , 如果内存已经很多键了,会怎么样?然后说了一下cow 还有balabala

还有一些小问题完了

二面总结:最后的redis因为时间不够,然后面试官说结束了。感觉二面面的挺好的,和面试官聊的也很多


三面:

三面一看就是大佬,他一直在看我的简历,开始那7分钟,大家一句话都没说,很尴尬

1. 写sql

Sid:学号

Cid:课程编号

score:成绩

查询平均成绩大于 60 分的同学的学号和平均成绩

2.

void pass(){

}

int main( ) {

int x;

x = 123;

printf("%d \n",x);

pass();

printf("%d \n",x);

return 0;

}

// 123

// 456

他问在pass里面添加代码,使输出123和456

因为都在栈里面,有返回地址,占四个字节

void pass(){
int y;
int *addr = &y;
addr 加加  ;
addr加加   ;
*addr = 456;
}
大概思路是这样, 细节有待斟酌

算法题:

3.

随机数生成器:


float rand(); [0,1)


int rand5();


int rand7();

这个通过rand,然后写出rand5,最后写出rand7。面试官刚开始说rand返回[0,1),然后让我写代码验证,

我心里一凉,是不是写错了。果然跑的结果不对,然后现场debug,rand返回的是一个unsigned int,根本不是[0,1),

然后改好了

4. 写一个函数,N 个数字,找到其中第 K 大的数,要求平均时间复杂度尽量低。

我写出来后他让我算时间复杂度,时间复杂度一直没算对,还用了主定理。 作为一个理科生,最后时间复杂度要数列求和,没求出来,很惭愧

三面总结:

三面时间最长,一个半小时,最后那个时间复杂度没算对,很伤心。。。其他感觉都没什么问题


头条真的很考算法和基础,我记忆力不太好,中间的很多小细节问题都忘了,想起来了再给大家补。

然后hr说两周内出结果,耐心等待




#C++工程师##字节跳动##面经##秋招##内推#
全部评论
大佬,考好多算法啊
点赞 回复 分享
发布于 2018-08-27 12:26
强呀👍
点赞 回复 分享
发布于 2018-08-27 13:15
大佬,123变456那个题为什么addr要加两次啊
点赞 回复 分享
发布于 2018-08-27 14:24
能问下楼主你的项目大概是关于什么的吗
点赞 回复 分享
发布于 2018-08-27 16:29
123变456那个代码目测是这样吧: int y; int *addr = &y; addr++; addr++; int *b; b = (int*) *addr; b--; b--; *b = 456;
点赞 回复 分享
发布于 2018-08-28 00:15
大佬,随机数那题怎么做的?
点赞 回复 分享
发布于 2018-08-28 13:02
大佬能不能简单介绍一下,那个多进程输出"-"的思路,我想了好久,还是没有想明白,先谢谢了。
点赞 回复 分享
发布于 2018-08-28 17:27
相加的单链表?可否详述?
点赞 回复 分享
发布于 2018-08-28 17:29
求问。。函数未调用的话,内部的local static对象怎么析构啊?只知道正常情况是main之后,全局static对象析构之前
点赞 回复 分享
发布于 2018-08-28 17:38
两个相加的单链表,找出交点     是什么意思呢?
点赞 回复 分享
发布于 2018-08-28 19:21
很强势
点赞 回复 分享
发布于 2018-08-28 19:52
pass那个题思路应该没问题,但是细节不对,这样做程序会崩掉
点赞 回复 分享
发布于 2018-08-28 19:55
老哥你这是面的算法岗还是后台啊
点赞 回复 分享
发布于 2018-08-30 20:04
pass那个题是这样的吧: #include <stdio.h> void pass(){ int y; int *adr = &y; adr += 12; *adr = 456; } int main() { int x = 123; printf("%d \n", x); pass(); printf("%d \n", x); return 0; }
点赞 回复 分享
发布于 2018-08-31 02:23

相关推荐

和蔼:在竞争中脱颖而出,厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
11-09 11:01
济南大学 Java
Java抽象带篮子:外卖项目真得美化一下,可以看看我的详细的外卖话术帖子
点赞 评论 收藏
分享
4 125 评论
分享
牛客网
牛客企业服务