【算法】2015-2016 阿里、百度、360、豌豆荚、搜狗面试题部分集锦

已经工作3个多月了,整理以前资料的时候,顺手翻到了之前实验室小伙伴们面试的记录,索性就分享出来了,需要的人可以参考一下

360(c++)

1面
1、堆排序
2、kmp
3、虚函数的作用
4、top k
5、int 范围的很多的数,排序


2面
1、从左上角走到右下角一共多少种走法(用组合数学来说)
2、从左上角走到右下角对角线不能走
3、前序中序求后续
4、如何找出分析出一个用户的年纪,用机器学习的方法
5、说说你学习的机器模型(不懂)
3面
1、为什么没有机器学习的知识来报我们部门
2、证明你的学习能力强
3、有啥问题


阿里(一面)c++

1.使用cmd进入命令行模式,键盘上单击任意字符,相应字符会出现在界面上,这个过程发生了什么?
 我答得是:保存当前状态栈,进行IO中断处理,处理完后继续进行当前任务。(面试官说要微观的过程,不理解)
2. 进入命令行模式,光标一直在闪动,这里又发生了什么过程?(难道不是等待输入,不理解想要问什么微观过程)
3. 如果让你设计memcpy(des,src,size)函数,若是不知道所传参数类型,怎么知道des的大小和size关系?
4. 同样的问题,对于strcpy(des,src)函数,如何知道des的大小(面试官说的是,如果你先给des malloc一段空间,当时你是知道该des指针的大小的,但是他作为参数传输strcpy函数中,如何获取它的大小呢)
5. 说几个常见的设计模式理解。
6. 若想尽量防止内存泄露,应该怎么办?
    刚开始说的是new和delete要成对出现,被他鄙视一通,然后想起了智能指针说了一下。


阿里(一面)android

activity生命周期
开屏和关屏后activity的生命周期
java内存模型
设计一个android的登录系统
http状态码 post get区别
推送机制(xmpp协议)
介绍一下项目
项目中的问题和解决方案
数据库优化select语句
冒泡排序
3升的杯子和5升的杯子量出4升的水
优缺点
工作地点选择


阿里(一面)c++

问了在构造函数括号体内初始化和成员列表初始化有什么不同?

成员列表的初始化顺序

拷贝构造函数都在什么情况下会被调用?

如何防止拷贝构造函数被调用?

默认的拷贝构造函数是怎么实现的?(还有浅拷贝的问题)

虚函数的作用?

Public,protected,private关键字的作用?这3中继承分别是什么情况?

说一下红黑树

用过哪些STL的容器?说说各种容器的作用

说一下项目的东西

职业规划是什么?


豌豆荚 c++

一面:都是手写代码
1.反转链表
2.全排列
3.编辑距离
4.写生产者消费者+阻塞通知是如何实现的


二面:继续写代码
1.简单自我介绍
2.大数据问题
3.中序前序输出树
4.多线程问题
5.总结下了我的问题,还是很NICE的一个人


三面:至今不知道这人是会技术还是真不会
1.装傻,我不知道网络编程,你给我讲讲
2.继续装,这个我也不知道你给我讲讲(J2EE)
3.我们来写个代码吧 上楼问题


搜狗 c++

1、问了项目,特别细节

2、合并n个数组,lc上题

3、找出n个数组相同的数

4、返回vector引用

5、红黑树咋实现的。。。(居然问这个)不懂

6C++写一下单例(static的,不满意)

 

二面

问了一个,如何找统一词库(给你一坨网页,给你一坨query

如何建立一个搜索推荐词库(类似百度搜索下面有一条的)

三面

自我介绍

然后给一个数组如何压缩(没想到好方法)

1亿多个字符串文件,找出中位数

然后简述一下你对cache失效时间的做法。


百度 c++

1、tcp和udp区别 
2、tcp怎么保证到达顺序有序 
3、说说拥塞控制 
4、说说虚地址 
5、讲一下你对hadoop生态系统的理解 
6、求树中,两个节点之间的最长距离,距离定义为经过节点数。 
7、翻转链表


百度 c++

1. 自我介绍

2. 介绍项目---介绍印象最深的(影响最大)---为啥印象最深(收获最大)

3. 算法

a) 给定N个数,找第二大的数(O(n)),依次隐身找第K大的数(最小最大堆)

