头条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

相关推荐

4 125 评论
分享
牛客网
牛客企业服务