C++开发工程师笔试面试前必备知识

一、C++语言相关

1.关键字

(1)static +3

(2)const +3

内部如何实现

(3)union

const int与int const的区别

(3)inline +2

(4)sizeof

2.C++特性

(1)重写与重载的区别  +2

(2)C++类与C的struct的区别 +2

struct能否被继承

(3)delete与free的区别,new和,malloc +7

malloc是怎么实现的, free是否会直接回收内存

delete和delete []

(4)虚函数与纯虚函数的作用

纯虚函数能否被实例化

那些函数不能被设置为虚函数 +2

new最多可以new多大

(4)C11是什么,C++11特性 +3

(5)构造函数和析构函数分别能否是虚函数以及其原因 +2

(6)面向对象的四大原则

(7)指针和引用的区别 +5

站在汇编的角度来看,由于指针的使用灵活,使得底层实现中对指针的安全性检查更加严格

(8)初始化列表和函数体初始化,顺序

(9)八个基本数据类型

(10)智能指针 +3

原理

(12)拷贝构造函数

为什么返回引用

那些场景必须使用初始化列表

(13)C++是如何实现面向对象的

3.技巧

(1)内存泄漏的处理

(2)gdb调试

查看core文件中堆栈信息,bt命令等

(3)segmentfault怎么排查

4.底层

(1)编译器如何实现多态 +8

(2)内存管理、栈和堆 +5

C++中有哪些内存区域?对象是如何在这些区域中存储的?

(3)内存对象模型 +4

虚函数表的存放位置,为什么会有的把vbtr存放在前面,为什么有的存放在后面

(4)类成员访问权限的底层实现

(5)extern "C"的作用。

二、STL库相关

1.vector

(1)动态增长机制

stl用什么容器存储三维矩阵?

vector怎么使数据加入后就排序

2.map

底层实现

3.hash_map

4.list

5.deque

6.queue

7.stack

8.迭代器不能用与哪种容器?或者哪些情况下不能使用迭代器

三、数据结构与算法

1.链表

(1)链表排序

2.树

先序遍历和后序遍历能否构造出树?

层次遍历,深度遍历

红黑树与avl树的区别?局部平衡和整体平衡

(1)红黑树 +2

(2)二叉树

(3)B+树

(4)B-树

3.排序

各种排序方法、场景、复杂度、稳定度

(1)topn问题 +3

无序数组的第K大的数字,时间复杂度

(2)冒泡排序

(3)选择排序

(4)插入排序

(5)快速排序

优化方法

在什么情况下是不稳定的

(6)归并排序

4.图

(1)dijkstra算法和kruskal算法

5.算法

(1)KMP问题 +2

(2)动态规划几个经典问题

字符串的各种子串问题(公共序列问题),扔鸡蛋问题,进制转换

 

四、操作系统

1.TLB 

2.Linux内存页与windows内存页大小是否一样

3.进程调度算法

4.死锁的四个条件,怎么解决

5.虚拟内存管理

五、计算机网络

1.OSI的七层网络和TCP/IP的五层网络

2.IP协议的定义

3.TCP与UDP  +6

TCP在握手过程中交换那些信息

如何用UDP实现可靠传输

TCP三次握手过程,为啥不是两次或者四次

TCP状态图、拥塞避免算法、滑动窗口算法 +2

4.交换机与路由器的原理,在第几层

5.socket

流程

6.https和http是什么协议,区别,https是如何实现的 +3

7.加密算法,MD5是什么

8.IO模型,select poll和epoll +5

9.DNS 域名解析系统 +2

六、Linux

1.Linux操作系统的开机流程 +2

从BIOS提取MBR信息->加载引导GRUB->加载内核->运行init进程->系统初始化->建立终端->登录系统,启动完成

开机后怎么启动一个程序

2.线程与进程,线程安全  +4

进程通信

线程同步

共享内存

多线程的适用场景是什么,为啥要多线程

