2016腾讯实习生面试题(前端、后台、开发、算法)

总的来说今年能面试腾讯还是不错,可惜没有最终通过,哎~

游戏开发(手游)

  1. 自我介绍
  2. 做的最好的项目,并简述(跟一面一样)
  3. 随机简历问题(小编被问到科研的项目,需要用简单的话语介绍自己的科研…….就是想办法让不懂得人一听就懂…)
  4. 常见面试题:

C++篇

1) C++面向对象的几个特点,并简述(基础)
(参考:封装、继承、多态)
2) 类中变量的初始化顺序
(参考:这里想考察的是,初始化顺序是取决于变量声明的顺序,还是构造函数中给定的顺序,答案是前者)
3) 什么是虚继承,什么是多继承,有什么优缺点?(多看书、多看书、多看书…重要的事情说三遍)

数据结构篇

1) 简述快排/堆排/归并(有可能还要现场书写)
2) 请用快排的思想 找出第K个最大的数
(参考:快排每次之后就可以知道当前数的位置,如果比K大,则递归左子序列,比K小,递归右子序列)
3) 常见的稳定排序和不稳定排序算法,归并排序是稳定还是不稳定?

智力题篇

1) 概率题,一个人99%可能患病,医生1%可能误诊。问如果医生诊断该人患病,则他确实患病的概率?(记得可能有些不准确,有点蒙)
2) 有两个容器,一个5L, 一个6L,请问如何倒出3L水
(参考:设5L容器为A,6L容器为B,先将B装满,全部倒入A,此时B中剩余1L,将A倒空,将B中剩余1L水倒入A,完成第一次;再将B装满,全部倒入A,此时B中剩余2L,将A倒空,将B中剩余2L水倒入A,完成第二次;如此循环)
3)给定两个球A、B,圆心坐标,半径以及两个运动方向,判断他们未来是否会相碰(当时真心是蒙了,其实很简单,将二维中的问题引用过来就好了)
(参考:判断是否相撞,即两圆心距离大于半径之和,两圆心距离由坐标给出,而坐标又是随时间改变的函数,将R表达出后,转化为求解一元二次方程问题。有两个解:开始接触时间和离开时间;一个解:两个球擦肩而过;无解:不碰撞)

大数据篇

1) 找出1亿个数据中最大的一万个数据
(参考:利用上面快排的思想;先选100万个数据,找出最大的1万个,然后利用最小的那个数过滤掉1亿个数据里面99%的数据,最后在过滤掉的数里面继续找最大的1万个)
2) 有一堆数,两两相等,加入里面有一个数是不符合这个规律的,请找出来
(参考:一开始看到确实有点蒙,不过在指点了用位运算后就不难了,同样的数异或之后全为0,所以只需要将所有数据按位异或即可)

后台工程师

  1. 自我介绍
  2. 开始各种题目轰炸, 这里带来前线最新战况:

C++篇

1) 有两个字符串S1,S2,现在需要将S2中出现过的字符从S1中删除,请实现这个函数~(有两位同学都遇到了这个问题)
2) struct和class区别?
(参考:struct与class具有相似的特性,都可以有成员变量和成员函数,不同之处在于struct默认成员访问属性和继承方式都是public,而class默认的成员访问属性和继承方式都是private)
3) 虚函数是怎么实现的?
(参考:类内有一个指向虚函数表的指针,虚函数表按派生顺序存储了不同等级的被覆盖的虚函数地址,当基类指针or引用于某个对象绑定时,根据对象在派生中的层次去寻找相应的虚函数)
4) 常用设计模式有哪些,比较熟悉哪个,有什么优缺点?
(参考:创建型、结构型、行为型)
5) 函数的重载、重写、隐藏.
(参考:重写必须继承,重载不用;重写的方法名,参数数目相同,参数类型兼容,重载的方法名相同,参数列表不同;重写的方法修饰符大于等于父类的方法,重载和修饰符无关;重写不可以抛出父类没有抛出的一般异常,可以抛出运行时异常)
6) C和C++中结构体的区别
(参考:在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数)

操作系统篇

1) 说说进程和线程的区别(经典中的经典)
(参考:进程是资源分配的单位,线程是运行调度的单位,一个进程可以创建多个线程,线程之间共享同一进程的地址空间)
2) 那么假设父进程打开了一个文件,其子进程也可以访问该文件,如果父进程向文件中写入1K数据,子进程也写入1K数据,这样做会不会产生冲突,即某一个数据被覆盖?
3) 请简述LRU和FIFO两种页面调度算法的区别
(参考:FIFO核心原则就是:如果一个数据最先进入缓存中,则应该最早淘汰掉。也就是说,当缓存满的时候,应当把最先进入缓存的数据给淘汰掉;LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰)
4) 下面的程序输出几个”-“

  void func() 
    { 
        for(int i=0; i<2; i++) 
        { 
            fork();
            printf("-"); 
        } 
    return;
     }

5) 进程之间的通信方式有哪些?
(参考:
管道( pipe ):半双工,只能在具有亲缘关系的进程间使用;
有名管道 (named pipe) : 半双工的通信方式,允许无亲缘关系进程间的通信;
信号量( semophore ) : 一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,主要作为进程间以及同一进程内不同线程之间的同步手段;
消息队列( message queue ) :由消息的链表,存放在内核中并由消息队列标识符标识;
信号 ( signal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生;
共享内存( shared memory ) :映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的;
套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信)

网络篇

1) 说说TCP和UDP之区别(经典)
(参考:TCP是面向连接的通信方式,必须经过三次握手建立连接,每次发送消息后必须等到ACK应答,否则超时重传,保证每个包都能正确到达对方;UDP是非面向连接的通信方式,发送端只管发,不管对方是否收到)
2) HTTP是基于TCP还是UDP的?是全双工么?
3) 简述一下TCP/IP协议的网络分层,与经典的OSI有什么区别?
4) 给你X台主机,一个网段,应该如何设置?
(参考:计算能包含主机个数时,是2^x-2,去掉全0和全1)

策略篇

盒子里有15个红球两人轮流从盒子中取球每次只能取1-3个不能不取,取到最后一个球的获胜.如果让你先取 为了确保获胜你第一次会取几个?接下来会怎样取?
(参考:第一次必须取三个. 接下来无论对手取几个,都保证拿到第7个、第11个、第15个为止. 思路是倒推法:确保拿到最后一个,即上一轮中对手至多拿到第14个球,为实现这一点,必须拿到第11个球,这样以来,对手只能选择拿到12、13还是14为止,你总是能相应拿3个、2个或1个,得到胜利. 依次类推,确保拿第11个就得拿第7个,第3个.所以第一次拿三个球.)
总体来说,C++、操作系统、网络始终是面试里的大头,另外临场的应变能力也是十分重要!

原文地址:https://www.cnblogs.com/hkevin/p/5510058.html