笔试职位:web漏洞挖掘工程师
Ps:十几个岗位同一套试题(其实有A、B卷,但是只是题目顺序调换了一下而已),不知道360啥意思
笔试题目结构是40个选择题+两个主观题
题目涉及的知识面甚是宽广,包括逻辑推理(离散数学知识)、c++面向对象(继承、构造函数等)、操作系统(内存分页、进程线程等)、数据结构(根据任意两种遍历(先序、中序、后序)写出二叉树、完全二叉树叶子节点等)、计算机组层原理(有个什么数据线的题目,忘了)、网络协议基础(TCP连接分析),最后两个选择题一个是objective-c,另外一个是andriod数字签名~_~!!
主观题一、给了一段函数问有什么安全漏洞,怎么修复漏洞?
函数完整的记不起来了,ptr指向一个数组
...
charbuf[120];
gets(buf);
strncpy(ptr,buf,8);
...
看到这几句就明白了,属于内存溢出漏洞,对gets进来的buf未进行大小判断,便直接进行拷贝处理,容易超出ptr所指向数组所申请的地址大小,从而造成溢出。 主观题二、给一个整数数组,求该数组中第二大的整数
/**
*Func:获取整数数组中第二大的整数
*Date:2013-10-12
**/
#include<iostream>
using namespace std;
//定义个很小的数,int最小-32767
const int MINNUMBER = -32767;
int find_sec_max( int data[], int count)
{
int maxnumber = data[0];
int sec_max = MINNUMBER;
for (int i = 1;i < count;i++)
{
if ( data[i] > maxnumber )
{
sec_max = maxnumber;
maxnumber = data[i];
}else{
if ( data[i] > sec_max )
sec_max = data[i];
}
}
return sec_max;
}
int main()
{
//测试
int a[5]={1,2,3,8,5};
int secNum;
secNum = find_sec_max(a,5);
cout << "第二大的整数为:" << secNum <<endl;
return 0;
}