源自于对于黑客精神的崇拜之情,对这家公司格外尊重。虽待遇不是很高,但想必在那里真正能感受程序员的乐趣。
正是由于看了这家公司笔试试卷之后,俺才将之前写过的笔经中提到的公司名字抹去的。(ps:俺分享笔经也是体现了一点黑客精神滴~~)。试卷上首页标注了:商业机密;试卷最后小提醒中说不要传播笔试题目的。 俺想今天的记录只是把自己不会的或者模糊的知识点列举出来,方便自己技术的提高~~ 比重较小,也基本不会提到完整的题目本身。谢谢!
1.字符设备与块设备了解
2.多线同步的方法
3.进程通信的方法
4.函数指针、指针数组、数组指针的声明
5.了解Cloud服务的三种模式:Sass,Pass,Iass.
Software as a Service,软件即服务,简称SaaS,这层的作用是将应用作为服务提供给客户。
Platform as a Service,平台即服务,简称PaaS,这层的作用是将一个开发平台作为服务提供给用户。
Infrastructure as a Service, 基础设施即服务,简称IaaS,这层的作用是提供虚拟机或者其他资源作为服务提供给用户。i)SaaS模式
通过SaaS这种模式,用户只要接上网络,并通过浏览器,就能直接使用在云端上运行的应用,而不需要顾虑类似安装等琐事,并且免去初期高昂的软硬件投入。SaaS主要面对的是普通的用户。 主要产品包括:Salesforce Sales Cloud,Google Apps,Zimbra,Zoho和IBM Lotus Live等。
ii)PaaS模式
通过PaaS这种模式,用户可以在一个包括SDK,文档和测试环境等在内的开发平台上非常方便地编写应用,而且不论是在部署,或者在运行的时候,用户都无需为服务器,操作系统,网络和存储等资源的管理操心,这些繁琐的工作都由PaaS供应商负责处理,而且PaaS在整合率上面非常惊人,比如一台运行Google App Engine的服务器能够支撑成千上万的应用,也就是说,PaaS是非常经济的。PaaS主要的用户是开发人员。主要产品包括:Google App Engine,force.com,heroku和Windows Azure Platform等。
iii)IaaS模式
通过IaaS这种模式,用户可以从供应商那里获得他所需要的虚拟机或者存储等资源来装载相关的应用,同时这些基础设施的繁琐的管理工作将由IaaS供应商来处理。IaaS能通过它上面对虚拟机支持众多的应用。IaaS主要的用户是系统管理员。主要产品包括:Amazon EC2,Linode,Joyent,Rackspace,IBM Blue Cloud和Cisco UCS等。
iv)三种模式之间的关系
它们之间的关系主要可以从两个角度进行分析:其一是用户体验角度,从这个角度而言,它们之间关系是独立的,因为它们面对不同类型的用户。其二是技术角度,从这个角度而言,它们并不是简单的继承关系(SaaS基于PaaS,而PaaS基于IaaS),因为首先SaaS可以是基于PaaS或者直接部署于IaaS之上,其次PaaS可以构建于IaaS之上,也可以直接构建在物理资源之上。
6.SQL注入指的是?注入攻击,是发生于应用程序之数据库层的安全漏洞。简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了检查,那么这些注入进去的指令就会被数据库服务器误认为是正常的SQL指令而运行,因此遭到破坏。例子如下:
某个站点的登录验证的SQL查询代码为
strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');"
恶意填入
userName = "' OR '1'='1";
与
passWord = "' OR '1'='1";
时,将导致原本的SQL字符串被填为
strSQL = "SELECT * FROM users WHERE (name = '' OR '1'='1') and (pw = '' OR '1'='1');"
也就是实际上运行的SQL命令会变成下面这样的
strSQL = "SELECT * FROM users;"
因此达到无帐号密码,亦可登录站点。所以SQL注入攻击被俗称为黑客的填空游戏。
7.gcc编译器会对如下哪些语句做原子操作处理:a &=1; a = a & 1; a++;
8.TCP三次握手。SYN;ACK-SYN;ACK;
9.子函数参数和返回值都是是子类类型,调用此函数到结束的过程调用了父类和子类的构造析构函数几次?
class A
{
public:
A()
{
cout << "Constructor A" << endl;
}
~A()
{
cout << "Destructor A" << endl;
}
};
class B : public A
{
public:
B()
{
cout << "Constructor B" << endl;
}
~B()
{
cout << "Destructor B" << endl;
}
};
B Get(B b)
{
return b;
}
int main()
{
B b;
B c = Get(b);
return 0;
}
运行后,输出如下:
Constructor A // b
Constructor B
Destructor B // Get中b
Destructor A
Destructor B // c
Destructor A
Destructor B // b
Destructor A
10.找出一段c代码程序的漏洞。
11.char * GetX()
{
char *p = "hello";
return p;
}
void main()
{
char *str = NULL;
str = GetX();
strcpy(str,"abc");
cout << str << endl;
}
运行之后输出什么? 答案是hello。 堆上面的常数不可以直接修改。strcpy无效。