云乐QAQ
码龄7年
关注
提问 私信
  • 博客:51,811
    动态:2
    51,813
    总访问量
  • 117
    原创
  • 475,797
    排名
  • 17
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:四川省
  • 加入CSDN时间: 2018-01-21
博客简介:

云乐

博客描述:
acm
查看详细资料
个人成就
  • 获得47次点赞
  • 内容获得27次评论
  • 获得65次收藏
创作历程
  • 8篇
    2021年
  • 66篇
    2020年
  • 20篇
    2019年
  • 23篇
    2018年
成就勋章
TA的专栏
  • SpringBoot
    6篇
  • Mysql
    1篇
  • 剑指offer
    9篇
  • Mybatis
    8篇
  • Shiro
    1篇
  • vue.js
    1篇
  • Thymeleaf
    1篇
  • 前端
    15篇
  • SSM
    2篇
  • IJ
    2篇
  • maven
    1篇
  • SpringMVC
    1篇
  • J2EE
    9篇
  • 背包
    2篇
  • ACM
    10篇
  • 爬虫
    1篇
  • java
    29篇
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

349人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

快来快来理一理 JAVA Thead状态分析

Thread理一理可恶,阅读aqs的时候发现对java多线程各种操作不敏感,进度就很憋屈,这里给自己理一下。线程状态初始态就绪态运行态等待态计时等待态阻塞态终止态状态转换初始态:也就是线程刚创建的状态,对应java就是线程还没有start之前的状态,此状态在线程状态转换中存在感较低,只是个入口。就绪态:这就是已经开始执行的线程的初始状态了,在等待cpu时间片轮转到就绪态的线程,那么就会转换到运行态。运行态:字面意思,这就是冲冲冲状态。等待态:也是字面意思,线程等待了,需要被
原创
发布博客 2021.09.30 ·
359 阅读 ·
2 点赞 ·
1 评论 ·
0 收藏

java8 不会就out了(三)使用Optional来代替你的空判断

目标(为什么要学)java 8 新特性,早就听说了,比如在java核心原理一书上面,讲到了安全获取还是缓获取来着,用Optional作为容器来装对象,让程序从我们不受控制的报空,变成受我们控制的null处理。此次的目标是在原有的:听说过 的基础上,明白原理,知晓使用场景,融入自己的代码中。作用(能干啥)jdk文档中的描述是:optional是一个基础容器对象,用来储存可能包含也可能不包含非null值的对象。提供访问容器储存对象的方法: 如果isPresent()方法..
原创
发布博客 2021.09.15 ·
1157 阅读 ·
3 点赞 ·
3 评论 ·
8 收藏

【JAVA武器库】synchronized剖析(原理+锁升级流程)

