自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Semaphore源码解析

文章目录内部类及构造器:重要方法:获取许可:释放许可Semaphore简介:线程上的信号量机制。通过 acquire() 获取一个许可,没有便阻塞等待,release() 释放一个许可。原理:实现又是基于AQS的共享锁。并且支持公平和非公平其实就是初始化了一个AQS上的state,每次acquire就是去state上尝试减一,每次release就是去state上加一,内部类及构造器:维护了三个内部类。经典的aqs写法公平和非公平两种都有对应的实现构造器: //非公平 pub

2021-01-31 17:08:08 127

原创 CyclicBarrier源码

文章目录主要的成员变量和构造方法:重要方法:CyclicBarrier是一种同步工具,它允许一组线程在到达一个公共的屏障点时阻塞等待,直到最后一个线程到达屏障点,屏障才能开启,此时所有被阻塞线程才能被唤醒从而继续执行。首先要清楚的是CyclicBarrier主要是基于reentrantlock的条件等待主要的成员变量和构造方法: /** The lock for guarding barrier entry */ private final ReentrantLock lock = n

2021-01-31 14:34:05 134

原创 MySql性能分析——Explain

Explain表的读取顺序数据读取操作的操作类型哪些索引可以使用哪些索引被实际使用表之间的引用每张表有多少行被优化器查询id:id不同,如果是子查询,id序号会递增,id值越大,优先级越高,越先被执行id相同,执行的顺序是由上至下如果id既有相同也有不同,那么先执行id大的,id相同的依然由上至下依次执行select_typesimple: 简单的select查询primary: 查询中若包含任何复杂子部分,最外层就是该标记subquery:在select或where列表中

2021-01-27 11:25:59 108

原创 CountDownLatch源码解析

文章目录内部类awaitcountdowncountdownlatch是基于AQS的实现,在学习之前必须先懂AQS共享锁的原理。内部类countdownlatch里维护了一个内部类Sync继承了AQS,这和reentrantlock系列类似,可以看出AQS的使用一般都是重写两组方法tryAcquire/tryrelease 以及tryAcquireShared/tryreleaseshared这两组方法选一组实现就可以了 private static final class Sync ext

2021-01-27 11:24:12 94

原创 学习设计模式——创建型模式day02

文章目录建造者模式原型模式建造者模式定义:将一个复杂对象的构建和与它的表示分离,使得同样地构建过程可以创建不同的表示主要作用:在用户不知道对象建造过程和细节的情况下就可以直接创建复杂对象用户只需要给定出复杂对象的类型和内容,建造者模式按照顺序创建复杂对象建造者模式有很多变种,但是最常见的就是链式调用的样子。//抽象类public abstract class Builder { abstract Builder buildA(String msg); //憨包 abstract

2020-10-04 17:19:54 260

原创 学习设计模式——创建型模式day01

文章目录单例模式:

2020-10-04 11:57:19 99

原创 Redis——底层数据结构及其实现

文章目录字符串(SDS)链表字典跳跃表整数集合压缩列表字符串(SDS)结构定义:struct sdshdr{ //记录buf数组中已使用字节的数量 //等于 SDS 保存字符串的长度 int len; //记录 buf 数组中未使用字节的数量 int free; //字节数组,用于保存字符串 char buf[];}redis中采用和C语言中的字符串相同的存储方式,字符串末尾以一个空字符结尾,且并不算作len里面 去,这样做的

2020-09-12 09:35:28 124

原创 并发——wait/notify/join/park

API介绍obj.wait() 让进入 object 监视器的线程到 waitSet 等待obj.notify() 在 object 上正在 waitSet 等待的线程中挑一个唤醒obj.notifyAll() 让 object 上正在 waitSet 等待的线程全部唤醒

2020-08-29 11:40:44 184

原创 并发——synchronized-理解

文章目录安全问题的由来synchronize解决局部变量的线程安全问题线程安全的类:Monitorsynchronize的进阶原理轻量级锁锁膨胀自旋优化偏向锁安全问题的由来java中的语句可能对应多个字节码指令的执行。但是在线程的上下文切换的过程中,却不是原子地,所以我们需要考虑线程安全的问题看一段代码 public static void main(String[] args) throws InterruptedException { Thread t1 = new Thr

2020-08-24 13:51:07 182

原创 Redis数据同步—— RDB和AOF

文章目录RDBRDB的触发机制RDB的底层原理AOF底层原理:AOF的重写RDB首先明确,Redis的RDB文件是dump.rdb可以在配置文件中设置此文件RDB的触发机制1.save的规则满足的情境下2.执行了flushall3.退出redis恢复rdb文件,只需要把该文件放在我们redis的启动目录下就可以了。redis启动的时候会自动检查目录查看:127.0.0.1:6379> config get dir1) "dir"2) "/usr/local/bin"127

