面试:腾讯PCG-看点

第一轮

tcmalloc

虚继承

c++类

智能指针

C/C++编译流程具体区别

coroutine协程相关应用

STL内存分布

常见HTTP状态码

常见Web攻击方式

排序算法稳定性,复杂度

算法题,比较简单

给定一棵二叉树,其中每个节点都含有一个整数数值(该值或正或负)。设计一个算法,打印节点数值总和等于某个给定值的所有路径的数量。注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下(只能从父节点指向子节点方向)。

第二轮

基本全是算法题

一个完全二叉树500个节点,多少个叶节点

快排和冒泡复杂度,稳定性

一个矩阵,可向四个方向走,左上到右下经过的数字和最小

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;

 int arr[10][10] = {{1,100,100,100,100,100,80,90,90,19},
 {1,  1, 100,100,100,100,80,90,90,19},
 {100,1, 1,  1,   1,  1, 1, 1, 90,19},
 {100,100,100,100,1 ,100,80,90,90,19},
  {100,100,100,100,1,100,80,90,90,19},
  {100,1,1,1,1,100,80,90,90,19},
 {100,1,100,100,100,100,80,90,90,19},
  {100,1,1,1,100,100,80,90,90,19},
 {100,1,1,100,100,100,80,90,90,19},
{100,1,1,1,1,1,1,1,1,19}
};


int f[20][20];

void dfs(int i,int j,int now){
    if(now>f[i][j])return;
    f[i][j]=now;
    if(i+1<10)dfs(i+1,j,f[i][j]+arr[i+1][j]);
    if(j+1<10)dfs(i,j+1,f[i][j]+arr[i][j+1]);
    if(i>0)dfs(i-1,j,f[i][j]+arr[i-1][j]);
    if(j>0)dfs(i,j-1,f[i][j]+arr[i][j-1]);
}

int main(){
    memset(f,60,sizeof(f));
    dfs(0,0,arr[0][0]);
    printf("%dn",f[9][9]);
    return 0;
}

算法题:输入3,输出1,2,3,12,13,23,123

void dfs(int now,int mx,int mxd){
    if(now>=mxd){
        int px=0;
        for(int i=0;i<mxd;i++){
            px=px*10+a[i];
        }
        //printf("Temp:%dn",px);
        V.push_back(px);
        return;
    }
    for(int i=1;i<=mx;i++){
        if(now!=0 && i>a[now-1]){
            a[now]=i;
            dfs(now+1,mx,mxd);
        }
        if(now==0){
            a[now]=i;
            dfs(now+1,mx,mxd);
        }
    }
}

int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        dfs(0,n,i);
    }
    for(int i=0;i<V.size()-1;i++){
        printf("%d,",V[i]);
    }
    printf("%dn",V[V.size()-1]);
    return 0;
}

redis持久化

linux基础命令

系统设计题:滴滴抢单

智力题:四辆车,每个可加1公里油,所有车可以相互加油,一辆车最远跑多远

第三轮

快排找k大数

10亿个数字,100亿个数字,寻找交集

c++的一些问题

其他的忘了,总之都答出来了,应该这一轮过了

第四轮

400TB的字符串,4GB内存,判断是否存在两个字符串相同

面完之后查询,进入HR面试了

第五轮

HR面

面试:字节跳动-用户中心

第一轮

常规的自我介绍

项目相关,技术选型的一些思路

Redis的两种持久化

Redis数据库的淘汰、过期

缓存雪崩、缓存穿透、缓存击穿

TCP和UDP区别

TCP三次握手能否改成两次

两个栈模拟队列的操作方式

排序算法复杂度

一个一维的序列形成直方图,然后灌水,问最后形成的水坑里面有多少水

应该是过了,感觉还行

第二轮

项目相关

如何保证数据库的同步

TCP握手

链路层协议

HTTP/1.0,1.1,2.0

对称加密与非对称加密

SSL原理,如何保证证书可信

Golang临时变量转存堆

算法题:一个矩阵任意位置开始,上下左右走,只能比当前格子数大,最长路径

第三轮

项目相关

算法题

标题:1-n数字字典序第k大
描述信息
给你一个数字n(n < 1e9), 再给你一个数字k(k < n), 要求你找到1, 2, 3, ... n按照字典序排序后, 第k大的数字;

如, n = 15, k = 7;

那1 ~ 15按照字典序排序为: 1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9;

则答案为15;

第四轮

HR面

