后台开发面试常被问到的问题(一):什么之间的区别
2017-11-12 16:44
417 查看
后台开发面试常被问到的问题:什么之间的区别笔者在将近半年的求职经历总结
new和malloc区别
1、申请内存位置2、返回值类型
3、分配内存失败时返回值
4、是否需要指定内存大小
5、是否调用构造、析构函数
6、对数组处理
7、new和malloc相互调用
8、重载
9、重新分配内存
10、客户处理内存不足
C/C++区别
一、带有默认值的函数
C++函数的原型中可以声明一个或多个带有默认值的参数。
二、Inline函数
C++中在函数调用点,把函数代码展开,是一种更安全(类型检查、编译阶段)的宏。
内联函数没有标准的函数栈帧开辟和回退,没有符号产生,即,内联函数有普通函数区别;内联函数与static函数区别,静态函数产生符号是local的。
三、函数重载
在C++中,允许有相同的函数名,不过它们的参数类型不能完全相同,这样这些函数就可以相互区别开来。而这在C语言中是不允许的。
四、Const区别
C中为常变量,不是必须初始化,不能作为左值;C++中常量,必须初始化,编译阶段进行替换。引用一个编译阶段不明确的值时退化为常变量(同C中)。
五、引用
C++中的引用是其他变量的别名。定义引用变量开辟内存。
1、必须初始化;
2、初始化的值必须能取地址;
3、引用不能改变;
4、访问引用变量,永远访问的是它所引用的地址
六、动态内存开辟
七、作用域
C全局作用域、局部作用域;
CPP
指针和引用的区别
1、指针是一个变量,只不过存储的是地址,指向内存的一个存储单元;引用只是所引用变量的别名。
2、有const指针;但么const引用。
3、指针可以有多级;引用只能有一级。
4、指针可以为空;引用不可以,在定义时必须初始化。
5、指针在初始化之后可以改变;但引用在初始化之后不能改变。
6、指针sizeof后的大小是指针大小;而引用sizeof的大小所指变量/对象的大小。
7、指针和引用的自增也不同。
8、指针和引用作为参数传递也有区别。
C++/C指针和数组区别
1、数组:数组名对应一块内存,地址与容量在生命周期内保持不变,只有数组名可以改变。指针:可以随时指向任意内存块,指针更灵活。
2、修改内容 指针如果指向常量字符串,若对其内容进行修改会造成运行时错误。
3、内容复制与比较 数组名不能直接进行复制与比较,否则会产生编译错误;指针直接进行复制与比较只是对地址进行比较与赋值,达不到逾期目标。
4、计算容量 用sizeof可以算出数组所占字节数;而指针只能计算出一个指针的大小。
5、当数组作为函数的参数传递是会退化为同类型的指针。
const定义常量与宏定义的区别
1.编译器处理方式
define – 在预处理阶段进行替换
const – 在编译时确定其值
2.类型检查
define – 无类型,不进行类型安全检查,可能会产生意想不到的错误
const – 有数据类型,编译时会进行类型检查
3.内存空间
define – 不分配内存,给出的是立即数,有多少次使用就进行多少次替换,在内存中会有多个拷贝,消耗内存大
const – 在静态存储区中分配空间,在程序运行过程中内存中只有一个拷贝
4.其他
在编译时,编译器通常不为const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
宏替换只作替换,不做计算,不做表达式求解。
宏定义的作用范围仅限于当前文件。
默认状态下,const对象只在文件内有效,当多个文件中出现了同名的const变量时,等同于在不同文件中分别定义了独立的变量。
如果想在多个文件之间共享const对象,必须在变量定义之前添加extern关键字(在声明和定义时都要加)。
规则
在C++ 程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。
参考资料:
http://blog.csdn.net/yingyujianmo/article/details/51206460
const、volatile区别
const和volatile是类型修饰符,语法类似,用于变量或函数参数声明,也可以限制非静态成员函数。
const表示只读类型(指定类型安全性,保护对象不被意外修改);
volatile指定被修饰的对象类型的读操作是副作用(因此读取不能被随便优化合并,适合映射I/O寄存器等)。
volatile:确保本条指令不会因编译器的优化而省略,且要求每次直接读值。
a、当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中,以后再取变量值时,就直接从寄存器中取值。
b、优化器在用到volatile变量时必须每次都小心地重新读取这个变量的值,而不是使用保存到寄存器里的备份。
c、volatile适用于多线程应用中被几个任务共享的变量。
const和static区别
1、const定义的常量在出其作用域之后空间会被释放,而对整个类来说是可变的;但是static定义的静态常量出作用域之后不会被释放。
2、Static表示静态的。类的静态成员变量、静态成员函数是和类相关的,而不是和类的对象相关。即使没有没有具体的对象,也能调用类的静态成员函数、变量。Static静态成员变量不能在类的内部初始化,只能在类内部声明、类外部初始化(且初始化不加static);const成员变量也不能在类内初始化,只能在构造函数的初始化列表进行初始化(即必须有构造函数)。
3、Cosnt成员函数主要目的是防止成员函数修改对象内容;static成员函数主要目的是作为类作用域的全局函数,且不能访问非静态成员变量,没有this指针。
参考资料:
http://www.cnblogs.com/phpzhou/p/6390869.html
文章著作权归作者所有
相关文章推荐
- 关于Microsoft Unified Communications Managed API 3.0开发的相关技术问题(RealTimeEndpoint, SipEndpoint, SipPeerToPeerEndpoint之间的区别是什么?)
- 面试经典问题---select、poll、epoll之间有什么区别
- 面试时必问题:接口和抽象类 有什么区别??
- sleep和wait有什么区别(面试问题:sleep和wait有哪些区别)
- 交换机和路由器有什么区别——面试问题
- 网页设计师和网站开发人员之间的区别是什么!
- C++后台开发校招面试常见问题
- (012) java后台开发之Apache与Tomcat有什么关系和区别
- 连awk都不熟悉还搞什么Linux后台开发啊-----顺便分享一下与awk有关的笔试、面试经历
- 面试问题组合和聚合有什么区别
- C++后台开发面试常见问题汇总
- 牛客网Java刷题知识点之什么是单例模式?解决了什么问题?饿汉式单例(开发时常用)、懒汉式单例(面试时常用)、单例设计模式的内存图解
- 面试问题:进程和线程的区别是什么?
- 2015年Java后台开发面试问题分享汇总(主流互联网公司面试经历)
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
- 面试可能遇到这样的问题 TCP HTTP SOCKET之间的有什么关系
- Linux后台开发面试问题汇总
- 面试问题redis和memcache有什么区别
- 面试问题5:const 与 define 宏定义之间的区别