头条开发岗面试小结

一、关于C和C++:

1、static关键字的作用:

C语言中static的作用如下

第一、在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。
第二、static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。
第三、static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量存放在全局数据区的静态变量区。初始化的时候自动初始化为0;
(1)不想被释放的时候,可以使用static修饰。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用static修饰
(2)考虑到数据安全性(当想要使用全局变量的时候应该先考虑使用static)

把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。

在C++中static关键字除了具有C中的作用还有在类中的使用
在类中,static可以用来修饰静态数据成员和静态成员方法
静态数据成员
(1)静态数据成员可以实现多个对象之间的数据共享,它是类的所有对象的共享成员,它在内存中只占一份空间,如果改变它的值,则各对象中这个数据成员的值都被改变。
(2)静态数据成员是在程序开始运行时被分配空间,到程序结束之后才释放,只要类中指定了静态数据成员,即使不定义对象,也会为静态数据成员分配空间。
(3)静态数据成员可以被初始化,但是只能在类体外进行初始化,若为对静态数据成员赋初值,则编译器会自动为其初始化为0
(4)静态数据成员既可以通过对象名引用,也可以通过类名引用。

静态成员函数
(1)静态成员函数和静态数据成员一样,他们都属于类的静态成员,而不是对象成员。
(2)非静态成员函数有this指针,而静态成员函数没有this指针。
(3)静态成员函数主要用来方位静态数据成员而不能访问非静态成员。

2、引用和指针的区别:

http://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004869.html

3、union和struct的区别:

(1)struct可以存储多个成员信息,而union每个成员会用同一个存储空间,只能存储最后一个成员的信息

(2)都是由多个不同的数据类型成员组成,但在同一时刻,union只存放一个被先选中的成员,而结构体的所有成员都存在

(3)对于union的不同成员赋值,将会对其他成员重写,原来的成员的值就不存在了,而对于struct的不同成员赋值是互不影响的

(4)union的大小取决于它所有的成员中,占用空间最大的一个成员的大小

4、C++多继承会出现什么问题?

会出现二义性,可以使用虚基类解决这个问题。例如,B C分别继承A,D继承B和C,这种情况下,创建C的对象,会导致基类A的构造函数被重复调用。使用虚基类后,D构造出来后,它的存储区域只有一个A,不会有二义性。虚继承后D的构造函数通过初始化列表来完成

http://www.cnblogs.com/yangguang-it/p/6511532.html

二、数据库

1、事务的定义 四大特性 和 隔离级别

 事务是并发控制的基本单位,所谓事务,是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。事务的四大特性(ACID):原子性、一致性、隔离性、持久性。

  隔离级别:读未提交(脏读、不可重复读、幻读)、读提交(不可重复读、幻读)、重复读(幻读)、序列化

http://blog.youkuaiyun.com/fg2006/article/details/6937413


2、数据库的1F 2F 3F范式

部分依赖:多个主键 存在属性只依赖于单个主键

三、操作系统

死锁的定义,什么时候发生死锁

如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的(Deadlock)

死锁的必要条件:

1、互斥条件:系统资源在某段时间只能被一个进程占用

2、请求和保持条件:进程已经保持了至少一个资源,但又对新的资源提出请求,而该资源又被其他进程占用,此时请求进程保持阻塞,但对自己已获得的资源保持不放

3、不可抢占条件:进程已经获得的资源在未使用完之前不能被抢占,只能有进程在使用完后自己释放

4、循环等待条件:在发生死锁时,必然存在一个进程-资源的循环链

处理死锁的方法:

1、预防死锁:通过设置某些限制条件、去破坏产生死锁的四个必要条件中的一个或几个

2、避免死锁:在资源动态分配时,用某种方法防止系统进入不安全状态,从而避免产生死锁,如银行家算法

3、检测死锁:检测死锁发生的地方,把进程从死锁中解脱出来

4、解除死锁:当检测到系统中已发生死锁时,就采取相应的措施,将进程从死锁状态中解脱出来。常用方法是---撤销一些进程,回收他们的资源,将他们分配给已处于阻塞状态的进程,使其能继续运行。

进程和线程的区别,通信方式

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

进程通信方式:管道、信号量、信号、消息队列、共享内存、socket

线程的通信方式:锁机制:互斥锁、条件变量、读写锁

信号量机制、信号机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值