Baidu 2019 Campus Recruitment Batch in advance C++ Interview Experience-百度2019校园招聘提前批C++ 一面 二面 三面(GG),2018-08-22

前言:

个人介绍: 985小硕,c++后台,鹅厂实习生。

 

百度一面 电话面 (87分钟)

 

按照以往的套路,我都是自我介绍完直接说自己的项目,因为自己的项目已经很熟悉了。就算问到一些不会的也能答出一二三。可一面面试官完全不按照套路。我准备说项目的时候直接打断了。说我们先问几个问题,等会再说项目。

 

  1. 虚基类
  2. 纯虚函数
  3. 虚函数
  4. 虚函数表内存分布
  5. 虚函数中虚基类和派生类的关系
  6. 显示转换
  7. 问了三个算法题 讲讲思路
  8. 学过网络和操作系统吗
  9. 三次握手,四次挥手 握手为什么是两次
  10. 讲一讲拥塞机制 和流量机制
  11. http https抓包工具原理
  12. IP地址分为几类?简单说一下分类
  13. 进程通信有哪些方式
  14. 进程同步的方法
  15. 知道互斥锁吗?

    他用什么来保证共享数据的安全性?

    这个我说信号量,他说如果用信号量来解决,现在出现一个状况,两段进程都被标记为可以访问该共享数据,但我们的共享单元只能支撑一个进程访问。这时候怎么办?

    我说用唯一标识符去处理。生成唯一标识符,这样就不会出现这种情况。

    他说不对。让我回去好好看看。

    回去查了一下,是原子操作。。

    (这个问题问了好久)

 

  1. 数据库索引 索引原理 以及如何优化数据库
  2. 开始讲项目 三个项目,本科的,硕士的,以及在鹅厂的。问鹅厂的问的最细(40 min)

 

一面总结: 还有很多问题都忘记,面完的感觉就是,百度问的真的很全,第一次电话面超过一个小时的。不够面试官也没有在不会的问题继续难为我,我就说不会。他说没事就下一个问题了。

 

 

百度二面 电话面 25分钟

  1. 为什么继承时基类的析构一般声明为虚函数?
  2. 虚函数与纯虚函数的区别在于
  3. 为什么构造函数不能够使虚函数

4.TCP端口扫描方式

5.TIME_WAIT、CLOSE_WAIT

6.守护进程

7.迭代器的++it和it++哪个好

8.开始问项目,从百度二面开始。我的项目就一直被怼,完全吹不动。说几个核心的点。

9.因为说了tars 的源码,他就基于这个源码开始问。如何去处理高并发HTTP请求?

我: 从接入层(统一接入网关,负载均衡)…..从服务层(服务细分,过载保护)…..从存储层(cache,共享内存,分布式存储组件ceph)……

在服务层回答到过载保护的时候。被打断。他说你说的过载保护不过是在请求很多的时候去拒绝掉一部分用户。或者延时处理。那么现在如果出现一个热点事件,百度的搜索可能会达到数十亿次,你去拒绝掉这一部分用户。那这一部分用户的用户体验怎么保证?

在存储层回答ceph 分布式存储组件的时候被问到了映射为什么ceph要去做三层映射?

面试官: 你有没有考虑过流量不干净的情况怎么办?用很简单的ddos攻击,你这个服务我1分钟之内就能让他趴下。这个你考虑过吗?

面试官: 你这个底层本质上还是用队列做的。你有没有考虑过队列全满的情况?就是现在你的所有队列全部爆满,你根本没有办法去做请求迁移。这时候怎么处理?

虽然只面了25分钟,但是大概率知道自己过了。因为最后面试官说:你有什么问题吗。我觉得你OK。我就问了关于他们团队的一些问题。

二面之后的三天,HR打电话过来约视频面,并说明视频面面完之后可能还要加一轮现场面。我说没问题。后来又打电话过来,说面试官不同意视频和电话面。必须现场面。而且不报销任何路费。从深圳到北京来回花了3000多。最后拒了。很伤很伤。

 

