继承多态,内存分配和管理等,还有很多计算机½络的知识½要掌握。最重要的是算法,推荐刷牛客½和Leetcode上的题目, 《剑指Offer》这本书上的每一道
题½必须要½在五分钟之内手写出来,记½是手写,不是在IDE下编译调试。笔试会有一小部分人被刷。
STL中如½进行内存管理,TCP协议的相关知识,TCP三次握手,TCP和UDP的区别等等。请说下数据库中事物的特征,数据库索引有几种类别,hash索引,也就
是散列索引,HTTP返回码
伙伴系统、slab缓存
大端与小端的概念;time_wait状态的产生原因,危害,如½避免;select/poll/epoll的区别;epoll中ET和LT的区别;UDP协议的½用领域;守护、僵尸、孤儿进
程这种概念,滑动窗口协议
与为啥需要采用三次握 手;(4)C++ Static关键 字; (6)C++迭代器失效问题(iterator原理); (7)map /set容器的实现原理(红黑树知识+STL容器
内部原理);
(2)Linux 伙伴堆算法(slab)实现的原理, 以及与普通内 存分配相比有什么优势(Linux内核); (3)Linux 高并发的实现, 线程池的实现思想, 怎样处
理高并发(根据项目来 问); (4) Linux 写一个并发测试程序; (5) 如½实现一个String, 他的内存是长什么样的(STL内部实现);
红黑树的性质,旋
½、插入、删除操½
哈希表解决冲突的方法及优缺点
如½设计½的散列½数
inux下如½查看cpu½用率
手写程序:两个大量无序无重复数组,筛出其中相同元素
解法:(1)哈希,时间复杂度½ (2)直接排序,空间复杂度½
linux文件读取经过哪些过程?在内核源码中怎么实现
c++类成员½数的重½½,覆盖和隐藏有什么区别?
动态链接与静态链接的区别
数据库接触过什么?优化呢?分页和分表的区别。MySQL数据库½用什么引擎。索引实现,索引的½用。
最后问了一个平衡二叉树的反向排序vector为什么每一次扩容½是2倍
tcp/ip卷一tcp那章所有内容½考到了,包括PAWS,几种定时器
C++语言方面除了 各种关键字,还问到了迭代器种类(偏特化,type_traits),考了STL源码剖析前三章。C++内存模型只问虚½数。腾讯问了Array模板类的实现
改错(果
设计模式问了装饰,适配器,代理区别,做后台必须明½reactor是哪几个模式合成的吧
BST(二叉搜索树)的查找算法TCP接收方如½保证按序接收
现场写一个程序,双向链表,包含节点的定义、插入、删除、查找,手写快速排序
拥塞控制和流量控制分别是什么概念,流量控制的过程,分别要解决什么问题
几种常见的调度算法
大数据的解法无非那么几种,常见的就是hash和bitmap,这个½上½有很详细的帖子讲解,自己去百度这一段
链表删除结点、二叉树的层第遍历非递½、二叉树的后序非递½遍历
链表的逆½strlen的常规写法 和 递½写法
2.strcpy 和strncpy 的代码和区别, 这里½要说本质区别,就是strcpy不安全,有可½cpy越界
3.快速排序和复杂度 代码
4.一个文本文件,包含很多字符串,要求用伪代码求出 每个字符串出现的次数 我用的 STL里的map实现的
为什么构造½数不½设成虚½数:因为多态分编译时多态和运行时多态,父类设成虚构造½数,编译时无法确定父类的具½ 类型,所以会报错
阻塞控制中,阻塞窗口大小怎么动态变化的:具½的分两种情况说就行:一个是慢启动 一个是快重传,大家看下课本,这个要画图文字说不清
重新设计 ER 模型 —— 问了数据库一个简单的查询例子(找出姓张的用户,like 查询,挂掉),还有 DB 的第二范式、第三范式,挂掉。
(1) 多态性½有哪些?(静态和动态,然后分别叙述了一下虚½数和½数重½½)
(2) 动态绑定怎么实现?(就是问了一下基类与派生类指针和引用的½换问题)
(3) 类型½换有哪些?(四种类型½换,分别举例说明)
(4) 操½符重½½(+操½符),具½如½去定义,?(让把操½符重½½½数原型说一遍)
(5) 内存对½的原则?(原则叙述了一下并举例说明)
(6) 模版怎么实现?
(7) 指针和const的用法?(就是四种情况说了一下)
(8) 虚½数、纯虚½数、虚½数与析构½数?(纯虚½数如½定义,为什么析构½数要定义成虚½数)
(9) 内联½数(讲了一下内联½数的优点以及和宏定义的区别)
(10)
const和typedef(主要讲了const的用处,有那些优点)
(11) 排序算法有哪些?快速排序怎么实现的?最½时间复杂度,平均时间复杂度
(12) 链接指示:extern “C”(½用)
(13)
c语言和c++有什么区别?(大½讲了 一下,继承、多态、封装、异常处理等)
(5)
strcpy½数的编写?(这个½数很熟悉,后来阿里校招面试也让现场编写了)
(6) 数据结构中二叉树的非递½遍历?(现场画图举例讲解的,所以大家面试的时候½量多动笔)
(7) c++中四种类型½换机制?
(8) 继承机制中对象之间是如½½换的?
(9) 继承机制中引用和指针之间如½½换?
(10) 虚½数,虚½数表里面内存如½分配?(这个考前看过了,答的还不错)
(11) 如½实现只½动态分配类对象,不½定义类对象?(这个牛客上的题目,我把如½只½动态分配和只½静态分配½讲了一下)
(12) stl有哪些容器,对比vector和set?
(13) 红黑树的定义和解释?
(14) const关键字的½用?(const成员½数,½数传递,和define的区别)
(15) 静态成员½数和数据成员有什么意义?
(16) 模版特化的概念,为什么特化?
(17) explicit是干什么用的?
(18) strcpy返回类型是干嘛用的?
(19) 内存溢出有那些因素?
(20) new与malloc的区别,delet和free的区别?
(21) 为什么要用static_cast½换而不用c语言中的½换?
(22) 异常机制是怎么回事?
(23) 迭代器删除元素的会发生什么?
(24) 必须在构造½数初始化式里进行初始化的数据成员有哪些?
(25) 类的封装:private,protected,public
(26) auto_ptr类:
操½系统知识,线程、进程,他俩的区别于相同点,½时½用它们,同步(通信)方式,这就又延伸到共享内存、信号、信号量、各种锁。同样的回答这些问题时,½要
回答的不一样,比较深入才行。比如从原理,历史来源、论文、改进方式、源代码开始讲,一层层的讲出这些设计的本质,面试官会比较喜欢的。
3 、源代码
重点部分:文件系统、进程管理、进程切换、内存管理这几个部分,其中文件管理和内存管理尤为重要。包括 vfs 虚拟文件系统,一个完整的文件操½过程比
如 read 、 write 等等,文件映射mmap ,共享内存等等可½需要花一点时间理解这些东西。
3、 ½络部分
½络不管½是想从事哪个方向,基本½是重中之重
我的学习方式:看书和看源代码,由于 tcpip 是开源的,可以仔细看看其中状态½换过程。
Tcp 最为人知的三次握手和 4 次挥手,½一定要½够讲得出为什么,每一次出现错误会怎么样,为什么要 3\4 次,少了行不行。
比如什么情况会有 flood 攻击, timewait 攻击等等
在 tcp 中如½实时监测断线情况,以及实现断线重连等等
另外还有很重要的拥塞控制、拥塞避免,慢开始算法、快重传快恢复, ttl 时间计算。
推荐一本很½的书《 linux 高性½服务器编程》、以及《 Linux ½络编程实战》也不错。
½然啦 unix ½络编程, tcp 三卷是不½少的。
4、 数据结构和算法
这个东西在面试和笔试时½比较有用,并且½够在½纸上手写,数据结构问的最多的并且会难一点的应该就是二叉树了,包括 bst 、红黑树,一般二叉树的各种遍
历,非递½,红黑树的性质,插入删除操½, tree 树的简历,还有 hash 的冲突处理方式。
至于算法
就练习 leetcode 或者牛客的吧,至少把 easy 和 medium 刷½几遍,然后 hard 部分题目多刷几遍,因为 dfs 和动态规划很多½题目½在里面。
我面试过程中,写过这些代码,图的 dfs 、 bfs 、 dijkstra ,树的各种非递½遍历、很简单的动态规划,字数组系列。
5、 开源库阅读
我也没有读很多开源库,½至少 stl 要非常熟悉, boost 部分熟悉, linux 内核部分很熟悉, libevent、 memcached 、 redis 还有 nginx ½量熟悉。
来源: http://www.nowcoder.com/discuss/9166?type=0&order=0&pos=208&page=2
来源: http://www.nowcoder.com/discuss/3038
C/C++相关
1 虚析构、模板和宏
2 虚½数实现机制
3 vector与list的区别,map是如½实现的,查找效率是多少
4 extern 关键字有什么用
5 malloc和new的区别,½否malloc(1.2G)
linux以及操½系统相关
1 内存池实现
2 进程间通信机制
3 Linux ps½令,以及看内存½前½用状态的½令
4 进程与线程的区别,共享的数据
5 进程的内存空间
算法与数据结构 (手写代码实现)
1 大整数加、减、乘、除、求模运算实现
2 很多整数,找其中出现次数最多的那个数
3 单链表翻½(两个指针如½实现)、查找、删除、插入以及双向链表、有序链表合并
4 判断一个整数是否是2的整数次幂.(n&(n1))
5 二分查找(注意边界条件)
6 常见排序算法的实现以及稳定性(快排跟½并考的很多)
7 字符串翻½(O(n))、匹配(KMP算法)
8 最长递增子序列(nlogn的算法)
9 链表判断是否有环,环的入口,两个链表是否相交(快慢指针)。
10 指定一个数组,求2个数的和等于指定的和(某一个数),如果是3,4,5,n个等于个的和(某一个数)呢?(可以看½背包问题)
11 跳台阶问题
其他
1 红黑树的性质以及插入和删除
2 解析XML文件
3 千万级的用户,提供一个服务,该服务有很多模块,现在有一个底层模块需要优化,问怎么实现,在不½响其他服务模块以及用户½验的情况下。(面IEG)
4 卡特兰数以及公式推导(应多很多)
5 未知大小的文件,翻½整个文件
6 如果内存中有个cache存储qq号和最近登½时间问怎么样做hit和淘汰
7 检测短信敏感词
8 大数据问题
9 C++、java和PHP有什么本质区别
来源: http://www.nowcoder.com/discuss/260?type=0&order=0&pos=247&page=2
自我介绍
排序的稳定性是什么,什么样的排序是稳定的?
对C++的学习掌握情况怎样?
一个C++程序从编译到运行½经历了哪些阶段?
C++的特点是什么?
C++多态是怎么实现的?
static和const关键字是干什么的?
举例自己熟悉的设计模式,并且解释观察者模式
设计模式在平时应用的情况
tcp udp½于什么层,有什么区别?
linux½令的举例
一个32½机器上linux进程最大可以申请多少空间?
大端法和小端法指的是什么?在纸上写一个程序进行验证
对java和mysql的询问
平时爱读什么技术书?
平时爱不爱玩游戏,对做游戏抵触不抵触?
文/_SilverBullet(简书½者)
原文链接:http://www.jianshu.com/p/50b51ccbaa31
著½权½½者所有,½½½请联系½者获得授权,并标注“简书½者”。
linux和os:
netstat :显示½络状态
tcpdump:主要是截获通过本机½络接口的数据,用以分析。½够截获½前所有通过本机½卡的数据包。它拥有灵活的过滤机制,可以确保得到
想要的数据。
ipcs:检查系统上共享内存的分配
ipcrm:手动解除系统上共享内存的分配
(如果这四个½令没听说过或者不½熟练½用,基本上可以回家,通过的概率较小 ^_^ ,这四个½令的熟练掌握程度基本上½½现面试者实际开
发和调试程序的经验)
cpu 内存 硬盘 等等与系统性½调试相关的½令必须熟练掌握,设½修改权限 tcp½络状态查看 各进程状态 抓包相关等相关½令 必须熟练掌
握
awk sed需掌握
共享内存的½用实现原理
(必考必问,然后共享内存段被映射进进程空间之后,存在于进程空间的什么½½?共享内存段最大限制是多少?)
共享内存定义:共享内存是最快的可用IPC(进程间通信)½式。它允许多个不相关的进程去访问同一部分逻辑内存。共享内存是由IPC为一个进程
创建的一个特殊的地址范围,它将出现在进程的地址空间中。其他进程可以把同一段共享内存段“连接到”它们自己的地址空间里去。所有进程½可
以访问共享内存中的地址。如果一个进程向这段共享内存写了数据,所做的改动会立刻被有访问同一段共享内存的其他进程看到。因此共享内存对于
数据的传输是非常高效的。
共享内存的原理:共享内存是最有用的进程间通信方式之一,也是最快的IPC½式。两个不同进程A、B共享内存的意思是,同一块物理内存被映
射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。
c++进程内存空间分布(注意各部分的内存地址谁高谁½,注意栈从高到½分配,堆从½到高分配)
ELF是什么?其大小与程序中全局变量的是否初始化有什么关系(注意未初始化的数据放在bss段)
可执行文件:包含了代码和数据。具有可执行的程序。
可重定½文件:包含了代码和数据(这些数据是和其他重定½文件和共享的
object文件一起连接时½用的)
共享object文件(又可叫做共享库):包含了代码和数据(这些数据是在连接
时候被连接器ld和运行时动态连接器½用的)。
½创建共享库容易,½动态装½½和共享库的结合更加容易。在ELF下,在C++
中,全局的构造½数和析构½数在共享库和静态库中用同样方法处理。
½用过哪些进程间通讯机制,并详细说明(重点)
makefile编写,½然比较基础,½是会被问到
mkdir mf
cd mf
vim makefile
hello.o:hello.c hello.h
gcc –c hello.o -Lm
make
./hello
gdb调试相关的经验,会被问到
如½定½内存泄露?
内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的、大小任意的(内存块的大小可以在程序运行期决定)、½用完后必须显示释放的内
存。应用程序一般½用malloc、realloc、new等½数从堆中分配到一块内存,½用完后,程序必须负责相应的调用free或delete释放该内存块。否
则,这块内存就不½被再次½用,我们就说这块内存泄漏了。
C++程序缺乏相应的手段来检测内存信息,只½½用top指令观察进程的动态内存总额。而且程序退出时,我们无法获知任½内存泄漏信息
½用Linux½令回收内存,可以½用ps、kill两个½令检测内存½用情况和进行回收。在½用超级用户权限时½用½令“ps”,它会列出所有正
在运行的程序名称和对应的进程号(PID)。kill½令的工½原理是向Linux操½系统的内核送出一个系统操½信号和程序的进程号(PID)
动态链接和静态链接的区别
动态链接是指在生成可执行文件时不将所有程序用到的½数链接到一个文件,因为有许多½数在操½系统带的dll文件中,½程序运行时直接从
操½系统中找。 而静态链接就是把所有用到的½数全部链接到exe文件中。
动态链接是只建立一个引用的接口,而真正的代码和数据存放在另外的可执行模块中,在运行时再装入;而静态链接是把所有的代码和数据½复
制到本模块中,运行时就不再需要库了。
32½系统一个进程最多有多少堆内存
多线程和多进程的区别(重点 面试官最最关心的一个问题,必须从cpu调度,上下文切换,数据共享,多核cup利用率,资源占用,等等各方面回
答,然后有一个问题必须会被问到:哪些东西是一个线程私有的?答案中必须包含寄存器,否则悲催)
写一个c程序辨别系统是16½or32½
法一:int k=~0;
if((unsigned int)k >63356) cout<<"at least 32 bits"<
else cout<<"16 bits"<
法二://32为系统
int i=65536;
cout<
int j=65535;
cout<
写一个c程序辨别系统是大端or小端字节序
用联合½:如char类型的,可以看他输出的是int的高字节还是½字节
信号:列出常见的信号,信号怎么处理?
i++是否原子操½?并解释为什么?
说出½所知道的linux系统的各类同步机制(重点),
什么是死锁?如½避免死锁(每个技术面试官必问)
死锁的条件。
(互斥条件(Mutual exclusion):
1、资源不½被共享,只½由一个进程½用。
2、请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
3、非剥夺条件(No pre-emption):已经分配的资源不½从相应的进程中被强制地剥夺。
4、循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程½在等待相邻进程正占用的资源。
处理死锁的策略:
1.½略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底
下,可½鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像。
2.检测死锁并且恢复。
3.仔细地对资源进行动态分配,以避免死锁。
4.通过破除死锁四个必要条件之一,来防止死锁产生。)
列举说明linux系统的各类异步机制
来源: http://www.cnrencai.com/mianshi/mianshiwenti/3229.html
腾讯电话一面(32min)问得½是有关Linux下的½络编程和系统编程问题,范围很广½是不深,不难回答。
1 select,poll,epoll的区别;2 进程通信的IPC种类;3 有名管道和无名管道的区别;4 进程和线程的区别; 5 线程的私有栈空间;6 简述TCP通信中服务端和客户端
的API;7 TCP中的三路握手;8 C语言中的static修饰符;9 进程间如½传递文件描述符;10 进程的虚拟地址空间布局; 11 内核是如½实现创建线程和进程的;12 问了
两个项目的具½实现。
腾讯视频二面(65min)
1 sizeof一个空类是多少,含有普通成员½数呢,含有虚½数呢,含有static½数或者static变量呢; 2 用宏F(a,b)实现两数的平方和,F(a++,a++)等于多少;3 内联½
数和宏指令有什么区别;4 为什么在公有继承链中基类的析构½数要被声明成虚½数,一个不被继承的类析构½数被声明成虚½数½不½;5 给一个½随机产生1到10000
的½数,如½½让它产生随机1到7000;6 fork之后父进程和子进程的栈变量是私有还是公有,堆变量呢,全局变量呢,常量呢,static 变量呢;7 用mmap将共享内存映
射到进程的虚拟地址空间时有没有分配物理内存,什么时候才真正分配物理内存给共享变量;8 服务端在调用listen之后调用sleep,客户端connect之后会返回错误吗;9
服务端一直阻塞着(调用sleep),客户端调用send会返回错误吗; 10 说说TCP的拥塞控制和流量控制;11 extern "C"的½用;12 快速排序;13 反½字符串中的单词,空
间复杂度O(1)。
来源: http://blog.csdn.net/ljlstart/article/details/51017812
:Ping,Traceroute的底层实现方式
reactor和proactor
死锁的定义,死锁的预防,如½解决死锁
隔一个删除一个map中的元素(主要考察迭代器的失效问题) , 虚½数如½实现的,画出内存图
Linux:
文件系统 (这个我不会,没怎么问)
进程线程区别
详细说明 管道、共享内存、信号量
在共享内存中如½½用mutex
1G共享内存,切割为很多记½,每个大小1K,多个进程访问,如½对每个记½进程保护 (不同同时读写一个记½)
select和epoll
nginx和apache对比
数据库:
ACID,数据库引擎、索引相关知识 (数据库我只是了解,问的不多),稍微提了一下redis
来源: http://www.nowcoder.com/discuss/12083?type=0&order=0&pos=111&page=1
实现一个Stack类 要求 push pop max 操½时间½是O(1)
特殊的地方,不允许½用STL容器,自己实现链表或是数组,要写出完整功½,包括构造析构½数。注意边界情况和内存泄漏
linux 读写锁的½用,适用场景
用½知道的同步机制实现一个读写锁。。。这个写了很久,最后勉强出来了
一面:
1、写算法,二叉树按层遍历,用双向链表把节点连起来
2、一个无序自然数数列,给定一个数M,选取自然数数列中两个数,其中他们的和是M,打印所有这样的自然数对
3、TCP UDP的不同 TCP三次握手
4、设计一个½½摇号系统,½一个人摇了6年后½到的概率会翻倍,设计这样的系统
5、Linux½令 在一个文件中,倒序打印第二行前100个大写字母
二面:
1、static_cast reinterpret_cast区别
2、class A{int m;}
class B{int m;}
class C:A,B;
C c;
printf("%p %p %p\r\n", &c, reinterpret_cast<B*>(&c), static_cast<B*>(&c)),三个结果打印有啥不同。
3、char c = 255;
unsigned short b = c;
cout <<b << endl;输出结果
4、继承中析构½数最½为虚½数为什么?
5、构造½数为什么不建议调用虚½数?
6、TCP UDP端口扫描的实现方式
7、TCP close_wait状态
8、守护进程的概念,怎么创建守护进程
9、线程间同步方式,条件变量
10、性½优化思路
评论