摘要:如果TCP采用两次握手: A向B建立连接请求,如果TCP采用两次握手,即只需要B确认了就能成功建立连接。 那么当出现这样的情况:A的第一个连接请求长时间滞留,直到A再次与B成功连接交换完数据并释放后(整整一个过程),B突然收到了一个在互联网中滞留的请求,这样B就会误认为是A的新连接请求,在那边干等A
阅读全文
摘要:RT 参考:https://www.cnblogs.com/wentaos/p/7407346.html
阅读全文
摘要:“cli和ser建立连接后,cli挂掉,ser知道吗?” 方法1:应用层自己实现的心跳包TCP socket心跳机制中,心跳包可以由服务器发送给客户端,也可以由客户端发送给服务器,不过比较起来,前者开销可能更大。因此一般是由客户端给服务器发送心跳包。比如这个示例:https://blog.csdn.
阅读全文
摘要:Redis中数据存储模式有2种:cache-only,persistence。如果我们想要Redis仅仅作为纯内存的缓存来用,那么可以使用cache-only模式。 对于persistence持久化存储,Redis提供了两种持久化方法::RDB以及AOF通过RDB或AOF,都可以将Redis内存中的
阅读全文
摘要:1、开放定址法: Hi=(H(key)+di)% m 其中H(key)为哈希函数,m 为表长,di称为增量序列。根据增量序列的取值方式不同,具体到下面三种散列方法: 线性探测再散列:di=1,2,3,…,m-1 二次探测再散列:di=1^2,-1^2,2^2,-2^2,…,k^2,-k^2 ( k<
阅读全文
摘要:任务一般可分为:CPU密集型、IO密集型、混合型,对于不同类型的任务需要分配不同大小的线程池。 CPU密集型任务(计算密集型的程序)尽量使用较小的线程池,一般为CPU核心数+1。 因为CPU密集型任务使得CPU使用率很高,若开过多的线程数,只能增加上下文切换的次数,因此会带来额外的开销。(即使当计算
阅读全文
摘要:线程池的源码阅读比较简单,基本都是判断,当一个任务提交至线程池之后, 1. 线程池首先当前运行的线程数量是否少于corePoolSize。如果是,则创建一个新的工作线程来执行任务。如果都在执行任务,则进入2. 2. 判断BlockingQueue(阻塞队列)是否已经满了,如果还没有满,则将线程放入B
阅读全文
摘要:因为非对称加密实现的多对一单向保密通信,公钥可以用来加密,但是不能用来解密。各方浏览器持有公钥后对自己的报文加密后发送给服务器,只有服务器能够用其私钥来解密多个密文。 数字签名的实现也利用了非对称加密。数字签名是用颁发机构的私钥对本证书的公钥,名称以及其他信息做hash散列加密而成的。这里出现“用私
阅读全文
摘要:ThreadLocal是用来维护本线程中的变量,不能解决共享变量的并发问题。ThreadLocal是各线程将值存入该线程的map中,以ThreadLocal自身作为key,需要用时获得的是该线程之前存入的值。如果存入的是共享变量,那取出的也是共享变量,并发问题还是存在的。 ThreadLocal的主
阅读全文
摘要:参考:https://www.cnblogs.com/smyhvae/p/4736162.html
阅读全文
摘要:由于受到基准数pivot的影响,快排不是稳定的排序算法(最快为nlogn,最差为n^2)。 有三种比较有效的优化方法: 1、使用插入排序:在子序列比较小的时候,插入排序是比较快的。可以设置一个阈值n,当大于n个元素,子序列继续递归,否则选用插入排序。 2、pivot选用中位数。 3、三路划分:如果待
阅读全文
摘要:如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。 新生代收集器:1、Serical收集器:采用复制算法,在它进行垃圾收集时,必须暂停其他所有的工作进程,直到收集结束( Stop The World )。2、ParNew收集器:其实就是Serical收集器的多线程版本,由于只有
阅读全文
摘要:涉及到的3个标志位: SYN:为1时表示发起新连接。 FIN:终止这一方向的连接,如client向server发送FIN,那么server将不会再接受请求,但是server还是能发送。 ACK:为1时表示确认序号有效。 2个重要的序号: seq:一方发送的随机生成的序列号。 ack:用于确认对方的序
阅读全文
摘要:主要是要求传入参数的面向对象,可以传入int数组,也可以传入double数组,甚至可以传入List对象。 模版方法模式 与 策略模式 1、模版方法模式 :相当于继承模式。 实现:一个抽象类,含有实现了具体排序算法的方法以及若干抽象操作方法。 不同参数对象继承该抽象类并实现具体的操作方法。 使用类没什
阅读全文
摘要:1、start() 使该线程开始执行,Java 虚拟机自动调用该线程的 run 方法。 通过调用Thread类的 start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的
阅读全文
摘要:(很早就接触了动态代理,出于不知道这种模式的实用意义到底在哪里,所以每次简单了解完代理的过程不久也忘了。但是知道了mybatis就是利用动态代理来生成mapper实例,借此再总结一次) JDK动态代理只能针对接口(所以声明Mapper接口),如果要针对普通类则可以考虑CGLib的实现。 平时使用my
阅读全文
摘要:1、if 通常用于WHERE语句中,通过判断参数值来决定是否使用某个查询条件 2、choose(when,otherwise) 按顺序判断其内部when标签中的test条件是否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行otherwise
阅读全文
摘要:责任链模式:(servlet中的Filter,Mybatis中的Plugin)第一个节点负责了对请求者的应答,这一结构在某种情景中可能成为缺陷。 观察者模式:说白了就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。触发链中传递的对象可以自由变化,只要上下级节点
阅读全文
摘要:java使用final方法原因有两个, 一、锁定方法。防止任何继承类修改、覆盖 二、效率。在java早期实现中,如果将一个方法指明为final,就是同意编译器将针对该方法的调用都转化为内嵌调用。 意思就是:如果是内嵌调用,虚拟机不再执行正常的方法调用(参数压栈,跳转到方法处执行,再调回,处理栈参数,
阅读全文
摘要:客户端发起的 HTTP 请求被 DispatcherServlet 捕获 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller DispatcherServlet将请求提交到Controller Controller调用业务逻辑处理
阅读全文
摘要:如果给表定义了主键,那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构,也就是「平衡树」结构,换句话说,就是整个表就变成了一个索引,这就是所谓的「聚集索引」。 这就是为什么一个表只能有一个主键, 一个表只能有一个「聚集索引」,因为主键的作用就是把「表」的数据格式转换成「索引(平衡树)」的格式
阅读全文
摘要:1、ArrayList 与 LinkedList 都不保证线程安全。 Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向循环链表。 LinkedList 不支持高效的随机元素访问,而ArrayList 实现了RandomAccess 接口,所以有随机访问功能。快
阅读全文
摘要:对于基于线程存在的PCR以及栈区域,具备确定性。而堆以及方法区则不一样(重点讨论)。 对象已死? 1、引用计数算法(不使用):难以解决对象之间相互循环引用的问题。 2、可达性分析算法:设置GCRoots,搜索引用链,大概图论的可达概念。 都是根据引用? 1、强引用:new出来的,怎样都不会被回收。
阅读全文
摘要:先检查这个对象所代表的类是否已经被加载、解析和初始化过,如果没有在先执行相应的类加载过程。类加载通过后,可以确定所需的内存大小,并在Java堆中分配内存。分配内存的过程要考虑线程安全(指针碰撞,空闲列表)。接着虚拟机将分配到的内存空间都初始化为零值。接着设置对象头信息。最后执行<init>方法按照程
阅读全文
摘要:1、程序计数器(PCR) JVM就是通过读取程序计数器的值来决定下一条需要执行的字节码指令。 每个线程都需要有一个独立的PCR,各线程间互不影响。 唯一没有内存溢出的区域。 (为了多线程而生的,单线程情况下完全不需要他。程序计数器是每个线程独有的,并非线程共享的,是线程安全的。) 2、栈内存 以帧为
阅读全文
摘要:Mysql两种引擎:InnoDB,MyISAMMyISAM:强调性能,每次查询具有原子性,不支持事务,增删时锁定整个表格,如果执行大量的SELECT是更好的选择。InnoDB:提供事务支持,支持行级锁,删除插入的时候只需要锁定修改行,效率较高。 四种事务隔离级别:1、未提交读(Read Uncomm
阅读全文