-
构造函数可以是虚函数吗?
-
析构函数可以是虚函数吗?
-
说一下你知道的排序算法;
-
TCP三次握手四次挥手;
-
如果服务端和客户端同时关闭连接会发生什么?
-
进程和线程之间的区别;
-
手撕代码,变种冒泡排序,将1、6、3放到数组后面,并且保证1、6、3相对位置不变,而且其他数的相对位置不变。
上面的C++问的比较简单,基本属于白送难度。
早上10点刚面的三面,就把面经整理一下回馈牛友。希望大家早日上岸!!!
2、集合类List、Set、Map讲了几个类的源码
3、JVM内存模型、垃圾回收算法、类加载机制
4、MySQL事务、隔离级别
7、进程和线程是什么、区别?
基本问的都是基础,不难
BIGO二面(1小时)
8、场景题:如何减少TCP的时延问题(可以从应用层、系统层回答)
9、场景题:如何提高HTTPS的效率
11、有一个二维空间,上面有很多个点,给定一个点的坐标和一个半径r。求出该点为圆心,半径为r内有哪些点(答的倒排索引)
1、Redis项目里面怎么用的,用的什么数据类型做哪些事
2、说下跳表,Redis为什么用跳表不用其他的?
3、知道哪些页面置换算法
在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生。当发生缺页中断时,如果操作系统内存中没有空闲页面,则必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。
1.最佳置换算法(OPT)(理想置换算法):从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。
2.先进先出置换算法(FIFO):是最简单的页面置换算法。这种算法的基本思想是:当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性最大。
7.股票算法的各种变种
同学内推,笔试有前端的题,不懂,就做了选择交卷了。9.25下午约9.26面试
答:xx大学,本科生,大四,一直在实验室做科研,没有后端经验,秋招想找个后端工作(放弃梦想)
看简历,问:我看你简历写了个STL库,实现了B+树,数据库懂吗,这是innoDB的后端实现,给我讲一下B树和B+树
答:讲b+树先要讲b树,思想和二叉搜索树类似,二叉树二路搜索,i/o较高,b树又叫m路多路平衡搜索树···,是为了多级储存设计balabala,讲了一下搜索、插入删除,上下溢,节点既存key也寸value,调整消耗大,不适合顺序遍历。b+树解决顺序搜索问题,数据链式维护在硬盘,仅把key提出来做索引,类似B树,key定位到有指针指向物理位置,遍历即可。特点1.非叶节点仅存key,小,好维护,2.没个节点大小设置为扇区大小,查找下一节点顺序遍历,不用寻道了,快。另外数据库一点不会不会。
问:那节点设置成多大好呢?
答:一般设置成扇区大小啊,扇区硬盘厂商设定的。
问:那我换个问法,现在一块HDD7200转,寻道时间2ms,寻址时间4ms,问块大小设置成多少,最大qps最大能到多少?
我:蒙了。算,嗯?寻址时间给我来我还算啥?没搞懂。 iops=巡道+旋转+寻址=2+60*(平均转半个盘定位)+4。qps=1000/iops
问:嗯,平均查找是半圈,之前你说到块,块大小设置成多少呢?
答:一般都是4kB对齐,咦?为什么是4KB?哦我知道了,是最小换页单位,内存frame大小。
B树 B+树,涉及到一点计组硬盘和操作系统。
问:嗯,不错,页大小4kB,你写过类unix系统啊,看你写的熟练掌握并发编程,讲一下进程调度
答:cpu,中断,陷入,换页,tack_struct切换,PCB内容,内核态用户态切换bala
答:非抢占、互斥、占有并等待,第四个有点紧张想不起来
问:我们学的时候是循环等待
我:五大件 管道、共享内存、消息队列,信号量,每个特性讲一下(第五个想不起来,是FIFO文件访问。。。因为没用过也没记过)
我:防过期请求SYN,服务器连接资源浪费耗尽
问:要是第二步也没了呢?
我:服务器资源浪费耗尽,客户端也是
问:哈哈,那就是个UDP
问:考考算法吧,出个简单的题,一栋楼10层,每层有钻石,你坐电梯,只能上,只能拿一次,你用什么策略?
我:铁憨憨??,概率论期望最大策略拿第五层第六层,因为我啥也不知道,大自然会让钻石成正态分布
问:想办法找个量化策略
我:先走五层不拿(暗中观察),记下平均值,后面大于平均我就拿。(真的有钻石我就奥卡姆剃刀,第一层拿了就跑)回来发现是微软面试题,开放题,考数学直觉的,也是暗中观察策略
指着一道二叉树后序遍历选择问:你这个题做错了啊?
我:不想做,随便点的,纸上写了一下后序遍历非递归
后续遍历非递归需要在先序遍历非递归的基础上改
翻到笔试,果然一题没交
指着第二题(求连续的最小长度为m的数组和的最小值),我们做个题吧,这个太麻烦,我们做个简单的,写个快排吧
我:滴滴刚来实习的话是做新新项目还是重构旧项目?技术栈不匹配有安排时间学吗?我没啥后端经验
感觉一面面试官问的很不错,理论重结合实际,光背书可能听不懂问的啥。还好我是个PCDIY玩家(卡吧基佬),组成原理融入骨血,扇区柱面PCIE,Ryzen两组CCX寄存器里有啥都能背给你听,运气不错的。
面试官双眼皮,剑眉,冷面 吓得我瑟瑟发抖
问:我是xxx,xx部门xxx,自我介绍一下吧
问:讲一下你实习的实验室经历
问:听起来做的不错,你为什么不读研呢?
答:菜,么得研读,考不动,保不上,出国GRE来不及bala,国内读完研我也是来做后端
问:嗯,你这个跟我领域差的很大,不好问,数据库会吗
答:不会,一点也不会(逃,上回面头条说会,给自己挖坑gg,不会就说不会吧
问:我看你写了个STL库,那你讲讲你这个接触到最难的点和启发
答:allocator,二级空间配置器,内存池减少碎片,颠覆我开发观念、STL开发诸君真乃神人也,源码阅读体验:精彩!,开发过程:学到很多,以前只会用,现在终于懂了,泛型、继承、数据结构复习、架构设计,确实很不错balabala,画了两张草稿纸
问:你怎么觉得颠覆开发观念了呢?计算机科班应该觉得很正常吧?
我:一直在实验室写lab-code,第一次看大型开源源码,很多东西只书上看过,没做过,觉得震惊
问:你这个hbase项目,java写的吧?怎么就用上hbase了?
我:学校安排的大数据实训,你要是问我java我就凉了(自杀)不会
问:我不问你hbase,我看你写了个linux操作系统,讲一下进程调度
问:https知道吗?
我:不知道,只会HTTP,但我知道是会话用SSL加密,
我:画出UDP报文头,画出ip豹纹头,ip传到主机,再根据udp里的端口号传到对应端口
我:TCP面向连接,UDP尽力交付bala
问:TCP怎么保证交付
我:滑动窗口,连续确认,画了个只有 的接收窗口,server的ack=5,client重新传56789···
我:慢开始、拥塞避免 窗口、ssthresh
面试官看不懂,我一行一行给他看
问:我没什么可以问你了(沉浸在dp方程中,还没悟出来)
三面:前面的老哥跑了,HR让我顶替,上了个厕所,五分钟继续面
面试官高冷至极,说话没有语调,不敢造次
我:自我介绍,强调没后端经验,c++
问:你觉得技术哪一部分不错
我:数据结构和操作系统和c++
问:我看你实现了线程安全的hbase读写接口,说一下怎么实现的?
我:讲一下线程怎么不安全,线程和进程的关系,画了个kernel内存分布 高地址内核、入口、栈,堆,静态存储区、常量存储区、代码段,PCB内容、线程共享进程内容,线程调度换页阻塞、上下文切换机制,然后讲线程多了stack会爆掉,再多线程开不起来,或者把旧线程down掉(stack爆),我们搞一个线程池,加锁,控制连接上限,减少线程上下文切换损失。
问:和我理解的线程安全不一样,你这个是控制并发数量
答:一个整数,inode的结构讲了一下,目录文件、无名文件讲了一下,文件描述符即是引用向inode的值
问:怎么实现两个进程同时访问文件描述符?
答:进程通通信吗?可以共享内存mmap可以实现,讲了一下映射共享内存结构,另外还有shm,我不太熟,亲缘进程可以用管道,也可以socket 访问
问:现在要进程b和a访问同一个文件描述符,传什么参数?怎么传?
我:?不是共享内存了吗?mmap,shm还传啥参数啊?
问:比如a 访问一个文件描述符,读到pos位置,怎么传给b,你刚刚说过进程通信方式了,比如用信号量,现在我就问你要传什么参数?
我:信号量也可以传文件描述符?
我:那传一个文件描述符、一个pos不就行了(这里楼猪不太懂,求指点
我:嗯(大无畏不怕死乐观主义gm精神
问:自旋锁和普通锁有什么区别
我:自旋锁 写了个自旋锁伪代码,在死循环里不断试探锁位,占用处理机,发现锁被占用后不断读取,处于忙占用状态,不会挂起进入阻塞队列,如果是单核主机,没有其他核上面的线程给他释放锁,就死机了。
普通锁分互斥锁和条件变量,锁被占用时,立刻被挂起换出内存,等待系统进程发现对应锁释放后再wake,换入内存。
问:自旋锁这种设计有用吗?占用cpu,为什么呢?
想了一会,想起来自旋锁设计初衷 我:缺页中断讲一下,讲进程挂起,保存状态,换出内存再唤醒、换入的上下文开销很高,如果进程很重要,或者进程挂起唤醒一次时间很长,比如每次把内存换完,就不值得挂起,不如空转处理机,使用自旋锁,避免上下文切换。
问:嗯,你还会其他编程语言吗?
我:python懂一点,会用,没有深入了解过,java也差不多
问:没有深入了解,嗯,你知道现在c++开发用的很少,只有腾讯或者一些在用了,这里一般都是php、golang,你了解过吗?
我:听说和c++很相似,熟悉c++很好转,我就是没有后端经验,想靠c++转才投的
问:嗯,c++多态讲一下
我:多态由静态联编和动态联编实现,静态联编是编译时确定,动态联编是运行时确定,静态主要靠重载实现,动态靠虚函数
问:虚函数怎么实现的?
我:有继承特性才能用虚函数,所以是类实现,含虚函数的类对象内存第一个单元会内置一个虚函数指针,占一个指针的内存单位,派生类定义与基类同名函数就会自动成为虚函数,类会在只读数据段生成一张虚函数表,对应各类实际实现的虚函数,用基类指针和引用调用派生类虚函数,vptr会去vtable找派生类真实实现虚函数。
我:内存对齐吗?vptr 0-7,其余和最长的vptr对齐a 8-15,b16-23,c24-32(这里楼猪看书不仔细,答错了,泪目了 应该是和内存偏移对齐
问:这个你回去多看看吧
问:最后我们来写道算法吧 一个数组,只有一个数出现1次,其他都出现三次,求这个数 (剑指offer原题)
我:hash散列,求得没碰撞的数,o(n)
我:桶,找只有一个的 O(n)
问:有别的思路吗?还可以优化
我:只能o(n),怎么都得遍历一边,想不出来啊
问:肯定要遍历一遍,可以从空间上优化
我:呜呜呜~有提示吗(这个题我见过,好像是相邻做位运算的,上一题答错了,太紧张忘了)
我:2分钟过去,没有思路
问:好了,我的问题问完了,你有什么要问我的吗?
我:滴滴后端都是什么技术栈?我去实习应该就是学新技术栈了吧?
问:嗯,一般都是php和golang,不粗意外是转,至于分到哪个组不一定
我:刚刚内存布局我哪错了?
问:面试题我不会回答,这个要你自己回去研究
问:嗯,你基础不错,有些地方还可以提升
hr一会出来,说回去等消息,我悄悄问hr回去等消息是有消息还是没消息啊?hr说我也不知道。
应该是比较真实的面经了,真情实景,大家提提意见,另外也给怕面试的老哥看看我的铁憨憨面试风格
另外求offer,手里只有一个实习和工资低的弟弟厂,真的很想要这个offer
可以看到,C++需要极强的操作系统和底层理论知识才能熟练驾驭,而且工程能力会比较缺,所以现在不建议面试基础知识以C++为主复习。
智力题,醉汉在一维数组上走n步之后回到起始位置的概率
红黑树和平衡二叉树的区别
动态链接中的全局作用域表
析构函数为什么要声明未虚函数
会不会数据库 不擅长,尽量别问
互斥锁、读写锁、自旋锁的区别
算法atoi函数的实现
实验室项目介绍,项目难点
场景分析,围绕美团搜索性能的提升
二面就是标准C++的问题。
2、Hive的存储引擎了解哪些?例如常用默认的textfile,还了解哪些?orcfile。textfile和orcfile有什么区别?行列存储?是行存储还是列存储?
5、SQL题 一个login_in表,userid、login_time、ip,表数据量比较大,千万级甚至上亿级别。取出最近10条登录的数据(考虑上数据量巨大)。常规做法全局order by limit;对userid或ip用窗口函数做分区加编号再过滤,分区内login_time倒序排,之后再全局order by。怎么样用sort by的方式去实现?回答distribute by +
6、Hive表的内部表和外部表有什么区别?实际实习工作中有用到过吗?用的是内部表还是外部表?
8、Hive的优化点,怎么去写更优的Hive语句,如何去优化?在实习工作中有没有遇到过?
9、数据倾斜的解决方案?
10、SQL题,还是login_in表,统计登录的总条数和登录的总人数,考虑下数据量很大,一个人可能有多条登录数据。
11、介绍一下HBase的一些特性。在删除HBase中的一个数据的时候,它什么时候真正的进行删除呢?当你进行删除操作,它是立马就把数据删除掉了吗?
12、SQL题,还是login_in表,算总人数的时候会在Hive里面起几个MR。
14、抽象类与接口的区别?方法的默认实现?接口中可以定义常量么?
16、Java线程写过吗?怎么写一个线程?实际项目中写过么?
17、线程池了解过吗?
19、现在有一个String的对象“ABCD”,如何将这个字符串反转生成一个新的字符串。
将这个字符串变为StringBuild,然后调用方法。
21、MyISAM的一些索引,单列索引、组合索引、主键、唯一索引都什么区别?
22、Shell中统计一个文件的行数用什么指令?在Shell脚本中获取传入参数的总个数?
23、Shell中压缩一个文件夹,用什么指令?
24、SQL题,还是login_in表,加一个pay_info表,字段包括userid,pay_time,payment_amout。要求查出登录了但是未支付的总人数,一个用户也会有多条支付的数据。注意多条重复关联去重问题。
27、你是保研的还是考研的?
28、你的方向是大数据哪一块?离线还是数仓?
2、在百度是在哪个部门实习啊?在哪个地点?在华为做的东西偏后台对吧?华为在哪个地方?
3、SQL问题,直播场景,表字段live_id,start_time,end_time,直播场次很多,数据量很大,这个表是一个分区表,每一天分区存的是当天的数据。计算一天里面哪个时段直播的并发量是最高的。例如:
4、检索的一张搜索日志表query_log,关键字段query词,类目kind,时间timestamp。求每一个类目下,检索次数top10的query以及它的检索次数。
5、如果有一些类目的query词特别多,在执行过程中会出现一些数据倾斜的问题,这种情况下应该如何解决呢?
8、聊一下你之前做的项目,先说一下在百度的吧,具体问了问项目内容。
9、这个涉及Spark SQL的项目是做什么?
10、导师项目涉及的HBase数据量大么?有自己搭的集群是么?
11、实时相关的框架接触过吗?
12、你有什么要问我的吗?