最近在找新的工作,在找工作中遇到很多面试题,大多数让我很难堪,再次让我认识到自己的知识的匮乏,上份工作是以应届生的身份,所有当时进项目组也没有很多要求,进入项目组后自己还算好学(自己以为),之前也没有相关的经验,自己很自信(其实都是盲目的),在上份工作中遇到几个愿意带我的老员工对我帮助很大(也间接的造成自己很自大),上份工作主要使用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)的更多相关文章

  1. C++常见笔试面试要点以及常见问题

    1. C++常见笔试面试要点: C++语言相关: (1) 虚函数(多态)的内部实现 (2) 智能指针用过哪些?shared_ptr和unique_ptr用的时候需要注意什么?shared_ptr的实现 ...

  2. [Java面经] 关于面试的二三事.

    今天终于闲下来了, 那么也好总结下这几天面试的经历.四天的时间一共面了七家, 有一家是自己推迟了没有去.声明:如若转载请注明出处:http://www.cnblogs.com/wang-meng/p/ ...

  3. 在面试中忽然发现DateTime的一些...

    今天说说我面试中碰到的一个小问题,在我问起DateTime为什么无法赋值NULL值,一般第一反应都认为它是值类型,不是引用类型,但随后我查阅了度娘自我学习到它是结构类型,那么随之而然就无法赋值NULL ...

  4. 2016年8月ios面试问题总结

    1.app分发方式 所谓分发方式简单点讲就是你的app都可以通过哪些途径给用户使用. a:个人或者公司的开发者账号 可以上传appStore,用户通过appStore下载. b:企业账号:打包分发. ...

  5. 记2016腾讯 TST 校招面试经历,电面、笔试写代码、技术面、hr面,共5轮

    (出处:http://www.cnblogs.com/linguanh/) 前序: 距离  2016 腾讯 TST 校招面试结束已经5天了,3月27日至今,目前还在等待消息.从投简历到两轮电面,再到被 ...

  6. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  7. Android面试经验 -- 乐视

    此次投的是三年经验的Android开发,最后反而因为自己的失误,没有准备充分而导致结果很悲剧,以此告诫自己千万不能疏忽大意. 面试过程 第一次去大公司面试,心里不是一般的激动和紧张,来到乐视大厦门口, ...

  8. Android面试一天一题(1Day)

    写在前面 该博客思路源于在简书看到goeasyway博主写的Android面试一天一题系列,无copy之意,仅为让自己总结知识点,成长一点点.先感谢各位大神的无私分享~! 关于题目,大部分则出自And ...

  9. Java面试基础概念总结

    面向对象软件开发的优点有哪些? 答:开发模块化,更易维护和修改:代码之间可以复用:增强代码的可靠性.灵活性和可理解性. 多态的定义? 答:多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力. ...

  10. 【干货分享】前端面试知识点锦集04(Others篇)——附答案

    四.Others部分 技术类 1.http状态码有哪些?分别代表是什么意思? (1).成功2×× 成功处理了请求的状态码.200 服务器已成功处理了请求并提供了请求的网页.204 服务器成功处理了请求 ...

随机推荐

  1. Java核心技术卷二部分笔记

    第1章 流与文件 1.2 文本输入与输出 第3章 网络 3.3 可中断套接字 第4章 数据库编程 4.5.2 读写LOB 4.6 可滚动和可更新的结果集 4.8 元数据 第6章 高级Swing 6.1 ...

  2. 十六进制字节 & 十六进制转二进制

    做项目也将近一年的时间了.从一开始就经常提到“一个十六进制字节”,然而一开始就是迷惑的,直到现在.     一个十六进制字节,比如:FF.周围的人经常说这是一个十六进制字节.然后我就想,这不是两个字符 ...

  3. Spring RESTFul Client – RestTemplate Example--转载

    原文地址:http://howtodoinjava.com/2015/02/20/spring-restful-client-resttemplate-example/ After learning ...

  4. 【Android 界面效果32】ImageView中XML属性src和background的区别

    background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸. src是图片内容(前景),bg是背景,可以同时使用. 此外:scaleType只对sr ...

  5. 数理方程:Laplace变换 & 留数(更新中)

    更新:25 APR 2016 Laplace变换 设函数\(f(t)\)在\(t>0\)时有定义,积分 \(F(s)=\int_0^{+\infty}f(t)e^{-st}dt \qquad ( ...

  6. Eclipse+ADT+Android SDK 搭建安卓开发环境

    Eclipse+ADT+Android SDK 搭建安卓开发环境   要求 必备知识 windows 7 基本操作. 运行环境 windows 7(64位); eclipse-jee-luna-SR2 ...

  7. Table of Contents - Jersey

    Jersey 1.19.1 Getting Started Get started with Jersey using the embedded Grizzly server Get started ...

  8. spring(三)----大概是最简单的面向切面了

    面向切面编程,是spring的一大特点,可以说是spring最独特的特点了(个人认为). 记得当初学习面向切面编程的时候,可能是面向对象思想根深蒂固了,怎么也理解不了什么叫面向切面... 其实对于面向 ...

  9. CSS导航指示箭头

    效果图 代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  10. asp连接SQL数据库的代码

    connstr="driver={SQL Server};server=(local);uid=sa;pwd=sa;database=Your database" 语法介绍: 1. ...