面试:阿里巴巴-云数据库-AnalyticDB

第一轮

项目

const和define的区别

动态链接和静态链接

算法题(?)对以下链表深拷贝,以下的rand表示链表中的某个节点或NULL

struct ListNode
{
    int value;
      ListNode* next;
      ListNode* rand;
};

以下函数的行为

struct foo
{
    int a;
};

void func(foo* f)
{
    printf("%dn", f->a);
}

func( rand() );

以下格式日志文件,如何快速查找

2021-03-06 02:59:43.312T access_ip=xxx.xxx.0xx.xx sql= xxxx; 

协程和线程

C++多线程

互斥锁和自旋锁

第二轮

项目

在C++中实现hashmap(我搞了个哈希+链表)

冲突解决方案(二次探测)

链表的优化方法(我答了块状链表)

memcached

k8s底层逻辑

docker常用命令

第三轮

HR面

面试:元戎启行

第一轮

三个算法题,智商被碾压了

第一题:n<=1000,输出2^n的精确值。一行代码。

printf("%.fn",pow(2,n));

原理是浮点数表示的阶码可以直接用。

第二题:判断a/b和c/d哪个更大。四个数均在long long范围,不使用大数进行计算。

先判断整数部分,然后取倒数反过来计算,类似辗转相除。

第三题:一个字符串,去重字符,使得结果字符串字典序最大。需要O(n)算法。

单调栈,是个原题

整个人面试完不好了,水平太低

第二轮

问了下项目,然后开始问具体问题

数据库失败处理,数据库同步策略

Redis缓存

Redis持久化

Redis分布式锁实现的方法

K8S负载均衡

K8S持久层docker出错怎么恢复

消息队列,RPC会不会,gRPC

服务器认证登录的方法

JWT原理,签名的方式、算法、HS256(HMAC签名的SHA256)

数据库密码存储,MD5、盐、彩虹表、PKCS,如何确保盐不会泄露,MySQL加盐方法

可信认证策略,Windows Hello

C++11 STL部分特性

C++ STL内的部分容器实现,multiset和set的底层实现区别

哈希表挂链表法的优化

vector中emplace_back为什么比push_back更快

死锁成因和避免

系统性能分析,怎么判断大型系统中哪个组件出现性能问题

算法题:给一个Request方法,给一个Query方法,Query方法需要统计调用前一段时间到调用时的过程中,Request被调用多少次。

第三轮

ACM经历,队里面干啥的

2020年比赛打得次数为啥下降了

威佐夫博弈

三维威佐夫博弈(我只会O(n^3))

反问

第四轮

HR面

面试:米哈游

先吐槽下,笔试挺难的,应该是目前笔试面过最难的

第一轮

项目

C++虚函数

析构函数是虚函数的原因

构造函数是否可以调用虚函数

虚函数原理

僵尸进程孤儿进程

kill,信号和信号的原理,信号捕获,SIGKILL是否可以捕获

data段,rodata段,bss段,text段,相互区别

线程间通信

C++多线程编程

乐观锁悲观锁互斥锁自旋锁

死锁和怎么避免死锁

redis原子操作

反问:是原神组

第二轮

写题为主

第一题:支持以下函数

int mihoyo_split(const char* input_str, vector<int>& output_str);
// "12,13,1001,1002"  ==> [12,13,1001,1002]
// failed return -1, succ return 0
// ban atoi string

就是解析一个字符串,处理特殊情况,写代码

第二题:大端小端,怎么判断,写代码

第三题:实现一个排行榜,UID和分数,要能通过排名查UID,UID查排名,区间排名查UID,UID更新分数(两个平衡树)

后面问了下ACM队里的情况

第三轮

这把是面了基础知识,完全炸了(主要是之前问过的一些问题这把又不太会,整体应该还是答对了80%左右吧)

C++多态

C++多态的实现

析构函数虚函数原因

纯虚函数和虚函数区别

类变量地址顺序是声明还是初始化

常见排序算法和复杂度

基本有序用什么排序(应该是希尔排序)

快排什么时候最慢,快排最快复杂度是多少

Linux僵尸进程和孤儿进程

算法题:一堆括号,中间有逗号分隔的字符串,相邻的括号内字符串做笛卡尔积,求化简到最后的结果

为什么要来做游戏

能不能保研

考不考研

感谢信

目前是唯一挂了我实习面试的公司。

It is my final heart.
最后更新于 2022-07-24