b) N!尾部0的个数,比如5!=120那个返回1,具体解法见编程之美

c) 类似3 Sum这样的题目,具体解法就是排序之后,用前后两个指针扫描,由此降低一维复杂度。详情请分析下leetcode之3 Sum

4. 大数据-推荐看csdn july秒杀大数据那节

5. 和经理瞎扯


腾讯地图 c++

一面:

1. 谈项目(20分钟)

2. 算法(手写,2题)

Ø 题目1:给定一个有序数组,如[1,2,3,4,5,7,9,10],将数组后半段置前,即循环右移若干位,变成如[7,9,10,1,2,3,4,5],如何在变化后的数组中快速找到给定目标;

参考链接:http://www.cnblogs.com/davidluo/articles/1837561.html

(ps:不要试图去查找右移位数或尝试将数组分成两个有序段然后再做二分)。

Ø 题目2:给定一个数组,数组任意相邻的两个数的绝对值差的大小为1,给定一个目标t,如何快速找到他的位置。

参考链接:http://blog.csdn.net/morewindows/article/details/10645269

二面

Ø 自我介绍(别再重复简历了,会被直接打断的。。。)

Ø 项目简单介绍(比较短)

Ø 我说的是C++/C,问了几个问题:

A. C和C++区别

B. C++多态、虚函数和面向对象的理解

C. C和C++能否相互调用,extern关键字的理解

D. C++编译器内核(完全不懂。。。)

E. 问了一个基类指针问题,实际上问的是基类和派生类内存分配问题(答得很乱。。。)

Ø 问了一个开放性问题,时间比较长:有这样一个系统,能反映实时路段的拥堵情况,即输入一个路段,系统返回一个该路段当前的拥堵状况信息。实现这样一个系统需要完成哪些功能模块,某一模块的具体实现(流程,非算法),问了好久,实在问不下去了,就说这题就到这里吧。

Ø 因为我简历写了实验室定位的项目,而且部门又是腾讯地图,所以问了一个问题:当前定位的主流方法有哪些,了解定位的趋势(说了百度、高德等等,忘了说腾讯,⊙﹏⊙b汗)


美团/蓝汛或者其它(记不清了)

问答题:

  1. Socket中三次握手的实现
  2. socket连接过程
  3. 阻塞与非阻塞、同步和异步
  4. selectepollepoll是如何实现的(异步)
  5. 编译、链接的整个过程

预编译,编译,连接(动态链接、静态链接)

  1. 对于以下程序,C编译器和C++编译器的区别(C++编译器编译后加上输入输出参数信息,名字不同)

Int f(int a){return 0;}

  1. 内存布局(程序段、堆、栈、.bss.data…
  2. 为什么要有条件编译
  3. 内核申请内存的方法(kmalloc…很多)
  4. ARP解析的全过程
  5. 什么是虚拟内存(磁盘上)
  6. 什么是原子操作,举例说明原子操作
  7. 多态
  8. Static的作用(函数内,全局变量)
  9. 进程栈和线程栈的区别
  10. 线程调度所涉及到的系统资源具体包括什么
  11. Inode结构体的作用
  12. 抢占式操作系统的缺点,如何改善(低优先级永远无法执行,长时间不执行的低优先级把优先级调高)
  13. 为什么进程调度比线程调度更消耗cpu(多线程共用程序段,不需要进行程序的各种装载,进程调度需要装载各种程序段(我是这么说的))

 

算法:

  1. 两个有序数组,组成一个排好序的数组(原数组有重复,新的数组不可重复)
  2. 链表是否有环
  3. 判断IP是否有效
  4. 大数加法
  5. 包含二维坐标中三个点的最小园
  6. 两个文件10G100G的交集(long类型),交集输出到文件C
  7. 二叉搜索树到双向链表
  8. abcd…”字符串中第M个出现N次的字符
  9. 1~1亿中所有的质数
  10. 字符串匹配、KMP、乱序的匹配

 

系统设计:

         100张票,很多个人去抢这些票(例如12306)设计一个系统处理这个问题

 

智力题:

         1100的阶乘

         2、一个村子生男则停止,生女则直到生男才停止,问最后男女比例

         3100个囚犯的问题(经典问题)


你可能感兴趣的:(算法)