2023级C++秋招面经个人汇总

23.3.13加上了美团后端面经

偷懒了几个月所以现在才发,只记录了一部分

趋势与网易在另外2个帖子,另外写了C++的设计题,比如手写string这种https://zhuanlan.zhihu.com/p/589795989

雷火-服务端

只记了几个没回答上的

一面选择题加最基础的八股,三次握手四次挥手那种

智力题,1024盏灯,第一次逐个电量,第二次按2,4,6…第三次3,6 9…最后几盏亮着

数据结构的前缀中缀

几个木棍凑成长度n,求出一种组合:用dp,这题出现多次了

友塔

用户游戏卡,觉得是服务器的问题,怎么排查

发牌,4个人,牌有4种色号,13个数,怎么记录每个人的手牌,占用内存尽可能小,我说用二进制,每个牌6位,但还有更优解

出现一次的数,两个出现一次的数(剑指原题)

map取下标和find的区别,底层:如果a不存在,取下标会自动赋值,有风险

芯原

问了指针的作用,const的作用

指针和引用的区别

volatile的作用

指针就是指向一块内存的变量,可以改变内存中的值。传递类指针,节约内存

const常量,希望值不变,在函数中修饰形参,表示不修改形参;修饰类函数,表示不修改成员变量;常量指针,指针常量

字节-电商-客户端

一面45min:

网络部分:

1.Https详解、http个版本区别、get和post区别,put?

2.键入url的过程-很喜欢考这个

3.tcp的差错控制,拥塞控制

系统:

1.进程调度

2.详解共享内存,管道

题目:

Z字层序遍历

二面45min:

  1. 如何提升媒体上传速度和成功率
  2. http响应报文的搭建
  3. 设计模式,讲几个
  4. 乱序数组找出所有满足前边所有数都更小,后边所有数字都更大的值,比如1 3 5 2 9的1和9

三面:

打印螺旋数组

