面试题演练

腾讯TEG后台开发

一面

项目
select poll epoll 区别以及各自的应用场景

首先回答都属于IO多路复用函数

select跨平台,基于轮询,epoll 基于linux内核红黑树

这道题目C++后台必考题目


shared_ptr 线程安全,引用计数如何实现的,原子操作的原理

智能指针和原子操作,这个有一定难度


STL 迭代器什么情况下会失效,各个容器都说一下

迭代器失效在C++ STL中也经常考察

当使用一个容器的insert或者erase函数通过迭代器插入或删除元素"可能"会导致迭代器失效,因此我们为了避免危险,应该获取insert或者erase返回的迭代器,以便用重新获取的新的有效的迭代器进行正确的操作 


iter=vec.insert(iter);
iter=vec.erase(iter);


虚继承的实现原理,编译器是怎么使用虚继承解决菱形继承的问题的

考察多继承和虚继承


memory order内存序,lock-free? wait-free?

这个问题难度较大


mysql中innodb和myisam的区别,行锁的实现原理


redis可以做什么,mysql buffer pool 可以做缓存吗?


三次握手,四次挥手

三次握手,四次挥手校招必考


如何处理粘包

数据包结构体设置为统一的消息头,消息头中有消息的长度,统一拆分包处理


编程:实现 double pow(double a, int n),要求考虑double和int的所有取值范围,若有溢出抛出异常。

剑指offer 题目,如果可以将时间复杂度优化到O(logN)更好

 

二面

解释一下内存池的概念

 (Memory Pool)是一种内存分配方式。通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。

 

内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著优点是,使得内存分配效率得到提升。


动态数组如何实现?给他介绍了一下vector的实现。为什么扩容时是2倍。


没有连续空间如何实现?给他介绍了一下deque的实现。


设计一个随机数生成器生成给定概率的a,b,c
编程:实现 long avg(long *arr, int n)求平均数,要求考虑所有可能的取值范围。结果因为忘记了负数除法和取余的规则,写了半天没写完整就结束了

 

一面

项目


数据结构堆

从完全二叉树, 最小堆,最大堆


什么函数可以被声明为虚函数

除了构造函数,静态函数,内联函数不能声明为虚函数,其他都可以


析构函数可以抛出异常吗

析构函数中不可以抛出异常


析构函数什么时候需要被定义为虚函数

有继承的情况下,析构函数需要定义为虚函数


进程虚拟地址空间布局

 


进程间通讯的方式

管道,套接字,消息队列,共享内存,信号量


多态的实现原理

虚函数表和虚函数表指针


成员初始化列表概念,可以在成员初始化列表中初始化父类成员吗?为什么

 


vector resize和reserve

重新设置vector的大小和反转vector


Linux IO模型,哪些属于同步IO,哪些属于异步IO

 


编程:实现一个栈


编程:二叉树中序遍历,递归和非递归

 

二面


epoll的底层实现,红黑树了解多少


编程:int nums[n],元素的范围在0到n^2之间,排序

桶排序

 


编程:因为上面的编程没做出来,所以又让写了一个支持并发读写的队列

多线程完全队列编程
topk
单链表如何排序,时间复杂度,怎么推导的


如何判断二叉树是二叉搜索树

按照定义递归的判断,或者从中序遍历为升序判断


如何调试core文件


如何调试多线程程序


内存泄漏怎么调试,valgrind怎么用


python了解吗


分布式了解吗?Hadoop hdfs?给他说了下paxos算法的流程

三面

项目,遇到的难点,怎么解决的,进行过压测吗
有什么印象比较深的课程吗?介绍一下?
平时怎么学习?


场景题:不好描述,总之是给了个场景问用什么数据结构比较好,答案是hash+queue


一致性hash


读写分离


redis哨兵系统选举过程


无锁编程,release acquire语义


实习时长

 


 

阿里云C++研发

一面

项目
编程:反转单向链表

经典算法题


malloc和new的区别,free和delete。new一定会用到malloc吗?重载operator new

考察new 和 malloc主要考察内存分配


内存泄漏,最后会怎么样?会对其他程序造成什么影响


水平触发和边缘触发,边缘触发怎么写


野指针的产生,危害,段错误怎么发生的?使用悬空指针一定会段错误吗?什么时候会,什么时候不会


多线程单线程区别,多线程一定比单线程快吗?


学过汇编吗?


编译和链接了解吗?


服务器程序阻塞IO怎么设计?知道早期Apache怎么做的吗?


TCP UDP区别,介绍一下拥塞控制,丢包时为什么阈值会减半

 

 

二面

 

二面全程针对项目问了一通,连接分发还有其他的方式吗?使用互斥锁和读写mysql会造成上下文切换吗?为什么不用无锁设计?建立连接还有其他的方式吗?了解nginx和apache的实现吗?(这个一面问了,可是后面还是没看,结果还是没答上来)读过什么开源的代码吗?感觉面试官没有找到技术的共同话题,然后就结束了。

 


 

三面

介绍科研经历
介绍项目,一个一个的说
多线程程序内存布局
线程栈的大小,能调整吗?代码中怎么调整?
花生壳内网穿透原理
ARP协议介绍,ARP表建立的过程
TCP已经有了保活为什么还要有心跳包
纳格算法
虚拟化了解吗
汇编了解吗
未来的职业规划

感受

从问的问题来看,感觉是个偏底层的岗位,问了几次会汇编和虚拟化吗?因为不会所以感觉可能技术栈不太符合,最后也是被回绝了。

 

阿里云问的没有按照套路,以及太底层了


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值