多线程访问内存时怎么办

3.命令

(1)查找文件命令,查找文件含有关键字的命令,统计行数 +2

(2)top

(3)iostat

(4)uptime

(5)wget

(6)ls

(7)du

(8)awk

(9)ps

(10)pstree

(11)free

(12)grep

(13)sed

(14)strace

(15)netstat

4.radix树在Linux内核中的应用

5.服务器Linux与desktop Linux的区别

6.系统调用与库函数调用的区别

fopen是否是系统调用,close是否是系统调用

7.如何修改优先级

8.Linux文件系统

9.Linux内存布局 +2

10.内核态与用户态的区别

七、数据库

1.数据库的事务

2.数据库为什么要建立索引以及索引的缺点

八、设计模式

(1)单例模式

九、相关题目

1.一个数字,化为二进制,交换奇偶位置

2.给定1~100整数,确定的1~100,即1、2、3、。。。100。有1个缺了怎么办,2个呢

3.大文件字符串词频统计

map reduce? +2

4.二叉树的最大子树和

5.实现strstr

6.如何用C语言实现内存自动分配 

7.二叉树的最大距离

8.两个栈实现一个队列 +2

9.二叉树的宽度

10.打印二叉树两个叶子节点之间的路径,写代码

11.字符串中第一个只出现一次的字符,如何优化算法使得遍历次数更少

12.能否用memset实例化一个类

13.已知前序遍历和中序遍历,求后序遍历

14.自增运算符的步骤(内存,寄存器),有两个线程分别自增100次,问最后结果的最大最小值?

15.在一个数组中有一个数字只出现1次外,其它数字都成对出现,如何找出这个数字?如果有两个数字出现1次呢?

16.单链表逆序

17.给出一颗二叉树,如何判断是否是完全二叉树

18.最大子串和问题

19.delete时,没有指明销毁空间有多大,它是如何知道要delete的数组是多大的.

20.一棵树的两个结点的最近公共祖先 +2

21.上千万条记录,统计出重复记录最多的前N条

22.数据量大时,外部排序如何实现

23.二叉树后序遍历非递归排序算法,有没有可能实现O(1)空间复杂度?用morris遍历方法即可

24.如何设计一套C++垃圾收集的系统

25.什么时候用**pointer

26.如何将一个指向大小为size_t S的内存的void*类型的指针A,复制到void* B,复制过程重新开辟一块内存,不能直接把A存的地址给B

27.如何将一个数组创建为一个堆 +2

28.C++是否保证类型安全?

29.子类析构时一定会调用父类的析构函数吗?

30.strcpy和memcpy的区别?

31.C++中哪些操作符不能进行重载?

32.switch语句支持的元素类型有哪些?

33.为什么通常类成员函数的定义不放在头文件中?

34.能否从模板类中派生出非模板类?

35.Windows中如何创建一个进程?如何创建一个线程?

36.大端机和小端机的区别,如何用编程识别出来

37求一个字符串最长不包含重复字符的连续子串

38.C语言中变量存储为什么要内存对齐;为什么除法比加减乘法慢很多

39.2^10234十进制表示有多少位写成科学计数法形式即a*10^t,求出t即可,两边取对数

40.vector的sort是用什么排序

41.全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?

生命周期不同: 全局变量随主程序创建和创建,随主程序销毁而销毁;局部变量在局部函数内部,甚至局部循环体等内部存在,退出就不存在; 使用方式不同:通过声明后全局变量程序的各个部分都可以用到;局部变量只能在局部使用;分配在栈区。 操作系统和编译器通过内存分配的位置来知道的,全局变量分配在全局数据段并且在程序开始运行的时候被加载。局部变量则分配在堆栈里面

42.HTTP状态码有哪些?3XX、4XX、5XX有哪些是做什么的

43.LINUX下C 文件连接的问题,动态链接和静态链接

十、智力题

