一些面试知识点
来源:互联网 发布:数控磨床外圆量仪编程 编辑:程序博客网 时间:2024/05/22 08:03
C++回顾
1. _beginthread和CreateThread区别
CreateThread是Windows系统函数,_beginthread是CRT函数
_beginthread实际内部还是调用的CreateThread函数实现
CRT函数当中需要存储一些变量 类似getlasterror的错误信息,但是假如使用全局变量,在多线程下会出现错误,所以需要为每一个线程单独分配这些数据
CRT定义了tiddata数据结构存储这些数据,_beginthread和_endthread中提供了规范的构造 销毁这个数据结构的方式
假如_beginthread/_endthread和CreateThread/ExitThread混用可能造成内存泄露
当没有使用_beginthread创建线程时,假如使用到CRT函数,它会自动的检查并创建tiddata结构
当md mdd既动态链接加载CRT库时 dllmain作为dll的入口函数 在dll detachthread时,会做一步free tiddata检查,释放指针
综合来看,使用_beginthread/_endthread是一种比较稳妥的选择
2. const成员函数中修改成员变量的值
mutable修饰符
指针
3. postmessage和sendmessage区别,以及怎么实现
postmessage是一个非阻塞函数,它只把消息扔到窗口线程的消息队列当中,直接返回本函数的成功与否
sendmessage是一个阻塞函数,它把消息扔到窗口并且等到消息运行结束,返回消息运行结果
具体来说
在发送线程和窗口线程为同一线程时,直接获取窗口的窗口函数并运行获取结果
在发送线程和窗口线程为不同线程时
1 发送线程将消息发送到窗口线程的发送消息队列,并设置QS_SENDMESSAGE标志,发送线程挂起,窗口线程激活
2 窗口线程假如在执行其他程序,继续执行,直到继续下一次消息循环查询(GetMessage)
3 这里会优先的查询QS_SENDMESSAGE标志,假如激活,从发送消息队列取出消息,如果没有消息QS_SENDMESSAGE关闭
4 窗口线程处理该消息,并将结果发送到发送线程的应答消息队列
5 发送线程激活,取出处理结果
4. 消息队列/消息循环属于进程? 线程? 窗口?
消息队列分为系统消息队列和线程消息队列
1个线程可以创建多个窗口,并且创建的窗口共享同一个线程消息队列和消息循环
此外,除了普通的消息队列 还存在和SendMessage相关的发送/应答消息队列
5. 析构函数/拷贝构造函数/赋值运算符重载的原理和原因
有堆内存,需要发生深拷贝时需要定义这三个函数
6. c++11的新特性
auto 自动类型推导
auto i = 0;
nullptr 空指针 解决原先NULL的二义性
int a = nullptr; // error
int n = NULL; // right
for_range遍历,可用于遍历字符串/数组/stl容器
std::vector<int> vecVal = {1,2,3,4,5,6};
for (auto val : vecVal) {
printf(val);
}
Override修饰这是一个重写虚函数,用于防止错误
final修饰这个虚函数不能被重写
7. 几种智能指针
8. 线程通信同步/互斥
9. 进程通信同步/互斥 通信
10. boost库
11. 空间复杂度/时间复杂度计算
12. 各种排序算法
13. stl各种数据结构
1. _beginthread和CreateThread区别
CreateThread是Windows系统函数,_beginthread是CRT函数
_beginthread实际内部还是调用的CreateThread函数实现
CRT函数当中需要存储一些变量 类似getlasterror的错误信息,但是假如使用全局变量,在多线程下会出现错误,所以需要为每一个线程单独分配这些数据
CRT定义了tiddata数据结构存储这些数据,_beginthread和_endthread中提供了规范的构造 销毁这个数据结构的方式
假如_beginthread/_endthread和CreateThread/ExitThread混用可能造成内存泄露
当没有使用_beginthread创建线程时,假如使用到CRT函数,它会自动的检查并创建tiddata结构
当md mdd既动态链接加载CRT库时 dllmain作为dll的入口函数 在dll detachthread时,会做一步free tiddata检查,释放指针
综合来看,使用_beginthread/_endthread是一种比较稳妥的选择
2. const成员函数中修改成员变量的值
mutable修饰符
指针
3. postmessage和sendmessage区别,以及怎么实现
postmessage是一个非阻塞函数,它只把消息扔到窗口线程的消息队列当中,直接返回本函数的成功与否
sendmessage是一个阻塞函数,它把消息扔到窗口并且等到消息运行结束,返回消息运行结果
具体来说
在发送线程和窗口线程为同一线程时,直接获取窗口的窗口函数并运行获取结果
在发送线程和窗口线程为不同线程时
1 发送线程将消息发送到窗口线程的发送消息队列,并设置QS_SENDMESSAGE标志,发送线程挂起,窗口线程激活
2 窗口线程假如在执行其他程序,继续执行,直到继续下一次消息循环查询(GetMessage)
3 这里会优先的查询QS_SENDMESSAGE标志,假如激活,从发送消息队列取出消息,如果没有消息QS_SENDMESSAGE关闭
4 窗口线程处理该消息,并将结果发送到发送线程的应答消息队列
5 发送线程激活,取出处理结果
4. 消息队列/消息循环属于进程? 线程? 窗口?
消息队列分为系统消息队列和线程消息队列
1个线程可以创建多个窗口,并且创建的窗口共享同一个线程消息队列和消息循环
此外,除了普通的消息队列 还存在和SendMessage相关的发送/应答消息队列
5. 析构函数/拷贝构造函数/赋值运算符重载的原理和原因
有堆内存,需要发生深拷贝时需要定义这三个函数
6. c++11的新特性
auto 自动类型推导
auto i = 0;
nullptr 空指针 解决原先NULL的二义性
int a = nullptr; // error
int n = NULL; // right
for_range遍历,可用于遍历字符串/数组/stl容器
std::vector<int> vecVal = {1,2,3,4,5,6};
for (auto val : vecVal) {
printf(val);
}
Override修饰这是一个重写虚函数,用于防止错误
final修饰这个虚函数不能被重写
7. 几种智能指针
8. 线程通信同步/互斥
9. 进程通信同步/互斥 通信
10. boost库
11. 空间复杂度/时间复杂度计算
12. 各种排序算法
13. stl各种数据结构
阅读全文
0 0
- 一些JAVA面试知识点
- 一些面试知识点
- 一些面试常考知识点
- 面试笔试中的一些知识点
- IOS的一些面试知识点
- 关于面试的一些知识点
- 合合电话面试的一些知识点
- 一些java笔试和面试的知识点
- 前端面试需要掌握的一些知识点
- java中一些小知识点(面试)
- web前端面试知识点的一些总结
- 程序员面试的一些知识点(二)
- 程序员面试的一些知识点(一)
- 程序员面试的一些知识点(三)
- Java、web的一些面试知识点总结
- 之前跳槽面试时整理的一些知识点
- [置顶]iOS面试用到的一些知识点和技术
- 秋招前端笔试面试的一些知识点
- 两数交换——异或方法
- Glide 简介
- 初探Freebase和Wikidata的转换
- servlet基础知识
- Unity摄像机跟随角色移动
- 一些面试知识点
- PAT a1042题解
- HDU1236排名(结构体排序)
- Android 设置EditText可以编辑与不可编辑。
- 文章标题
- 01 题目:POJ 1852 Ants
- Ajax模仿form表单提交 以及jquery的param()方法
- Java 按关键字删除文件中的行
- c语言库函数之strrch()--获取路径中的basename