主要记录自己遗漏或者遗忘的知识点,更新ing。
数据库存储过程简介
SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。
生成可执行文件
假设C源文件为file.c,且在/tmp目录下,则在命令行下依次执行:
cd /tmp
gcc -o file file.c
多线程访问hashmap遇到的问题
并发环境下的rehash过程可能会带来循环链表,导致死循环致使线程挂掉。
因此并发环境下,建议使用Java.util.concurrent包中的ConcurrentHashMap以保证线程安全。
至于HashTable,它并未使用分段锁,而是锁住整个数组,高并发环境下效率非常的低,会导致大量线程等待。
同样的,Synchronized关键字、Lock性能都不如分段锁实现的ConcurrentHashMap。
FLOOD攻击
1.SYN FLOOD攻击
SYN-FLOOD是一种常见的DDos攻击,拒绝服务攻击。通过网络服务所在的端口发送大量伪造原地址的攻击报文,发送到服务端,造成服务端上的半开连接队列被占满,从而阻止其他用户进行访问。
它的数据报特征是大量syn包,并且缺少最后一步的ACK回复。
原理:攻击者首先伪造地址,对服务器发起syn请求,服务器回应syn+ACK,而真实的IP会认为我没有发送请求,不做回应,而服务端没有收到回应,服务器就不知道是否发送成功,默认情况下重试5次 syn_retries,这样的话,对于服务器内存和带宽有很大的消耗。
2.解决SYN FLOOD方法
(1).无效连接监控
不停监视半开连接和不活动连接,当半开连接数和不活动连接数到达一定值时候,就释放系统资源。
伤敌1000,自损8000
(2).延缓TCB方法
SYN FLOOD的关键是利用了,syn数据报一到,系统就分配TCB资源。
那么我们有两种方法资源问题
Syn cache
这种技术在收到Syn时不急着分配TCB,而是先回应一个ACK报文,并在一个专用的HASH表中保存这种连接,直到收到正确的ACK,才分配TCB。
Syn Cookie
用一种特殊的算法生成sequence number,算法考虑到对方的信息和己方信息,收到对方的ACK报文后,验证之后才决定是否生成TCB
TCP和UDP对应的各种应用层协议和应用如下图示:
CMS收集器
CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。它而非常符合在注重用户体验的应用上使用。
从名字中的Mark Sweep这两个词可以看出,CMS收集器是一种 “标记-清除”算法实现的。
主要优点:并发收集、低停顿。但是它有下面三个明显的缺点:
- 对CPU资源敏感;
- 无法处理浮动垃圾;
- 它使用的回收算法-“标记-清除”算法会导致收集结束时会有大量空间碎片产生。
G1收集器
G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征.
G1收集器在后台维护了一个优先列表,每次根据允许的收集时间,优先选择回收价值最大的Region(这也就是它的名字Garbage-First的由来)。这种使用Region划分内存空间以及有优先级的区域回收方式,保证了GF收集器在有限时间内可以尽可能高的收集效率(把内存化整为零)。
被视为JDK1.7中HotSpot虚拟机的一个重要进化特征。它具备一下特点:
- 并行与并发
- 分代收集
- 空间整合
- 可预测的停顿
DNS解析完整流程
第一步:本地客户机提出域名解析请求,查找本地HOST文件后将该请求发送给本地的域名服务器。
第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
第三步:如果本地DNS缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
第五步:重复第四步,直到找到正确的纪录。
第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
CAS
CAS 全称是 compare and swap,是一种用于在多线程环境下实现同步功能的机制。CAS 操作包含三个操作数 -- 内存位置、预期数值和新值。CAS 的实现逻辑是将内存位置处的数值与预期数值想比较,若相等,则将内存位置处的值替换为新值。若不相等,则不做任何操作。在 Java 中,Java 并没有直接实现 CAS,CAS 相关的实现是通过 C++ 内联汇编的形式实现的。Java 代码需通过 JNI 才能调用。
CAS核心代码
if (A==V)
{
V = B
return B;
}
else
return V;
网友评论