短url转长url(设计题

用户态和内核态,多进程和多线程,上下文切换的消耗对比,进程间通信的方式

字节-视频云-客户端

一面60min:

计网和操作系统都是八股

虚函数实现拷贝构造函数

题目:改错、生产者和消费者

二面:

1.手写String

2.3个线程打印1、2、3

3.LRU

然后寄了

讯飞

一面1h:

  1. STL的迭代器失效(插入删除
  2. 页表的一个数据结构?
  3. 什么时候分配物理内存(读写的时候
  4. 拷贝构造的循环(形参必须是引用,否则会循环拷贝
  5. 项目中,工作线程如何发送响应报文
  6. 同步机制

二面:

综合面,以项目为主,问到了深度学习的项目

询问薪资期望,工作地点

招银科技-后端

一面:

1.一堆八股

  1. 数据库,mysql的事务的特性;一致性是什么意思(答得不好

3.项目:怎么确定是发送图片还是视频?按键+html的action字段,然后从url中来判断

二面:

说我一面面评不错,开奖也还行,应该是第二档

斐波那契数列,两种写法

递归有的函数要经常调用怎么办呢?(说了inline,写成迭代)面试官表示想说的是缓冲区,我说用数组或者哈希来存,让我在代码的递归写法下写一下,搞定了

2G数据,50MB内存,找出不重复的数(哈希分桶

华为

一面:

八股:C和C++的区别等

算法:hua**wei,删除*和左边最近的字,用栈秒了

另一道口述思路,力扣低频题,忘了具体是哪个

笔试题复盘

二面:

项目

算法:质因数的个数,秒了

C++八股,内存泄漏,多态

面试问的都是秒,然后开个13级

美团-后端开发

美团后端以Java为主,如果用其他语言去面试,就会被面试官拷打数据库。最早的一次面试,被按在地上锤

一、自我介绍,相关项目(竞赛),语言

1.python和C++的区别

python是解释型语言,先把源码转换成字节码文件,再由python虚拟机一条一条执行,和cpu之间多了解释器;

C++是编译型语言,二进制

2.python面向对象有什么特点

不知道

3.面向对象的特点

4.C++如何实现多态

虚函数,说了虚函数表和虚指针

5.C++的指针和引用的区别

解释:指针指向一块内存,内容是所指内存的地址,引用是某块内存的别名

区别:指针是实体,引用是别名

引用使用时无需解引用,指针需要

引用不可变,指针可以

引用不为空,指针可以

引用没有const,指针有

二、操作系统

1.进程和线程的区别,线程享有进程的哪些资源

进程是系统分配的最小单位,线程是调度的基本单位

进程之间相互独立,线程共享进程

进程开销大,线程开销小

2.进程的调度算法

先来先服务,最短作业优先,高响应比优先,时间片轮转调度,多级反馈队列优先

解释每个算法大概什么情况

3.什么是死锁,如何解决死锁,写一个死锁出来

互斥,持有并等待,循环等待,不可剥夺

解决方法:设置等待时间、资源顺序获取

pthread_mutex_t mutex_A = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t mutex_B = PTHREAD_MUTEX_INITIALIZER;

void* threadA(void *data)
{
    //获取互斥锁A,然后睡眠一秒,再获取B
    cout << "thread A waiting get ResourceA" << endl;
    pthread_mutex_lock(&mutex_A);
    cout << "thread A got ResourceA" << endl;
    
    sleep(1);
    
    cout << "thread A waiting get ResourceB" << endl;
    pthread_mutex_lock(&mutex_B);
    cout << "thread A got ResourceB" << endl;

    pthread_mutex_unlock(&mutex_B);
    pthread_mutex_unlock(&mutex_A);

    return (void *)0;
}

void* threadB(void *data)
{
    //获取互斥锁B,然后睡眠一秒,再获取A
    cout << "thread B waiting get ResourceB" << endl;
    pthread_mutex_lock(&mutex_B);
    cout << "thread B got ResourceB" << endl;
    
    sleep(1);
    
    cout << "thread B waiting get ResourceA" << endl;
    pthread_mutex_lock(&mutex_A);
    cout << "thread B got ResourceA" << endl;

    pthread_mutex_unlock(&mutex_A);
    pthread_mutex_unlock(&mutex_B);

    return (void *)0;
}

int main()
{
    pthread_t tidA, tidB;
    
    //创建两个线程
    pthread_create(&tidA, NULL, threadA, NULL);
    pthread_create(&tidB, NULL, threadB, NULL);
    
    pthread_join(tidA, NULL);
    pthread_join(tidB, NULL);
    
    printf("exit\\n");
    
    return 0;
}

4.linux:给定一个日志文件,找出给定的一句话,并高亮:都没听说过

tail -f 日志文件 | perl -pe 's/(关键词)/\\e[1;颜色$1\\e[0m/g'
# tail 从尾部查看,用于查看日志
#perl -pe 自动执行脚本

5.知道哪些设计模式?单例模式,外观模式,观察者模式。。。

6.写一个单例模式看看,为什么要加两次锁?(写反了,应该是双检测

single* single::getinstance(){
	if(p == nullptr){
		pthread_mutex_lock(&lock);
		if(p == nullptr)
			p == new single;
		pthread_mutex_unlock(&lock);
	}
	return p;
}

三、数据库

1.关系型数据库和非关系型数据库的区别:

关系型数据库最典型是数据结构是表,易于维护,使用方便,支持复杂操作,但是读写性能差,灵活度欠佳,硬盘IO是瓶颈

非关系型:是一种数据结构化存储方式的集合,比如redis

格式灵活,速度快,成本低 但是 使用成本高

2.如何优化索引:

前缀索引:用某个字符串的前几个字符建立索引

覆盖索引:二级索引能查到的数据,避免回表

主键自增:追加操作,不需要移动数据

索引最好not null:难优化,null没有意义但会占用物理空间

防止索引失效:转到问题4

3.索引必须是唯一的吗

不是,唯一索引必须是唯一的,普通索引没有要求。主键必须是非空的,唯一的

4.什么情况索引会失效

左右模糊匹配,表达式、函数、类型转换,最左匹配,(漏了)where的or中左边是索引列,右边不是

5.最左匹配是什么,给定(a,b,c),如果只有a和c符合最左匹配吗

应该是不同的版本处理不一样,5.5版本中,a走索引,找到主键值后开始回表,到主键索引读数据行,然后作对比c;5.6之后有一个索引下推过程,可以在索引遍历过程中,对索引包含的字段先判断,直接过滤掉不满足条件的记录,减少回表次数)

6.性别能作为索引吗

不行,区分度太小,如果索引的区分度小,优化器会进行全表扫码

四、redis

1.redis的数据结构

1.1有序集合和无序集合各能实现什么功能,说一下如何实现 ——没用过啊

有序集合:排行榜;实现:可能想问redis的指令? 新增可以使用ZINCRBY 查看最大的可以用ZREVRANGE

无序集合:点赞;实现:key是文章id,value是用户id

拓展:共同关注,抽奖

1.2有序集合的底层:快表,快表的结构

2.redis为什么快,redis为什么单线程但还是很快:IO多路复用

基于内存,高并发,单线程避免多线程的竞争,也不会导致死锁,IO多路复用

3.雪崩、击穿、穿透什么什么,如何解决:

雪崩:大量缓存数据在同一时间过期,或者Redis故障宕机,有大量用户请求

方法:均匀设置过期时间,设置过期时间时加上一个随机数

击穿:热点数据过期

方法:互斥锁,保证同一时间只有一个业务线程更新缓存

不给热点数据设置过期时间,后台异步更新缓存→ 如果热点数据一直不过期,但失去热度怎么办(差不多这意思,因为一开始只说了不设置过期时间,没有说后台更新要更新缓存)或者在热点数据要过期前,提前通知后台线程更新缓存以及重新设置过期时间

穿透:既不在缓存也不在数据库

限制非法请求;缓存为空或默认值;布隆过滤器如何快速判断数据是否存在→怎么设计布隆过滤器?不会

4.如何保持数据库和缓存的一致性

数据库和缓存如何保证一致性?

旁路缓存

写:先更新数据库再删除缓存

读:先读缓存,如果未命中则去数据库中读,并写到缓存中

如果对缓存命中率有要求,则先更新数据库,再更新缓存。但这样会有不一致的情况,所以可以1,更新缓存前加上分布锁。2,更新完缓存后,给缓存加上较短的过期时间,即使有错也能很快过期

五、情景

40亿数据,给一个数字,查找是否在里边

bitmap 位图

40亿数据需要40亿bit,大约500MB内存,用bit来表示这个数据是否存在,1表示存在,0表示不存在,时间复杂度O(n)

具体:读入40亿个数,设置对应的bit位,再输入要查询的数,查看对应的bit位是否为1

计算$4010^9 /8/10^{-3}=510^5KB=500MB$

算法:

寻找峰值:二分,要考虑边界

二叉树的层序遍历,用迭代做了

#如何看待2023届秋招##面经##秋招##春招##23届找工作求助阵地#
全部评论
灯泡那个题我想了想,就是一个分解质因数的题吧, 第n个灯泡 状态改变 次数 应该是n的质因数数量+1(比如n=8,改变3次。 如果改变次数为奇数,则为灭,为偶数亮。最后结果加一下
2 回复 分享
发布于 2023-03-08 17:50 浙江
沾沾大佬喜气
点赞 回复 分享
发布于 2023-03-08 16:15 江西
感谢大佬分享
点赞 回复 分享
发布于 2023-03-08 16:18 山东
求个c++的简历,邮箱:**********
点赞 回复 分享
发布于 2023-03-08 23:54 陕西
今天更新美团后端面经
点赞 回复 分享
发布于 2023-03-13 10:17 安徽
友塔二面吗
点赞 回复 分享
发布于 2023-03-16 01:21 湖南
华子13级是开了多少
点赞 回复 分享
发布于 2023-04-27 11:11 安徽

相关推荐

15 194 评论
分享
牛客网
牛客企业服务