- 博客(84)
- 问答 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Spring Boot自动装配(一)
Spring Boot自动装配(一)注:基于SpringBoot2.x版本以上@EnableAutoConfiguration@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@AutoConfigurationPackage@Import({AutoConfigur...
2020-04-13 17:49:16
481
转载 fastjson 安全漏洞
本文转载自微信公众号Hollis,作者Hollis。如果有侵权,请联系我,立马删除。fastjson大家一定都不陌生,这是阿里巴巴的开源一个JSON解析库,通常被用于将Java Bean和JSON 字符串之间进行转换。前段时间,fastjson被爆出过多次存在漏洞,很多文章报道了这件事儿,并且给出了升级建议。但是作为一个开发者,我更关注的是他为什么会频繁被爆漏洞?于是我带着疑惑,去看了下fastjson的releaseNote以及部分源代码。最终发现,这其实和fastjson中的一个AutoType
2020-07-16 14:20:51
4315
1
原创 JAVA 序列化
JAVA 序列化什么是序列化序列化:把对象转换为字节序列的过程称为对象的序列化。反序列化:把字节序列恢复为对象的过程称为对象的反序列化。 再来看看Java中的序列化。Serializablepublic interface Serializable {} Java中定义了一个空的接口。实现该空接口,即可实现序列化。 Java中有ObjectOutputStream和ObjectInputStream。先定义一个Student类public class Student {
2020-07-15 21:31:58
306
原创 Dubbo SPI
Dubbo SPI什么是SPI? SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。Java SPIpublic interface Color { void color();}public class Yellow implements Color { @Override public void
2020-05-12 17:19:56
233
原创 Dubbo源码(一)服务暴露
Dubbo源码(一)服务暴露版本介绍 从官网上直接摘抄下来的。源码统一为2.6.X版本。版本重要功能升级建议12.6.xbugfix建议持续升级最新版本,所有版本生产可用22.5.x停止维护建议升级最新 2.6.x 版本32.4.x 及之前停止维护建议升级最新 2.6.x 版本背景http://dubbo.apache.org/...
2020-05-07 17:24:47
329
原创 Spring源码(二)bean的创建
Spring源码(二)bean的创建 怎么去获取一个Spring Bean? 通过BeanFactory定义的getBean()方法,就可以从容器中拿到这个bean的实例。 所以,我们从getBean方法为入口,看看Spring在里面做了些什么操作。//返回指定的bean实例Object getBean(String name) throws BeansException;//返...
2020-04-26 15:14:14
151
原创 Spring源码(一)bean的装载
Spring源码(一)bean的装载Spring源码均基于5.0.2一.DefaultListableBeanFactory 先来看看JavaDoc定义ListableBeanFactory和BeanDefinitionRegistry接口的默认实现:一个基于bean定义对象的完整的bean工厂。典型的用法是先注册所有的Bean定义(可能是从Bean定义文件中读取),然后再访问Bea...
2020-04-24 15:23:15
226
原创 SpringApplication-准备(二)
SpringApplication-准备(二) 接着看SpringApplication.run(args)方法public ConfigurableApplicationContext run(String... args) { //一个用来记录任务耗时的类。注意:非线程安全,也不用于生产。 StopWatch stopWatch = new StopWatch(); st...
2020-04-21 16:06:55
214
原创 SpringApplication-构造(一)
SpringApplication-构造(一)public class BootStrapApplication { public static void main(String[] args) { SpringApplication.run(BootStrapApplication.class, args); }}public static Configu...
2020-04-20 10:29:00
150
原创 Spring Boot自动装配(三)
Spring Boot自动装配(三) 在EnableAutoConfiguration类中,还存在一个注解AutoConfigurationPackage@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@Import(AutoConfigurationPackages.R...
2020-04-16 17:35:27
341
原创 SpringBoot自动装配(二)
SpringBoot自动装配(二) 上文写到,最后会配置一个监听器,用于记录自动装配的条件评估详情。现在我们自定义一个监听器,去测试下。首先需要实现一个AutoConfigurationImportListener接口。public class DefaultAutoConfigurationImportListener implements AutoConfigurationImportL...
2020-04-15 17:22:33
240
原创 Spring Boot自定义@Enable模块驱动
Spring Boot自定义@Enable模块驱动注解驱动 先看下Spring Framework已有的实现,@EnableWebMvc@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE})@Documented@Import({DelegatingWebMvcConfiguration.class})publi...
2020-04-14 17:42:30
160
原创 Java并发源码:BlockingQueue
Java并发源码:BlockingQueue 阻塞队列是一个支持阻塞的插入方法和阻塞的移除方法的队列。方法抛出异常返回特殊值一直阻塞超时退出插入方法add(e)offer(e)put(e)offer(e,time,unit)移除方法remove(e)poll()take()poll(time,unit)检查方法element()pee...
2020-01-02 16:11:01
137
1
原创 Java并发源码:ConcurrentHashMap
Java并发源码:ConcurrentHashMap为什么要使用ConcurrentHashMap不安全的HashMap效率低下的HashTableConcurrentHashMap的锁分段技术可以有效提升并发访问率ConcurrentHashMap的结构 ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成的。 Jdk1.7 Segm...
2019-12-31 15:30:49
101
原创 java并发源码:Condition
java并发源码:Condition比对Object的监视器方法和Condition接口对比项ObjectCondition前置条件获取对象的锁调用Lock.lock()获取锁 ...
2019-12-25 15:05:05
112
原创 java并发源码:ReentrantReadWriteLock
java并发源码:ReentrantReadWriteLock结构可见ReentrantReadWriteLock实现了ReadWriteLock接口。ReadWriteLock接口定义了两个接口:Lock readLock()Lock writeLock() ReentrantLock是排他锁,在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个线程访问。但是在写线...
2019-12-23 16:05:11
88
原创 java并发源码:ReentrantLock
java并发源码:ReentrantLock结构可见ReentrantLock实现了Lock接口。locklock接口定义了五个方法。void lock();:获取锁。void lockInterruptibly() throws InterruptedException;:可中断的获取锁,该方法会响应中断。boolean tryLock();:尝试非阻塞的获取锁。boolean...
2019-12-12 14:57:43
101
原创 java并发源码:Synchronized
java并发源码:Synchronizedsynchronized加锁方式:修饰实例方法:锁是当前对象。修饰静态方法:锁是当前类的class对象。修饰代码块:锁是synchronized括号里配置的对象。 JVM基于进入和退出Monitor对象来实现方法同步和代码块同步的。代码块同步是用monitorenter 和monitorexit指令实现的。 public void tes...
2019-12-11 11:06:00
266
原创 java并发源码:volatile
java并发源码:volatilevolatile的定义: java编程语言运行线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排它锁单独获得这个变量。如果一个变量被声明成volatile,java线程内存模型确保所有线程看到这个变量的值是一致的。(可见性)volatile的作用:1.保证变量在多线程中的可见性 为了提高处理速度,处理器不直接和内存进行通信,而...
2019-12-10 16:25:12
172
原创 java并发源码:AbstractQueuedSynchronizer
java并发源码:AbstractQueuedSynchronizer一、简介[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pEGdDFSw-1575887227561) AQS(队列同步器)是用来构建锁或者其它同步组件的基础框架,它使用了一个int成员变量来标识同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。 AQS面向的是锁的实现者,它...
2019-12-09 18:29:32
127
转载 线上故障应用排查:高内存占用
前一篇介绍了线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查。搞Java开发的,经常会碰到下面两种异常:1、java.lang.OutOfMemoryError: PermGen space2、java.lang.OutOfMemoryError: Java heap space要详细解释这两种异常,需要简单重提下Java内存模型。(友情提示:本博文章欢迎转...
2019-10-31 22:02:28
107
原创 java 源码阅读(五)HashSet
java 源码阅读(五)HashSetHashSet是一个无序,允许空值,不允许重复值的集合类。非线程安全类。继承/实现构造函数private transient HashMap<E,Object> map;private static final Object PRESENT = new Object();HashSet()public HashSet() { ...
2019-09-29 15:32:20
77
原创 java 源码阅读(四)Vector
java 源码阅读(四)VectorVector是一种变长集合类,基于数组实现。ArrayList允许空值和重复元素。当往Vector中添加的元素数量超过底层数量时,会进行扩容。Vector实现了RandomAccess接口,所以可以保证在O(1)复杂度下完成随机查找操作。是一个线程安全类。继承/实现构造函数protected Object[] elementData;protecte...
2019-09-27 16:10:00
168
原创 java 源码阅读(三)LinkedList
java 源码阅读(三)LinkedListLinkedList底层采用的是双向链表结构,支持空值和重复值。无法向ArrayList那样进行扩容,存储元素时,需要额外的空间存储前驱和后继的引用。LinkedList在链表头部和尾部的插入效率比较高,但在指定位置进行插入时,效率一般。操作复杂度为O(N)。LinkedList是非线程安全的集合类。继承/实现构造函数transient int...
2019-09-26 16:01:45
105
原创 Java 源码阅读(二) ArrayList
java 源码阅读(二) ArrayListArrayList是一种变长集合类,基于数组实现。ArrayList允许空值和重复元素。当往ArrayList中添加的元素数量超过底层数量时,会进行扩容。ArrayList实现了RandomAccess接口,所以可以保证在O(1)复杂度下完成随机查找操作。是一个非线程安全类,并发环境下,会出现错误。实现/继承的类和接口extends Abstra...
2019-09-25 15:42:34
182
原创 java 源码阅读(一) String
java 源码阅读(一) StringString的属性:char[] value;int hash;String的重要方法intern()/*** Returns a canonical representation for the string object.* <p>* A pool of strings, initially emp...
2019-09-24 15:21:39
120
转载 秒懂,Java 注解 (Annotation)你可以这样学
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/briblue/article/details/73824058文章开头先引入一处图片。这处图片引自老罗的博客。为了避免不必要的麻烦,首先声明我个人比较尊敬老罗的。至于为什么放这张图,自然是为本篇博文服务,接下来我自会说明。好...
2019-08-28 21:43:54
182
转载 数据库分库分表
转载自微信公众号,Java杂记.数据量过大,此时应该对数据进行拆分,分为垂直和水平两种。垂直拆分:水平拆分:上图中订单数据达到了4000万,我们也知道mysql单表存储量推荐是百万级,如果不进行处理,mysql单表数据太大,会导致性能变慢。使用方案可以参考数据进行水平拆分。把4000万数据拆分4张表或者更多。当然也可以分库,再分表;把压力从数据库层级分...
2019-07-30 18:57:53
181
原创 微服务(一)微服务理念
单体架构存在的问题:复杂性高 技术债务 部署频率低 可靠性差 扩展能力受限 阻碍技术创新什么是微服务:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常使用http资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务公用一个最小型的集中式的管理,服务可用不同的语言开发,使用不...
2019-06-10 17:15:08
1720
原创 http状态码
状态码 状态码英文名称 中文描述 100 Continue 继续。客户端应继续其请求 101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 200 OK 请求成功。一般用于GET与POST请求 201 Created 已创...
2019-06-02 08:36:30
228
原创 面试题:java deleteFile
需求:传一个file对象,写一个删除文件的方法。具体实现较简单,主要是考虑多种情况。文件是否存在 是否是文件夹,如果是文件夹,需要删除里面的文件之后才可以删除该文件夹 是否有其它程序在读取该文件,如果有,此时无法删除该文件。import java.io.*;import java.nio.file.Files;import java.util.Arrays;/** * @...
2019-06-01 10:04:49
198
原创 mysql 索引详解
我们在看一本书的时候,想找到相关的知识,先去看目录,然后定位到页码,然后找到对应的知识。mysql中的索引就是类似于目录的作用。一、索引类型:1.B-Tree索引B-Tree通常意味着所有的值都是按照顺序存储的,并且每一个叶子页到根的距离相同。B-TREE 每个节点都是一个二元数组: [key, data],所有节点都可以存储数据。key为索引key,data为除key之外的数...
2019-04-11 17:36:46
168
原创 Mysql explain
用explain来获取关于查询执行计划的信息。比如mysql中有慢查询语句,可以通过explian来返回其执行计划中的信息,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。explain命令EXPLAIN select * from address;explain 的列执行结果id select_type ta...
2019-04-11 11:39:37
763
转载 elasticsearch 基本概念
原博主地址接近实时(NRT)Elasticsearch 是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个很小的延迟(通常是 1 秒)。集群(cluster)代表一个集群,集群中有多个节点(node),其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来...
2019-04-08 22:15:19
92
原创 elasticsearch cat命令
关于cat命令可以通过curl 127.0.0.1:9200/_cat/command?help command是具体的命令。这里解释几个常用的。多个命令之间用&链接。command?v 显示表头。command?h过滤某几个字段。command?s status 状态官方API接口1.cat aliases显示有关索引当前配置的别名的信息,包括筛选器和...
2019-04-08 21:59:01
1169
原创 elasticSearch 基本操作类
elasticSearch官方文档地址 https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high.html因为官方后续不会支持transportClient,所以,本篇博客采用的是RestHighLevelClient客户端。版本是6.4.2。RestHighLevelCl...
2019-03-20 21:44:06
1262
原创 leetcode算法-链表篇-1 删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 -- head = [4,5,1,9],它可以表示为: 4 -> 5 -> 1 -> 9示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表...
2019-01-02 22:03:19
98
原创 leetcode算法-字符串篇-9 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况...
2019-01-02 21:51:15
102
原创 leetcode算法-字符串篇-8 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母
2019-01-02 21:29:10
154
空空如也
mysql语句与性能优化问题
2017-08-25
TA创建的收藏夹 TA关注的收藏夹
TA关注的人