面试问题整理
2018年6月8日...大约 4 分钟
最近一段时间整理了一些我遇到的面试题,各个方面都有,写在这里,做个记录。大厂偏好算法和数据结构,小厂偏好项目经验。这算是一个比较鲜明的特点了。
C++
- static 的作用
- static的最主要功能是隐藏,
- 其次因为static变量存放在静态存储区,所以它具备持久性和默认值0.
- 用于类成员声明,所有实例共享。
- extern "C" 的作用
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般之包括函数名。
- sizeof(char)、sizeof(char*)、sizeof(int)、sizeof(int*)
1、4 or 8、4、4 or 8
- 指针是多少字节由什么决定
程序位数决定
STL
- shared_ptr 如何解决循环引用
使用weak_ptr
- Vector、List、Queue分别在什么情况下用
- 查找操作使用较多,使用Vector
- 增删操作使用较多,使用List
- 先进先出的使用场景,使用Queue
数据结构
- 完全二叉树是什么
完全二叉树:倒数第二层是满二叉树,最后一层靠左对齐
- 满二叉树是什么
满二叉树:结点要么是叶子结点,要么它有两个孩子结点。
操作系统
- 进程与线程分别都是什么
进程:程序在执行过程中分配和管理资源的基本单位。每一个进程都有一个自己的地址空间,即进程空间或(虚空间)。(资源独立,创建销毁代价大) 线程:CPU独立运行和独立调度的基本单位。(堆公有,栈私有,创建销毁代价小)
- 进程与线程能否多对多
可以多对多。1. 地址空间映射;2. 进程间通讯。 做好这两部分。(云计算比较有用)
- 线程切换上下文需要保存什么信息
- CONTEXT结构中保存着特定于处理器寄存器的数据。系统使用CONTEXT结构执行各种内部操作。参考WinNT.h
- 见《Windows核心编程》P174
- 线程安全与可重入分别都是什么
- 线程安全:某个方法,在多线程下调用,跟顺序执行一致,即安全的,就叫做线程安全方法
- 可重入:某个方法,执行过程中,中断,然后继续执行,结果不受影响,即方法可重入
- 二者没什么概念上的必然联系。一个方法是可重入的,不一定就是线程安全的;一个方法是线程安全的,不一定是可重入的
- 给两把锁、两个线程如何构造死锁
线程T1、T2;锁L1、L2。T1获取L1,等待L2,获取L2,释放L2,释放L1;T2获取L2,等待L1,获取L1,释放L1,释放L2。
- 同步异步和阻塞非阻塞的区别
- A线程while循环,B线程打印,先后开启A、B线程,能否输出内容
计算机网络
- TCP 三次握手
- A -> B SYN
- B -> A SYN+ACK
- A -> B ACK
数据库
- 什么是主键和外键
- 主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。
- 外键:在一个表中存在的另一个表的主键称此表的外键。
- DROP、DELETE、TRUNCATE的用途
- DELETE是DML,可以回滚,需要显式提交,删除单条数据。
- DROP是DDL,隐式提交,不能回滚,不触发触发器。删除表结构。
- TRUNCATE是DDL, 隐式提交,不能回滚,不触发触发器。清空表内容。
赞助