校招面试集锦

校招开始了,一些面试题目和大家共享一下,欢迎大家探讨一些题目的解法
(对比了之前的校招实习面试题,是有一些常考题的,建议那一篇博客也看看)

腾讯

话说鹅厂真的很喜欢出智力题啊

  • 1.1、sizeof空的类,虚函数表
    C++标准规定类的大小不为0,空类的大小为1,当类不包含虚函数和非静态数据成员时,其对象大小也为1。(额外给个思考题,为什么空类大小是1?)
    关于虚函数,陈皓的这篇博客讲的不错
  • 1.2、100个硬币,有一个质量异常,给你一个天枰,你最少称几次可以知道这个硬币偏重还是偏轻?
    先分成两堆,称一次,再随机选一堆分成两堆再称一次即可。
  • 1.3、进程间通信的方法
    这个问题我也碰到过很多次,感觉面试官非常想要的一个答案是socket通信,此外还有管道,消息队列,信号量,共享内存。(线程间通信也是较常问的一个问题)
  • 1.4、linux命令,两个存电话号码的文件,找出两个文件都有的号码
    common,可以参考一下这篇博客
  • 1.5、linux命令,有个文件一直在增大,找到在写这个文件的进程
    lsof lsof 一切皆文件

  • 2.1、linux有哪些IPC,分别叙述他们的特点以及应用场景
    管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
    信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,
    报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
    共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
    信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
    套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。

  • 2.2、编程中使用过哪些锁,他们的特点和使用场景
    线程同步(互斥量、条件变量、信号量、自旋锁、读写锁)
    并发编程系列之一:锁的意义
  • 2.3、程序分为几个区,分别存放什么
    BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。
    数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。
    代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
    堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)
    栈(stack):栈又称堆栈, 是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进后出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。它是由操作系统分配的,内存的申请与回收都由OS管理。
    img
  • 2.4、设计一个处理十万并发的服务器
  • 2.5、系统pthread库的读写锁排个队大概多长时间
  • 2.6、说说分布式协议
    (这是基础架构部们的面试)

  • 3.1、问在网易做的什么,cocostudio貌似他有点兴趣。后来还问了下一步的python和qt的东西。

  • 3.2、然后问学校的碰撞检测的东西。
  • 3.3、那个学校的模型检测的东西。
  • 3.4、问了虚函数的原理,就是虚表那个。
    见1.1
  • 3.5、问了为什么析构函数要是虚函数。
    析构函数调用顺序应该是先调用派生类的析构函数,再调用基类的析构函数。如果基类析构函数是普通函数,那么派生类的析构函数不会被调用。把基类的析构函数声明为虚函数。这将使所有派生类的析构函数自动成为虚函数。(为什么构造函数不能是虚函数?)
  • 3.6、 问了排序算法哪几个,都有什么样的复杂度。
    几个常见的排序算法都应该熟记于心,快排是白板写算法第一常考题,但是其余几个最好也能手写,曾有同学写$n^2$记错了算法。八大排序算法
  • 3.7、 问vs吗,都有哪些调试手段?为什么断点会停。断点机制如何实现的。什么是数据断点。
    使用断点
    调试断点原理
  • 3.8、 unicode和utf-8,ascii之类的差别。
    看阮一峰的博客字符编码笔记:ASCII,Unicode和UTF-8
  • 3.9、 问设计模式,所说有哪些,是什么样的原理。
    设计模式 最常考的是单例模式,好几种写法
  • 3.10、 c的memcopy和strcopy的差别,为什么memcopy会快。
    memcpy和strcpy的区别 memcopy会快可能的原因是做了优化,四个字节一起拷贝而不是一个字节拷贝(注意重叠内存)
  • 3.11、 有哪些内存泄漏的检测方法。
    C/C++内存泄漏及检测 (这里还可以引申出来问问malloc/free和new/delete等等)
  • 3.12、 深浅拷贝区别(位拷贝,值拷贝)
    主要就是指针指向的内存是不是同一个地方。深拷贝的时候连指针指向的内存也重新拷贝了一份
    (这是的IEG)

  • 4.1、 结构体和共同体的区别。
    结构体struct,共同体union,前者每个数据成员有自己的内存空间,后者共用内存空间(由最大的数据成员决定);对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于struct的不同成员赋值是互不影响的。

  • 4.2、 static 和const分别怎么用,类里面static和const可以同时修饰成员函数吗。
    二者不可以同时修饰成员函数
  • 4.3、 指针和引用的区别,引用可以用常指针实现吗。

  • 4.4、 什么是多态,多态有什么用途。

  • 4.5、 各个排序算法的时间复杂度和稳定性,快排的原理。

  • 4.6、 vector中size()和capacity()的区别。
    size指的是容器中元素的个数,capacity指的是容器大小。
  • 4.7、 map和set的原理。
    红黑树
  • 4.8、 tcp为什么要三次握手,tcp为什么可靠。
    建立链接至少两次,但两次丢包会有风险。可靠是因为校验机制,丢包重传等。
  • 4.9、 函数调用和系统调用的区别。
    函数调用是自己调用其他函数,系统调用是系统提供给用户的API接口访问磁盘等。
  • 4.10、 线程和进程,线程可以共享进程里的哪些东西。 知道协程是什么吗
    线程共享内存。协程是单进程单线程实现的,自己决定什么时候“中断”,
  • 4.11、 mysql的数据库引擎有哪些,他们的区别。
  • 4.12、 智力题。。100本书,你和小明轮流拿,一次可以拿1到5本,你先拿,怎样保证最后一本书是你拿走的。
  • 4.13、 说一下redis,redis的架构懂吗
  • 4.14、 会写makefile吗,一个文件依赖库a,库a依赖库b,写makefile的时候,a要放在b的前面还是后面。

  • 5.1、 一天中时针分针相遇几次?
    22次

  • 5.2、 一个房间有一群人都戴白色或黑色的帽子,至少有一个人是黑色的,一个人只能看到别人的帽子颜色而看不到自己的,如果他觉得自己是黑帽子,就打自己一下。第一次亮灯没人打,第二次没人打,第三次有人打,问有几个黑帽子
    3个

百度

百度对代码的要求高,在线编程bug-free,建议刷外leetcode再说

  • 1.1、 反转单链表
    Reverse String (还有一个string句子反转题目,空格跳过,每个单词反转,这个题目就是要注意一下,如果要保证连续几个空格也要保证保留下来)
  • 1.2、 计算器(加减乘除和括号)
    Basic Calculator
  • 1.3、 矩阵左上角到右下角的最小路径(每个点有两个移动方向和有四个移动方向,题目是不一样的)
    leetcode这道题是每个点两个移动方向的Minimum Path Sum

阿里

Reference

Java 内存区域和GC机制
【java开发】—java提高篇
淘宝搜索中Query下拉推荐技术
二叉树的非递归遍历
单例模式
static关键字用法总结
C++类四个默认函数—构造函数、析构函数、拷贝函数、赋值函数
c++ list, vector, map, set 区别与用法比较
关于C++ const 的全面总结
面经
一个面试官对面试问题的分析
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
机器学习常见面试题整理
面经集锦
深入理解计算机面试中的经典题目!
Hadoop常见问题解决方案总结