自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AtomicInteger有关CAS

AtomicIntegerpublic static void main(String[] args) { AtomicInteger ai = new AtomicInteger(20); System.out.println(ai.incrementAndGet()); }在学习AtominInteger时,第一次接触了CAS,也就是在自增的时候使用CAS自旋锁解决并发问题。调用的方法时incrementAndGet方法。而这个自增的操作本质上不是一个原...

2022-04-25 15:39:39 286

原创 Docker入门学习

Docker安装​yum install -y yum-utils​配置镜像yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo​yum makecache​安装dockeryum install docker-ce docker-ce-cli containerd.io​启动dockersystemctl start doc...

2022-04-17 10:03:10 679

原创 ThreadPoolExecutor源码学习

一图胜千言:源码ctl共32位,其中前3位表示线程池的状态,0(000)、1(001)、2(010)、3(011)、-1(111)各表示一种,共五种,而后29位表示线程池中的线程个数 //其中AtomicInteger变量ctl的功能非常强大:利用低29位表示线程池中线程数,通过高3位表示线程池的运行状态: private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); //Inte...

2022-04-12 19:36:41 550

原创 AQS——hasQueuedPredecessors方法

hasQueuedPredecessors方法的名称是:是否拥有前一个队列元素。换言之:用不用排队。返回false:不用排队。返回true:乖乖排队去。h != t返回true,(s = h.next) == null返回false以及s.thread !Thread.currentThread()返回false返回false的情况就很简单了,总共有两种返回false:第一种:h != t为false这种情况就是队列为空或者队列只有一个元素的情况。队列为空很好理解...

2022-04-10 18:50:31 2178

原创 AQS源码学习

AQS,全称:AbstractQueuedSynchronizer,是JDK提供的一个同步框架,内部维护着FIFO双向队列,即CLH同步队列。AQS依赖它来完成同步状态的管理(voliate修饰的state,用于标志是否持有锁)。如果获取同步状态state失败时,会将当前线程及等待信息等构建成一个Node,将Node放到FIFO队列里,同时阻塞当前线程,当线程将同步状态state释放时,会把FIFO队列中的首节的唤醒,使其获取同步状态state。很多JUC包下的锁都是基于AQS实现的...

2022-04-07 11:12:14 120

原创 算法训练——97. 交错字符串

给定三个字符串s1、s2、s3,请你帮忙验证s3是否是由s1和s2 交错 组成的。两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:s = s1 + s2 + ... + snt = t1 + t2 + ... + tm|n - m| <= 1交错 是 s1 + t1 + s2 + t2 + s3 + t3 + ... 或者 t1 + s1 + t2 + s2 + t3 + s3 + ...注意:a + b 意味着字符串 a 和...

2022-04-07 11:10:48 142

原创 算法日常——377. 组合总和 Ⅳ

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。题目数据保证答案符合 32 位整数范围。示例 1:输入:nums = [1,2,3], target = 4输出:7解释:所有可能的组合为:(1, 1, 1, 1)(1, 1, 2)...

2022-04-07 09:13:53 146

原创 日常算法——278. 第一个错误的版本

你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。示例 1:...

2022-04-06 15:12:27 75

原创 算法训练——力扣518 零钱兑换 II

给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。假设每一种面额的硬币有无限个。题目数据保证结果符合 32 位带符号整数。示例 1:输入:amount = 5, coins = [1, 2, 5]输出:4解释:有四种方式可以凑成总金额:5=5...

2022-04-05 21:05:58 235

原创 算法训练——力扣474一和零

给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。示例 1:输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3输出:4解释:最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001...

2022-04-05 20:36:30 228

原创 AtomicInteger有关自旋锁的原子性问题

AtomicInteger public static void main(String[] args) { AtomicInteger ai = new AtomicInteger(20); System.out.println(ai.incrementAndGet()); }在学习AtominInteger时,第一次接触了CAS,也就是在自增的时候使用CAS自旋锁解决并发问题。调用的方法时incrementAndGet方法。而这个自...

2022-04-05 17:34:44 941

原创 可重入锁详解

现在终于有一次学习到了锁机制,上次学习还是在学习java基础的时候遇到的,当时对于锁还只是停留在一个大致的了解上,这次是彻底的深入学习,我在学习中遇到的第一个我认为的难点就是可重入锁。我一开始想要像大多数人那样宽泛的理解:自家开门后房屋任进。后来发现这样理解有不少问题,大大忽略了锁的概念和可重入锁在这样的问题中扮演的角色。可重入锁,就是当一个类中多个方法上锁,当多个方法中嵌套调用了上锁的方法,拿到第一把锁的线程在进入其他上锁方法时,无需在次获得锁。这样...

2022-04-05 11:28:29 580

原创 简单上手四大函数型接口