1.54张扑克牌,除去两张大小王剩下52张扑克牌。问红桃A和黑桃A同时被一个人拿到的概率是多少? 

2.在写程序遇到问题的时候,通常采用什么调试方法?

3.有100个球,每次取1-5个,你和对手轮流取,如果你先拿,请给出致胜策略?

4.给你一个5升和3升的壶,量出4升水

 

十一、扩展知识

1.mapreduce是怎么工作的,外排序是怎么工作的 +2

 

十二、其他

1、C和C++的结构体有什么区别

C中struct没有访问权限修饰,封装而不隐藏,成员不能是函数

C++中struct与类基本相同,不同的是默认访问权限,struct不能用于定义模版类

如果不是为了与C兼容,一般不使用struct
2、Spring框架的核心思想

依赖注入

面向切面

简化模版

3.事务的四大特性

原子性,隔离性,一致性,永久性

4.数据库的三个模式

外模式:又称为子模式或用户模式,对应数据操作语言

模式:概念模式或逻辑模式,对应数据定义语言

内模式:物理模式

5.SQL的各种语言

数据查询语言:Select

数据定义语言:Create Drop,Alter

数据操纵语言:insert update deleted

数据控制语言:Grant,revoke

5.二叉树改成循环链表

6.大小端是什么?在本机发送的数据传输到网络中是否需要转换?

网络传输中,位是小端序,字节是大端序,本机要按照网络格式传输。

7.字符串反转的程序

双指针反转
8.构造函数和析构函数能否抛出异常

构造函数:

构造函数可以抛出异常,但尽量不要,出现异常之后,可能会造成内存泄漏,所以要用try包裹起来释放掉已经获得的资源。

析构函数:

析构函数不能抛出异常,虽然C++没有明确说明。

析构函数本来就是异常处理的一部分,如果又抛出异常,会导致程序崩溃,内存泄漏等问题。实在需要抛出异常,也有用catch包围着,并且释放资源。
9.熟悉Linux系统吗?有哪些指令?

http://blog.csdn.net/luchengtao11/article/details/69808660
6、delete null会不会出错?

不会报错,什么也不会发生
7、怎么在申请内存失败的时候抛出异常?

malloc等c库函数不会抛出异常

new 在g++编译器中会抛出异常,在VC++编译器中不会

如果会抛出异常就捕捉异常,如果没有抛出异常就判断指针是否为空

8、数据库中表连接的几种形式

内链接:select * from book as b,student ad s where s.studentid=b.studentid

左外连接:select * from book as b left join student as s where s.studentid=b.studentid

右外连接:select * from book as b right join student as s where s.studentid=b.studentid
9、hashmap
常用两种实现方法:

链地址法:

开放地址法:即线性探测再散列

查找的过程:根据关键字寻找地址,直到关键字匹配或者空地址。
10.问了c++中虚函数和纯虚函数区别

纯虚函数在基类中没有定义,在子类中要定义。拥有虚函数的类为抽象类。

11.抽象类和接口的异同

C++中没有接口,用抽象类代替

相同:

都不能实例化

不同:

接口都是public

抽象类可以有成员变量

只能继承一个抽象类但是能实现多个接口 

12.数据库基本操作 

13.socket

14.常量指针,指针常量,常量指针常量

 

const int *  p;//常量指针
int const * p;//常量指针
int * const;//指针常量
const int * const p;//常量指针常量

15.数组指针、指针数组

 

 

int (* p)[];//指向整形数组的指针
int * p[];//指针的数组
int * (p[]);//指针的数组


16.数据库中死锁

 

S:共享锁

X:排他锁

产生死锁的条件:互斥,占有且等待,不可抢占,循环等待

17.c++如何解决头文件重复引用

#ifndefine #define #endif

18.解决代码在32位系统和64位系统上的跨平台问题。

鬼知道。。
stringcopy

无领导小组 15个道具选5个

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值