synchronized原理synchronized是java提供的内置性原子锁。使用了synchronized的代码块,会在编译之后在代码块的前后加上monitorenter和monitorexit字节码指令。由于只用了monitor这个监视器,synchronized也叫监视器锁,而且由于Java中的线程和操作系统原生线程是一一对应的,1.6之前的可以认为对应操作系统的互斥量(mutex,线程被阻塞或者唤醒时时会从用户态切换到内核态,这种转换非常消耗性能。执行monitorentor会将计数器+1
原创
发布博客 2021.09.09 ·
198 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

java8 不会就out了(二)Stream流详解(使用+原理)

StreamList<String> deviceNames = deviceList .stream() .filter(x->{x.getId()<100}) .map(EnvironmentDeviceDTO::getDeviceName) .di
原创
发布博客 2021.09.09 ·
373 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

java8 不会就out了(一)lambda表达式详解(怎么用,在哪用,怎么更好的用)

java 8 不会就out了Lambdalambda知识点综述:1.lambda用来减少匿名类的复杂编写。2.lambda表达式用来实现函数式接口,函数式接口是有且只有一个抽象方法的接口,如果有多个抽象方法,或者一个抽象方法都没有,就不是函数式接口。3.编译器可以通过lambda实现的函数式接口推断出参数类型,所以可以省略定义的参数类型。4.lambda表达式对单一方法的调用,可以使用方法引用的方式,也就是 :: 隔开的类名、方法形式。5.jdk8新增的函数式接口可以很方便的支持lambda表
原创
发布博客 2021.09.09 ·
276 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

SpringCache源码简单研究

最近目标是写一个只需要本地的缓存,并且可以设置过期时间。经过了解呢,spring有自带的缓存springcache,了解了一下发现使用是挺方便的,老早之前整合redis的时候还使用过。但是未能满足业务需求的是,无法设定过期时间。那就准备自己实现一下子呢。了解到,有两个玩意,CacheManager和Cache两个ConcurrentMap,前者用来管理cache的,可以通过name获取cache,后边是保存缓存内容,通过key获取缓存值。而我的需求的过期时间细粒度并不高,相同name空间定时清空就可
原创
发布博客 2021.06.04 ·
199 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Mysql索引(B+树)知识点,不会真的有人会被问懵吧?

首先帮大家回忆一下Myisam和innoDB的区别哈:Myisam:非聚集索引,不支持事务,只支持表级锁。InnoDB:聚集索引,支持事务,默认行级锁,支持表级锁。索引干啥的:索引就像一本词典的目录,加快查询数据的速度,但是如果更新和删除操作频繁,就会去频繁的修改这个目录,反而加大开销。索引类型:按作用分普通索引:单纯的加快查询速度。主键索引:加快查询速度,列值唯一(不能为null),每个表只能有一个主键。唯一索引:加快查询速度,列值唯一(可以为null)全文索引
原创
发布博客 2021.01.13 ·
215 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

简述BIO与NIO的概念与区别

BIO阻塞式IO,同一时间只能读或者写。虽然可以通过多线程来满足多通路,但是各个线程自身还是在阻塞的。由于BIO是面向流的,阻塞也就出现在三个地方:accept、InputStream、OutputStream。即:accept等待接受TCP请求,接收时候建一组IO流,交给另外一个线程去处理。thread thread thread | | | | | |...
原创
发布博客 2021.01.12 ·
873 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

建造者模式和桥接模式,答应我告别ifelse好吗?

建造者模式我理解的就是零件的装配,用在需要把一些有联系的属性拼接起来。如StringBuilder就是很典型的。引入一个场景,去药房抓中药,有以下组成:1、药品 (抽象零件)2、天麻、枸积、何首乌(具体零件)3、Builder组装接口 (抽象组装)4、Builder 组装实现类// 抽象零件public interface Medicine { String getName(); double getPrise(); String getDes..
原创
发布博客 2020.12.08 ·
608 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

你真的懂工厂模式吗?

https://www.zhihu.com/question/20367734暂时的理解就是抽象工厂模式比工厂模式牛逼,也就是沃尔玛和便利店的关系。
原创
发布博客 2020.12.08 ·
154 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

记录一下动态代理

静态代理说动态代理之前咱看看静态代理是啥吧,毕竟各个关于动态代理的文章都会提到静态代理。我理解的静态代理就是:比如我有一个类A,然后现在需要给A添加一些操作,但是又不想去修改A本来的代码,那么咱可以写一个A的代理类AProxy,在代理类中注入A的对象,再对A的操作进行维护。听上去还是挺有用的哈,但是如果使用很多很多静态代理的话,系统中的类会非常多,不便于维护。那咋办呢,所以才要有动态代理嘛。动态代理第一次听说这个词呢还是力哥给我讲项目的时候提到的,然后介绍了下在我们项目中应用的.
原创
发布博客 2020.12.07 ·
144 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

ConcurrentHashMap和HashTable小细节

内容总结于敖丙:https://mp.weixin.qq.com/s/AixdbEiXf3KfE724kg2YIw多线程下能够代替hashmap的有哪些?三种使用Collections.synchonizedMap()去把一个map类型转换成一个安全的map集合(所有操作加互斥锁) 使用hashtable 使用ConcurrentHashMap但由于前两者都是单纯的给所有操作加上锁来保证并发安全,效率并不高。咱一般使用第三种.Collections.synchonizedMap
原创
发布博客 2020.12.02 ·
187 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

再谈HashMap,面试不迷路!

1. 底层数据结构数组和链表(1.8之后加入红黑书)2.插入链表的方式在使用对象的hashcode和链表长度-1取余之后得到下标,对象放入对应的下标位置。如果该位置已经有值,则形成链表排列。1.7之前插入链表的方式是头插法,但如果在并发情况下可能会造成链表的死循环:比如 原数组的某条链表是 1->2,那么两个线程同时添加3的时候造成扩容,线程t1扩容数据迁移之后,这三个节点恰巧还是在同一个数组位置上,2->1->3。此时t2也开始数据迁移,处理的第一个节点还是刚加入进来
原创
发布博客 2020.11.30 ·
229 阅读 ·
0 点赞 ·
2 评论 ·
0 收藏

volatile关键字致命剖析

volatile关键字语义一个共享变量被volotile关键词修饰之后,就具备了以下两层语义:保证了不同线程对该变量值操作的可见性禁止jvm进行指令重排序语义1的解释:用了volatile修饰的变量值一经修改就会马上写入主存。用了volatile修饰的变量值一经修改,其他线程的工作内存中的缓存值会马上失效。用了volatile修饰的变量值工作内存中的缓存值失效了再使用新值时,会去主存中获取。以此保证可见性。语义2的解释:保证了有序性正所谓天道有缺(hhh),volatil
原创
发布博客 2020.11.24 ·
139 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

面试官:那接下来我们聊聊接口吧!

接口接口不是类,而是对希望符合这个接口的类的一组需求,也就是说,接口就像一种`规定`。接口中的所有方法都自动是public方法,因此在接口中申明方法时,可以不用加上public字段。(java9之后可以用private,但没啥用,必须实现,只能用于给接口中的其他实现提供辅助)但是要注意的是,接口中,千万不能有实例字段。(java8之后可以实现方法了,但是一直都不能有实列字段)接口的属性可以声明接口的变量,但是接口变量的引用必须是实现了这个接口的类对象。接口可以被拓展,从通用性较高的接口拓展到专
原创
发布博客 2020.10.10 ·
204 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

注解与反射

之前在读源码的时候由于java的基础知识实在太拉闸,所以暂时放弃源码阅读任务,既然基础差那就学基础呗,所以学了注解和反射机制。首先是注解Annotation注解,顾名思义啊,和注释有点类似,但是注解是给代码看的,不是给人看的,作用是对程序做出解释,可以被其他程序读取(比如用反射来操作注解),内置注解java自带的注解:Deprecated (常用)用于过时的类、方法、成员变量等Override(常用)覆盖父类方法SuppressWarning(常用)阻止警告,用来抑制编译时
原创
发布博客 2020.06.09 ·
157 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

HashMap学习笔记

一个有梦想的算法,把线性查询O(n)的复杂度想缩小到O(1)把任意长度转换为固定输出最底层的数据结构是数组,通过hash算法取模,然后再用寻址算法找到唯一的位置。hash算法和寻址算法二进制位运算优化hash算法优化hashcode就是不同对象拥有的唯一的散列码,在hashmap里面,使用了hash算法对hashcode进行了进一步的优化:对key的hash值和它自己右移十六位之后进行异或操作这样保证了hashcode的低十六位同时保留了高十六位的特征,使后边寻址算法的时候高十六位和低十六位
原创
发布博客 2020.06.09 ·
157 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

Mybatis原码学习(五)还是反射工具箱

对于反射工具箱,前面学习了Reflector还有类型解析TypeParameterResolver,都是不咋好理解的,今天接着来点思维简单点的。ObjectFactory这是用来创建实体对象的接口。代码如下:public interface ObjectFactory { //设置配置信息 void setProperties(Properties properties); //通过无参构造器创建实体对象 <T> T create(Class<T> type);
原创
发布博客 2020.06.02 ·
371 阅读 ·
0 点赞 ·
2 评论 ·
0 收藏

Mybatis原码学习(四)TypeParameterResolver

得先申明下,这篇文章应该不会有借鉴价值,我也只能是斗胆总结下。为什么呢,因为这是我目前为止遇到问题最大的一部分,绕过去绕过来,可能是自己对泛型、类型学习都还不够,理解得很吃力很吃力。代码部分来自博客:https://www.jianshu.com/p/73bb429b9a01我实在懒得打注释了,解释就用文章的方式吧。在开始介绍TypeParmeterResolver之前,得了解一下Type的知识:Type是所有类型的父接口,它有四个子接口和一个实现类。下面来看这些子接口和子类所代表的类型。C
原创
发布博客 2020.06.01 ·
486 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

Mybatis原码学习(三)Reflector

相对于java自带的反射功能,Mybatis封装了更适合本身的反射工具箱,提供了更简洁的APIReflectorReflector是Mybatis中反射模块的基础,每个Reflector对象都对应了一个类下面是Reflector类中的各个字段://对应的class类型 private Class<?> type; //对应的getter方法的属性 private String[] readablePropertyNames = EMPTY_STRING_ARRAY; //
原创
发布博客 2020.05.31 ·
266 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多