- 博客(25)
- 收藏
- 关注
原创 finalize()方法作用
当对象被判定为不可达时,对象并不会立刻被回收。步骤如下:1.进行可达性分析发现对象不可达(没有GC Roots引用链相连)2.把对象进行第一次标记,随后进行筛选,判断此对象是否有必要执行finalize()方法2.1没有必要执行:该对象没有重写finalize()方法 或者 finalize()方法已经被虚拟机调用过了,该对象立刻被回收2.2有必要执行:把该对象放进F-Queue队列中,稍后由一条虚拟机自动建立的低优先级的Finalizer线程去执行finalize()方法
2021-10-12 20:25:48
324
原创 HTTP/HTTPS
1.URL<协议>://<主机>:<端口>/<路径>2.HTTP特点:HTTP协议本身是无连接的,使用面向连接的tTCP作为运输层协议HTTP协议是无状态的,同一个用户第二次访问相同资源服务器并不能记录用户信息TCP三次握手完成前两次后,就会把HTTP请求报文作为第三次握手的数据发送给服务器2.HTTP报文结构(1)请求报文请求行:方法+url+http版本号+换行符首部行:首部字段:值空白行实体主体
2021-10-01 22:25:03
879
原创 TCP/UDP
0.运输协议数据单元TCP报文段,UDP用户数据报1.用户数据报协议UDP特点(1)UDP是无连接的(2)UDP使用最大努力交付,不保证可靠交付(3)UDP是面向报文的,发送方的UDP对应用层交下来的报文添加首部后就直接向下交付给IP层(4)UDP没有拥塞控制(5)UDP支持一对一、一对多、多对一、多对多(6)UDP的首部开销小,只有8个字节某些实时应用需要使用没有拥塞控制的UDP2.UDP首部格式(1)源端口(2)目的端口(3)长度:U..
2021-10-01 17:32:28
223
原创 可靠传输协议解析
本文发送的数据以TCP的数据单元为例——TCP报文段1.停止等待协议:每发送一个TCP报文段都会等待确认,收到确认再发送下一个报文段。发送完报文段会启动一个超时计时器,超过了一个RTT就会重传该报文段。发送的报文段和确认的报文段都必须进行编号。情况1:确认丢失发送方发送了报文段,接收方发送确认报文段,确认报文段丢失。发送方超时重传,接收方丢弃重复的报文段,重传确认报文。情况2:确认迟到发送方发送了报文段,接收方发送确认报文段,确认报文段迟到。发送方超时重
2021-10-01 11:11:11
227
原创 深拷贝和浅拷贝
1.浅拷贝public class Person01 implements Cloneable{ private int age; private String name; public Person01(){ } public Person01(int age, String name){ this.age = age; this.name = name; } public void setAge(int
2021-09-12 10:21:30
81
原创 访问权限控制符
1.修饰类的访问权限控制符1.1 publicpublic修饰的类可以在本类中的main方法中new对象可以在同包的其他类中new对象可以在其他包的类中new对象可以被同包的其他类继承可以被其他包的类继承1.2 defaultdefault修饰的类可以在本类的main方法中new出对象可以在同包的其他类中new对象不能在其他包的类中new对象可以被同包的其他类继承可以被其他包的类继承2.修饰方法和属性的访问权限控制符....
2021-09-12 10:04:38
672
原创 ThreadPool学习笔记
1.为什么用线程池:1.cpu数量有限,只能并发执行确定个数的线程。2.使用线程池可以复用线程,可以减少线程创建和销毁造成的资源浪费。3.方便管理已经创建的线程。2.线程池的参数:public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime,
2021-08-04 13:04:05
143
原创 MyISAM与InnoDB
区别:1. InnoDB支持事务,MyISAM不支持。对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;3. InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但..
2021-07-18 14:49:19
244
原创 ArrayList为什么是线程不安全的
1.ArrayList源码:ArrayList底层是数组的数据结构,将元素存储在elementData数组中public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{ /** * 列表元素集合数组 * 如果新建ArrayList对象时没有指..
2021-07-11 16:54:34
140
原创 ReentrantLock的AQS实现原理
1.继承图Lock接口负责给各种锁提供需要实现的方法模板Sync是ReentrantLock的内部类,继承自AQSAQS继承自AOS2.非公平锁的加锁流程构造方法 (ReentrantLock类中)public ReentrantLock() { sync = new NonfairSync(); }加锁方法 (ReentrantLock类中)public void lock() { sync.lock()..
2021-07-05 21:30:16
162
原创 CAS学习笔记
1.cas是compareAndSwap:比较并交换Unsafe类中有很多native方法使用到了此思想实现,比如public final native boolean compareAndSwapInt(Object var1, long var2, int var4,
2021-07-05 11:38:33
103
原创 volatile
1.JMMJMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、 CPU 指令优化等。 JMM 体现在以下几个方面 原子性 - 保证指令不会受到线程上下文切换的影响 可见性 - 保证指令不会受 cpu 缓存的影响 有序性 - 保证指令不会受 cpu 指令并行优化的影响 2.可见性的问题:如下代码含义:t1线程获取成员变量run的值,如果为真,则一直执行,直到run为false,停止。...
2021-06-06 16:57:46
98
原创 ReentrantLock基本用法
1.相对于synchronized具备的特点:1)可中断 2)可以设置超时时间 3)可以设置为公平锁 4)支持多个条件变量 2.
2021-06-06 10:46:26
665
原创 并发的常用方法
1.线程上下文切换(Thread Context Switch)1)线程的cpu时间片用完2)垃圾回收会让工作的线程全部暂停,启动垃圾回收线程回收垃圾3)有更高优先级的线程需要运行4)线程自己调用sleep、yield、wait、join、park、synchronized、lock等方法当Thread Context Switch发生时,操作系统保存当前线程的状态信息,并恢复另一个线程的状态java中对应的是程序计数器(Program Counter Register)记录下一条jvm指.
2021-06-04 16:55:41
699
原创 synchronize底层原理
1.对象内存布局2.markword内容3.锁状态图4.轻量级锁如果只有当前线程给对象加锁,则使用轻量级锁。(ps:没有其他线程和当前线程竞争,竞争就是两个线程同时给一个对象加锁)加锁过程:①对象头中是无锁状态,所以存放hashcode、分代年龄等信息当前线程的虚拟机栈中创建一个Lock Record(锁记录),存放着Lock record的地址和对象的引用用cas将lock record地址和对象头中的信息交换cas替换成功则加轻量级锁..
2021-06-03 09:30:54
752
原创 为什么使用B+树作为mysql索引
为什么MySQL数据库索引选择使用B+树?在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择使用B+树!学过数据结构的一般对最基础的树都有所认识,因此我们就从与我们主题更为相近的二叉查找树开始。一、二叉查找树(1)二叉树简介:二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质:1、任意节点左子树不为空,则左子树的值均小
2021-05-29 10:10:25
105
原创 在浏览器输入url后会发生什么
当我们在浏览器中输入一个URL后,发生了什么?https://www.yuque.com/iwantoffer/notebook/wsd0ud
2021-05-29 09:51:54
97
原创 hash索引和b+索引区别
https://blog.csdn.net/weixin_39905695/article/details/113644952?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242
2021-05-20 08:55:25
116
原创 mysql回表查询
create table xttblog( id int primary key, k int not null, name varchar(16), index (k))engine = InnoDB;INSERT INTO xttblog(id, k, name) VALUES(1, 2, 'xttblog'), (2, 1, '业余草'), (3, 3, '业余草公众号');假设,现在我们要查询出 id 为 2 的数据。那么执行 s..
2021-05-20 08:50:26
225
原创 redis应用问题解决
1.缓存穿透:访问不存在的数据缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。 具体解决方案看https://blog.csdn.net/fanrenxiang/article/details/805425802.缓存击穿:热点数据过期缓存击穿:key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些.
2021-05-19 10:15:40
191
原创 redis学习笔记2
1.RDB1.1概念:在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里1.2流程:当满足条件时,redis单独会fork(创建)一个新的线程(在bgsave机制下),会先将内存中的数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次已经持久化好了的文件,整个过程中,主进程是不进行任何IO操作的,确保了极高的性能,此时的主进程还可以进行读写操作。fork的作用是复制一个与当前进程一样的进程,新进程
2021-05-18 17:26:40
109
原创 redis学习笔记1
1.基本命令:select命令切换数据库:redis数据库默认16个,从0-15。 (select 0:切换到0号数据库)dbsize查看当前数据库的key的数量 (dbsize:返回当前数据库key的数量)flushdb清空当前库flushall清空所有库2.key操作:keys *查看当前库所有keyexists key判断某个key是否存在 (exists k1)type key 查看你的key是什么类型 (type k1)del key ...
2021-05-17 17:07:39
117
原创 redis实现手机验证码功能
流程图public class PhoneCode { //1.生成六位验证码 public static String getCode(){ Random random=new Random(); String code=""; for(int i=0;i<6;i++){ int rand=random.nextInt(10); code=code+rand; .
2021-05-17 14:57:31
375
转载 java位运算
1.<<按位左移不管正负,低位补0正数:r = 20 << 2 20的二进制补码:0001 0100 向左移动两位后:0101 0000 结果:r = 80负数:r = -20 << 2 -20 的二进制原码 :1001 0100 -20 的二进制反码:1110 1011 -20 的二进制补码 :1110 1100 左移两位后的补码:1011 0000 反码:1010 1111...
2021-05-15 07:57:51
13990
原创 HashMap源码笔记
1.HashMap类中的成员变量://默认初始容量16static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16//最大容量1左移30位static final int MAXIMUM_CAPACITY = 1 << 30;//默认扩容因子0.75static final float DEFAULT_LOAD_FACTOR = 0.75f;//当一个桶的链表节点>8时,且数组容量>64时,该
2021-04-30 20:49:01
197
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人