2021-秋招面试记录

发布于 2021-07-25  67 次阅读


秋招面试相关记录;持续更新中

腾讯-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;
}
It is my final heart.
最后更新于 2024-02-06