本文主要是介绍多益 2020 校招笔试 ( 信息安全工程师 ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、单项选择
1.类B是类A的共有派生类,类A和类B中都定义了虚函数 func() , p 是一个指向类 A 对象的指针,则 p->A::func()将( A )?
A 调用 A 中的函数 func()
B 调用 B 中的函数 func()
C 根据 p 指向的对象类型确定是调用 A ,还是 B 的 func()
D 不但调用 A 中的函数 ,也调用 B 中的函数
原题截图:
参考代码:
#include "stdafx.h"
#include<string.h>
#include<iostream>
using namespace std;class A {
public:virtual void fun();
}a;
void A::fun() {cout << "A" << endl;
}class B :public A {void fun();
}b;
void B::fun() {cout << "B" << endl;
}int main()
{A *p_a;p_a = &a;p_a->fun();p_a = &b;p_a->fun();//B *p_b;//p_b = &b;//p_b->fun(); // 函数"B::fun"不可访问getchar();return 0;
}
继承和派生:https://blog.csdn.net/one_super_dreamer/article/details/81611118
虚函数:https://www.cnblogs.com/weiyouqing/p/7544988.html
2.分析下面代码:最后输出的字符串是 :ACC
#include "stdafx.h"
#include<string.h>
#include<iostream>
using namespace std;class ObjectA {
public:ObjectA() {}virtual ~ObjectA() {}void Print() {cout << "A" << endl;}
};class ObjectB {
public:ObjectB() {}virtual ~ObjectB() {}virtual void Print() {cout << "B" << endl;}
};class ObjectC :public ObjectA, public ObjectB {
public:ObjectC() {}~ObjectC() {}void Print() {cout << "C" << endl;}
};int main() {// A中没有定义Print()为虚函数,无法被派生ObjectA* Obj1 = new ObjectC;Obj1->Print();delete Obj1;// B中Print()为虚函数,可以被C派生ObjectB* Obj2 = new ObjectC;Obj2->Print();delete Obj2;// C中调用自己的Print()函数ObjectC* Obj3 = new ObjectC;Obj3->Print();delete Obj3;getchar();return 0;
}
原题截图:
3.运行以下代码:输入“文件名 12 345 678”,程序的执行结果为( A )?
int main(int argc,char** argv){int n=0,i;for(i=1;i<argc;i++){n = n*10 + *argv[i] - '0'; //*argv[i]为argv[i]的第一个字符。int类型和字符类型一起运算结果为int类型。*argv[i] - '0' 结果仍然是*argv[i]}printf("%d\n",n);getchar();return 0;
}
/*
第一次循环: n=0*10+'1'-'0'=1
第二次循环: n=1*10+'3'-'0'=13
第三次循环: n=12*10+'6'-'0'=136
*/
A 136
B 12345
C 12345678
D 12
原题截图:
argc和argv:https://www.cnblogs.com/quan1/p/6698107.html
注意这里必须在命令行输入:Test.exe 12 345 678,而不是双击运行它。另外argc=参数个数+1,其中argv[0]=程序名:
运行结果:
4.下列哪个C++关键字用来表示变量函数的定义在别的函数中( B )?
A static
B extern~
C inline
D default
static:https://blog.csdn.net/t595180928/article/details/80448249
extern:https://blog.csdn.net/qq_38880380/article/details/81474580
inline:https://www.runoob.com/w3cnote/cpp-inline-usage.html
default:https://www.jianshu.com/p/ef66ba66916c
static 用来定义全局变量,该变量不会因函数的结束而消亡。
extern 用来引入相同项目下不同文件中的变量。
inline 用来减少某个频繁被调用的函数对内存栈的过分消耗。
default 用来初始化默认构造函数、析构函数、拷贝函数、拷贝赋值函数。
原题截图:
5.下列描述中,表达错误的是( B )?
A 共有继承时基类的 public 成员在派生类中仍然是 public 的
B 共有继承时基类的 private 成员在派生类中仍然是 private 的~
C 共有继承时基类的 protected 成员在派生类中仍然是 protected 的
D 私有继承时基类的 public 成员在派生类中是 private 的
B:公有继承中基类的 private 成员不能被派生类访问
原题截图:
6.在一个单链表中,若 q 所指节点是 p 所指节点的前驱节点,在p、q 中插入一 s 所指的节点,则执行什么( D )?
A s->link=p->link ; p->link=s
B p->link=s ; s->link=q
C p->link=s->link ; s->link=p
D q->link=s ; s->link=p
在单链表中插入一个元素需要执行以下步骤:首先将待插入节点的前驱节点的指针域指向待插入节点,然后将待插入节点的指针域指向待插入节点的前驱节点原先的后继节点
原题截图:
7.如下代码:在 Windows NT 32 系统下,sizeof(A) , sizeof(B) , sizeof(C ) 分别为
class A{
};
/*空类被实例化时,编译器会隐含地为其添加一个字节sizeof(A)=1
*/class B{bool var1;int var2;bool var3;
};
/*bool占1字节,int占4字节。1+4=5(对齐)=8,8+1=9(对齐)=12sizeof(B)=12
*/class C{int var1;bool var2;bool var3;
};
/*bool占1字节,int占4字节。4+1=5(继续)+1=6(对齐)=8sizeof(C)=8【注意:不同字节大小的数据类型相邻时只对齐一次】
*/
class 大小:https://www.cnblogs.com/sz-leez/p/7119232.html
原题截图:
8.下面程序的输出结果:
#include<iostream>
using namespace std;void PrintSequence(int stopNum) {int num;num = 1;while (true) {if (num >= stopNum) { throw num; } // throw 后会跳出循环cout << num << endl;num++;}
}int main() {try {PrintSequence(2);}catch (int exNum) { // catch 接收 ‘throw’ 的值cout << "exception:" << exNum << endl;}getchar();return 0;
}
}
结果:
原题截图:
9.在 linux 中,对 file.sh 文件执行 #chmod 645 file.sh ,该文件的权限是( D )?
A -rw-r–r--
B -rw-r–rx-
C -rw-r–rw-
D -rw-r–r-x
chomd 语法:https://www.runoob.com/linux/linux-comm-chmod.html
解析:
6 = 4 + 2 = r + w
4 = 4 = r
5 = 4 + 1 = r + x
原题截图:
10.有 100 万个在 [0,10000] 区间的随机数,现在需要对这些数进行排序,以下速度最快的是( A )?
A 快速排序
B 冒泡排序
C 插入排序
D 散列表
快速排序:选择一个基数,小于这个数的放在左边,大于这个数的放在右边,递归。时间复杂度 = O(NlogN)
冒泡排序:循环 N - 1 次,比较相邻的元素如果不满足顺序要求则两两交换。时间复杂度 = O(N2)
插入排序:找到开头的有序部分(无序则找到第一个),之后的每个数都插入到这个有序部分的合适位置。时间复杂度 = O(N2)
散列表:先构建散列表(类似字典),根据给定关键字的值(类似单词首字母)去定位散列表的位置,是一种空间换时间的算法。时间复杂度 = O(log₂N)
解析:散列表(哈希)是查找算法,而不是排序算法
原题截图:
11.未授权的实体得到了数据的访问权,这属于安全的( A )破坏
A 机密性
B 完整性
C 合法性
D 可用性
原题截图:
12.风险评估的基本过程( C )?
A 通过以入发生的信息安全事故,找到风险所在
B 风险评估就是对照安全检查单,查看相关的管理和技术实施是否到位
C 识别并评估重要的信息资产,识别各种可能的威胁和严重的弱点,最终确定风险
D 风险评估并没有规律可循,完全取决于评估者的经验所在
原题截图:
13.下列技术中,不能预防重放攻击的是( C )?
A 时间戳
B Nonce
C 明文填充
D 序号
时间戳:1970年1月1日0:00到现在的总描述。客户端和服务端分别生成时间戳,判断客户端与服务端是否在同时间段内。
Nonce:在加密领域中,一个只能被使用一次的随机数。Server 首先发送 nonce 到 Client,Client 将数据和 nonce 通过 hash 运算再提交到 Server 进行验证,所以即使窃取了前一次的 hash 值也无法冒充用户。
明文填充:一种加密方式。在明文长度不是算法要求的块长度的整数倍时使用。
序号:Server、Client 都创建一个会话管理类,成员为组号(当前会话编号)、序列号(当前组号下发送请求的编号),初始值为0。Client 向 Server 发送请求时将组号、序列号拼接在请求之前,保存组号、序列号,之后组号序列号++。Server 接收到请求,保存组号序列号,下次接收 Client 请求时,把请求中的组号序列号和保存的组号序列号比较,小于等于为重放攻击,大于则为正常。
原题截图:
14.以下哪个攻击可以提供拦截和修改 http 数据包的功能( D ) ?
A sqlmap
B metasploit
C hackbar
D burpsuit
sqlmap:SQL注入点扫描工具
metasploit:一个漏洞框架,类似于msf
hackbar:火狐浏览器插件,用来测试SQL注入、XSS
burpsuit:抓包工具
原题截图:
15.防火墙应具有强大的审计功能和自动日志分析功能是因为( A )?
A 可以更早发现潜在威胁并预防工技大发生
B 一句安全管理部门要求
C 内网审计系统的要求
D 日志是防火墙进行安全决策的参考
原题截图:
16.容灾的目的和实质是( B )?
A 信息系统的必要补充
B 保持信息系统的业务持续性
C 提升用户的安全预期
D 实现对系统数据的备份
原题截图:
17.某个机构的网络遭受多次入侵攻击,下面哪一种技术可以提前检测到这种行为( C )?
A 杀毒软件
B 包过滤路由器
C 蜜罐
D 服务器加固
原题截图:
18.对利用软件缺陷进行的网络攻击,最有效的防范法是( A )?
A 及时更新补丁程序
B 安装防毒软件并及时更新病毒库
C 安装防火墙
D 安装漏洞扫描软件
原题截图:
19.信息隐藏主要研究如何将机密信息秘密隐藏于另一公开信息中。以下关于利用多媒体数据来隐藏机密信息的陈述中,错误的是( B )?
A 多媒体信息本身有很大的冗余性
B 多媒体信息本身编码效率很高
C 人眼或人耳对某些信息有一定的遮蔽效应
D 信息嵌入到多媒体信息中不影响多媒体本身的传送和使用
原题截图:
20.修改以太网 mac 地址的命令为( B )?
A ping
B ifconfig
C arp
D traceroute
1.禁用网卡:
ifconfig 网卡 down
2.修改 mac
ifconfig 网卡 hw ether 新的mac
原题截图:
二、问答题
int a[] = {1,2,3} 【正确】
int b[3] = {1}; 【正确】(因为0不方便测试,所以这里改成了1)
char c[] = {0,1,2}; 【正确,但是 int 强行转换 char 会输出乱码】
char d[3] = “123”; 【错误】(数组长度超上限)
char e[3] = {""}; 【正确】 (为了方便这里用 “1” 代替了 “”)
char f[3] = {“01”}; 【正确】(这里 “01” 元素被当做 2 个 char 元素)
char g[3] = {‘0’,‘1’}; 【正确】
char h[3] = {“0”,“1”}; 【错误】(初始值设定太多)
char i[][3] = { “0”,“1” }; 【正确】(这里因为两个 i 变量相互冲突所以改成了 a)
char j[][3] = {{“0”},{“1”}}; 【正确】(这里因为两个 j 变量相互冲突所以改成了 a)
A*算法:https://blog.csdn.net/zgwangbo/article/details/52078338
(1)①曼哈顿距离:横向格子数+纵向格子数。②欧式距离:两点间的直线距离。
(2)估算距离 h < 实际距离 h’
信息安全三要素
保密性:保密信息只能让有权读到或更改的人读到和更改。
完整性:在存储或传输信息的过程中,原始的信息不能允许被随意更改或篡改。
可用性:信息合法拥有和使用者,在需要的时候都能得到信息。
信息系统
由计算机硬件、网络通信设备、计算机软件、信息资源、信息用户和规章制度组成的以处理信息流为目的的人机一体化系统。主要有五个基本功能,即对信息的输入、存储、处理、输出和控制。
iptables 介绍:https://blog.csdn.net/llxx1234/article/details/78758634
(1)添加白名单
① iptables -A INPUT -s 某IP地址 -p all -j ACCEPT
② service iptables save
③ service iptables restart
-A:尾部追加(append)【INPUT:处理来自外部的数据】
-s:指定地址(source)
-p:协议(protocol)【all:所有协议】
-j:执行目标(jump to target)【ACCEPT:允许访问】
(2)开放 80,445 端口
① iptabels -A INPUT -p tcp -m state --state NEW -m tcp --dport 80,445 -j ACCEPT
② service iptables save
③ service iptables restart
-m state:使用 state 模块【–state NEW:第一个数据包到达服务器时的状态字段为 NEW】
-m tcp:使用 tcp 模块【–dport:目的端口】
(3)只允许 192.168.0.0/26 访问 22 端口
① iptables -A INPUT -p tcp --dport 22 -j REJECT
② iptables -A INPUT -p tcp -s 192.168.0.0/26 --dport 22 -j ACCEPT
③ service iptables save
④ service iptables restart
REJECT:拒绝访问
(4)8080端口映射到 80 端口
① iptables -t nat -A PREROUTING -m tcp -p tcp --dport 8080 -j DNAT --to-destination 某IP地址:80
② service iptables save
③ service iptables restart
【注意:80 转发到 8080 = 8080 映射到 80】
-t:指定表名(table),默认为 filter【PREROUTING:处理刚到达本机并在路由转发前的数据包】
-d:目的地址
DNAT:修改数据包的目的地址
–to-destination:设置目的 ip
1.保障系统开发时的安全
(1)避免危险API和危险中间件版本
(2)采用面向对象的开发方法。使模块之间、子系统之间能实现隔离。
2.保障硬件的安全(硬件设备或机房辅助设备)
3.保障机房环境的安全(防火、防水、防潮、供电、温度等)
4.网络通信安全
(1)使用安全传输层协议(TCL)和安全超文本传输协议(HTTPS)
(2)使用防火墙
(3)对重要数据进行加密
(4)使用 VPN,并及时对账号进行回收和销毁
5.软件安全
(1)避免危险的操作系统版本和数据库管理器版本
(2)定期对系统进行安全测试
6.数据安全
(1)验证操作数据库的用户
(2)对数据库进行加密(避免危险的加密方法,如 md5、base64)
(1) 入侵检测技术的基本模型包括那三大部分?
通用入侵检测模型、层次化入侵检测模型、管理式入侵检测模型。
(2)入侵检测系统和防火墙,一般哪个在外部?这么分配有什么好处?
入侵检测在内部,防火墙在外部。好处:降低入侵检测的误报率(入侵检测比防火墙敏感)
三、编程题
1.将一个10进制数字转换为二进制,并统计这个二进制数里 “1” 出现的次数。
这篇关于多益 2020 校招笔试 ( 信息安全工程师 )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!