- 博客(41)
- 资源 (2)
- 收藏
- 关注
原创 线程池 源码解析
线程池文章目录线程池线程池的创建`ThreadPoolExecutor` 的主要构造方法线程池的状态重要概念核心线程和非核心线程 在创建时并没有任何标识是核心线程和非核心线程,两者的区分由核心线程数量来区分,多余核心线程数的部分都为非核心线程,在线程销毁的时候,也不会指定销毁核心线程 或者非核心线程,而是任意的销毁某一个线程,使得线程池中线程数小于等于核心线程数`Worker` : 线程池的线程由`worker` 封装了 , `Worker` 是`ThreadPoolExecutor` 中定义的类主要属性
2020-12-20 19:41:10 260
原创 java线程 Thread 源码详解
线程文章目录线程概述jvm层面线程状态操作系统层面的线程状态重要方法线程的创建参考文章概述进程:应用程序在内存中分配的空间,也就是运行中的程序,各个进程之间互不干扰,进程是操作系统进行资源分配的基本单位,单独占有内存地址空间和其他系统资源线程: 线程是操作系统进行调度(cpu分配时间)的基本单位, 是在进程中执行的一个任务,共享所属进程的内存地址空间和资源jvm层面线程状态以下状态为虚拟机线程状态,并不映射任何操作系统的线程状态新建状态(NEW): 新创建的线程,还未调用start
2020-12-20 19:36:37 223
原创 TreeMap 源码解析
TreeMap简介红黑树结构key 不能为空节点是有序的,迭代顺序按照key值有序,可通过比较器指定排序规则非线程安全重要属性和结构/** * 比较器指定节点排序规则,如果为空则通过key对象默认排序实现,如Key 为Integer 类型则是通过Integer内部实现的compareTo 方法进行比较 */private final Comparator<? super K> comparator;/** * 根节点 */private trans
2020-12-20 19:32:14 143
原创 HashSet 源码解析
HashSet概述hashSet 是对HashMap 的封装,底层的实现都是由HashMap 的实现, HashSet 的值都存在HashMap 的key中,value 是一个默认的空对象,HashSet 的 不可重复特征,也是由HashMap key 的唯一性实现的重要属性//数据存储对象, 对元素的操作也是由map对象完成 private transient HashMap<E,Object> map;// map 中的 vaule 值private static fi
2020-12-20 19:31:06 121
原创 HashMap 源码分析
HashMap数据结构数组 + 链表/红黑树重要属性 /** * 结点冲突数达到8时,就会对哈希表进行调整,如果table容量小于64,那么会进行扩容, * 如果不小于64,那么会将冲突数达到8的那个单链表调整为红黑树. */ static final int TREEIFY_THRESHOLD = 8; /** * 如果原先就是红黑树,resize以后冲突结点数少于6了,就把红黑色恢复成单链表 */ static final int UNTREEIFY_THRESH
2020-12-20 19:29:51 90
原创 Vector 源码解析
Vector介绍Vector现在基本已经被弃用,Vector与ArrayList的实现基本相同,它们底层都是基于Object数组实现的,两者最大的区别在于ArrayList是非线程安全的,而Vector是线程安全的重要元素/*** 存储元素的数组*/protected Object[] elementData;/*** 集合中的元素个数*/protected int elementCount;/*** 扩容大小*/protected int capacityIncremen
2020-12-19 15:05:51 295 2
原创 LinkedList 源码
LinkedList重要属性使用双向链表实现,适用于更新频繁,查询较少的场景除了实现了List接口还实现了 Deque 接口,所以LinkedList 提供了列表相关的方法外还提供了双向队列相关的方法public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializ
2020-12-19 15:01:19 190 2
原创 ArrayList源码解析
List文章目录ListArrayList重要属性主要api插入方法 add删除元素 remove截取子集合 subList参考文档ArrayList重要属性通过无参构造方法创建ArrayLit 的时候,默认的数组空间是 DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}, 在第一次添加元素的时候会扩容并初始化数组的大小 ,所以对于需要添加元素的ArrayList的初始化尽量指定数组容量,避免扩容 /** * 数组默认容量 */ pr
2020-12-14 20:28:32 81
原创 spring boot application配置文件加载顺序
加载形式覆盖式加载,多个配置文件加载后形成互补的结果加载顺序:序号越小优先级越高,优先级高的会覆盖优先级低的配置同目录下, 有application.yml 也有application.properties, application.properties优先级更高java 项目启动命令启动命令 : java -jar jar包名称指定启动加载配置 : java -jar jar包名称 --spring.config.location=D:/xxx指定多个配置(多个配置见通
2020-07-26 11:48:57 426
原创 参数校验
controller 层参数校验1. dto 参数校验 : method param@Valid/@Validated +Dto 约束注解2. @RequestParam 参数校验 : controller class@Validated + 约束注解service 层参数校验1. dto 参数校验 : class @Validated + method param @Valid + Dto 约束注解@Valid 和 @Validated 区别所属包不同@Valid 是 javax 提
2020-07-26 11:46:02 213
原创 【redis】使用redis 缓存时 出现Jackson 反序列化失败
错误现象错误栈最顶层org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Unrecognized field "fff" (class xxx ), not marked as ignorable ····错误栈底层at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(Unrecogni
2020-06-07 11:16:36 2150
原创 【spring】统一异常处理
作用统一处理抛出的异常,简化异常处理对前端友好,错误代码不会跑到前端,且返回统一的数据格式也方便前端统一处理实现类上添加 @ControllerAdvice + @ResponseBody 或者 @RestControllerAdvice 注解方法上添加 @ExceptionHandler 注解,通过value属性指定处理的异常类型,多个异常类型用逗号分隔定义统一的返回对象 如示例中的 BaseResponse类型示例@Slf4j@ControllerAdvice@Respons
2020-06-07 11:11:22 205
原创 【消息队列】kafka 入门
概述定义kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域消息队列的好处解耦 ,异步通信,可控制消费时机可恢复性,消费失败可以进行补偿缓冲,削峰,解决生产速度和消费速度不一致,生产大于消费的情况消息队列的两种模式点对点模式 : 一对一,消费者消费后会清除消息发布/订阅模式 : 一对多,消费者消费数据后不会清除消息...
2020-03-12 11:51:23 242
原创 【消息队列】kafka producer demo
package com.producer;import com.alibaba.fastjson.JSON;import com.baturu.message.Message;import com.dto.OrderDetailTimeCostCompleteMessageDTO;import com.dto.TimeCostCompleteMessageDTO;import com...
2020-03-12 11:50:24 525
原创 【消息队列】kafka consumer demo
package consumer;import org.apache.kafka.clients.consumer.ConsumerConfig;import org.apache.kafka.clients.consumer.ConsumerRecord;import org.apache.kafka.clients.consumer.ConsumerRecords;import o...
2020-03-12 11:48:40 399
原创 【git】git简介与常用命令
git 简介1. git 概述分布式 版本控制系统2. 与svn 的区别git 是分布式的版本控制系统分布式: 没有中央服务器之说,每个人的电脑都是完整的版本库,每次只提交改动点。svn 是集中式的版本控制系统集中式 : 版本库存放在中央服务器,工作前需要先从中央服务器获取最新版本,在开始在自己的电脑上工作。3. git 版本库版本库概念: 仓库,目录...
2020-02-18 12:22:03 104
原创 【jvm】jvm调优
原资料jvm 类型有两种类型的 hotspot jvm ,即 “server” 和 “client" 。 jvm 可根据内存,机器情况,自动选择jvm类型。 如果想手动选择,则可通过 -server 和 -client 参数指定jvm 类型。server : 服务端类型,有更多的堆内存,并行的垃圾收集器,运行时可更大程度的优化代码client : 客户端类型,相比服务端类型,有更少的堆内...
2019-12-29 11:13:45 124
原创 【jvm】jvm介绍
JVM的基本特性:基于栈(Stack-based)的虚拟机: 不同于Intel x86和ARM等比较流行的计算机处理器都是基于寄存器(register)架构,JVM是基于栈执行的。符号引用(Symbolic reference): 除基本类型外的所有Java类型(类和接口)都是通过符号引用取得关联的,而非显式的基于内存地址的引用。垃圾回收机制: 类的实例通过用户代码进行显式创建,但却通过垃...
2019-06-15 15:56:57 406
原创 【mysql】innodb学习笔记
这里写自定义目录标题mysqlmysql 的组成mysql 的存储引擎介绍innodb1. innodb是多线程引擎 后台现场介绍2. innodb 内存master threadinnodb 新特性索引组织表逻辑存储结构页行约束 (保证数据的完整性)触发器视图mysqlmysql 的组成mysql 的存储引擎介绍innodb1. innodb是多线程引擎 后台现场介绍2. innodb 内存ma...
2019-06-15 15:49:07 329
原创 代码整洁之道
代码整洁之道1. 整洁的代码 整洁的代码只做一件事(单一职责原则) 没有改进的余地:尽量不要让别人抓住把柄,如果一段代码自己都不满意那就修改它,直到满意为止! 不要找不知道如何修改的借口 不要有重复的代码(提高分析和表达能力,消除重复) 2. 有意义的命名 名副其实:通过一个命名使得代码含义明确 避免二义性误导 :如 accountLis...
2019-02-24 11:07:11 349
原创 【es】es 批量upsert
es 批量upsert使用场景 批量操作数据 如果存在这条数据,则更新,如果不存在这条数据 则插入 代码实现private void insert(List<SaleStorageIn> saleStorageIns) { RestHighLevelClient client = elasticsearchClientBuilder.getC...
2019-02-16 11:14:22 5645
原创 【算法】kmp算法
kmp 算法1. 概述 定义: 是一种改进的字符串匹配算法 传统匹配算法 主要思想 利用匹配失败后的信息以及已经匹配成功的信息,减少模式串与主串的匹配次数 计算模式串内部的匹配信息,匹配失败时最大的移动模式串,减少匹配次数 在已经匹配的模式串子串中,找出模式串中最长的相同的前缀和后缀,使他们重叠(前缀位置移动到后缀位置 ,最大...
2019-01-31 13:42:35 131
原创 哈夫曼树,哈夫曼编码
哈夫曼树1.历史首先是为了找到最有效的高效的(空间,整体)编码,然后借助数据结构种的树型结构,发现通过构建这样一颗二叉树,可以得到最有效的编码2.概念 给定n个权值作为n个叶子结点,构造一棵二叉树,若树的带权路径长度达到最小的树。又称最优二叉树,整体判定过程效率最高的数据结构 1. 二叉树2. 带权的节点为叶子节点3. 树的带权路径长度最小 相关概念: ...
2019-01-23 18:37:17 525
原创 【mybatis】mybatis框架(作用,事务,主要流程,插件)
使用mybatis的好处 只需要写好sql语句,无需关心一下点 数据库连接,资源释放问题 参数处理问题 结果集处理问题 sql语句可以同一管理 提高sql语句的复用性 mybatis的主要工作流程 在容器启动的时候通过SqlSessionFactoryBean 创建SqlSessionFactoryBuilder对...
2018-08-31 17:56:24 245
原创 【mysql】数据库查询优化
1. 数据库表结构(设计)优化 合理选择表字段类型类型 int类型优先于varchar 类型 优先于 text类型 varchar (变长字符串)类型优先于 char(不可变长)类型 表分割:对于频繁使用的且数据量增长很快的表进行表的分割 水平分割:将表进行水平条目方向的分割,根据数据的活跃度(被使用程度)将表分为主表、次表等等...
2018-06-01 17:36:27 226
原创 JavaScript执行顺序
1.JavaScript在 html 中的执行顺序JavaScript需要被HTML文件引用(内嵌或外链)才能在浏览器中运行。当浏览器遇到内嵌式的<script>标签时,浏览器会先停止处理页面,先执行JavaScript代码,然后再继续解析和渲染页面。当浏览器遇到外链的JavaScript的时候,也必须先停止页面处理,先下载外链文件的JavaScript代码,并解析执行它,然后再继续解...
2018-02-24 16:28:06 279
原创 事务概述
事务概述[事务思维导图] https://www.edrawsoft.cn/viewer/public/s/3c42b5852809241. 简介事务是并发控制的单元,是用户定义的一个操作序列。是一个不可分割的工作单位。 自动提交事务: 每条单独的语句都是一个事务,每个语句后都隐藏一个commit 显示事务:以 begin transaction 显示开始,以commi...
2018-02-24 16:25:39 240
原创 Linux学习笔记一
Linux 简介Linux 的引用领域基于Linux的企业服务器嵌入式领域windows 与 Linux的区别Linux严格区分大小写Linux中所有内容(排除临时的)以文件形式存在,包括硬件Linux 不存在扩展名,不依靠扩展名区分文件类型,依靠权限来区分文件类型windows下的程序不能直接在Linux中安装和运行Linux字符界面的优势:字符界面占用的系统资源更少字符界面减少出错和被攻击的可...
2018-02-24 16:23:12 226
原创 fastxml Jackson
一、 fastXml Jackson1. 概述a) 简介:是一个基于java平台的数据处理工具,json解析器。可以将java对象序列化为json格式的字符串,也可以将json反序列化为java对象。b) 处理方法 i. Streaming API:高效(开销低,速度快,但是程序编写复杂) i.
2017-11-22 17:40:13 6324
原创 xml——简述、约束、解析
一、 Xml简介1. 概述a) Xml是可扩展性的标记语言,设计被用来格式化存储,传递数据,而不是像HTML一样显示数据。b) Xml的标签没有预定义的,都需要自己定义c) Xml必须有且只有一个根标签,且标签必须要正确的嵌套,必须闭合,标签是大小写敏感的。d) Xml中的元素必须有关闭标签,但是Xml的声明没有关闭标签因为声明
2017-11-22 11:15:27 890
原创 junit与mockMVC测试
一、 Junit常用注解1. @Before: 在每个测试方法执行之前都会执行一次,常用于初始化数据,资源2. @BeforeClass: 在所有测试方法执行之前执行,只执行一次,类必须用static void 修饰3. @AfterClass:在所有测试方法之后执行,只执行一次,类必须用static void 修饰4. @After:
2017-11-09 10:44:54 1207
原创 SpringMVC中@ModelAttribute注解
package com.controller;import com.entity.User;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.ModelAttribute;i
2017-11-07 14:33:17 375
原创 【设计模式】代理模式
代理模式概述: 代理模式为另一个对象(被代理对象)提供一个替身或占位符(代理对象)以控制对这个对象的访问。使用代理模式创建代理对象,让代理对象控制某对象的访问,被代理的对象可是是远程对象,创建开销大的对象或者需要安全控制的对象。作用:1.远程代理控制对远程对象的访问2.虚拟代理控制访问创建开销大的资源3.保护代理基于控制
2017-10-10 17:06:21 200
原创 【设计模式】装饰者模式与适配器模式
装饰模式(添加行为)一、 定义:通过组合,装饰者模式动态的将责任添加到对象上,从而扩展对象的行为功能。二、 概述:a) 装饰者和被装饰对象都有相同的超类型,所以在需要被装饰者对象的场合都可以使用装饰者对象代替b) 装饰者可以在所委托被装饰者的行为之前或之后,加上自己的行为,从而达到特定的目的(实现行为的添加)c) 对象可以在任何时候被修饰,可以在运行时动态的,不限量的被
2017-09-18 19:25:24 1019
原创 SSM整合之配置文件的编写
SSM整合之配置文件的编写web.xml的编写web.xml中主要包含springMVC相关的配置和Spring相关配置 springMVC相关的配置:通过配置来配置springMVC的配置文件路径 springMVC org.springframework.web.servlet.DispatcherServlet
2017-09-16 15:30:17 338
原创 MVC与三层结构的差别
MVC与三层结构的差别说MVC和三层结构不同,可到底有什么不同,一直没搞清楚,试着梳理了一下。要搞清他们的区别,主要还是要搞清各自的三个层的主要作用。三层结构:在客户端与数据库之间加入一个中间层。客户端不直接与数据库进行交互,中间层建立连接,再经由中间层与数据库进行交互 客户端:界面层,展示数据中间层:处理业务逻辑、业务规则,控制数据访问、合法性校验等工作数据库:包
2017-09-07 11:13:08 248
原创 【myBatis】SqlSession对象获取的封装工具类
myBatis 中需要 SqlSession对象中的方法来调用接口中的方法或通过反射取得接口对象,将SqlSession对象的获取封装,便于以后的使用import java.io.IOException;import java.io.Reader;import org.apache.ibatis.io.Resources;import org.apache.ibatis.se
2017-09-04 17:27:12 1823
原创 Java类的加载与初始化
Java类的加载与初始化java虚拟机加载.class的过程加载——验证——准备——解析——初始化 顺序确定,但又相互交叉混合进行{子父类之间的顺序:为保证父类的静态块在子类的静态块之前执行,子类在执行玩解析后,会先执行父类的初始化}加载阶段:jvm使用类加载器,将编译好的.class字节码文件,通过指定的类全限定名,获取此类的二进制字节流,然后将此二进制字节流转换为方法区的数据结构,
2017-08-25 14:30:29 315
原创 成员变量的隐藏
概念当父类和子类有相同的成员变量时,即定义了与父类相同的成员变量时(只有变量名相同即可,类型,修饰符都可以不同),就会发生子类对父类变量的隐藏。对于子类的对象来说,父类中的同名成员变量被隐藏起来,子类就会优先使用自己的成员变量,父类成员隐藏。
2017-08-21 20:23:32 599
原创 【设计模式】模板方法模式
模板方法模式的定义在方法中定义算法的骨架,而将一些步骤,具体实现交由子类完成。使得子类在不改变算法结构的情况下,重新定义或实现算法的某些步骤。更具体的说,这个方法将算法定义成一组步骤(方法),其中任何步骤(方法)都可以是抽象的,由子类负责实现。模板方法模式的具体实现定义一个抽象类,抽象类中包括被final修饰的模板方法,模板方法中定义一组方法,这些方法可以是抽象的可
2017-08-19 09:43:57 321
myBatis源码及jar包
2017-09-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人