c++ 面试题(汇总)
1,extern 关键字作用:
http://www.cnblogs.com/lzjsky/archive/2010/11/24/1886686.html
2,static 关键字作用:
https://baike.sogou.com/v3239767.htm?fromTitle=static
http://blog.sina.com.cn/s/blog_5f5fff010100cs98.html
3,volatile(直接存取原始内存地址)的作用:
作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。简单地说就是防止编译器对代码进行优化.
https://baike.sogou.com/v126455.htm?fromTitle=volatile
4,const 的作用:
const在*的左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变);在*的右边,则指针的指向不可变。简记为“左定值,右定向”。
https://www.cnblogs.com/xudong-bupt/p/3509567.html
5,new 和 malloc 的区别:
https://blog.csdn.net/shanghairuoxiao/article/details/72876248
https://baike.sogou.com/v8439403.htm?fromTitle=realloc
6,C++ 多态性和虚函数表:定义了基类的指针,就去基类的虚函数表中去查要调用的函数。(此时,派生类新加入的函数地址已经在基类的 V-Table 中了)
https://blog.csdn.net/haoel/article/details/1948051/#commentBox
http://www.cnblogs.com/chinazhangjie/archive/2012/07/11/2586535.html(值得一看)
7,类继承中的成员布局情况:(突然想到,还未查相关资料)
8,指针和引用的区别:
数组和指针的联系:
https://blog.csdn.net/thisispan/article/details/7456169
9,智能指针:(需要看看)
http://www.cnblogs.com/xiehongfeng100/p/4645555.html
10,C++ 四种类型转换:static_cast, dynamic_cast, const_cast, reinterpret_cast
dynamic_cast: 作用:主要用于进行“下行转换时”的类型安全检查
思考1:什么是“下行转换”?
思考2:什么是不安全的转换?为什么不安全?
1 class B { 2 public: 3 int m_iNum; 4 virtual void foo(); 5 }; 6 7 class D : public B { 8 public: 9 char *m_szName[100]; 10 }; 11 12 //@ 如果 pb 指向一个 D 类型的对象,此时 pd1 和 pd2 是一样的, 13 // 并且这两个指针执行 D 类型的任何操作(比如访问 D 的成员函数)都是安全的。 14 //@ 如果 pb 指向一个 B 类型的对象,此时 pd1 将是一个指向该对象的指针(用 static_cast 转型不检查安全性), 15 // 对它进行 D 类型的操作将是不安全的(例如访问 m_szName),此时 B 对象内没有 D 对象中的成员, 16 // 故把这个 转型的 D 类型的指针当作真正的 指向 D 对象的指针来用是不安全的)。 17 // @ 当用 dynamic_cast 进行转型时,此时 pd2 将是一个空指针,这是用该指针进行访问会直接报错,所以是安全的。 18 19 //@ 下行转换:就是把一个指向基类对象类型的指针强制转换为指向派生类对象类型的指针 20 21 void func(B *pb) { 22 D *pd1 = static_cast<D*>(pb); 23 D *pd2 = dynamic_cast<D*>(pb); 24 }
http://www.cnblogs.com/BeyondAnyTime/archive/2012/08/23/2652696.html
11,内存对齐:
http://www.cppblog.com/snailcong/archive/2009/03/16/76705.html
12,内联函数有什么优点?内联函数与宏定义的区别?
https://blog.csdn.net/shanghairuoxiao/article/details/72876248#commentBox
13,C++ 的内存管理(堆区,栈区,常量区,静态和全局区)
https://blog.csdn.net/zhizunwudi/article/details/10330465
14,STL 内存分配:
https://blog.csdn.net/mmqqyyqqyyq/article/details/84191586
https://blog.csdn.net/qq_34228327/article/details/83118646
15,STL中的 set 和 map的实现(红黑树):注:可以看看《STL源码剖析----侯捷著》
https://blog.csdn.net/u010899985/article/details/80981053
16,模板特化:
https://blog.csdn.net/thefutureisour/article/details/7964682/
17,手写 strcpy, strncpy, memcpy, strcat, strcmp 函数:具体见搜狗百科相关词条。
18,数据结构和算法(主要是多刷题,leecode 剑指OFFER,牛客网等)注:可以看我的 leetcode 系列博客
Hash 表
树:红黑树,字典树等
链表,栈和队列
海量数据问题
排序和搜索
位运算
============网络与 TCP/IP===============
19,TCP 和 UDP 简介及头部格式:
https://blog.csdn.net/shanghairuoxiao/article/details/68927070
20,TCP 三次握手和四次挥手过程:
TCP相关技术:
https://blog.csdn.net/shanghairuoxiao/article/details/68927100
21,TCP 和 UDP 的网络编程:
TCP:https://blog.csdn.net/shanghairuoxiao/article/details/69803044
UDP:https://blog.csdn.net/shanghairuoxiao/article/details/69951345
22,ARP 协议和 DNS
ARP:https://blog.csdn.net/zln99/article/details/51050472
DNS:https://blog.csdn.net/yipiankongbai/article/details/25031461
23,ping 和 traceroute
ping:点这里看具体细节
traceroute:http://www.cnblogs.com/peida/archive/2013/03/07/2947326.html
===========操作系统======================
24,进程调度算法:
https://blog.csdn.net/leex_brave/article/details/51638300
25,死锁:
https://blog.csdn.net/shanghairuoxiao/article/details/70444940
26,IO模式:
https://segmentfault.com/a/1190000003063859
27,孤儿进程,僵尸进程,守护进程:
https://blog.csdn.net/u013616945/article/details/77606449
28,伙伴算法(内存管理)
https://blog.csdn.net/orange_os/article/details/7392986
29,进程与线程:
http://www.cnblogs.com/fuchongjundream/p/3829508.html