c/c++面试总结(1)
最近在找新的工作,在找工作中遇到很多面试题,大多数让我很难堪,再次让我认识到自己的知识的匮乏,上份工作是以应届生的身份,所有当时进项目组也没有很多要求,进入项目组后自己还算好学(自己以为),之前也没有相关的经验,自己很自信(其实都是盲目的),在上份工作中遇到几个愿意带我的老员工对我帮助很大(也间接的造成自己很自大),上份工作主要使用C++,经常使用STL(觉得自己掌握的很熟练,面试官问我MAP和LIST的区别是什么的等等。。。一脸懵逼!!),幸好我还算幸运找到一份工作,下面是我总结的遇到的面试题:
1.字节对齐问题(几乎每家公司的面试题都会有),以下是我从网上抄的题还有字节对齐的一些概念。
首先一个重要的概念是为什么要字节对齐?(先要弄明白这个之前我是一点都不知道,有些时候都是蒙的不知道为啥是这个值)
(1)字节对齐的根本原因是CPU访问数据的效率问题,对于32位机器,4字节对齐就可以提高访问效率,如果double型是8字节超出了4字节边界存储,cpu就会读取两次,效率会变低,在vc中默认是4字节对齐的,GNU gcc 也是默认4字节对齐。
解这些题之前需要了解字节对齐的准则是什么(可自行百度一下字节对齐)
(1)结构体变量的首地址能被其最宽基本类型成员的大小所整除。
(2)结构体每个成员相对于结构体首地址的偏移量都是改成员大小的整数倍(如果不是的话编译器就会在成员间填充字节使之对齐)。
(3)结构体的总大小为结构体最宽基本类型成员大小的整数倍。(如果不是的话编译器会在最后一个成员后面填充字节)。
struct Test
{
char t1;
double t2; //偏移量必须是它自己的整数倍,sizeof(double)为8,所以根据(2)准则,t1和t2之间要填充7个字节
int t3;//t3的偏移量是16字节,sizeof(int)为4,16是它的倍数,加起来总的字节数为1+7+8+4=20,根据(3)准则必须是8的倍数,所有t3后面需要在填充4个字节
};
综上sizeof(Test)=24;
如果是联合呢?看下面一个例子
typedef union
{
char a;
int b[5];
double c;
};
我们知道联合的大小是其最宽基本类型成员的大小,这里显然是数组最宽为20字节,那这个联合的大小是20吗?显然不是的,因为联合的大小除了是最宽基本类型的大小还应该是所有基本类型成员大小的倍数,所有需要在填充4个字节,因此这个联合的大小就是24。
联合还可以作为结构体的成员,这些题网上很多大家可以自己查找一下。
http://bbs.csdn.net/topics/360183704 这个博客大家也可以看一下对你面试肯定有帮助。
2.static全局变量和普通全局变量的区别?static局部变量和普通局部变量的区别?static函数和普通函数的区别?
(1)他们的区别在于作用域的不同,static全局变量的作用域只限于声明它的那个文件中,不加static修饰的全局变量通过extern在其他文件中也可以使用,它们的存储方式都是静态存储,
(2)static局部变量只初始化一次,下一次使用的值依赖上一次的值,static局部变量在程序结束时才被销毁,局部变量在在其作用域结束后就会被释放。
void fun()
{
int i = 0;
static int j = 1;
j++;
i++;
}
void main()
{
fun();//第一次调用i++但是i的作用域为fun函数内 当这个函数结束 i就会被释放了,但是j是静态变量,只用当main结束时才会被释放,j++后就是2,
fun();//再次调用你会发现i在++之前还是0,但是j就会是上次调用之后的值为2,
}
(3)static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
3.c++的静态成员变量和静态成员函数(会让你讲讲为什么用静态的,在哪里初始化)
http://blog.csdn.net/clc4210408/article/details/6775824#comments 大家可以仔细看一下这篇文章(里面有错误,仔细找找看呦!!)
http://c.biancheng.net/cpp/biancheng/view/209.html
大家记住静态只有一份,不管有多少个对象,静态成员变量和函数只用一份(普通的成员变量每个对象都会有一份并且大家互不影响),只要静态成员变量的值改变就会在所有对象中进行体现,
class Test
{
public:
int a;
static int b;
Test();
static int fun();
};
int Test::b=1;//初始化静态成员变量,在class的外部不会增加class的大小,不能加static
int Test::fun()
{
returen b;
//return a; 这个是错误的,因为静态成员函数只能访问静态成员变量!!!
}
Test::Test()
{
this->a = 0;
}
void main()
{
Test t1,t2;
t1.a = 1;//这时你会发现t2.a的值还是0并不会因为t1.a变成1了它也改变了
t1.b = 2;//这时你会发现t2.b怎么也变成2了,这就是静态造成,对象t1,t2所对的b其实是同一个
}
c/c++面试总结(1)的更多相关文章
- C++常见笔试面试要点以及常见问题
1. C++常见笔试面试要点: C++语言相关: (1) 虚函数(多态)的内部实现 (2) 智能指针用过哪些?shared_ptr和unique_ptr用的时候需要注意什么?shared_ptr的实现 ...
- [Java面经] 关于面试的二三事.
今天终于闲下来了, 那么也好总结下这几天面试的经历.四天的时间一共面了七家, 有一家是自己推迟了没有去.声明:如若转载请注明出处:http://www.cnblogs.com/wang-meng/p/ ...
- 在面试中忽然发现DateTime的一些...
今天说说我面试中碰到的一个小问题,在我问起DateTime为什么无法赋值NULL值,一般第一反应都认为它是值类型,不是引用类型,但随后我查阅了度娘自我学习到它是结构类型,那么随之而然就无法赋值NULL ...
- 2016年8月ios面试问题总结
1.app分发方式 所谓分发方式简单点讲就是你的app都可以通过哪些途径给用户使用. a:个人或者公司的开发者账号 可以上传appStore,用户通过appStore下载. b:企业账号:打包分发. ...
- 记2016腾讯 TST 校招面试经历,电面、笔试写代码、技术面、hr面,共5轮
(出处:http://www.cnblogs.com/linguanh/) 前序: 距离 2016 腾讯 TST 校招面试结束已经5天了,3月27日至今,目前还在等待消息.从投简历到两轮电面,再到被 ...
- Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结
2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...
- Android面试经验 -- 乐视
此次投的是三年经验的Android开发,最后反而因为自己的失误,没有准备充分而导致结果很悲剧,以此告诫自己千万不能疏忽大意. 面试过程 第一次去大公司面试,心里不是一般的激动和紧张,来到乐视大厦门口, ...
- Android面试一天一题(1Day)
写在前面 该博客思路源于在简书看到goeasyway博主写的Android面试一天一题系列,无copy之意,仅为让自己总结知识点,成长一点点.先感谢各位大神的无私分享~! 关于题目,大部分则出自And ...
- Java面试基础概念总结
面向对象软件开发的优点有哪些? 答:开发模块化,更易维护和修改:代码之间可以复用:增强代码的可靠性.灵活性和可理解性. 多态的定义? 答:多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力. ...
- 【干货分享】前端面试知识点锦集04(Others篇)——附答案
四.Others部分 技术类 1.http状态码有哪些?分别代表是什么意思? (1).成功2×× 成功处理了请求的状态码.200 服务器已成功处理了请求并提供了请求的网页.204 服务器成功处理了请求 ...
随机推荐
- libgo 2.0发布
libgo 是一个使用 C++ 编写的协作式调度的stackful协程库, 同时也是一个强大的并行编程库. 设计之初是为高并发分布式Linux服务端程序开发提供底层框架支持,可以让链接进程序的同步的第 ...
- 0c-42-ARC模式下如何兼容非ARC的类
1.ARC模式下如何兼容非ARC的类 让程序兼容ARC和非ARC部分.转变为非ARC -fno-objc-arc 2.将MRC转换为ARC ARC也需要考虑循环引用问题:一端用strong,一端用we ...
- mysql sort 性能优化
http://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html 这段时间mysql 数据库的性能明显降低,iowait达到了30, ...
- BM25相关度打分公式
BM25算法是一种常见用来做相关度打分的公式,思路比较简单,主要就是计算一个query里面所有词和文档的相关度,然后在把分数做累加操作,而每个词的相关度分数主要还是受到tf/idf的影响.公式如下: ...
- [android]fmodex在某些android设备上声音延迟Latency
// The default on windows in bufferlength = 1024 and numbuffers = 4 hr = g_pFmodSystem->setDSPBuf ...
- Qt界面美化 QSS
目前发现在Qt-Design中右击控件,可以选择Change StyleSheet ------------------------以下总结不太对 刚接触Qt,发现Qt Design无法对每个控件进行 ...
- sqoop1.99.4安装与简介
1.什么是sqoop clouder公司开发的一个在关系数据库和hdfs,hive之间数据导入导出的一个工具 2.版本及其区别 现在分为sqoop1和sqoop2 1)架构图(sqoop1和hadoo ...
- iOS tabbar 控制器基本使用
RootViewController *rootVC=[[RootViewController alloc] init] SignInViewController *signVC = [[SignIn ...
- UITableView 折叠效果
1:创建一个model数据模型 #import <Foundation/Foundation.h> @interface DataModel : NSObject //保存section中 ...
- C++构造/析构/赋值函数
在编写C++程序的时候,我们会为特定某一类对象申明类类型,几乎我们申明的每一个class都会有一个或多个构造函数.一个析构函数.一个赋值运算符重载=.以及拷贝构造函数.这些函数控制着类对象的基础操作, ...