招银提前批(笔试)
1. DoS攻击,即攻击者在目标主机上建立大量半开放或者完全开放的TCP连接,是连接泛洪
攻击流程:要理解dos攻击,首先要理解TCP连接的三次握手过程。
第一次握手:建立连接时,客户端发送SYN包((SYN=i)到服务器,并进入SYN SEND状态,等待服务器确认;
第二次握手:服务器收到SYN包,必须确认客户的SYN (ACK=i+1 ),同时自己也发送一个SYN包((SYN=j)}即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=j+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手,客户端与服务器开始传送数据。
一些重要的概念:
半连接:收到SYN包而还未收到ACK包时的连接状态称为半连接,即尚未完全完成三次握手的TCP连接。
半连接队列:在三次握手协议中,服务器维护一个半连接队列,该队列为每个客户端的SYN包(SYN=i )开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于SYN_ RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
Backlog参数:表示半连接队列的最大容纳数目。
SYN-ACK重传次数:服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息、从半连接队列中删除。注意,每次重传等待的时间不一定相同。
半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时也称半连接存活时间为Timeout时间、SYN_RECV存活时间。[1] 上面三个参数对系统的TCP连接状况有很大影响。
**SYN洪水攻击属于DoS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。**SYN洪水攻击还可以通过发大量ACK包进行DoS攻击。
2. 传统的软件工程把软件声明周期定义为6个阶段,最先的阶段是
软件的生命周期各个阶段分别是:1、问题定义;2、可行性研究;3、需求分析;4、总体设计(概要设计);5、详细设计;6、编码与单元测试;7、综合测试;8、维护
3. 设计模式
4. 【排序】
快排:
选择排序:每次选择最小/大的数
堆排序:
希尔排序:
5. 内部类
静态内部类(Static inner class)
成员内部类(Member inner class)
本地内部类(Local inner class)
匿名内部类(Anonymous inner class)
https://www.cnblogs.com/niuyourou/p/12013905.html
6. 一个进程从执行状态转换到阻塞状态:发生了I/O请求或者等待某事件的发生
运行态:进程占用CPU,并在CPU上运行;
就绪态:进程已经具备运行条件,但是CPU还没有分配过来;阻塞态:进程因等待某件事发生而暂时不能运行; 进程在一生中,都处于上述3中状态之一。
运行—》就绪: 时间片用完。
就绪—》运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
运行—》阻塞:发生了I/O请求或等待某件事的发生
阻塞—》就绪:进程所等待的事件发生,就进入就绪队列P操作是阻塞作用
V操作是唤醒作用
进程:进程是程序运行的最小单位。
进程的几种状态**:就绪状态,运行状态,阻塞状态。**
运行态:进程占用CPU,并在CPU上运行;
就绪态:进程已经具备运行条件,但是CPU还没有分配过来;
阻塞态:进程因等待某件事发生而暂时不能运行;当然理论上上述三种状态之间转换分为六种情况;
运行——>就绪:1,主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的;2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态。
就绪——>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
运行——>阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求
阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列
以下两种状态是不可能发生的:
阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取
就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态。
缓存淘汰算法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TZHgAMPu-1622119525780)(https://www.pianshen.com/images/62/4290e88388c8b4134f4f6966cfed0db6.png)]
import java.util.HashMap;
import java.util.LinkedList;
/**
*
*/
public class LRUCache {
private int capacity;
private HashMap<Integer,Integer> map;
private LinkedList<Integer> list;
public LRUCache(int capacity){
this.capacity = capacity;
map = new HashMap<>();
list = new LinkedList<>();
}
public int get(int key){
if (map.containsKey(key)){
list.remove(key);
list.addLast(key);
return map.get(key);
}
return -1;
}
public void put(int key,int value){
//如果包含这个key
if(map.containsKey(key)){
list.remove(key);
list.addLast(key);
map.put(key,value);
return;
}
//不包含这个key
if (list.size() == capacity){
//移除
Integer integer = list.removeFirst();
map.remove(integer);
list.addLast