C++面试题二
2015-06-29 08:07
375 查看
专业题: 1.线程的优好处与坏处,什么时候用线程最好,什么时候不用线程?
何时使用多线程技术,何时避免用它,是我们需要掌握的重要课题。多线程技术是一把双刃剑,在使用时需要充分考虑它的优缺点。
多线程处理可以同时运行多个线程。由于多线程应用程序将程序划分成多个独立的任务,因此可以在以下方面显著提高性能: (1)多线程技术使程序的响应速度更快 ,因为用户界面可以在进行其它工作的同时一直处于活动状态;(2)当前没有进行处理的任务时可以将处理器时间让给其它任务;(3)占用大量处理时间的任务可以定期将处理器时间让给其它任务;(4)可以随时停止任务;(5)可以分别设置各个任务的优先级以优化性能。 是否需要创建多个线程取决于各种因素。在以下情况下,最适合采用多线程处理: (1)耗时或大量占用处理器的任务阻塞用户界面操作;(2)各个任务必须等待外部资源 (如远程文件或 Internet连接)。同样的 ,多线程也存在许多缺点 ,在考虑多线程时需要进行充分的考虑。多线程的主要缺点包括: (1)等候使用共享资源时造成程序的运行速度变慢。这些共享资源主要是独占性的资源 ,如打印机等。(2)对线程进行管理要求额外的 CPU开销。线程的使用会给系统带来上下文切换的额外负担。当这种负担超过一定程度时,多线程的特点主要表现在其缺点上,比如用独立的线程来更新数组内每个元素。(3)线程的死锁。即较长时间的等待或资源竞争以及死锁等多线程症状。(4)对公有变量的同时读或写。当多个线程需要对公有变量进行写操作时,后一个线程往往会修改掉前一个线程存放的数据,从而使前一个线程的参数被修改;另外 ,当公用变量的读写操作是非原子性时,在不同的机器上,中断时间的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这种错误是程序员无法预知的。 [参考地址]http://www.cnblogs.com/lmjob/archive/2009/08/10/1542707.html
2. const char*, char const*, char*const的区别
const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。 这个知识易混点之前是看过了,今天做Linux上写GTK程序时又出现个Warning,发散一下又想到这个问题,于是翻起来重嚼一下。事实上这个概念谁都有只是三种声明方式非常相似:Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:把一个声明从右向左读。char * const cp; ( * 读成 pointer to ) cp is a const pointer to charconst char * p; p is a pointer to const char;char const * p; 同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。C++标准规定,const关键字放在类型或变量名之前等价的。const int n=5; //same as belowint const m=10结论:char * const cp : 定义一个指向字符的指针常数,即const指针const char* p : 定义一个指向字符常数的指针char const* p : 等同于const char* p const char **是一个指向指针的指针,那个指针又指向一个字符串常量。 char **也是一个指向指针的指针,那个指针又指向一个字符串变量。 [参考地址] http://blog.163.com/pei_hua100/blog/static/805697592009550281616/
何时使用多线程技术,何时避免用它,是我们需要掌握的重要课题。多线程技术是一把双刃剑,在使用时需要充分考虑它的优缺点。
多线程处理可以同时运行多个线程。由于多线程应用程序将程序划分成多个独立的任务,因此可以在以下方面显著提高性能: (1)多线程技术使程序的响应速度更快 ,因为用户界面可以在进行其它工作的同时一直处于活动状态;(2)当前没有进行处理的任务时可以将处理器时间让给其它任务;(3)占用大量处理时间的任务可以定期将处理器时间让给其它任务;(4)可以随时停止任务;(5)可以分别设置各个任务的优先级以优化性能。 是否需要创建多个线程取决于各种因素。在以下情况下,最适合采用多线程处理: (1)耗时或大量占用处理器的任务阻塞用户界面操作;(2)各个任务必须等待外部资源 (如远程文件或 Internet连接)。同样的 ,多线程也存在许多缺点 ,在考虑多线程时需要进行充分的考虑。多线程的主要缺点包括: (1)等候使用共享资源时造成程序的运行速度变慢。这些共享资源主要是独占性的资源 ,如打印机等。(2)对线程进行管理要求额外的 CPU开销。线程的使用会给系统带来上下文切换的额外负担。当这种负担超过一定程度时,多线程的特点主要表现在其缺点上,比如用独立的线程来更新数组内每个元素。(3)线程的死锁。即较长时间的等待或资源竞争以及死锁等多线程症状。(4)对公有变量的同时读或写。当多个线程需要对公有变量进行写操作时,后一个线程往往会修改掉前一个线程存放的数据,从而使前一个线程的参数被修改;另外 ,当公用变量的读写操作是非原子性时,在不同的机器上,中断时间的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这种错误是程序员无法预知的。 [参考地址]http://www.cnblogs.com/lmjob/archive/2009/08/10/1542707.html
2. const char*, char const*, char*const的区别
const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。 这个知识易混点之前是看过了,今天做Linux上写GTK程序时又出现个Warning,发散一下又想到这个问题,于是翻起来重嚼一下。事实上这个概念谁都有只是三种声明方式非常相似:Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:把一个声明从右向左读。char * const cp; ( * 读成 pointer to ) cp is a const pointer to charconst char * p; p is a pointer to const char;char const * p; 同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。C++标准规定,const关键字放在类型或变量名之前等价的。const int n=5; //same as belowint const m=10结论:char * const cp : 定义一个指向字符的指针常数,即const指针const char* p : 定义一个指向字符常数的指针char const* p : 等同于const char* p const char **是一个指向指针的指针,那个指针又指向一个字符串常量。 char **也是一个指向指针的指针,那个指针又指向一个字符串变量。 [参考地址] http://blog.163.com/pei_hua100/blog/static/805697592009550281616/
相关文章推荐
- c++ string类的完整实现!!!
- 设计模式总结-C++实现
- 一步一步学算法之总结——C++实现
- C++ 从内存的角度,学习虚继承机制
- effective c++ 记录之对象切割问题
- C++标准异常类
- 黑马程序员-OC语言-无参方法声明实现及调用(听课笔记)
- 黑马程序员-OC语言-创建一个对象并访问成员变量(听课笔记)
- 黑马程序员-OC语言-类的声明和实现(听课笔记)
- C++ + QT,显示cc1plus.exe:-1: error: out of memory allocating 134221823 bytes
- 诡异的map size变化 (c++)
- 【学习笔记】【C语言】结构体和函数
- 黑马程序员-OC语言-类和对象
- 【学习笔记】【C语言】指向结构体的指针
- day002--Mac终端常用命令及C语言三中基本数据类型
- 黑马程序员-OC语言-面向对象编程概念(听课笔记)
- 黑马程序员——C语言之运算符与程序结构
- C++ 智能指针详解
- C++读写二进制文件
- 12个有趣的C语言面试题及答案