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 服务器成功处理了请求 ...
随机推荐
- oc-31-多对象的内存管理
在每个OC对象内部,都专门有8个字节的存储空间来存储引用计数器. 引用计数器的常见操作 retain消息:堆内存中对象的计数器变量 +(该方法返回对象本身,要想计数器变量加1就要调用对象的retain ...
- 【转】winform退出代码:Application.Exit和Environment.Exit(0)
Application.Exit和Environment.Exit(0)有什么退出方面的区别吗? Application.Exit:通知winform消息循环退出.会在所有前台线程退出后,退出应用 强 ...
- Oracle的trunc和dbms_random.value随机取n条数据
今天在review项目代码的时候看到这样一个问题,有一张号码表,每次需要从这样表中随机取6个空闲的号码,也就是每次取出来的6个号码应该都会有所不同.然后我就看到了这样的SQL select t.* ...
- 关于Android中TextView显示多个空格
一.直接填写文字,输入多少,显示多少,如下: android:text="AAA AAA" ————————>显示:AAA AAA 二.通过设置str ...
- C++实现日期转换类DateTime
概述 工作中我们在网络传输时使用time_t来传输时间,在显示时使用字符串来显示,下面是一个日期转换类的实现,方便以后使用: // DateTime.hpp #ifndef _DATETIME_H # ...
- 基于xml的用户注册登录案例
用户注册登录 要求:3层框架,使用验证码 1 功能分析 l 注册 l 登录 1.1 JSP页面 l regist.jsp 注册表单:用户输入注册信息: 回显错误信息:当注册失败时, ...
- [设计模式] .NET设计模式笔记 - 有多少种设计模式
.NET下的23中设计模式. ※创建型模式篇 ●单件模式(Single Pattern) ●抽象工厂模式(Abstract Factory) ●建造者模式(Builder Pattern) ●工厂方法 ...
- C#中怎么在EXCEL中的单元格中画斜线啊 ??
Code Snippet 做法: 1,先添加引用COM,找 Excel 2,using Excel = Microsoft.Office.Interop.Excel; 3, 代码 private Ex ...
- SSAS中Cube的结构
在SSAS(SQL Server Analysis Services)中构建Cube和编写MDX的时候,我们很容易被一些名词弄糊涂,比如:Dimension(维度),Measures Dimensio ...
- iOS webView的一些基本用法
1.自己拼接html来显示想要的文字(参考:http://www.mamicode.com/info-detail-492242.html) NSString *htmlStr=@"< ...