![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础知识和Java
TODO
Be An Author
这个作者很懒,什么都没留下…
展开
-
Java堆外内存
1.为啥需要堆外内存?1.在Java中NIO数据传输的时候使用了堆外内存,为啥要使用呢?堆内内存咋了嘛?一个很大的原因,可能是堆内内存不够会产生GC,导致一定程度的传输速率下降,因此出现其他性能问题。2.但是有个疑问,那数据传输使用堆外内存,不是堆内内存-->堆外内存-->内核socket缓冲区(网卡省略),那堆内拷贝到堆外不是也有可能发生GC吗?这里涉及到safe point, GC只会发生在代码进入到safe point的时候,而堆内拷贝到堆外不可能进入到safe point,而直.原创 2021-02-12 17:46:32 · 271 阅读 · 0 评论 -
ConcurrentHashMap1.8(老生常谈)
1.ConcurrentHashMap.put(key,val)对key进行hashcode^(hashcode>>16)取模,获得桶编号,如果桶内没元素,插入,插入失败重试,如果已经有元素,synchronized锁头,然后形成链表-> >8个节点变为红黑树。2.ConcurrentHashMap.get(key)没有任何的加锁操作,但是值得注意的是桶数组是volatile,Node类中的key和val也都是volatile,保证了可见性,所以仅仅查看的时候,是线程安全原创 2020-10-23 18:06:56 · 880 阅读 · 0 评论 -
CountDownLatch+ReentreenLock+ArrayBolckingQueue
(1) AQS(AbstractQueuedSynchronizer)概念: 有三个元素1. volatile int state2. 双向队列3. CAS操作(2) CountDownLatch1.countDownLatch继承了AQS2.其构造方法传入参数,state=其参数3.当其他线程调用countDown()方法的时候,CAS(Unsafe.compareAndSetState)得将state-1,如果发现state=0的时候,会唤醒在双向队列中的线程Lock..原创 2020-10-23 19:19:33 · 175 阅读 · 0 评论 -
原码-反码-补码(简单介绍)
(0) 先给结论:在计算机系统中,数值一律用补码来表示(存储.主要原因==>1. 使用补码,可以将符号位和其它位统一处理;2. 同时,减法也可按加法来处理.3. 另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃.(1) 原码是什么样子由于最高位是符号位:+7 = 0000 0111B-7 = 1000 0111B(2) 反码是什么样子+7 = 0000 0111B (和原码表示一样)-7 = 1111 1000...原创 2020-10-24 14:18:40 · 104 阅读 · 0 评论 -
Java关键字(部分)原理解析
tt原创 2020-10-25 15:31:55 · 334 阅读 · 0 评论 -
粘包和半包(个人总结)
1.首先盗个图,阐述下半包粘包问题的产生。首先知道TCP连接层每次传输的数据有个最大限制MTU(Maximum Transmission Unit),一般是1500比特。然而tcp为提高性能,发送端会将需要发送的数据发送到缓冲区,等待缓冲区满了之后,再将缓冲中的数据发送到接收方。同理,接收方也有缓冲区这样的机制,来接收数据。发生TCP粘包、拆包主要是由于下面一些原因(主要是缓冲区和MTU导致): 应用程序写入的数据大于套接字缓冲区大小,这将会发生拆包。 应用程序写入数据小于套接字原创 2020-10-25 16:35:17 · 955 阅读 · 0 评论 -
Java线程状态,线程池状态
1.Java线程状态可以分为以下几种状态:1.新建状态: 刚创建Thread对象。2.就绪状态: 调用了Thread.start()方法,一切资源已经获取,只等待获取CPU执行。3.运行状态: 获取CPU执行。4.死亡状态: 线程已经执行结束生命周期。5.阻塞状态: 还没获取足够的资源。阻塞的情况分三种:(01) 等待阻塞 -- 通过调用线程的wait()方法,让线程等待某工作的完成。 (02) 同步阻塞 -- 线程在获取synchroni...原创 2020-10-25 19:30:39 · 239 阅读 · 0 评论 -
HTTP版本演进
1.http 0.9 可以忽略,就只是get请求方法。2.http 1.0 报文分为了header和body部分,支持了get post等请求方法类型,但是默认采用短连接,长连接只是一个拓展项。3.http 1.1 现在(2020)普遍采用的一个方式, 报文header部分新增字段keep-alive默认true,默认采用长连接。==〉 解释下长连接,长连接意味着多个http报文可以都使用同一个tcp连接进行数据传输。可以减少tcp连接创建关闭的开销。==〉 另外同一个域名,tcp连接数是有原创 2020-11-30 12:25:58 · 119 阅读 · 0 评论 -
类加载过程(自我总结,会不详细)
1.加载2.验证3.准备4.解析5.初始化原创 2020-10-26 19:41:43 · 114 阅读 · 0 评论 -
IO多路复用(个人记录)
(1) Linux系统中断1.软中断是执行中断指令产生的,而硬中断是由外设引发的。2.硬中断的中断号是由中断控制器提供的,软中断的中断号由指令直接指出,无需使用中断控制器。3.硬中断是可屏蔽的,软中断不可屏蔽。硬中断处理程序要确保它能快速地完成任务,这样程序执行时才不会等待较长时间。硬中断:外设QAQ举个例子,网卡缓存接受到报文数据,DMA将数据直接拷贝到内核页缓存上,这是会触发中断程序。 (后续会跟IO多路复用有关)软中断:指的是,当CPU执行代码指令的时候,发生...原创 2020-11-16 14:22:58 · 76 阅读 · 0 评论 -
TCP,UDP,IP报文首部字段整理以及TCP相关常见问题
(1)TCP报文//可以看到TCP报文头部是固定的,数据部分就不知道了。1.两个端口号总和4个字节,2.序列号4个字节3.确认号4个字节4.(4位首部长度+6位保留+6位报文类型) 2个字节+窗口大小两个字节 ==> 4个字节5. 检验和2个字节+紧急指针2个字节 ==> 四个字节6.选项部分,最多40字节==> TCP首部大小范围 (20字节到60字节)(2)UDP报文1.原端口+目的端口=4个字节2.长度+校验值...原创 2020-11-16 15:29:39 · 861 阅读 · 0 评论 -
理解String,StringBuilder,StringBuffer的区别
1.String1) 成员变量有final类型的char数组,代表其是不可变的。2) 线程安全与否就不用讨论了,都不可修改了。3) 一般b=b+b; 其实b不是被修改了,而是生成了新的String对象。/** The value is used for character storage. */private final char value[];2.StringBuilder1) 继承的 AbstractStringBuilder类中,有成员变量char[]数组,可以对..原创 2020-10-30 12:41:07 · 121 阅读 · 0 评论