2014.09.26面试总结

22 篇文章 0 订阅
18 篇文章 0 订阅

1.代码题,二叉树转成双向链表

    递归+中序

2.代码题,多线程环境下的单例模式

    双重检查,注意private构造函数、拷贝构造函数和赋值函数,注意static静态实例和静态方法


3.系统内存的划分,堆栈区和堆区的区别,全局变量区,常量区

   (1) 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。

    (2) 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

    (3) 自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的

    (4) 全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。

    (5) 常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改)


4.GDB常用指令,为什么GDB能够监视到另外一个进程中的数据?

    GDB能够监视并接管另外一个程序的执行是依靠ptrace系统调用,它提供了一种方法来让父进程可以观察和控制其它进程的执行,检查和改变其核心映像以及寄存器。主要用来实现断点调试和系统调用跟踪。

    (1) 内核在执行用户请求的系统调用之前回检查当前进程是否处于被“跟踪”状态,如果是的话内核暂停当前进程并将控制权交给调试进程,使跟踪调试进程可以查看甚 至修改被调试进程的内存,寄存器等数据。而ptrace函数的作用就是告诉内核在执行子进程的系统调用之前做的动作。所有的动作都可以通过request 进行传入。
    (2) 设置断点原理:通过查找输入的断点和具体代码位置对应起来,并在该位 置替换为一条断点指令,并且保存以前的指令,到目标程序运行到该断点处时,产生SIGTRAP信号,该信号被GDB捕获,GDB查找断点列表来确定是否命 中断点。继续执行的时候则会把保存的指令重新放回并执行。n/s/ni/si/finish/uitil也会自动设置断点。
    (3) 内核传递给被调试进程所有的信号,都会先传递给GDB再由gdb采取定义的动作来和被调试进程之间进行相互协调操作。gdb暂停目标程序运行的方法是向其 发送SIGSTOP信号,GDB对于随机信号(非GDB产生的)的处理包括,可以通过handle signals命令来预定义


5.守护进程怎么启动?

    (1).创建子进程,父进程退出
    (2).在子进程中创建新会话 
    (3).改变当前目录为根目录
    (4).重设文件权限掩码
    (5).关闭文件描述符
    (6).守护进程里,忽略SIGCHLD信号 (即使fork两次,新进程由init接管,不进行signal(SIGCHLD,SIG_IGN)操作,也会产生僵尸进程。)


6.socket服务端启动连接的过程,select与epoll两种函数是作什么用的?

    socket()→bind()→listen()→accept()→send()/recv()→close()

    select与epoll见:http://blog.csdn.net/this_capslock/article/details/39649001


7.RSA算法的原理,主要应用

    非对称加密算法,基于大数分解的数学难题

    选两个素数p和q,令r=p*q,计算相对于(p-1)*(q-1)的两个逆元d和e,(r,e)为公钥,(r,d)为私钥

    主要应用:数据加密,数字签名


8.线程间有什么通信方式?

    (1) 锁机制:包括互斥锁、条件变量、读写锁
     *互斥锁提供了以排他方式防止数据结构被并发修改的方法。
     *读写锁允许多个线程同时读共享数据,而对写操作是互斥的。
     *条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
    (2) 信号量机制(Semaphore):包括无名线程信号量和命名线程信号量
    (3) 信号机制(Signal):类似进程间的信号处理
    线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值