多益网络2020笔试题
题型:选择题,填空题,问答题,一道编程题。
填空题
-
防火墙
1.1 定义:一种控制访问技术
1.2 特点:防火墙将内部的网络成为可信网络,外部网络成为不可行网络
1.3 防火墙技术:(1) 分组过滤路由器是一种分组过滤功能的路由器,他根据过滤规则对进出内部网络 的分组执行转发或者丢弃。 过滤规则基于分组的网络层或者运输层,例如:ip,端口,协议类型,常见的为端口。 过滤可以是无状态的,独立处理每一个分组,也可以是有状态的,跟踪每个连接和会话的通信状态,根据状态信息决 定是否转发分组。 (2) 应用网关,代理服务器,他在应用层中扮演报文中继的角色。客户端向服务端发送报文,通过应用网关,应用网关检查 该报文,查看请求是否合法,如果合法,应用网关以客户进程的身份将请求报文转发给原始服务器,如果不合法就丢弃。 一种网络需要一个应用网关。
-
正则表达式
-
运算符与(&)、非(~)、或(|)、异或(^)
3.1 &(1相同的为1) 8&9 0001 & 1001 = 0001,则结果为 1;
3.2 ~ (源码的补码的取反的取反) 5~ 的源码为 0000 0101 补码 1111 1010 源码取反(补码-1)1111 1001
取反 0000 0110 则结果为 6;3.3 | (有1为1 ,无1为0) 129|128 10000001 | 10000000 = 10000001 则结果为129;
3.4 ^ (同为0不同为1) 15^2 1111 ^ 0010 = 1101 则结果为 13;
-
Java语言不允许使用(指针)访问内存,更不允许(指针数组)访问内存
问答题
-
进程和线程区别
(1) 进程是资源分配的最小单位,线程是程序执行的最小单位。 (2) 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护 代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址 空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。 (3) 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以 通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。 (4) 多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另 外一个进程造成影响,因为进程有自己独立的地址空间。
-
翻译静态变量
-
web应用中可能出现的安全问题
(1) sql注入 拼接的SQL字符串改变了设计者原来的意图,执行了如泄露、改变数据等操作,甚至控制数据库 服务器, SQL Injection与Command Injection等攻击包括在内 (2) 重复提交 程序员在代码中没有对重复提交请求做限制,这样就会出现订单被多次下单,帖子被重复发布。恶 意攻击者可能利用此漏洞对网站进行批量灌水,致使网站瘫痪 (3) 登录信息提示 用户登录提示信息会给攻击者一些有用的信息,作为程序的开发人员应该做到对登录提示信息的模糊 化,以防攻击者利用登录得知用户是否存在 (4) 跨站脚本攻击(XSS或css) 跨站脚本(Cross-Site Scripting)是指远程WEB页面的html代码可以插入具有恶意目的的数据,当浏览器 下载该页面,嵌入其中的恶意脚本将被解释执行,从而对客户端用户造成伤害。简称CSS或XSS (5) 没有限制URL访问 系统已经对URL的访问做了限制,但这种限制却实际并没有生效。攻击者能够很容易的就伪造请求直接 访问未被授权的页面 (6) 越权访问 用户对系统的某个模块或功能没有权限,通过拼接URL或Cookie欺骗来访问该模块或功能 (7) 泄露配置信息 服务器返回的提示或错误信息中出现服务器版本信息泄露、程序出错泄露物理路径、程序查询出错返回 SQL语句、过于详细的用户验证返回信息。 (8) 不安全的加密存储 常见的问题是不安全的密钥生成和储存、不轮换密钥,和使用弱算法。使用弱的或者不带salt 的哈希算法 来保护密码也很普遍。外部攻击者因访问的局限性很难探测这种漏洞。他们通常必须首先破解其他东西以 获得需要的访问。 (9) 传输层保护不足 在身份验证过程中没有使用SSL / TLS,因此暴露传输数据和会话ID,被攻击者截听,或使用过期或者配置 不正确的证书。
-
异常及其异常处理方式
异常:
非受查异常
(1) Error:系统内部运行错误,或者资源耗尽错误。 (2)派生于 RuntimeException:数组越界,空指针,类型转换错误。
受查异常
(1) 其他异常:不是Error和RuntimeException,例如:文件末尾读取数据,试图打开不存在的文件, 使用字符串查找文件指定的类,而类不存在。
异常处理的方式
(1) 捕获异常: 1. 使用 a. try/catch 语句块 b. try中检查异常,catch中捕获异常, c. 捕获多个异常 2. 再次抛出异常与异常链 a. 在catch中使用throw抛出 b. 抛出子系统中的高级异常,而不丢失原始的异常信息 3. 特点 a. 父类没有声明受查异常的时候,子类必须使用捕获异常 b. 使用场景:知道处理方法的异常 c. 捕获多个异常必须是范围小的在范围大的前面 4. finally a. 不管是不是异常,都会被执行的子句 b. return 比try后执行但是一定会执行 (2) 抛出异常: throw: 1. 如何抛出异常 a. 找到合适的异常类或者创建异常类 b. 实例化该类 c. 抛出该类 2. 创建异常类 a. 继承相关的异常类 b. 定义两个构造函数,一个默认一个详细描述信息的 (3) 声明异常: throws: 1. 声明异常的4种情况: a. 调用一个抛出受查异常的方法 b. 程序运行中发现错误,并且利用throw语句抛出一个受查异常 c. 程序出现错误, d. Java虚拟机和运行时库出现的内部错误 2. 如何使用 a. 方法首部声明 3. 特点: a. 子类的受查异常必须比父类的受查异常范围小 b. 没有throws说明符的方法将不能抛出任何受查异常
-
sql 优先输出字段,其余的照常输出(忘记了字段是num,主要是一个范围,还是varchar。暂时)
按varchar处理 select * from table order by case when 字段= “条件” then 1 else 0 end ; select * from table where 字段=条件 union select * from table select * from table where 字段=条件 union all select * from table not in (条件 )
编程题
输入一个值,表示人数,可以相邻之间交换位置,问交换几次可以将左边的交换到右边,右边的交换到左边。
感觉题意理解的不是很好,期待有大佬来解决一下。