百度 提前批C++ 一面 二面 三面(GG)
前言:
个人介绍: 985小硕,c++后台,鹅厂实习生。
百度一面 电话面 (87分钟)
按照以往的套路,我都是自我介绍完直接说自己的项目,因为自己的项目已经很熟悉了。就算问到一些不会的也能答出一二三。可一面面试官完全不按照套路。我准备说项目的时候直接打断了。说我们先问几个问题,等会再说项目。
-
虚基类
-
纯虚函数
-
虚函数
-
虚函数表内存分布
-
虚函数中虚基类和派生类的关系
-
显示转换
-
问了三个算法题 讲讲思路
-
学过网络和操作系统吗
-
三次握手,四次挥手 握手为什么是两次
-
讲一讲拥塞机制 和流量机制
-
http https 抓包工具原理
-
IP地址分为几类?简单说一下分类
-
进程通信有哪些方式
-
进程同步的方法
-
知道互斥锁吗?
他用什么来保证共享数据的安全性?
这个我说信号量,他说如果用信号量来解决,现在出现一个状况,两段进程都被标记为可以访问该共享数据,但我们的共享单元只能支撑一个进程访问。这时候怎么办?
我说用唯一标识符去处理。生成唯一标识符,这样就不会出现这种情况。
他说不对。让我回去好好看看。
回去查了一下,是原子操作。。
(这个问题问了好久)
-
数据库索引 索引原理 以及如何优化数据库
-
开始讲项目 三个项目,本科的,硕士的,以及在鹅厂的。问鹅厂的问的最细(40 min)
一面总结: 还有很多问题都忘记,面完的感觉就是,百度问的真的很全,第一次电话面超过一个小时的。不够面试官也没有在不会的问题继续难为我,我就说不会。他说没事就下一个问题了。
百度二面 电话面 25分钟
-
为什么继承时基类的析构一般声明为虚函数?
-
虚函数与纯虚函数的区别在于
-
为什么构造函数不能够使虚函数
4.TCP端口扫描方式
5.TIME_WAIT、CLOSE_WAIT
6.守护进程
7.迭代器的++it和it++哪个好
8.开始问项目,从百度二面开始。我的项目就一直被怼,完全吹不动。说几个核心的点。
9.因为说了tars 的源码,他就基于这个源码开始问。如何去处理高并发HTTP请求?
我: 从接入层(统一接入网关,负载均衡)…..从服务层(服务细分,过载保护)…..从存储层(***,共享内存,分布式存储组件ceph)……
在服务层回答到 过载保护的时候。被打断。 他说你说的过载保护不过是在请求很多的时候去拒绝掉一部分用户。或者延时处理。那么 现在如果出现一个热点事件,百度的搜索可能会达到数十亿次,你去拒绝掉这一部分用户。那这一部分用户的用户体验怎么保证?
在存储层回答ceph 分布式存储组件的时候 被问到了映射 为什么ceph要去做三层映射?
面试官: 你有没有考虑过流量不干净的情况怎么办? 用很简单的ddos攻击,你这个服务 我1分钟之内就能让他趴下。这个你考虑过吗?
面试官: 你这个底层本质上还是用队列做的。你有没有考虑过队列全满的情况?就是现在你的所有队列全部爆满,你根本没有办法去做请求迁移。这时候怎么处理?
虽然只面了25分钟,但是大概率知道自己过了。因为最后面试官说:你有什么问题吗。我觉得你OK。 我就问了关于他们团队的一些问题。
二面之后的三天,HR打电话过来约视频面,并说明视频面面完之后可能还要加一轮现场面。我说没问题。 后来又打电话过来,说面试官不同意视频和电话面。必须现场面。而且不报销任何路费。从深圳到北京 来回花了3000多。最后拒了。很伤很伤。
百度三面 现场面 70分钟。
从面试开始,我就没有想过会出现这种情况。
就是自己讲完腾讯的实习项目之后。面试官直接说。你这个项目是谁让你做的。你有没有质疑过,你这个项目从方案和逻辑上就是错的?
面试官:我们现在假设一种情况,就是我们的服务端是很安全的,你现在多一个第三方***,我怎么信任你这个第三方***?
我:我们这个服务是对内的。即使对外,我们也可以从请求上来判定。比如相同的IP的地址我们可以从频率上去限制他的请求。不同的IP地址 我们可以去从key(这个key 是有一个失效期,只能用一次,我们将这些不干净的流量尽量拦截在接入层,不让他进入我们的网关。)
面试官: 你可能理解错了我的意思,我的意思是,限制服务端去信任客户端。你凭空多出了一个第三方***,虽然原则上确实方便了客户端的使用,但安全性怎么去保证?
我: 我们可以去做加密。Balabalabalalalalal……………
面试官: 你的意思我懂,但高并发请求如何去处理呢?
我: 从接入层(统一接入网关,负载均衡)…..从服务层(服务细分,过载保护)…..从存储层(***,共享内存,分布式存储组件ceph)……没讲完就被打断了。
面试官: 你知不知道,你现在所做的可能都是没有意义的?
我: ………………………….
面试官:因为你们的服务端,绝对已经做过了这些处理。而且比你的第三方***做的好。你现在的这个***服务极其脆弱。你为什么不把他封装成一个接口呢?而不是一个服务。
我: …………………………………………
面试官: 你这个项目其实还是有很多有意思的东西,比如你知道为什么用appid和appsecret 去换取微信那边的一个access_token权限吗?
我:我们可以类比,淘宝登陆 除了用户名和密码 我们还需要手机验证码这样的方式。
面试官: 你这个类比不对,因为淘宝登陆他现在不信任你这个用户名和密码。需要多加一个验证方式。而通过appid appsecret 他的本质是换取 而不是加
你知道为什么要换取 ,而不是加吗?为什么要这样做。而不是把appid appsecret 存到数据库里面?
我:因为存到数据库里面,不够安全。只要是存在数据库里面的密钥。都可能有被攻破的风险。而access_token是实时生成的。
面试官: 咱们又绕回来了,那你做这个第三方***的时候为什么用的是数据库?你既然知道access_token是实时生成的,那么就应该知道这个客户端令牌从原则上是不允许被其他人知道的,更不允许存到数据库里面。那咱们换一个问题。还是刚才,那咱们现在假设我们的服务端和数据库原则上是安全的,那么现在还是要用access_token去换取?我现在可以直接把appid和appsecret直接串起来串成一个字符串然后md5加密一下。可以这样做吗?如果不可以说出理由。
我:到这里我就懵逼了。。。。。
面试官:好,你现在去做***服务器。去请求另一个接口。如何去提高他的性能?
我:去做那边接口的服务细分,每个接口去细分,再在存储层去做一些优化……………….
面试官:现在假设不允许你动那个接口呢。比如你现在去请求一个其他公司的接口,他就是慢。他那边代码写的就是很不好。你只可以动你的***层。怎么处理?
我:多线程,分发,缓存,cdn.
面试官就照着我回答的继续细问下去。。又懵了。
后来就没问什么问题了。问了几个简单的就结束了。
#秋招##面经##百度##C++工程师##内推#