滴滴---2017校招---后台开发面经

来源:互联网 发布:刺客信条大革命1.5优化 编辑:程序博客网 时间:2024/05/13 16:55

滴滴—2017校招—后台开发面经

一面

  1. 自我介绍
  2. 算法:写个快排
  3. golang的协程介绍(线程模型,调度)
  4. c++虚函数的实现原理
  5. 在一间屋子里有100盏电灯,排成一行,依从左至右的顺序,编上号码:1、2、3、4、……99、100,每盏灯上有一个拉线开关,开始时,全部的灯都关着,有100个同学在门外排着队,第一个同学进屋把编号为1的倍数的所有电灯开关都拉一下(即把所有电灯开关都打开了),接着第二个同学进屋把所有编号是2的倍数的所有电灯开关拉一下(即把所有编号为偶数的电灯又关上了),第3个同学进屋把所有编号是3的倍数的电灯开关又拉了一下,如此下去,直到第100个同学进屋把100号电灯开关又拉了一下,这样做完以后,问有多少盏电灯还是亮着的?
  6. 五子棋AI的核心算法如何实现
  7. 设计算法 如何高效把订单派发给5km以内的司机

一些答案:

5:
考点:最大公约数与最小公倍数.专题:应用题.
分析:
本题的一个重要条件是最初时灯都是关着的,然后对每个编号分解质因数.
由于最初所有电灯是关着的,所以只有哪些拉了奇数次开关的电灯才是亮的,而每一盏电灯的拉线开关被拉了多少次取决于这盏灯的编号的数字有多少个不同的正约数,最后亮着的灯的编号只有为完全平方数.
所以,只有编号为1,4,9,16,25,36,49,64,81,100的电灯最后是亮着的.
点评:此题主要考查了数的奇偶性,得出最后亮着的灯的编号只有为完全平方数,从而解决问题.
6:
主要是将盘面定义成一个矩阵,然后定义规则(每种情况有不同的权重),在每次下棋的时候选择权重大的地方去下棋。
可参考:五子棋的核心算法

二面

  1. 自我介绍
  2. golang 定义一个RPC,100毫秒之后如果没有执行结束,一样要返回
  3. golang中两种类型的chan,有什么区别,分别用在什么场景下。
  4. c++虚函数
  5. c++内存结构
  6. 内存池的作用
  7. 内存池实现
  8. TCP和UDP的区别,https和http的区别,openssl的原理
  9. linux下用shell命令统计某个文件中的一些信息

一些答案:

7:
相关命令可以参考 几个shell脚本的面试题(一)

三面

  • C++的多态
  • core dump如何定位问题出现在哪里,什么问题会导致core dump?
  • 线上的程序 core dump了,线下很难重现,如何找到问题出在哪里?
  • golang一些知识
  • golang和c++有什么区别,什么时候用golang,什么时候用C++
  • 分布式环境下获取流数据中那个数据出现的次数最大
  • 你觉得你的优点和缺点是什么
  • 讲项目,遇到的最大的问题是什么
  • golang中chan的作用是什么,为什么要用,使用它的好处。

一些答案:

2,3:
linux下core dump【总结】
coredump简介与coredump原因总结
造成程序coredump的原因很多,这里根据以往的经验总结一下:
- 内存访问越界
- 多线程程序使用了线程不安全的函数
- 多线程读写的数据未加锁保护
- 非法指针
- 堆栈溢出

原创粉丝点击