四大函数型接口1.功能型函数接口(Function<T,R>):T为参数类型,R为返回值类型2.消费型函数接口(Consumer<T>):T为参数类型,没有返回值3.供给型函数式接口(Supplier<T>):T为返回值类型,没有参数4.断言型函数式接口(Predicate<T>):T为参数类型,返回值为Boolean类型public class Test9 { public static void main(String[]

2022-04-05 11:06:40 457

原创 JUC——线程池的7大参数和4种拒绝策略

线程池的优势 1.线程复用,减少线程创建、销毁的开销,提高性能 2.提高响应速度,当任务到达时,无需等待线程创建就能立即执行。 3.提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资 源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。线程池七大参数1.corePoolSize核心线程数。当提交一个任务时,线程池会创建一个新线程执行任务,此时线程不会复用。如果当前线程数为corePoolSi...

2022-04-01 16:54:28 1270

原创 算法训练——最少会议室

每日一道笔试题,同学们可以进行自我测试一下,下午公布参考答案~给你一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,返回 所需会议室的最小数量 。示例 1:输入:intervals = [[0,30],[5,10],[15,20]]输出:2示例 2:输入:intervals = [[7,10],[2,4]]输出:...

2022-04-01 15:30:20 1097

原创 算法训练——数组匹配最多连线数

每⽇⼀道笔试题,同学们可以进⾏⾃我测试⼀下,下午公布参考答案~在两条独⽴的⽔平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在,可以绘制⼀些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满⾜满⾜: nums1[i] == nums2[j] 且绘制的直线不与任何其他连线(⾮⽔平线)相交。 请注意,连线即使在端点也不能相交:每个数字只能属于⼀条连线。 以这种⽅法绘制线条,并返回可以绘制的最⼤连线数。示例1:...

2022-04-01 15:24:47 384

原创 算法训练——相似岛屿

每日一道笔试题,同学们可以进行自我测试一下,下午公布参考答案~给定一个非空 01 二维数组表示的网格,一个岛屿由四连通(上、下、左、右四个方向)的 1 组成,你可以认为网格的四周被海水包围。请你计算这个网格中共有多少个形状不同的岛屿。两个岛屿被认为是相同的,当且仅当一个岛屿可以通过平移变换(不可以旋转、翻转)和另一个岛屿重合。示例 1:11000110000001100011给定上图,返回结果 1 。示例 2:11011100000000111011...

2022-04-01 15:20:30 176

原创 算法训练——括号匹配

每日一题给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例2:输入:s = "()[]{}"输出:true示例3:输入:s = "(]"输出:false示例4:输入:s = "([)]"输出:false示例5...

2022-04-01 15:18:14 208

原创 算法训练——最长两种字节子串

每日一题给定一个字符串 s ,找出至多包含两个不同字符的最长子串 t ,并返回该子串的长度。示例 1:输入: "eceba"输出: 3解释: t 是 "ece",长度为3。示例 2:输入: "ccaabbb"输出: 5解释: t 是 "aabbb",长度为5。解题:滑动窗口public class Day6 { public static void main(String[] args) {// int solution...

2022-04-01 15:15:56 237

原创 算法训练——字符串映射

每日一练给你一种规律pattern和一个字符串s,请你判断s是否和pattern的规律相匹配。如果存在单个字符到字符串的 双射映射 ,那么字符串s匹配pattern,即:如果pattern中的每个字符都被它映射到的字符串替换,那么最终的字符串则为 s 。双射 意味着映射双方一一对应,不会存在两个字符映射到同一个字符串,也不会存在一个字符分别映射到两个不同的字符串。示例 1:输入:pattern = "abab", s = "redbluer...

2022-04-01 15:13:37 973

原创 算法训练——最长同步字符串

每日一练给定两个单词word1和word2,返回使得word1和word2相同所需的最小步数。每步可以删除任意一个字符串中的一个字符。示例 1:输入: word1 = "sea", word2 = "eat"输出: 2解释: 第一步将 "sea" 变为 "ea" ,第二步将 "eat "变为 "ea"示例 2:输入:word1 = "leetcode", word2 = "etco"输出:4提示:1 ...

2022-04-01 15:11:27 125

原创 JUC——阻塞队列四套API使用

public class Test5 { //阻塞队列第一种方法:允许抛异常 @Test public void test1() { //阻塞队列 //构造器参数为阻塞队列最大长度 BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(3); //1.1使用add方法,当添加的元素超过队列最大长度之后,如果继续添加,那么抛出异常I...

2022-04-01 15:08:36 153

原创 读写锁的API使用

public class Test6 { //读写锁 @Test public void test1() { Data2 data2 = new Data2(); HashMap<Integer, String> map = new HashMap<>(); for (int i = 0; i < 9; i++) { final int temp = i; .

2022-04-01 15:06:55 334

原创 jvm的三大类记载器

引导类加载器,拓展类加载器以及系统类加载器BootStrap ClassLoader(引导类加载器): 引导类加载器是有c/c++编写成的,没有继承于ClassLoader类, 负责加载 JAVA_HOME\lib 目录中的,或通过-Xbootclasspath 参数指定路径中的,且被虚拟机认可(按文件名识别,如 rt.jar)的类,例如java包下的,javax包下的类就需要引导类加载器进行加载。Extension ClassLoader(扩展类加载器): 由ja...

2022-03-28 17:55:45 711

原创 jvm类加载机制

jvm类加载的五个阶段加载,验证,准备,解析,初始化类加载过程:1.加载: 加载指的是将类的class文件读入到内存,从二进制,并为之创建一个java.lang.Class对象,也就是说,当程序中使用任何类时,系统都会为之建立一个java.lang.Class对象。...

2022-03-28 17:37:18 835

原创 计算机网络——滑动窗口

背景当网络通信中每个数据包都需要确认应答,那么包的往返时间越长,网络的吞吐量就会越低,所以TCP引入了窗口这个概念。窗口大小窗口大小就是无需确认等待应答的最大连续发送的数据量。窗口大小由TCP头部的Window字段决定。窗口传输丢包假设此时发送三个数据包,分别为1,1461和2921三个,那么这三个数据包不需要等待ack包确认就可以发送下一个数据包,这样即使中间有一个ack丢失了,只要后续的ack能传输到,也能证明丢失的回应对应的数据包已经...

2022-03-27 10:51:50 4725

原创 redis学习——RDB和AOF持久化

定义rdb持久化:把当前数据生成快照保存在硬盘上aof持久化:记录每次对数据的操作到硬盘上RDB特点操作rdb持久化可以手动也可以自动,手动需要进行save和bgsave两种操作,而自动需要修改配置文件。save操作:当执行save操作时,redis服务就会进入阻塞状态,直到rdb持久化完成。此操作在处理大量数据持久化时会造成长时间阻塞。bgsave操作:当执行bgsave操作时,redi...

2022-03-26 18:19:43 1263

原创 草稿——redis学习bitmaps集合日志

bitmaps基于位存储,消耗空间很少,是操作二进制位来进行记录,只有0 和1 两个状态。实用场景:比如当统计具有某个状态的人数时,可以设置某个人的状态为0或1,然后统计1的数量即可。类似的,在进行钉钉学习打卡的时候,会给每天标上已打卡和未打卡两种状态。#setbit bitmaps集合名 标号 值(设置集合某个序号的0,1 状态)127.0.0.1:6379[1]> setbit sign 0 1(integer) 0127.0.0.1:6379[...

2022-03-24 17:25:03 1885

原创 redis学习Hyperloglog做基数统计日志

redis使用Hyperloglog进行基数统计优点:占用内存固定,统计2^64不同的元素的技术只需要12kb内存,如果从内存角度来比较的话,hyper log log首选设计网页的访问量:传统方式:使用set保存用户的id,然后就可以统计set中的元素数量作为标准判断,这种方式如果保存大量的用户id就会比较麻烦,我们的目的是计数,而非保存。所以redis的Hyperloglog完美的契合这样的统计技术使用场景(Hyperloglog有0.81%的错误率,如果...

2022-03-24 17:04:53 675

原创 草稿——redis学习有关geospatial操作日志

geospatial集合实例,比如我们点了一份美团外卖,那么我们就需要知道骑手距离我们的距离。我们还需要查看本地的其他外卖店等等,都可以基于geospatial完成。#geoadd geo集合名 经度 维度 值(设置图的集合,保存形式为 集合名 1.地名 2.经度,维度 )127.0.0.1:6379[1]> geoadd china:city 116.40 39.90 beijing(integer) 1127.0.0.1:6379[1]> geoadd chi...

2022-03-24 16:36:27 578

原创 计算机网络——重传机制

超时重传:超时重传顾名思义就是当发送数据一定时间后没有收到回应,那么就会触发超时重传,那么超时重传的时间限制是多少呢。在计网基础学习中我们接触了时延RTT,RTT表示一次发送一次回应的总时间,RTT的时长是不确定的。而RTO是超时重传的时间,RTO的时间会略大于RTT的时间。有人会问RTT时间不是不确定的吗,怎么每次都确定RTO比RTT大一点呢?这个问题应该问学概率统计的哈哈哈。但是所有丢失的信息都进行超时重传效率会很低,因为要等待一段时间。快速重传:...

2022-03-24 10:40:01 4399

原创 计算机网络——TCP四次挥手

TCP的四次挥手(假设由客户端发起)首先客户端原先处于ESTABLISHED状态,然后客户端发送完信息后发送FIN给服务器,此后自己进入FIN_WAIT1状态。服务器原先处于ESTABLISHED状态,然后服务器接收到FIN之后回复ACK,接着进入CLOSE_WAIT状态。客户端接收到ACK后进入FIN_WAIT2状态。服务器处理完接收的数据之后发送FIN表示不再接收数据,请求关闭。接着进入LAST_ACK状态。客户端接收到FI...

2022-03-24 10:16:44 3609

原创 计算机网络——TCP三次握手,以及与UDP的区别

TCP协议头部信息:TCP三次握手:首先客户端给服务器发送连接请求,将标志位SYN设置为1,然后随机生成自身序列号,然后将SYN和自身序列号Seq发送给服务器,自己进入SYN_SENT状态。服务器接收到信息后,将序列号Seq+1设置为自己的确认应答号Ack,让后将自己的标志位ACK设置为1表示确认收到,SYN设置为1表示请求连接,并随机生成一个随机数作为自身序列号Seq,然后回复ACK,SYN,Seq number以及Ack number,随后自己进入SYN_...

2022-03-24 09:50:30 1894

原创 草稿——redis学习sort set集合日志

#zadd 集合名 排序值 值(添加值,如果没有集合就创建集合,可以添加多条)127.0.0.1:6379[1]> zadd myset 1 one(integer) 1127.0.0.1:6379[1]> zadd myset 2 two(integer) 1127.0.0.1:6379[1]> zadd mysey 3 three(integer) 1127.0.0.1:6379[1]> zadd myset 3 three 4 four(integer)...

2022-03-24 08:58:18 195

原创 草稿——redis学习有关hash集合日志

#hset hash集合名 键 值(设置hash集合的键值对,如果已有那么覆盖,如果无表,那么创建)127.0.0.1:6379[1]> hset person name zhangsan(integer) 1127.0.0.1:6379[1]> hset person age 19(integer) 1#hset hash集合名 键(根据hash集合的键获取值)127.0.0.1:6379[1]> hget person name"zhangsan"127.0...

2022-03-23 19:54:25 211

原创 草稿——redis学习有关set集合日志

#sadd set集合名 值(没有集合创建set集合,添加值)127.0.0.1:6379[1]> sadd set ling (integer) 1127.0.0.1:6379[1]> sadd set meng(integer) 1127.0.0.1:6379[1]> sadd set wu(integer) 1#smembers set集合名(查看set集合所有值)127.0.0.1:6379[1]> smembers set1) "meng"...

2022-03-23 17:54:53 213

原创 草稿——redis学习有关list日志

这里打个草稿,里面都是有关list的操作记录,以免后面忘记,可以来查看当时如何操作,得出怎样的结果。127.0.0.1:6379[1]> select 1OK127.0.0.1:6379[1]> DBSIZE(integer) 2127.0.0.1:6379[1]> flushdbOK127.0.0.1:6379[1]> DBSIZE(integer) 0127.0.0.1:6379[1]> lpush list one(integer)...

2022-03-23 17:27:29 749

原创 草稿——记录一下计网学习问题以及redis学习日志

计算机网络最近看到了TCP的三次握手四次挥手详解,为什么需要三次握手?二次,四次为什么不行?为什么需要四次挥手?三次握手的各个状态是什么?四次挥手的各个状态是什么?close_wait有什么意义?time_wait有什么意义?以及四种重传机制:超时重传,快速重传,sack模式,d-sack模式。滑动窗口解决发送包效率问题。发送包如何改善。滑动窗口如何进行流量控制?滑动窗口如何进行拥塞控制?拥塞控制四个算法:慢启动,拥塞避免,拥塞发生,快恢复如何实现的?与流量控制有关的,如果收发包时操作系统减...

2022-03-23 16:43:45 476

原创 计算机网络——详解HTTP2.0

HTTP2.0在前文已经提及过了,但是他调优的详细情况还没总结。回顾一下HTTP1.1的缺点:1.头部冗余,有重复字段或字符串2.头部过大,传输压力大3.队头堵塞,非管道传输请求堵塞,管道传输响应堵塞4.必须由客户端发起连接,服务器给予相应5.无请求优先级处理HTTP如何处理请求头冗余:HPACK算法1.静态表...

2022-03-20 10:44:41 2181

原创 HTTP1.0--HTTP1.1--HTTP2.0分别做了哪些优化

HTTP1.0--HTTP1.1的优化:1.使用长对话模式:之前每次请求响应都需要建立TCP/IP连接,资源消耗较大,使用长对话可以一次连接多次请求响应2.管道传输:之前http1.0发送一个请求后必须等待结果才能发送第二个请求,而http1.0在发送完请求后可以接着发送第二次请求,最后只要把响应的结果按顺序对应即可。HTTP1.1存在的问题:1.只能压缩body部分:请求信息头部无法压缩,头部较长时资源消耗较大。2.队头堵...

2022-03-19 13:57:10 1701

空空如也

空空如也

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

TA关注的人

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