百度三面 现场面70分钟。

从面试开始,我就没有想过会出现这种情况。

就是自己讲完腾讯的实习项目之后。面试官直接说。你这个项目是谁让你做的。你有没有质疑过,你这个项目从方案和逻辑上就是错的?

我 : ………………………….. (从这开始心里就有一些慌了。)

面试官:我们现在假设一种情况,就是我们的服务端是很安全的,你现在多一个第三方代理,我怎么信任你这个第三方代理?

我:我们这个服务是对内的。即使对外,我们也可以从请求上来判定。比如相同的IP的地址我们可以从频率上去限制他的请求。不同的IP地址我们可以去从key(这个key 是有一个失效期,只能用一次,我们将这些不干净的流量尽量拦截在接入层,不让他进入我们的网关。)

面试官:你可能理解错了我的意思,我的意思是,限制服务端去信任客户端。你凭空多出了一个第三方代理,虽然原则上确实方便了客户端的使用,但安全性怎么去保证?

我:我们可以去做加密。Balabalabalalalalal……………

面试官:你的意思我懂,但高并发请求如何去处理呢?

我:从接入层(统一接入网关,负载均衡)…..从服务层(服务细分,过载保护)…..从存储层(cache,共享内存,分布式存储组件ceph)……没讲完就被打断了。

面试官: 你知不知道,你现在所做的可能都是没有意义的?

我: ………………………….

面试官:因为你们的服务端,绝对已经做过了这些处理。而且比你的第三方代理做的好。你现在的这个代理服务极其脆弱。你为什么不把他封装成一个接口呢?而不是一个服务。

我: …………………………………………

面试官:你这个项目其实还是有很多有意思的东西,比如你知道为什么用appid和appsecret 去换取微信那边的一个access_token权限吗?

我:我们可以类比,淘宝登陆除了用户名和密码我们还需要手机验证码这样的方式。

面试官:你这个类比不对,因为淘宝登陆他现在不信任你这个用户名和密码。需要多加一个验证方式。而通过appid appsecret 他的本质是换取而不是加

你知道为什么要换取,而不是加吗?为什么要这样做。而不是把appid appsecret 存到数据库里面?

我:因为存到数据库里面,不够安全。只要是存在数据库里面的密钥。都可能有被攻破的风险。而access_token是实时生成的。

面试官:咱们又绕回来了,那你做这个第三方代理的时候为什么用的是数据库?你既然知道access_token是实时生成的,那么就应该知道这个客户端令牌从原则上是不允许被其他人知道的,更不允许存到数据库里面。那咱们换一个问题。还是刚才,那咱们现在假设我们的服务端和数据库原则上是安全的,那么现在还是要用access_token去换取?我现在可以直接把appid和appsecret直接串起来串成一个字符串然后md5加密一下。可以这样做吗?如果不可以说出理由。

我:到这里我就懵逼了。。。。。

面试官:好,你现在去做代理服务器。去请求另一个接口。如何去提高他的性能?

我:去做那边接口的服务细分,每个接口去细分,再在存储层去做一些优化……………….

面试官:现在假设不允许你动那个接口呢。比如你现在去请求一个其他公司的接口,他就是慢。他那边代码写的就是很不好。你只可以动你的代理层。怎么处理?

我:多线程,分发,缓存,cdn.

面试官就照着我回答的继续细问下去。。又懵了。

后来就没问什么问题了。问了几个简单的就结束了。

 

 

总结:三面面试官,绝对是我面到现在技术最强的一个。虽然挂了,但是面试官人很nice指出了项目很多我都没有考虑到的问题。面试全程都在引导我去回答问题。就是不报销路费太伤了。。。从各大博客和在百度实习的同学了解到,百度的技术氛围真的很赞。秋招再努力了。与大家共勉。

 

 

 

 

From:Nowcoder