自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 finalize()方法作用

当对象被判定为不可达时,对象并不会立刻被回收。步骤如下:1.进行可达性分析发现对象不可达(没有GC Roots引用链相连)2.把对象进行第一次标记,随后进行筛选,判断此对象是否有必要执行finalize()方法2.1没有必要执行:该对象没有重写finalize()方法 或者 finalize()方法已经被虚拟机调用过了,该对象立刻被回收2.2有必要执行:把该对象放进F-Queue队列中,稍后由一条虚拟机自动建立的低优先级的Finalizer线程去执行finalize()方法

2021-10-12 20:25:48 254

原创 HTTP/HTTPS

1.URL<协议>://<主机>:<端口>/<路径>2.HTTP特点:HTTP协议本身是无连接的,使用面向连接的tTCP作为运输层协议HTTP协议是无状态的,同一个用户第二次访问相同资源服务器并不能记录用户信息TCP三次握手完成前两次后,就会把HTTP请求报文作为第三次握手的数据发送给服务器2.HTTP报文结构(1)请求报文请求行:方法+url+http版本号+换行符首部行:首部字段:值空白行实体主体

2021-10-01 22:25:03 609

原创 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 143

原创 可靠传输协议解析

本文发送的数据以TCP的数据单元为例——TCP报文段1.停止等待协议:每发送一个TCP报文段都会等待确认,收到确认再发送下一个报文段。发送完报文段会启动一个超时计时器,超过了一个RTT就会重传该报文段。发送的报文段和确认的报文段都必须进行编号。情况1:确认丢失发送方发送了报文段,接收方发送确认报文段,确认报文段丢失。发送方超时重传,接收方丢弃重复的报文段,重传确认报文。情况2:确认迟到发送方发送了报文段,接收方发送确认报文段,确认报文段迟到。发送方超时重

2021-10-01 11:11:11 163

原创 深拷贝和浅拷贝

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 52

原创 访问权限控制符

1.修饰类的访问权限控制符1.1 publicpublic修饰的类可以在本类中的main方法中new对象可以在同包的其他类中new对象可以在其他包的类中new对象可以被同包的其他类继承可以被其他包的类继承1.2 defaultdefault修饰的类可以在本类的main方法中new出对象可以在同包的其他类中new对象不能在其他包的类中new对象可以被同包的其他类继承可以被其他包的类继承2.修饰方法和属性的访问权限控制符....

2021-09-12 10:04:38 584

原创 ThreadPool学习笔记

1.为什么用线程池:1.cpu数量有限,只能并发执行确定个数的线程。2.使用线程池可以复用线程,可以减少线程创建和销毁造成的资源浪费。3.方便管理已经创建的线程。2.线程池的参数:public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime,

2021-08-04 13:04:05 107

原创 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 125

原创 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 112

原创 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 109

原创 CAS学习笔记

1.cas是compareAndSwap:比较并交换Unsafe类中有很多native方法使用到了此思想实现,比如public final native boolean compareAndSwapInt(Object var1, long var2, int var4,

2021-07-05 11:38:33 68

原创 volatile

1.JMMJMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、 CPU 指令优化等。 JMM 体现在以下几个方面 原子性 - 保证指令不会受到线程上下文切换的影响 可见性 - 保证指令不会受 cpu 缓存的影响 有序性 - 保证指令不会受 cpu 指令并行优化的影响 2.可见性的问题:如下代码含义:t1线程获取成员变量run的值,如果为真,则一直执行,直到run为false,停止。...

2021-06-06 16:57:46 61

原创 ReentrantLock基本用法

1.相对于synchronized具备的特点:1)可中断 2)可以设置超时时间 3)可以设置为公平锁 4)支持多个条件变量 2.

2021-06-06 10:46:26 559

原创 并发的常用方法

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 576

原创 synchronize底层原理

1.对象内存布局2.markword内容3.锁状态图4.轻量级锁如果只有当前线程给对象加锁,则使用轻量级锁。(ps:没有其他线程和当前线程竞争,竞争就是两个线程同时给一个对象加锁)加锁过程:①对象头中是无锁状态,所以存放hashcode、分代年龄等信息当前线程的虚拟机栈中创建一个Lock Record(锁记录),存放着Lock record的地址和对象的引用用cas将lock record地址和对象头中的信息交换cas替换成功则加轻量级锁..

2021-06-03 09:30:54 664

原创 为什么使用B+树作为mysql索引

为什么MySQL数据库索引选择使用B+树?在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择使用B+树!学过数据结构的一般对最基础的树都有所认识,因此我们就从与我们主题更为相近的二叉查找树开始。一、二叉查找树(1)二叉树简介:二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质:1、任意节点左子树不为空,则左子树的值均小

2021-05-29 10:10:25 72

原创 在浏览器输入url后会发生什么

当我们在浏览器中输入一个URL后,发生了什么?https://www.yuque.com/iwantoffer/notebook/wsd0ud

2021-05-29 09:51:54 52

原创 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 71

原创 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 153

原创 redis应用问题解决

1.缓存穿透:访问不存在的数据缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。 具体解决方案看https://blog.csdn.net/fanrenxiang/article/details/805425802.缓存击穿:热点数据过期缓存击穿:key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些.

2021-05-19 10:15:40 113

原创 redis学习笔记2

1.RDB1.1概念:在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里1.2流程:当满足条件时,redis单独会fork(创建)一个新的线程(在bgsave机制下),会先将内存中的数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次已经持久化好了的文件,整个过程中,主进程是不进行任何IO操作的,确保了极高的性能,此时的主进程还可以进行读写操作。fork的作用是复制一个与当前进程一样的进程,新进程

2021-05-18 17:26:40 77

原创 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 75

原创 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 329

转载 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 13916

原创 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 150

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除