《C和C++程序员面试秘笈》是一本非常有价值的书籍。对于准备C面试和C++面试的程序员来说,这本书提供了非常清晰的指导。它涵盖了面试中的关键知识点,包括语法、数据结构和算法等方面。同时, 这本书还提供了一些非常实用的面试技巧和经验,让读者能够在程序员面试中脱颖而出。通过阅读这本书,读者可以获取成功的秘诀,进一步提升自己的面试水平。无论是初学者还是有经验的程序员,都可以从中受益匪浅。这本书是一本不可或缺的面试指南,强烈推荐给所有准备面试的C和C++程序员。
读者评价
虽有一些错误,但这本算很用心的了,整理的也不错,条理性很强。
适合从事C或者是C++工作的程序员进行面试前学习,提前做好准备工作。
一个小白去面试C相关工作的必读书籍
内容介绍
众多高级语言都从C/C++有所借鉴,所以说C/C++的语言基础对从事软件开发的人员来说非常重要。
《C和C++程序员面试秘笈》是一本解析C/C++面试题的书,可以帮助求职者更好地准备面试。《C和C++程序员面试秘笈》共包含12章,囊括了目前企业中常见的面试题类型和考点,包括C/C++程序基础,预处理、const、static与sizeof,引用和指针,字符串,位运算与嵌入式编程,C++面向对象,C++继承和多态,数据结构,排序,泛型编程,STL,算法和逻辑思维等最常见的面试题。《C和C++程序员面试秘笈》通过技术点解析、代码辅佐的方式让读者能深刻领会每个考点背后的技术。
《C和C++程序员面试秘笈》紧扣面试精髓,对各种技术的剖析一针见血,是目前想找工作的C/C++程序员和刚毕业的大学生的面试宝典。
目录
- 第1章C/C++程序基础
- 面试题1看代码写输出——一般赋值语句
- 面试题2看代码写输出——C++域操作符
- 面试题3看代码写输出——i++和++i的区别
- 面试题4i++与++i哪个效率更高
- 面试题5选择编程风格良好的条件比较语句
- 面试题6看代码写结果——有符号变量与无符号变量的值的转换
- 面试题7不使用任何中间变量如何将a、b的值进行交换
- 面试题8C++与C有什么不同
- 面试题9如何理解C++是面向对象化的,而C是面向过程化的
- 面试题10标准头文件的结构
- 面试题11#include 和#include "head.h" 有什么区别
- 面试题12C++中main函数执行完后还执行其他语句吗
- 第2章预处理、const、static与sizeof
- 面试题1预处理的使用
- 面试题2用#define实现宏并求最大值和最小值
- 面试题3宏定义的使用
- 面试题4看代码写输出——宏参数的连接
- 面试题5用宏定义得到一个字的高位和低位字节
- 面试题6用宏定义得到一个数组所含的元素个数
- 面试题7找错——const的使用
- 面试题8说明const与#define的特点及区别
- 面试题9C++中const有什么作用(至少说出3个)
- 面试题10static有什么作用(至少说出2个)
- 面试题11static全局变量与普通的全局变量有什么区别
- 面试题12看代码写结果——C++类的静态成员
- 面试题13使用sizeof计算普通变量所占空间大小
- 面试题14使用sizeof计算类对象所占空间大小
- 面试题15使用sizeof计算含有虚函数的类对象的空间大小
- 面试题16使用sizeof计算虚拟继承的类对象的空间大小
- 面试题18sizeof与strlen有哪些区别
- 面试题19sizeof有哪些用途
- 面试题20找错——使用strlen()函数代替sizeof计算字符串长度
- 面试题21使用sizeof计算联合体的大小
- 面试题22#pragma pack的作用
- 面试题23为什么要引入内联函数
- 面试题24为什么inline能很好地取代表达式形式的预定义
- 面试题25说明内联函数使用的场合
- 面试题26为什么不把所有的函数都定义成内联函数
- 面试题27内联函数与宏有什么区别
- 第3章引用和指针
- 面试题1一般变量引用
- 面试题2指针变量引用
- 面试题3看代码找错误——变量引用
- 面试题4如何交换两个字符串
- 面试题5程序查错——参数引用
- 面试题6参数引用的常见错误
- 面试题7指针和引用有什么区别
- 面试题8为什么传引用比传指针安全
- 面试题9复杂指针的声明
- 面试题10看代码写结果——用指针赋值
- 面试题11指针加减操作
- 面试题12指针比较
- 面试题13看代码找错误——内存访问违规
- 面试题14指针的隐式转换
- 面试题15指针常量与常量指针的区别
- 面试题16指针的区别
- 面试题17找错——常量指针和指针常量的作用
- 面试题18this指针的正确叙述
- 面试题19看代码写结果——this指针
- 面试题20指针数组与数组指针的区别
- 面试题21找错——指针数组和数组指针的使用
- 面试题22函数指针与指针函数的区别
- 面试题23数组指针与函数指针的定义
- 面试题24各种指针的定义
- 面试题25代码改错——函数指针的使用
- 面试题26看代码写结果——函数指针的使用
- 面试题27typedef用于函数指针定义
- 面试题28什么是“野指针”
- 面试题29看代码查错——“野指针”的危害
- 面试题30有了malloc/free,为什么还要new/delete
- 面试题31程序改错——指针的初始化
- 面试题32各种内存分配和释放的函数的联系和区别
- 面试题33程序找错——动态内存的传递
- 面试题34动态内存的传递
- 面试题35比较分析两个代码段的输出——动态内存的传递
- 面试题36程序查错——“野指针”用于变量值的互换
- 面试题37内存的分配方式有几种
- 面试题38什么是句柄
- 面试题39指针与句柄有什么区别
- 第4章字符串
- 面试题1使用库函数将数字转换为字符串
- 面试题2不使用库函数将整数转换为字符串
- 面试题3使用库函数将字符串转换为数字
- 面试题4不使用库函数将字符串转换为数字
- 面试题5编程实现strcpy函数
- 面试题6编程实现memcpy函数
- 面试题7strcpy与memcpy的区别
- 面试题8改错——数组越界
- 面试题9分析程序——数组越界
- 面试题10分析程序——打印操作可能产生数组越界
- 面试题11编程实现计算字符串的长度
- 面试题12编程实现字符串中子串的查找
- 面试题13编程实现字符串中各单词的翻转
- 面试题14编程判断字符串是否为回文
- 面试题15编程实现stcmp库函数
- 面试题16编程查找两个字符串的最大公共子串
- 面试题17不使用printf,将十进制数以二进制和十六进制的形式输出
- 面试题18编程实现转换字符串、插入字符的个数
- 面试题19字符串编码例题
- 面试题20反转字符串,但其指定的子串不反转
- 面试题21编写字符串反转函数strrev
- 面试题22编程实现任意长度的两个正整数相加
- 面试题23编程实现字符串的循环右移
- 面试题24删除指定长度的字符
- 面试题25字符串的排序及交换
- 面试题26编程实现删除字符串中所有指定的字符
- 面试题27分析代码——使用strcat连接字符串
- 面试题28编程实现库函数strcat
- 面试题29编程计算含有汉字的字符串长度
- 面试题30找出01字符串中0和1连续出现的最大次数
- 面试题31编程实现字符串的替换
- 第5章位运算与嵌入式编程
- 面试题1位制转换
- 面试题2看代码写出结果——位运算
- 面试题3设置或清除特定的位
- 面试题4计算一个字节里有多少bit被置1
- 面试题5位运算改错
- 面试题6运用位运算交换a、b两数
- 面试题7列举并解释C++中的4种运算符转化以及它们的不同点
- 面试题8用#define声明一个常数
- 面试题9如何用C语言编写死循环
- 面试题10如何访问特定位置的内存
- 面试题11对中断服务代码的评论
- 面试题12看代码写结果——整数的自动转换
- 面试题13关键字static的作用是什么
- 面试题14关键字volatile有什么含义
- 面试题15判断处理器是Big_endian还是Little_endian
- 面试题16评价代码片断——处理器字长
- 第6章C++面向对象
- 面试题1描述面向对象技术的基本概念
- 面试题2判断题——类的基本概念
- 面试题3选择题——C++与C语言相比的改进
- 面试题4class和struct有什么区别
- 面试题5改错——C++类对象的声明
- 面试题6看代码写结果——C++类成员的访问
- 面试题7找错——类成员的初始化
- 面试题8看代码写结果——静态成员变量的使用
- 面试题9与全局对象相比,使用静态数据成员有什么优势
- 面试题10有哪几种情况只能用intialization list,而不能用assignment
- 面试题11静态成员的错误使用
- 面试题12对静态数据成员的正确描述
- 面试题13main函数执行前还会执行什么代码
- 面试题14C++中的空类默认会产生哪些类成员函数
- 面试题15构造函数和析构函数是否可以被重载
- 面试题16关于重载构造函数的调用
- 面试题17构造函数的使用
- 面试题18构造函数explicit与普通构造函数的区别
- 面试题19explicit构造函数的作用
- 面试题20C++中虚析构函数的作用是什么
- 面试题21看代码写结果——析构函数的执行顺序
- 面试题22复制构造函数是什么?什么是深复制和浅复制
- 面试题23编译器与默认的copy constructor
- 面试题24写一个继承类的复制函数
- 面试题25复制构造函数与赋值函数有什么区别
- 面试题26编写类String的构造函数、析构函数和赋值函数
- 面试题27了解C++类各成员函数的关系
- 面试题28C++类的临时对象
- 面试题29复制构造函数和析构函数
- 面试题30看代码写结果——C++静态成员和临时对象
- 面试题31什么是临时对象?临时对象在什么情况下产生
- 面试题32为什么C语言不支持函数重载而C++能支持
- 面试题33判断题——函数重载的正确声明
- 面试题34重载和覆写有什么区别
- 面试题35编程题——MyString类的编写
- 面试题36编程题——各类运算符重载函数的编写
- 面试题37看代码写输出——new操作符重载的使用
- 第7章C++继承和多态
- 面试题1C++类继承的三种关系
- 面试题2C++继承关系
- 面试题3看代码找错——C++继承
- 面试题4私有继承有什么作用
- 面试题5私有继承和组合有什么相同点和不同点
- 面试题6什么是多态
- 面试题7虚函数是怎么实现的
- 面试题8构造函数调用虚函数
- 面试题9看代码写结果——虚函数的作用
- 面试题10看代码写结果——虚函数
- 面试题11虚函数相关的选择题
- 面试题12为什么需要多重继承?它的优缺点是什么
- 面试题13多重继承中的二义性
- 面试题14多重继承二义性的消除
- 面试题15多重继承和虚拟继承
- 面试题16为什么要引入抽象基类和纯虚函数
- 面试题17虚函数与纯虚函数有什么区别
- 面试题18程序找错——抽象类不能实例化
- 面试题19应用题——用面向对象的方法进行设计
- 面试题20什么是COM
- 面试题21COM组件有什么特点
- 面试题22如何理解COM对象和接口
- 面试题23简述COM、ActiveX和DCOM
- 面试题24什么是DLL HELL
- 第8章数据结构
- 面试题1编程实现一个单链表的建立
- 面试题2编程实现一个单链表的测长
- 面试题3编程实现一个单链表的打印
- 面试题4编程实现一个单链表节点的查找
- 面试题5编程实现一个单链表节点的插入
- 面试题6编程实现一个单链表节点的删除
- 面试题7实现一个单链表的逆置
- 面试题8寻找单链表的中间元素
- 面试题9单链表的正向排序
- 面试题10判断链表是否存在环型链表问题
- 面试题11有序单链表的合并
- 面试题12约瑟夫问题的解答
- 面试题13编程实现一个双向链表的建立
- 面试题14编程实现一个双向链表的测长
- 面试题15编程实现一个双向链表的打印
- 面试题16编程实现一个双向链表节点的查找
- 面试题17编程实现一个双向链表节点的插入
- 面试题18编程实现一个双向链表节点的删除
- 面试题19实现有序双向循环链表的插入操作
- 面试题20删除两个双向循环链表的相同结点
- 面试题21编程实现队列的入队、出队、测长、打印
- 面试题22队列和栈有什么区别
- 面试题23简答题——队列和栈的使用
- 面试题24选择题——队列和栈的区别
- 面试题25使用队列实现栈
- 面试题26选择题——栈的使用
- 面试题27用C++实现一个二叉排序树
- 面试题28使用递归与非递归方法实现中序遍历
- 面试题29使用递归与非递归方法实现先序遍历
- 面试题30使用递归与非递归方法实现后序遍历
- 面试题31编写层次遍历二叉树的算法
- 面试题32编写判别给定二叉树是否为二叉排序树的算法
- 第9章排序
- 面试题1编程实现直接插入排序
- 面试题2编程实现希尔(Shell)排序
- 面试题3编程实现冒泡排序
- 面试题4编程实现快速排序
- 面试题5编程实现选择排序
- 面试题6编程实现堆排序
- 面试题7实现归并排序的算法(使用自顶向下的方法)
- 面试题8使用基数排序对整数进行排序
- 面试题9选择题——各排序算法速度的性能比较
- 面试题10各排序算法的时间复杂度的比较
- 第10章泛型编程
- 面试题1举例说明什么是泛型编程
- 面试题2函数模板与类模板分别是什么
- 面试题3使用模板有什么缺点?如何避免
- 面试题4选择题——类模板的实例化
- 面试题5解释什么是模板的特化
- 面试题6部分模板特例化和全部模板特例化有什么区别
- 面试题7使用函数模板对普通函数进行泛型化
- 面试题8使用类模板对类进行泛型化
- 面试题9通过类模板设计符合要求的公共类
- 第11章STL(标准模板库)
- 面试题1什么是STL
- 面试题2具体说明STL如何实现vector
- 面试题3看代码回答问题——vector容器中iterator的使用
- 面试题4看代码找错——vector容器的使用
- 面试题5把一个文件中的整数排序后输出到另一个文件中
- 面试题6list和vector有什么区别
- 面试题7分析代码问题并修正——list和vector容器的使用
- 面试题8stl::deque是一种什么数据类型
- 面试题9在做应用时如何选择vector和deque
- 面试题10看代码找错——适配器stack和queue的使用
- 面试题11举例说明set的用法
- 面试题12举例说明map的用法
- 面试题13STL中map内部是怎么实现的
- 面试题14map和hashmap有什么区别
- 面试题15什么是STL算法
- 面试题16分析代码功能——STL算法的使用
- 面试题17vector中的erase方法与algorithm中的remove有什么区别
- 面试题18什么是auto_ptr(STL智能指针)?如何使用
- 面试题19看代码找错——智能指针auto_ptr的使用
- 面试题20智能指针如何实现
- 面试题21使用std::auto_ptr有什么方面的限制
- 面试题22如何理解函数对象
- 面试题23如何使用bind1st和bind2nd
- 面试题24实现bind1st的函数配接器
- 第12章智力测试题
- 面试题1元帅领兵
- 面试题2两龟赛跑
- 面试题3电视机的价格
- 面试题4这块石头究竟有多重
- 面试题5四兄弟的年龄
- 面试题6爬楼梯
- 面试题73只砝码称东西
- 面试题8称米
- 面试题9比萨饼交易
- 面试题10伊沙贝拉时装精品屋
- 面试题11烧绳子的时间计算问题
- 面试题12给工人的金条
- 面试题13被污染的药丸
- 面试题14称量罐头
- 面试题15有20元钱可以喝到几瓶汽水
- 面试题16判断鸟的飞行距离
- 面试题17按劳取酬
- 面试题18空姐分配物品
- 面试题19消失的1元钱
- 面试题20分物品
- 面试题21称出4升的水
- 面试题22通向诚实国和说谎国的路
- 面试题23排序问题
- 面试题24两个同一颜色的果冻
- 面试题25怎样称才能用3次就找到球
- 面试题26计算生日是哪一天
- 面试题273个女儿的年龄
- 面试题28取回黑袜和白袜
- 面试题29谁先击完40下鼠标
- 面试题30聪明人是怎样发财的
- 面试题31谁打碎了花瓶
- 面试题32大有作为
- 面试题33宴会桌旁
- 面试题34过桥问题
- 面试题35一句不可信的话
- 面试题36海盗分宝石
- 面试题37如何推算有几条病狗
- 面试题38判断谁是盗窃犯
- 面试题39向导
- 面试题40扑克牌问题
- 面试题41谁是机械师
- 面试题42帽子的颜色
- 面试题43两个大于1小于10的整数
- 面试题44谁用1美元的纸币付了糖果钱
- 面试题45究竟有哪些人参加了会议
- 面试题46小虫
- 面试题47相遇
- 面试题48约会
- 面试题4930秒答题
- 面试题501分钟答题
- 面试题51现代斯芬克斯之谜
- 面试题52所有开着的灯的编号
const关键字有什么作用? 【解答】 (1)阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它初始化,因为以后就没机会改变它了; (2)对指针来说,可以指定指针本身为const,也可指定指针所指的数据为const,或二者同时指定为const; (3) 在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值; (4) 对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量; (5) 对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为左值。
1.c++的static关键字的作用(我从elf结构,链接过程来回答) 2.内联函数跟普通函数区别(从反汇编角度来回答) 3.select跟epoll的区别(epoll内核源码看过,从内核实现角度回答,所以回答的不错), small插曲:对于很多博客说epoll使用了共享内存,我说完全错误的,然后就扯到共享内存的内核实现(基于tmpfs,为何2个进程映射同一个文件会映射到同一片物理内存,根本机制是page cache) 4.STL中的迭代器失效问题 5.指针,引用区别(反汇编分析,其实汇编指令实现都一样,可以把引用看做编译器管理的指针,语法糖) 6.Linux相关cpu内存网络相关指令 7.父子进程fork时,打开的文件的偏移量是否是相同的(从内核角度看,父子进程fork会将file文件复制一份,所以肯定会的) 8.Linux虚拟地址空间(3G以上内核,因为进程创建时,内核的页表全部拷贝到进程第768页目录项以上的,3G以下则是代码段(.init节,.text节,.rodata节),数据段(.data节,.bss节),堆(brk指针),栈从3G往下) 9.【计算机网络】只问了time_wait的危害,三次握手,四次断开 10.c++多态的机制实现(虚函数表,看过深度探索c++对象模型的都会的) 11.vector跟list区别,还有map的底层实现(红黑树) 12.extern关键字