![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 86
DougLeaMrConcurrency
内推阿里巴巴、蚂蚁集团,校招社招都可以,有需要推荐的请私聊我。
展开
-
Java核心源码之ArrayList、LinkedList:ArrayList、LinkedList的区别、扩容机制、底层数据结构、核心API源码分析
1. ArrayList 简介ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity操作来增加 ArrayList实例的容量。这可以减少递增式再分配的数量。ArrayList继承于 AbstractList ,实现了 List, RandomAccess, Cloneable, java.io.Serializable 这些接口。public class ArrayList<E>原创 2021-09-20 17:44:56 · 1015 阅读 · 0 评论 -
Java异步编程源码及原理解析:Future、FutureTask、@Async、ForkJoin框架、CompletableFuture、Redis队列、Reactive响应式编程的优缺点及适用场景
Java异步编程源码及原理解析目录1.Fork-Join2.FutureTask3.Async注解介绍4.CompletableFuture5.中间件+线程池会当凌绝顶,一览众山小。1.Fork-Join框架介绍从一道面试题讲起:如何使用多线程实现归并排序?public class Solution { private static final ForkJoinPool pool = new ForkJoinPool(4); // N 核心处理器 // 多线程排序原创 2021-09-03 19:10:34 · 2142 阅读 · 0 评论 -
Java源码HashMap、ConcurrentHashMap:JDK1.8HashMap静态常量以及设置的目的,初始容量、最大容量、扩容缩容树化条件
作为工作中最重要、最常用的容器之一,当然还是要自己动手写一篇 HashMap 的源码解析来加深对其的印象咯,而且它的设计与实现 也有很多值得学习的地方。以下包含HashMap核心静态常量说明以及变量的注释说明。源码赏析JDK1.8 的 HashMap 底层使用的是 动态数组,数组中元素存放的是 链表或红黑树。核心源码如下。public class HashMap<K, V> extends AbstractMap<K, V> implements Map<K, V>原创 2021-08-24 11:13:48 · 805 阅读 · 1 评论 -
Java算法:牛客网百度笔试真题算法Java版1-19题
题号 题目 知识点 难度 通过率 BD1 罪犯转移 动态规划 较难 15.94% BD2 裁减网格纸 贪心 中等 25.14% BD3 钓鱼比赛 数学 困难 14.79% BD4 蘑菇阵 动态规划 较难 14.64% BD5 字符串匹配 字符串模拟穷举 中等 28.26% BD6 表格排序 排序模拟 中等 24.81% BD7 替换链接 字符串模拟 中等 3.09% BD8 完成括号匹配 字符串模拟栈 中等 34.55% BD9 倒计时 模拟 中等 12.35% BD10 字符覆盖原创 2021-04-20 23:52:17 · 574 阅读 · 0 评论 -
Java算法:牛客网小米笔试真题算法Java版1-40题
题号 题目 知识点 难度 通过率 XM1 小米Git 树 困难 10.22% XM2 懂二进制 中等 29.90% XM3 风口的猪-中国牛市 ...原创 2021-04-20 23:50:57 · 1459 阅读 · 1 评论 -
【Java书笔记】:《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》第2部分-自动内存管理,第3部分-虚拟机执行子系统,第5部分-高效并发
作者:周志明整理者GitHub:https://github.com/starjuly/UnderstandingTheJVM第2部分-自动内存管理第2章 Java内存区域与内存溢出异常2.2 运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机的进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括以原创 2021-02-23 20:40:34 · 1462 阅读 · 0 评论 -
Spring源码(Ioc):BeanDefinition的资源定位过程,将bean解析封装成BeanDefinition,将BeanDefinition注册进IoC容器,依赖注入(DI).BeanPo
1、BeanDefinition的资源定位过程正文当我们传入一个 Spring 配置文件去实例化 FileSystemXmlApplicationContext 时,可以看一下它的构造方法都做了什么。/** * 下面这 4 个构造方法都调用了第 5 个构造方法 * @param configLocation * @throws BeansException */// configLocation 包含了 BeanDefinition 所在的文件路径public FileSystemXml原创 2021-02-20 23:05:14 · 316 阅读 · 0 评论 -
SpringCloudAlibaba源码(Nacos、Sentinel):nacos-discovery,Sentinel底层LongAdder的计数实现、时间窗口的实现,限流算法的实现
Nacos 服务注册nacos-spring-boot-project 中有关服务注册的几个项目nacos-discovery-spring-boot-actuatornacos-discovery-spring-boot-autoconfigurenacos-discovery-spring-boot-starterorg.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.alibaba.boot.na原创 2021-02-21 19:19:27 · 402 阅读 · 0 评论 -
SpringBoot源码:Run,application-load,ConditionalOnBean,ConfigurationProperties,LogSystem,自动装配源码
SpringBoot 启动方法Author: HuiFer源码阅读仓库: SourceHot-spring-boot入口通常一个简单的 SpringBoot 基础项目我们会有如下代码@SpringBootApplication@RestController@RequestMapping("/")public class Application { public static void main(String[] args) { SpringApplication.run(Ap原创 2021-02-21 14:14:51 · 311 阅读 · 0 评论 -
MyBatis源码(核心处理层):MyBatis初始化,StatementHandler,Executor,SqlSession,Alias,Cursor,DataSource,MapperMetho
1、MyBatis初始化和 Spring 框架 的 IoC 容器初始化 一样,Mybatis 也会通过定位、解析相应的配置文件完成自己的初始化。Mybatis 的配置文件主要有 mybatis-config.xml 核心配置文件 及一系列映射配置文件,另外,Mybatis 也会根据注解进行配置。1 BaseBuilderMybatis 初始化 的主要内容是加载并解析 mybatis-config.xml 配置文件、映射配置文件以及相关的注解信息。Mybatis 的初始化入口是 SqlSessionFa原创 2021-02-21 13:05:28 · 345 阅读 · 0 评论 -
MyBatis源码(基础支持层):反射工具箱和TypeHandler系列,反射工具箱和TypeHandler系列,binding模块,缓存模块,Mybatis-Cache,log,Reflector
1、反射工具箱和TypeHandler系列在 Mybatis 的基础支持层主要看一下支撑 ORM 实现 的底层代码。1 反射工具包1.1ReflectorReflector 类 主要实现了对 JavaBean 的元数据属性的封装,比如:可读属性列表,可写属性列表;及反射操作的封装,如:属性对应的 setter 方法,getter 方法 的反射调用。源码实现如下:public class Reflector { /** JavaBean 的 Class类型,在调用 Reflector 的构造方原创 2021-02-21 12:27:47 · 267 阅读 · 0 评论 -
Spring源码(SpringTransaction):Spring与事务处理,Spring事务处理的设计与实现,Spring事务管理器的设计与实现,Spring声明式事务处理
Spring与事务处理JavaEE 应用中的事务处理是一个重要并且涉及范围很广的领域。事务管理的实现往往涉及并发和数据一致性方面的问题。作为应用平台的 Spring,具有在多种环境中配置和使用事务处理的能力,也就是说通过使用 Spring 的事务组件,可以把事务处理的工作统一起来,并为事务处理提供通用的支持。在涉及单个数据库局部事务的事务处理中,事务的最终实现和数据库的支持是紧密相关的。对局部数据库事务来说,一个事务处理的操作单元往往对应着一系列的数据库操作。数据库产品对这些数据库的 SQL 操作 已经原创 2021-02-21 12:10:47 · 223 阅读 · 1 评论 -
Spring源码(SpringMVC):Spring HandlerMapping,MappingRegistry
Spring HandlerMappingAuthor: HuiFer源码阅读仓库: SourceHot-spring源码路径: org.springframework.jms.annotation.EnableJmsorg.springframework.web.servlet.HandlerMappingHandlerMapping 处理映射关系, 通过请求转换成对象HandlerExecutionChainpublic interface HandlerMappin原创 2021-02-21 12:00:40 · 385 阅读 · 2 评论 -
Spring源码(AOP):AOP源码实现及分析,JDK动态代理的实现原理解析,Spring-Aop如何生效
作者GitHub:https://github.com/AmyliaY/spring-aop-readingAOP源码实现及分析1 主要的接口1.1 Advice 通知本接口定义了切面的增强方式,如:前置增强 BeforeAdvice,后置增强 AfterAdvice,异常增强 ThrowsAdvice 等。下面看两个主要的子接口的源码。public interface MethodBeforeAdvice extends BeforeAdvice { /** * 目标方法 m原创 2021-02-20 23:22:21 · 287 阅读 · 0 评论 -
Java并发程序设计教程:Executor,阻塞队列,线程间的协调手段,Lock-free,CountDownlatch,定时器ScheduledExecutorService,并发知识点总结
Java并发程序设计教程(作者:温绍锦)原创 2021-02-19 13:43:31 · 116 阅读 · 0 评论 -
Java并发知识梳理(下):ThreadPoolExecutor,FutureTask,Atomic包,CountDownLatch,CyclicBarrier,Semaphore,Exchanger
接上文:Java并发知识梳理(中):读写锁,Condition与Signal等待机制,LockSupport工具,并发容器,ThreadLocal及内存泄漏,BlockingQueue21.线程池ThreadPoolExecutor实现原理1. 为什么要使用线程池在实际使用中,线程是很占用系统资源的,如果对线程管理不善很容易导致系统问题。因此,在大多数并发框架中都会使用线程池来管理线程,使用线程池管理线程主要有如下好处:降低资源消耗。通过复用已存在的线程和降低线程关闭的次数来尽可能降低系统性能损耗原创 2021-02-17 22:34:58 · 360 阅读 · 0 评论 -
Java并发知识梳理(中):读写锁,Condition与Signal等待机制,LockSupport工具,并发容器,ThreadLocal及内存泄漏,BlockingQueue
接上文:Java并发知识梳理(上):并发优缺点,线程状态转换,Java内存模型,Synchronized,Volatile,final,并发三特性,Lock与AQS,ReetrandLock11.深入理解读写锁ReentrantReadWriteLock1.读写锁的介绍在并发场景中用于解决线程安全的问题,我们几乎会高频率的使用到独占式锁,通常使用java提供的关键字synchronized(关于synchronized可以看这篇文章)或者concurrents包中实现了Lock接口的Reentrant原创 2021-02-17 22:29:53 · 587 阅读 · 0 评论 -
Java并发知识梳理(上):并发优缺点,线程状态转换,Java内存模型,Synchronized,Volatile,final,并发三特性,Lock与AQS,ReetrandLock
努力的意义,就是,在以后的日子里,放眼望去全是自己喜欢的人和事!整个系列文章为Java并发专题,一是自己的兴趣,二是,这部分在实际理解上很有难度,另外在面试过程中也是经常被问到。所以在学习过程中,记录了Java并发相关的基础知识,一是自己对知识能够建立体系,同时也希望有幸能够对其他人有用。基础知识1.1 并发编程的优缺点知识点:(1)为什么要用到并发?(优点);(2)并发编程的缺点;(3)易混淆的概念1.2 线程的状态和基本操作知识点:(1)如何新建线程;(2)线程状态的转换;(3)线程.原创 2021-02-17 22:26:22 · 409 阅读 · 0 评论 -
【Java书笔记】:《Redis 深度历险:核心原理和应用实践》分布式锁,延时队列,位图,HyperLogLog,布隆过滤器,漏斗限流,GeoHash,Scan,管道,事务,主从,Redis源码
Redis深度历险:核心原理和应用实践目 录开篇:授人以鱼不若授人以渔——Redis可以用来做什么? 7由Redis面试想到的 7小册的内容范围 8Redis可以做什么? 8小结 9扩展阅读 9基础:万丈高楼平地起——Redis基础数据结构 11Redis安装 11Redis基础数据结构 12string(字符串) 12list(列表) 15hash(字典) 17set(集合) 19容器型数据结构的通用规则 22思 ...原创 2021-02-17 17:46:46 · 1660 阅读 · 3 评论 -
查询ODPS数据报ORDER BY must be used with a LIMIT clause, please set odps.sql.validate.orderby.limit=false
在使用Java JDBC查询ODPS上的数据时,若使用了Order By,会遇到如下错误:failed: ODPS-0130071:[1,307] Semantic analysis exception - ORDER BY must be used with a LIMIT clause, please set odps.sql.validate.orderby.limit=false to use it.出错原因:没有加Limit,添加LIMIT 10000(limit的值根据业务自由设置)后原创 2021-02-02 19:46:57 · 3328 阅读 · 0 评论 -
Java解析SQL中的表名:使用Druid解析SQL中的表名,使用Alibaba Druid解析SQL中的数据库类型、字段、表名、条件、聚合类型、排序类型。
在工作中,我们有时候需要根据前端传来的SQL解析出SQL中的表名,使用网上各种通过正则表达式解析SQL的代码不仅麻烦,其中或多或少都会有各种Bug,现在使用Druid解析SQL,能快速解决问题。步骤如下:第一步、pom文件中添加druid依赖: <dependency> <groupId>com.alibaba</groupId> <artifactId>dru原创 2020-12-09 11:16:20 · 9366 阅读 · 3 评论 -
Java父子对象属性赋值问题:使用Spring的BeanUtils将父类对象的属性赋值给子类,Java如何将父类对象属性值赋值给子类?
Java父子对象属性赋值问题:现有父类Father类,子类Son类继承于Father类,现要求将父类对象的属性值全部赋予给子类,如果通过子类对象.set(父类对象.get属性),那势必相当麻烦。那么,有没有更加方便的API呢?Spring提供了BeanUtils.copyProperties();可以实现该功能。父类Father类的属性如下:@Dataclass Father { private int hight; @Override public String原创 2020-09-18 19:22:23 · 6900 阅读 · 0 评论 -
Apache ShardingSphere:ShardingSphere中间件4.x介绍,分库分表读写分离,ShardingSphere-JDBC,Proxy,ShardingSphere事务,XA
Apache ShardingSphere 4.x介绍及应用目录第1章Apache ShardingSphere概述 11.1.ShardingSphere是什么? 11.1.1.来源 21.1.2.定位 21.1.3.产品 21.2.ShardingSphere有什么用? 21.2.1.功能 21.2.2.优势 21.2.3.ShardingSphere产品组件对比 31.2.4.同类产品对比 31.3.谁在用Shar...原创 2020-09-11 11:53:39 · 2444 阅读 · 0 评论 -
Spring事务:Spring声明式事务详解、@Transactional注解源码及使用说明、数据库隔离级别、读未提交,读已提交,可重复读,串行化详细说明
Spring声明式事务的使用SpringAOP的约定会把我们的代码织入约定的流程中。同样地,使用AOP的思维后,执行SQL的代码就可以织入Spring约定的数据库事务的流程中。所以首先需要掌握这个约定。Spring 声明式数据库事务约定在讲解SpringAOP时,只要我们遵循约定,就可以把自己开发的代码织入约定的流程中。为了“擦除”令人厌烦的try..catch..finally.语句,减少那些数据库连接开闭和事务回滚提交的代码,Spring利用其AOP为我们提供了一个数据库事务的约定流程。通过原创 2020-09-04 15:52:10 · 3175 阅读 · 0 评论 -
Java多线程并发:Java8并发新特性、JDK1.8并发API、StampedLock、Java8第五种线程池newWorkStealingPool抢占式、ConcurrentHashMap新API
Java8并发新特性Java8新增的并发API主要如下,内容是翻译的JDK1.8的官方文档,欢迎转载,转载请注明出处。ForkJoinPool.commonPool() ConcurrentHashMap(v8) ConcurrentHashMap.newKeySet() ConcurrentHashMap.newKeySet(int) CompletableFuture StampedLock LongAdder LongAccumulator DoubleAdder Doubl原创 2020-05-09 18:54:37 · 1195 阅读 · 0 评论 -
SpringBoot:SpringBoot入门配置文件YAML与properties,日志SLF4J,Web开发Thymeleaf,docker安装,数据访问,SpringDataJPA,自动配置原理
**一、**Spring Boot 入门1、Spring Boot 简介简化Spring应用开发的一个框架;整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案;2、微服务2014,martin fowler微服务:架构风格(服务微化)一个应用应该是一组小型服务;可以通过HTTP的方式进行互通;单体应用:ALL IN ONE微服务:每一个功能元素最终都是一个可独...原创 2020-04-30 23:38:55 · 734 阅读 · 0 评论 -
Java算法:LeetCode算法题目精选,两数之和,爬楼梯,翻转二叉树,反转链表,LRU缓存机制,最长回文子串,有效的括号,数组中的第K个最大元素,实现 Trie (前缀树),编辑距离,Java算法
LeetCode题目精选两数之和链接:https://leetcode-cn.com/problems/two-sum/给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。给定 nums = [2, 7, 11, 15], target...原创 2020-04-06 20:31:42 · 273 阅读 · 0 评论 -
Java算法:LeetCode算法Java版,百度公司算法笔试面试题LeetCode整理,百度校招算法刷题,百度算法Java版,Java版快速排序及优化后的快排,归并排序、堆排序,百度算法20道题
最近要参加百度公司2020春招的校招面试,特整理了下百度公司的算法题笔试面试题,以此纪念百度对我的认可。资源来源于LeetCode,纯手打,喜欢请支持正版。再次感谢百度!目录两数之和... 1两数相加... 1无重复字符的最长子串... 2两个排序数组的中位数... 3最长回文子串... 4有效的括号... 5搜索旋转排序数组... 6旋转图像.....原创 2020-04-03 18:15:44 · 1947 阅读 · 5 评论