C++ 面试必备 ing

C++面试准备。。。
碰到的面试题
1.vector中,如果有个需求,有时候需要一个很长的存储,有时候又需要一个短的,怎么来做
2. 怎么查看静态库或动态库的符号表
3. 如何引用别人的动态库
4. 如何解动态库或静态库
5. 一个int型的指针指向double的数,能正常使用吗,如果不,应该如何来使用
6. 只能指针有哪些,如何使用
7. 如何用一个类来使用实现shared_ptr
8. gdb如何使用,如何调试一个进程,如何调一个函数
9. 平时调试代码如何调
10. 如何查看内存泄漏
11. 进程如何通信
12. 常用shell命令有哪些
13. makefile如何写,了解哪些东西
14. 常见数据库有哪些,你用到哪些
15. 数据库视图是什么,如何查找更快(常见面试题等等。。)
16. 死锁是怎么回事
17. 进程如何使用,如何创建,函数是什么
18. PV操作
19. 操作系统是怎么调度进程的,调度方式有哪些(时间片轮转等等)
20. 对测试问题单如何感想
21. 如何进行配置管理
22. 网络有哪几层,有哪些
23. tcp/ip三次握手什么,有什么标志位的变化
24. C++如何进行排序,用到的排序的STL是什么
25. Vector,map,List原理是什么,分别怎么来使用
26. map如何查找,如果Key为空如何处理或操作
27. 归并排序的时间复杂度是什么,写下代码
28. 常见排序算法有哪些,复杂度是什么,如何选用
29. 常见的设计模式有哪些,平时用到哪些,如何实现,什么场景用到了
30. static定义的函数,别的文件能看到吗,为什么
31. 进程内存有多大
32. 什么是段错误
33. C11了解吗,用到哪些特性
34. Linux的工具链
35. 高并发怎么做
36. 如果开机启动需要用到一个较大的空间,之后不再使用,如何来定义,放在全局可以吗,应该放到哪。
37. 发生死锁的情况有哪些,描述一下
38. 说下你用到的设计模式
39. 类型强转了解哪些,如何把一个父类指针强转为子类指针
40. 指针和引用有何区别
41. 在map中,当使用一个类作为key时,需要注意什么
42. 当new或malloc失败时,需要如何处理
43. 说下快速排序的基本思路,时间复杂度和空间复杂度
44. 模板用过吗,模板的啥啥啥。。。
45. 为什么基类的析构函数要定义成虚函数
46. Linux下用代码如何实现定时器
47. Linux下如何查看内存和CPU使用情况
48.
49. 用英语介绍一下自己

**

需要加强的地方:

1.线程进程
2.STL
3.网络,TCP实操
4.数据库实操熟悉
5.GDB
6.C11

一. C++基础

二. STL

1.Vector: 连续的空间,随机访问快,插入和删除慢
(2)vector::iterator支持“+”,“+=”,“<”等操作符

2.List:双链表,插入删除快,随机访问慢
(2)list::iterator则不支持“+”、“+=”、“<”
3.

三. C++11常见新用法

四. C++常见面试题

1.加static修饰的函数别的.c文件能看到吗,为什么?
不能看到。因为在编译.c文件时,生成的符号表中隐藏了static函数,这样在链接的时候就找不到。
2. static函数和普通函数的区别:static函数没有this指针,只能访问静态成员函数或变量,而普通函数都可以。
3. 堆空间和栈空间的区别:stack的空间由操作系统自动分配和释放,存放函数的参数值、 局部变量的值等。heap上的空间一般由程序员分配和释放,并要指明大小
4.内联inline函数:将代码直接插入调用处,快,且减少了普通函数调用时的资源消耗

五. Linux

  1. 虚拟内存

  2. 段错误
    访问了系统没有分配给这个程序的地址,或者说不允许访问的地址空间。
    根据虚拟地址可知道,每个进程都被分配了4G的空间,但是内核等系统空间是不允许访问的,没有申请或者已经释放的空间也是不允许访问的,否则段错误。

  3. 一个源文件到执行文件的过程(编译连接)
    参考
    预处理 -> 编译 -> 汇编 -> 连接
    一步到位:gcc hello.c 或 gcc hello.c -o hello.out

    预处理:处理宏,#define ,删除注释等
    gcc -E hello.c -o hello.i

    编译:最核心部分。把预处理完的文件进行一系列词法分析、语法分析、语义分析以及 优化后生成相应的汇编代码文件
    gcc -S hello.i -o hello.s

    汇编:汇编过程调用汇编器as来完成,是将汇编代码转成机器可以执行的指令,每一个汇编语句几乎都对应一条机器指令。机器类型不一样,机器指令也不一样,如PC和ARM
    gcc -c hello.s -o hello.o

    链接:主要是将各个模块相互引用的部分衔接起来。链接主要包括地址、空间分配、符号决议和重定向
    静态连接库:将各个 .o 文件打包,需要某部分时,“解压出”需要的,然后跟你的.o文件一起生成可执行文件。Linux/Unix系统下ANSI C的库名叫做 libc.a
    动态连接库:运行时可以加载到任意的存储器地址,并和一个正在运行的程序链接起来。Unix/Linux中共享库的后缀名通常是 .so,Windows下时 DLL
    区别:静态的是 编译时确定,若静态库更新,需重新编译你的程序,且不同的程序可能包含有相同的静态库的东西,浪费空间。动态库则不,动态库更新不影响你的程序,也节约空间。

  4. gdb调试

5.进程和线程
进程 和 线程
互斥锁、条件变量、信号量和读写锁
多线程的使用实例

六. 常见经典算法

**七.计算机网络 **

1. 3次握手4次挥手

八. LeetCode必做题

**

九.Shell脚本

**

九. Makefile

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值