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

    一.Android网络通信 android网络通信一般有三种:java.net.*(标准Java接口).org.apache接口(基于http协议)和android.net.*(Android网络接口 ...

  2. c++ 设计模式7 (Bridge 桥模式)

    4.2 Bridge 桥模式 动机: 由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个变化的维度. 代码示例: 实现一个Messager,含有基本功能PlaySound,Connec ...

  3. tachyon 本地模式安装

    本地模式不用考虑hadoop的版本,所以直接下载 binary 包或者自己编译 1.配置主机名.JDK.关闭防火墙.关闭Selinux.配置hosts ... ... 2.设置本机SSH免密码登陆 . ...

  4. Data Structure 之 二叉树

          在计算机科学中,二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用于实现二叉查找树和二叉堆 ...

  5. Phong光照以及其他

        在说光照之前,有必要先弄清法线的变换,假设Mworld 将物体的定点一一变换到世界空间,如果我们对法线实施同样的变化,,以为能将法线变换到世界空间,但世界上变换之后的法线不再与表面垂直,就像下 ...

  6. 【阿里云产品公测】云引擎ACE -discuz安装

    作者:阿里云用户云想未来 谢谢支持.为什么写的比较简单就是为方便新手谁想要很麻烦?亲测按这个教程可以安装成功!时间紧迫不发图片了纯原创 排版您请谅解 进入创建新应用的信息填写界面,此处需要填写一个赠送 ...

  7. MVC+easyui 完整实现

    学习mvc半月有余,趁几天假期,没事做就动手做一个完整的网站玩玩,顺便和上家公司的方法做个比较.页面引擎采用mvc自带的功能,建立视图,交给.net自带渲染出页面(对比:上家公司采用的第三方组件渲染的 ...

  8. linux服务监控脚本

    配置需要监控的服务器 数组定义:host_ports=(host_name=host_port=uri_path)host_name为容易识别的服务器名称host_port为服务器ip和服务端口uri ...

  9. ionic中的ion-content与ion-scroll

    ion-content形成上下结构,上面固定,下层可滑动 首先要设置ion-content不可滑动:<ion-content class="has-subheader" sc ...

  10. dfa最小化,终于完成了。

    采取的方法是hopcroft的填表法,详情见如下代码 #include "nfa_to_dfa.h" int* dfa_diff_matrix; int mini_dfa_numb ...