公司简介

部门直招!
工作内容:
1、运用互联网最前沿技术,从事推荐广告商务引擎的后台服务软件架构设计及研发。
2、参与大型分布式广告检索引擎的架构设计和优化,支撑高并发、低时延、高可靠索引系统的研发。
3、研究和设计针对不同场景的索引架构,包括但不限于推荐、搜索。
4、优化系统核心指标,提升广告索引系统效率。

任职要求:
1、精通Linux/Unix平台上的C++编程,熟悉脚本编程,有良好的编程习惯
2、精通网络编程、多线程编程,异步编程,对数据结构和算法设计具有深刻的理解。
3、具备优秀的逻辑思维能力,对解决挑战性问题充满热情,善于解决问题和分析问题,有强烈的上进心和求知欲,善于学习新事物
4、具备较强的系统架构和业务架构能力,使系统更好的支持业务迭代。
5、良好的团队合作精神,较强的沟通能力
6、具备互联网工作经验或具备索引系统研发尤其是大规模最近邻检索架构或高并发系统研发经验、具备推荐、搜索、广告业务从业经验的优先考虑

工作地点: 北辰世纪中心 (国家会议中心、奥林匹克公园旁)

面试流程

面试环境:视频会议,共享桌面,现场直接写代码

  1. 自我介绍
  2. 基础知识
  3. 项目
  4. 提问

基础知识


  1. c 与 c++的区别?
  2. 面向对象与面向过程的区别?
  3. 面向对象的三个基本特点?
  4. 继承和多态?

  1. linux下常见指令?

  1. c语言中static关键字的作用?
  2. 全局变量和静态变量的区别?
  3. 局部变量和全局变量的区别?
  4. 动态变量与静态变量的区别? (面试官欲言又止,让我自己去查)

  1. C语言中的指针与引用?
  2. int *p,指针变量的字节数? (面试官诈我,反问我)

  1. 你说说宏吧?
  2. 全篇用到很多宏,会有什么问题?
  3. 所有的函数都是用宏实现,和直接用函数实现有什么区别?
  4. 补充:#define add(a, b) a + b,这么写有什么毛病?
  5. 宏定义的函数能用 gdb来调试? 宏的缺点(没有办法调试,代码的膨胀,没有类型检查,复杂形式无法替换)
  6. C语言的结构体的成员默认的访问权限?(面试官欲言又止,直接跳过)
  7. 指针相关:简述malloc,free;简述内存泄漏;简述野指针(面试官呵呵,心想“你想直接让我告诉你答案?”自己看一下吧);

项目相关

简单聊天室:

  1. 你用到了多线程?
  2. 进程间的通信机制有哪些?
  3. 什么是原子操作? 回答我:同时发生,或者同时不发生

    TCP C/S 文件传输

  4. TCP与UDP的区别:(答对后,面试官简述了答案)
  5. TCP的三次握手,两次握手可以吗?
  6. TCP的四次挥手,为什么样等两个报文段(2msl)?

算法

铺垫

  1. 你常用的stl库?
  2. vector底层的存储机制?为什么不直接用数组?
  3. map底层实现机制?红黑树?

求单链表的倒数第k个节点?返回节点,不知道链表的长度(不能指定输入,不知道n,只知道链表的头结点)

时间:接近15min(几乎没有写出来)
不需要输出输出,不能写伪代码,完整实现算法;不能用额外的存储空间,不能用栈,队列,空间复杂度为O(1)
结果:用c++实现不了,用c实现也实现不了;面试官无奈,那你说一下思路吧。
思路:双向链表,单链表,但是不能具体阐述

单链表如何实现反转(1->2->3,反转成3->2->1)

时间:3min
思路:头插法,但是不能具体阐述

提问环节

  1. 你觉得你应聘的优势在哪里?细致(还应该说技术博客的)
  2. 对于细致,你再详细说说?我:预处理,编译,连接;网络编程的细节;
  3. 网络编程的优势在哪里?函数原型,linux c,扯到网络编程-> 简述一下epoll吧。(心想,当时为什么不提一下“边缘触发”和“水平触发”)
  4. 你有什么问题?面试与学习相关:1. c++要学 2. 算法要强化 3.网络编程很广,抓重点 4.多线程更常用
  5. 有拿到其他公司的offer? 京东(两轮技术面,一轮hr面)