百度面试

一面面了一个多小时,大概有二十多分钟讲项目,其他问了些C语言的题目。

1.  解释什么是缓冲区溢出 ,黑客如何利用它来达到自己的目的的?

缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,使得溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患。操作系统所使用的缓冲区又被称为"堆栈".。在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。

而缓冲区溢出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,比如得到shell,然后为所欲为。

下面的函数中,若str的长度超过了16,就会造成缓冲区溢出,function的函数指针就可能被覆盖。

void function(char *str) {
char buffer[16];
strcpy(buffer,str);
}


2.下列代码编译会怎样?运行会怎样?会报什么样的错误?

     int *p = 21;//错误写法,给指针赋值必须为地址,*p为所指向变量的值

     *p = 21;

我的编译器会报错,无法将int型的21转换为int*型。

     int *p = (int *)21; //即使是进行强制转换,执行的时候还是会报错


3. 一个main函数,里面malloc 100M内存,但并不访问这些内存,最后return。一直不停的执行main下去,会不会导致内存泄露?

不会,因为程序只是malloc了,但是没有使用的话就不会真正分配内存,即使了分配了也不会导致内存泄露,因为main有return语句,在退出main以后,操作系统会释放掉main占用的所有内存,所以即使是执行多次也不会导致内存泄露。


4. 全局变量和局部变量的区别。


二面,电话面试,大概二十分钟,基本上针对简历问的,简历上写了C/C++,STL, TCP/IP,操作系统


1. 支持map的数据结构?红黑树

   红黑树的优点?红黑树是哪种树?(AVL树) 其他的AVL树? 234树B树,B+树 B树应用在什么场景/应用下?为什么?

   B-树和B+树的应用:数据搜索和数据库索引:http://blog.csdn.net/hguisu/article/details/7786014

2. vector是如何存储的

3. inline关键字

4. char *p = "12";

   p[1] = '2';

   会不会出错?为什么?

会,"12"实际是常量,指针p实际上是无法改变它的值的,我觉得我没有回答到点子上,求高人解答


5. 系统调用和库函数的区别?



6. 若内存有限,许多个程序并发执行,且都确确实实地开辟并占用了1G的内存,系统会不会崩溃?

   不会,这一题不会,好像是有关内存缺页之类的,之后再补上来


7. socket编程的原理


8. 在一个socket程序中,若客户端需要接收客户端发过来的数据,且设一个定时,超过这个时间就返回一个消息给服务器,编写一个函数来实现


9. 计算机网络中OSPF和BGP路由协议的比较,原理


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值