2020-08-17 21:18:23 751

原创 Redis——config详解

文章目录配置文件详解单位包含:网络通用配置:快照:主从复制:安全:限制clientsAOF的配置配置文件详解单位说明units(单位)对大小写不明感包含:网络bind 127.0.0.1 #绑定的ipprotected-mode yes #保护模式port 6379 #端口设置通用配置:daemonize yes #以守护进程的方式运行,默认是nopidfile /var/run/redis_6379.pid #如果以后台的方式运行,我们需要指定一个pid文件#日志# S

2020-08-15 13:35:19 416

原创 ReentrantLock 原理(源码轰炸)

文章目录无线程加锁时的加锁方法:有竞争时的线程加锁方法加入阻塞队列的方法释放锁(不公平):可重入原理:可打断原理:公平锁实现:条件变量实现(await)条件变量(sigal)构造器:使用的锁:有两种实现,公平锁和非公平锁abstract static class Sync extends AbstractQueuedSynchronizer {默认是非公平锁的实现 public ReentrantLock() { sync = new NonfairSync();

2020-08-09 21:13:21 334

原创 并发——volatile

保证可见性看一个现象: static boolean run = true; public static void main(String[] args) throws InterruptedException { Thread t = new Thread(()->{ while(run){ // .... }

2020-08-04 09:38:26 136 1

原创 并发——关于线程

文章目录线程的创建:线程的常用API线程的状态:线程的创建:常用的有三种方法:方法一:直接使用Tread,重写run方法// 创建线程对象 Thread t = new Thread(){ public void run() { // 要执行的任务 } }; // 启动线程 t.start();方法二:使用 Runnable 配合 ThreadThread 代表线程Runnable 可运行的任务(线程要执行的代码)这种方法将线程和

2020-07-25 22:05:53 83

原创 操作系统——基本介绍

文章目录操作系统的定义:操作系统的功能:向用户提供的服务:命令接口程序接口图形:操作系统的特征:操作系统的发展与分类操作系统的运行机制和体系结构操作系统的内核大内核和微内核中断和异常系统调用操作系统的定义:是一种系统软件为上层用户、应用程序提供简单易用的服务负责管理协调硬件、软件等计算机资源的工作层次结构:操作系统的功能:1.处理机管理2.存储器管理3.文件管理4.设备管理向用户提供的服务:命令接口分为两个:联机命令接口:CMD,一句一句执行脱机命令接口:多句执行程序接口

2020-07-02 10:09:04 394

原创 计算机网络——传输层(TCP三次握手和四次挥手)

文章目录TCP的三次握手TCP的四次挥手TCP的三次握手过程:在建立连接之前,双方都是closed状态。一开始服务器进程创建传输控制块(TCB,详见操作系统),然后服务器端处于监听状态Listen1.客户端第一次发送报文信息:SYN=1,ACK=0,seq=xSYN=1说明此时是建立连接阶段,如果连接建立好了SYN就被置位0ACK=0表示此时确认号是无效的客户端会进入syn_sent状态(同步已发送)SEQ=x表示初始序列号这个报文是不携带数据的,但是会占一个序列号,所以下一次的

2020-06-26 11:30:04 235

原创 计算机网络——应用层02

文章目录文件传送协议:1.FTP2.TFTP远程终端协议TELNET万维网WWW唯一的标志 URL严格遵守的协议HTTP统一的标记语言HTML文件传送协议:1.FTP这是一种使用TCP的文件传送协议,提供交互式访问基本工作原理:FTP主要功能是减少或消除在不同操作系统下处理文件的不兼容性FTP使用客户服务器模式,一个服务器进程可同时为多个客户进程提供服务,FTP的服务器进程主要由两部分组成:一个主进程,负责接收请求,若干个从属进程,负责处理单个请求,他们是并行的。主进程端口号(21)让客户端

2020-06-25 20:56:11 174

原创 Java虚拟机(jvm)——垃圾收集器与内存分配策略

文章目录判断对象的存活引用和对象死亡4 种引用宣告对象死亡回收方法区垃圾回收算法标记清除算法:标记复制算法:标记整理算法分代收集算法一些相关的概念:根节点枚举:垃圾收集器:Serial收集器:ParNew收集器Parallel ScavengeSerial OldParallel OldCMSG1收集器内存分配策略对象优先在Eden分配大对象直接分配到老年代长期存活的对象直接进入老年代动态对象年龄判定空间分配担保判断对象的存活两种算法引用计数法:它给对象添加一个引用计数器,每当有一个地方引用它时,计

2020-06-18 20:52:02 134

原创 java容器源码学习05(jdk1.8):hashset

文章目录构造函数添加方法删除方法遍历HashSet构造函数虽然有多个构造函数,但是每一个都是初始化一个HashMap对象默认的构造函数指定的初始化容量是16,负载因子是0.75. public HashSet() { map = new HashMap<>(); } public HashSet(Collection<? extends E> c) { map = new HashMap<>(Math.ma

2020-06-15 21:46:07 108

原创 (jvm)Java虚拟机——java虚拟机的内存管理

文章目录运行时数据区程序计数器虚拟机栈本地方法栈java堆方法区运行时常量池对象的创建运行时数据区先上一张图程序计数器线程私有当前所执行字节码的行号指示器此区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。如果线程执行的是java方法,这个计数器记录的是正在执行的虚拟字节码指令的地址。如果正在执行的是native方法,那么这个计数器的值为undefined。虚拟机栈Java方法执行的动态内存模型线程私有描述的是Java方法执行的内存模

2020-06-14 18:26:28 154

原创 java容器源码学习04(jdk1.8): hashtable

文章目录Hashtable主要的方法构造函数查找get(Object key)方法put方法remove(Object key)方法Hashtable 和HashMap的对比Hashtablepublic class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable {这个数据结构和 HashMap 一样,Hasht

2020-06-12 21:11:28 100

原创 (jvm学习)java虚拟机——字节码执行引擎

文章目录运行时栈桢结构1.局部变量表2.操作数栈3.动态链接4.返回地址方法的调用解析调用:分派调用:运行时栈桢结构栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机栈(Virtual Machine Stack)的栈元素。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。1.局部变量表局部变量表主要存放 方法参数,方法内部定义的局部变量在编译class文件时,在方法的code属性以计算好max_locals的大小,也就是分配好了局部

2020-06-11 20:02:45 82

原创 计算机网络——应用层01

文章目录域名系统DNS1.概述2.域名系统的结构层次树状结构域名分类:3.域名服务器和域名解析域名系统DNS1.概述域名系统DNS是互联网使用的命名系统,用来把便于人们使用的机器名字转化为IP地址许多应用层软件经常直接使用域名系统,但计算机的用户只是间接的使用域名系统。域名系统是一个联机分布式数据库系统,并采用客户服务器模式。(采用分布式,单个计算机出了问题不会影响系统)名字到IP地址的解析是由若干个域名服务器程序完成的。域名服务器程序在专设的结点上运行,运行该程序的机器称为域名服务器(要注意

2020-06-06 12:13:08 128

原创 算法——树状数组01

树状数组原理介绍:题目原理介绍:应用场景树状数组主要是用于快速求得被随时修改单点值数组的前缀和1.可以在O(logN)的复杂度内求前缀和。2.可以随时修改单点。学习之前请确保已经了解lowbit运算原理引入:假设有一个数组A[1]—A[n],现在要求前缀A[15]。如何求最快呢,首先看15的二进制是1111,那么是不是可以根据二进制来把前15个数划分呢。因为一个int类型的整数最多只有32位(其实达不到),那么就可以在很短的划分之内将数组划分。 比如:15(1111)可以划分为(111

2020-06-05 11:34:30 137

原创 java容器源码学习03(jdk1.8): hashmap

文章目录接口和继承源码解析关键属性1.构造函数2.put方法详解3.删除方法4.遍历接口和继承public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {HashMap 主要实现了 Map 接口,Cloneable 接口和 Serializable 接口;HashMap 维护了一个table数组,数组默认长度为 16,负载因

2020-06-02 22:15:58 75

原创 java容器源码学习02: LinkedList

文章目录接口和实现类分析:源码分析总结接口和实现类分析:public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable1、List接口:列表,add、set、等一些对列表进行操作的方法2、Deque接口:有队列的各种特性,3、Cloneable接口:能

2020-05-30 11:32:55 80

原创 算法总结——容斥原理01

文章目录题目容斥原理是大学离散数学里的应用,就算没学过也能理解。毕竟,在程序员眼中,排列组合是不会有多么离散的。题目直接看题Devu有N个盒子,第i个盒子中有Ai枝花。同一个盒子内的花颜色相同,不同盒子内的花颜色不同。Devu要从这些盒子中选出M枝花组成一束,求共有多少种方案。若两束花每种颜色的花的数量都相同,则认为这两束花是相同的方案。结果需对109+7取模之后方可输出。输入格式第一行包含两个整数N和M。第二行包含N个空格隔开的整数,表示A1,A2,…,AN。输出格式输出一个整

2020-05-29 12:05:51 551

原创 java容器源码学习01: ArrayList

文章目录接口和实现类分析:源码解析和阅读1.构造函数2.添加元素的方法3.删除元素的方法4.迭代器总结接口和实现类分析:public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable继...

2020-04-25 12:44:41 162

原创 SpringBoot——缓存

缓存一、常用的注解@EnableCaching@Cacheable@CachePut@CacheEvict二、注解中常用的属性和方法cacheNames/value :keykeyGeneratorcacheManagerconditionsync补充@Caching@CacheConfig一、常用的注解@EnableCaching开启基于注解的缓存,在使用注解开发时,必须使用该注解后,才...

2020-01-20 12:55:31 162

原创 SpringBoot-整合mybatis

整合mybatis创建项目是所需要的准备注解版配置文件版创建项目是所需要的准备1.在创建好SpringBoot的web项目的时候勾选mybatis导入依赖:数据源:Druid数据源<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis‐s...

2020-01-12 20:21:00 100

原创 MyBatis学习笔记01

MyBatis学习笔记——基于xml开发(入门)一、mybatis的入门:1.创建maven工程并导入坐标2.创建实体类和dao接口3.创建Mybatis的主配置文件4.创建映射配置文件5.环境搭建的注意事项:6.mybatis的入门案例一、mybatis的入门:1.创建maven工程并导入坐标2.创建实体类和dao接口接口类代码public interface IUserDao {...

2020-01-12 12:18:51 106

原创 LeetCode-contest-166

整数的各位积和之差水题class Solution { public int subtractProductAndSum(int n) { int x=n; int cnt1=0; int cnt2=1; while(x!=0){ int y=x%10;x/=10; cn...

2019-12-13 11:07:17 88

空空如也

空空如也

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

TA关注的人

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