秋招面试相关记录;持续更新中
腾讯-WXG-开放平台小程序-后台开发
一面
四个算法题:
快速排序:直接做
memcpy实现:注意内存重叠部分,以及NULL
分叉链表找第一个共同点:两遍统计长度,然后再让长的多跳几位,总复杂度O(n)
100位的高精度乘法:直接做
个人简介
项目介绍和业务理解
linux查看CPU使用率
linux查看进程读取的文件
linux查看网络连接
TCP握手挥手,为什么挥手不能是3次
共享内存的释放机制
wireshark怎么用
malloc获取系统内存的时机
进程线程协程
OLAP和OLTP区别
MySQL容灾机制
linux查询历史命令的结果
消息队列停止运行恢复如何保证数据不丢失
线程池的作用
二面
5个题
1:25马,5赛道,多少轮得到前三(7轮,最后一轮可以压到5马,所以正好)
2:洗牌算法和证明
3:出现两次的数(数只会出现0-2次),数的范围1-n,要求O(n)无额外空间
4:设计一个系统,实时统计一小时内top10的IP访问量,QPS达到10w,单机系统
5:fork
#include <stdio.h>
#include <sys/types.h>
#include<sys/wait.h>
#include <unistd.h>
int main(void) {
int i;
for(i=0; i<2; i++) {
fork();
printf(*);
}
wait(NULL);
wait(NULL);
return 0;
}
输出几个*(8个,因为缓冲区的刷新机制)
三面
线程和进程,多线程多进程区别
切换线程保留和替换的部分
C++虚函数,指针和引用的区别
TCP UDP
项目相关,产品化思维
四面
基本上是问项目,然后挂了
说我的项目深度不够,我觉得很离谱,因为同时面的另外几家(拼多多,百度等)说法都是完全相反,拼多多面试官直接说我的项目深度对于本科生来说很深,很有技术追求;总之就是挂了。算了,不去了,毕竟也所谓的镀金对我来说没有必要。
腾讯-WXG-技术架构-后台开发
一面
反套路面试,无八股文
算法题:洗牌算法
算法题:两个有序链表合并
算法题:atoi实现
Raft算法怎么做,是否读过论文
分布式存储,如何做到容灾,checksum机制
Zookeeper选主算法,怎么保证数据是最新的
OLAP常见调度算法,全流程
数据倾斜的解决方案
Redis Cluster的实现,数据一致性保证
Memcached
ACM方向里面你是做什么的,你们队打比赛的方式
CTF里面你觉得做的最好的一个项目,怎么挖洞的,原理和修复方式
HS256,对称加密与非对称加密算法的好处,和HMAC算法的关系(HS256->HMAC SHA256);
答得极其烂,不过应该是混过去了;
二面
单向链表翻转
十亿个32位正整数排序去重(桶排序+bitset即可)
拼多多-拼越计划-服务端开发
一面
反转链表+链表去重,怎么测试正确性
进程间通信方法
RPC应用场景,服务发现
C++多态的作用好处
设计模式,单例模式怎么写
你实习干了啥
表join怎么用Map-Reduce做
一堆人,一堆成绩,Map-Reduce怎么做中位数
二面
忘记了,不过问的挺多也挺复杂,主要涉及底层原理、项目等等
三面
聊人生,建议我去基础组件那边搞研究,觉得我不太适合搞业务开发,加面基础组件
四面
继续聊人生
HR面
吹牛
百度-搜索架构-C++工程师
一面
手写线程池,不会,换题
手写socket,不会,换题
手写无锁队列,不会C++锁,降低难度
手写循环队列,差点写错了
执行一个程序时,操作系统经过的流程,从helloworld到显示在屏幕上
键盘打字显示在shell上的过程,多国语言键盘统一性
系统中断,中断向量表是什么
C++ std::move forward区别
多态,虚函数表
我的垃圾项目,如果认为redis的消耗比较大,如何持久化数据(存硬盘效果不好)
虚拟内存
你写出的印象最深的Bug,怎么调出来的
TCP UDP
编程题:
给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。
例如:0.1.2.201 和 192.168.1.1 是 有效 IP 地址,但是 0.011.255.245、192.168.1.312 和 [email protected] 是 无效 IP 地址。
示例 1:
输入:s = 25525511135
输出:[255.255.11.135,255.255.111.35]
示例 2:
输入:s = 0000
输出:[0.0.0.0]
示例 3:
输入:s = 1111
输出:[1.1.1.1]
示例 4:
输入:s = 010010
输出:[0.10.0.10,0.100.1.0]
int
test (string & s, int x, int y)
{
int p = 0;
int flag = 0;
for (int i = x; i <= y; i++)
{
p = p * 10 + s[x] - '0';
if (s[x] == '0' && y - x > 0 && flag == 0)
return -1;
flag = 1;
if (s[x] < '0' || s[x] > '9')
return -1;
}
if (p < 0 || p > 255)
return -1;
return p;
}
vector < string > restoreIpAddresses (string s)
{
vector < string > V;
int len = s.length ();
for (int i = 0; i < 3 && i < len; i++)
{
//0-i 1
int val1 = test (s, 0, i);
if (val1 == -1)
continue;
for (int j = i + 1; j < i + 3 && j < len; j++)
{
//i+1-j 2
int val2 = test (s, i + 1, j);
if (val2 == -1)
continue;
for (int k = j + 1; k < j + 3 && k < len; k++)
{
//j+1-k 3
//k+1-end 4
int val3 = test (s, j + 1, k);
if (val3 == -1)
continue;
int val4 = test (s, k + 1, len - 1);
if (val4 == -1)
continue;
string nowx;
for (int m = 0; m <= i; m++)
nowx += s[m];
nowx += '.';
for (int m = i + 1; m <= j; m++)
nowx += s[m];
nowx += '.';
for (int m = j + 1; m <= k; m++)
nowx += s[m];
nowx += '.';
for (int m = k + 1; m < len; m++)
nowx += s[m];
V.push (nowx);
}
}
}
return V;
}
二面
项目相关
阿里实习干了啥,做的项目
C++无锁队列
C++多线程
算法题:矩阵快速幂
算法题:堆排序
操作系统的一个大文件打开,然后读取中间几行具体走了哪些流程(包括操作系统缓存,内核内存换页等等),从fopen开始
分布式数据库,Map-Reduce的流程,Exchange的操作
Hadoop如何解决数据倾斜
三面
主要是一些应用性的技能,不是技术面试,更像是HR面
应该是过了,至少是个正反馈
直接通过
直接意向书。
小马智行
一面
// 给定a,b,定义n=a!/b!。你每次可以选一个不为1的数x(满足x整除n),然后使n=n/x,直到n为1为止,求最多可以执行上述操作多少次。
//10^5
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=100005,M=100000;
int sum[N],A,B;
void Shai(){
for(int i=2;i<=n;i++){
if(sum[i]==0){
sum[i]=1;
}
for(int j=2;j*i<=M;j++){
sum[j*i]+=sum[i];
}
}
}
void Solve(){
Shai();
long long ans=0;
for(int i=B+1;i<=A;i++){
ans+=sum[i];
}
printf(%lldn,ans);
}
int main(){
scanf("%d %d",&A,&B);
Solve();
return 0;
}
// 一条数轴上插入红绿灯,每次询问插入到x后,两个距离最远的红绿灯
// ----|-----|-----|----------|-------
// n = 30, 5, 15, 10, 22
// 25, 15, 15, 8
#include<set>
#include<queue>
using namespace std;
set<pair<int,pair<int,int> > > St2;
int main(){
int n,m;
scanf("%d %d",&n,&m);
set<int> St;
St.insert(0);
St.insert(m);
St2.insert(make_pair(m,make_pair(0,m)));
for(int i=1;i<=n;i++){
int p;
scanf("%d",&p);
set<int>::iterator I = upper_bound(St.begin(),St.end(),p);
set<int>::iterator J = I--;
St.insert(p);
int l=*I,r=*J;
St2.erase(make_pair(r-l,make_pair(l,r)));
St2.insert(make_pair(r-p),make_pair(p,r));
St2.insert(make_pair(p-l),make_pair(l,p));
set<int>::iterator K = St2.end();
K--;
printf("%d\n",(*K).first);
}
return 0;
}
Comments NOTHING