[面试]笔试面试常见问题-之一
C/C++:
1.malloc和new的区别
答:1、m是C语言库函数,n是C++操作符。2、m按字节在栈中分配内存,所以经常和sizeof搭配,n自动根据类型分配。3、n会自动调用默认构造函数而m只分配内存空间。
2.delete与delete[]的区别
答:没[]的delete用于释放单个new对象,而[]用于释放整个new数组。如果对数组用不带[],则只有第一个对象调用了析构函数,其他没有。
3.什么是引用?引用与指针的区别?
引用跟指针实质上都是内存地址。不过引用声明时必须初始化,声明后不能改变指向的地址值。比指针更安全。引用相当于变量的别名。
4.sizeof的用法
答:sizeof(类型)为类型的字节数;sizeof(指针)为指针长度,32位机为4字节;sizeof(数组名)为数组长度字节数,因此计算数组长度应sizeof(数组名)/sizeof(数组类型);sizeof(*指针 或 * 数组名)为该指针类型变量的长度,如int就为4. 需要注意的是char ab[]="123456";这种情况时结果是7,因为字符串会自动添加 作为结束符。但char a[]={'a','b'};sizeof(a)=2
5.strlen的用法
答:无论是指针还是数组的字符串,此函数都是从传入地址开始累加,直到遇上 。因此char * a="abc"或char a[]="abc"或char a[100]="abc"结果都是3!
6.进程与线程的区别说明一下“线程安全”?
答:进程是为了完成用户任务所需要的程序的一次执行过程和为其分配资源的一个基本单位,是一个具有独立功能的程序段对某个数据集的一次执行活动。进程具有独立的内存空间,进程至少有一个主线程。多个线程可以共享进程的内存空间(系统不会为线程分配内存)。进程是程序的一次动态执行过程,它对应了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到消亡的过程。线程是比进程更小的执行单位。
7.面向对象的三个特征?
答:封装,多态,继承。
8.STL的XXX(常用那几个)是用什么方法实现的?
9.C里面volatile的作用?
答:用于修饰被多个线程访问的变量。volatile 影响编译器编译的结果,指出volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错。2、volatile变量总从内存读取而不能放到寄存器和cache中,因为它可能被另外的线程改变。
10、static作用,与全局变量的区别
答:static主要作用可以分为两类:(1)改变存储区域 (2)限制变量或者函数的使用
static变量分为全局static变量和局部static变量。这两种static变量都存储在静态全局区。
但局部static变量的作用范围只在定义的函数中,它只初始化一次,函数多次调用不会重新初始化,值保持。
全局static变量的作用范围是在定义变量的文件中,而普通全局变量则是整个源程序中全部文件都有效。
静态变量的值会自动初始化为0.
静态函数限制函数只在本文件中使用,其他文件无法使用。类的静态成员函数不含this指针,不能访问任何非static成员,它可以在没有实例的条件下使用类命名域::直接使用。
11、const作用
(1)定义常值变量(2)修饰函数参数-引用或指针传递时(3)修饰函数返回值-返回指针时(4)修饰成员函数-说明不会修改成员变量-成员变量添加mutable可被const成员函数修改
PHP:
1.include()与require()的区别
答:include找不到文件时只发出警告,继续执行下面代码;而require会发出错误,终止执行。
2. 虚函数怎么实现的
4. 线程间同步的方式
5. 进程间通信的方式
C++析构函数的底层实现
外部排序
1、网站看一张图片的数据过程
2、局域网与互联网通信的数据过程