本文档收录了春招及秋招(含提前批)中能回忆起来的面试题。
- 部分公司我既参加了春招也参加了秋招,将题目整合在了一起;
- 所列题目不全,仅仅列出了我能回忆起来的部分题目;
- 所列解答仅供参考
一、腾讯(春招 / 后台开发)
二、阿里巴巴(秋招 / 阿里云-边缘计算)
三、百度(秋招 / C++开发)
四、字节跳动(提前批 / 客户端开发)
五、深信服(提前批 / C++开发(物联网方向))
六、大疆(秋招 / 通信算法工程师)
七、京东(秋招 / 京东云-C++开发)
八、华为(秋招 / 通用软件开发)
九、VIVO(秋招 / 嵌入式开发)
十、OPPO(秋招 / 通信协议工程师)
十一、TP_LINK(秋招 / 应用软件开发工程师)
十二、中兴(秋招 / 岗位1 软件开发)
十三、中兴(秋招 / 岗位2 通信讲师)
十四、二十八所(秋招 / C++开发)
十五、CVTE(提前批 / C++开发)
十六、海康威视(秋招 / C++软件开发)
十七、烽火通信(秋招 / 软开)
十八、小米(秋招 / 系统开发工程师)
十九、七二二所
二十、七〇九所.
二十一、浦发银行(秋招 / 信息科技岗)
二十二、网易互娱(秋招 / 初级游戏开发)
一、 腾讯(春招 / 后台开发)
1、 Linux查看共享内存的方式。
使用 ipcs 命令,不加任何参数时,会把共享内存、信号量、消息队列的信息都打印出来,如果只想显示共享内存信息,使用如下命令:
ipcs -m
2、 打开一个网页,需要用到多少协议?
3、 查看系统I/O负载
查看CPU、内存的命令:top
Linux 中的 ps 命令是 Process Status 的缩写。ps 命令用来列出系统中当前运行的那些进程。ps 命令列出的是当前那些进程的快照,就是执行 ps 命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用 top 命令。
ps aux 和 ps -ef 两者的输出结果差别不大,但展示风格不同。aux是 BSD 风格,-ef 是 System V 风格。这是次要的区别,一个影响使用的区别是aux会截断command列,而 -ef 不会。当结合 grep 时这种区别会影响到结果。
4、 Linux 下查看进程打开的文件句柄数
查看系统默认的最大文件句柄数,系统默认是1024
具体查看方法:
- 通过 ps -ef |grep +进程名查看进程是否存在
- 根据查看到 SSH 的进程 ID(1792),进入进程所在目录 cd/ proc/+进程名
- 查看此目录,可看到进程对应线程目录 task 和文件句柄数目录 fd
- 进入 fd 目录,查看进程打开的文件句柄的详细信息
- 通过 ls | wc -l 统计进程打开的句柄数 ( Linux 系统中的 wc(Word Count) 命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。c 统计字节数。l 统计行数。)
- 进入 task 目录,查看进程的线程的详细信息。查看线程数同样可以采用 ls | wc -l
5、 查看文件的详细信息
ls -l (ll)
file +filename
stat +filename
6、 跑道问题
36个人,6个跑道,怎么筛选出前三名?
1)6个人一组,得到每个组里第一名。共6轮
2)取出每组第一名,跑一次,得到前三名,并抛弃其他三个组的人;共1轮
3)这样,第一名所在的组有三个候选者,第二名所在的组有两个候选者,第三名所在的组就只有自己一个候选者。
这些人一起跑,一次,即可选出前三名。
其实第一名在2)中已经确定。
那么,问题拓展就是,6个跑道,跑8轮最可以从多少人中筛选出前三?--37人。
7、 上N级台阶问题
https://blog.csdn.net/StepByStepTo/article/details/82695341
int climbStairs(int n)
{
if( n <= 2)
{
return n;
}
else
{
return climbStairs(n-1)+climbStairs(n-2);
}
}
int climbStairs(int n)
{
int i =0;
int ret =0 ;
int * arr = (int *)malloc((n+1)*sizeof(int));
for ( i=0; i<=n; i++)
{
if(i <3)
{
arr[i]=i;
}
else
{
arr[i]=arr[i-1]+arr[i-2];
}
}
ret = arr[n];
free(arr);
arr=NULL;
return ret;
}
int climbStairs(int n)
{
int arr[3]={0,1,2};
if (n < 3)
{
return n;
}
for (int i=3; i<=n; i++)
{
arr[i%3]=arr[(i-1)%3]+arr[(i-2)%3];
}
return arr[n%3];
}
8、 在字符串中查找不重复的字母
方法一:
下标缓存法:
将一个数组初始化为0,当出现这个下标对应的字母时,则该下标对应的数字加一。结束后,统计数组中为1的下标,即为不重复的字母
方法二:
使用set
遍历插入set,当插入的时候返回false,就表明这个元素是重复的,那么就通过遍历查找,删除所有的这个元素,以此类推,得到剩下的元素就是不重复的
注意全部查找的方法:
while ((pos = src.find(s[i], pos)) != string::npos){std::cout << "pos = " << pos << std::endl;src.erase(pos, 1);pos++;}
9、 两个单链表是否相交
对于单链表问题,优先考虑将单链表变成循环链表
10、 扔玻璃球看在哪层楼会摔碎
既然第一步(确定临界段)的投掷数增加不可避免,我们就让第二步(确定临界层)的投掷数随着第一步的次数增加而减少。第一步的投掷数是一次一次增加的,那就让第二步的投掷数一次一次减少。假设第一次投掷的层数是f,转化成数学模型,就是要求f+(f-1)+...+2+1>=99,即f(f+1)/2>=99(第一次测试点选择100层是无意义的,必然会碎,所以无任何测试价值,