自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring的Factories机制介绍

在看本节文章之前,建议大家先去了一下java的SPI机制,因为Spring的Factories就是Spring版本的Java Spi,我在关于java基础系列文章中有详细介绍Java SPI机制。 Spring Factories的最重要的功能就是:可以通过配置文件指定Spring容器加载一些特定的组件。基本概念什么是Spring FactoriesSpring Factories是一种类似于Java SPI的机制,它在META-INF/spring.factories文件中配置接口的实现类名称,然

2022-07-31 09:07:55 6696 2

原创 Spring基础只是—AOP的概念介绍

Spring容器包含两个重要的特性:面向切面编程(AOP)和控制反转(IOC)。面向切面编程是面向对象(OOP)的一种补充,在面向对象编程的过程中编程针对的目标是一个个对象,而面向切面编程中编程针对的目标是一个个切面。切面支持跨类型跨对象(如事务的切面可以加在任何地方)进行模块化。前言AOP是Spring的关键特性之一,虽然Spring的IOC特性并不依赖于AOP(意味着你可以只使用Spring的IOC特性而不使用AOP特性),但是二者结合起来可以灵活的实现很多中间件解决方案。比如我们经常使用的事务

2022-06-11 18:15:00 233

原创 叮咚买菜抓包教程

本文仅供学习交流使用,请勿用于非法用途。本文以叮咚买菜为例,学习一下微信小程序如何抓包,获取叮咚买菜接口的参数以及返回值。叮咚买菜API抓包教程工具列表Windows微信客户端Fiddler抓包工具Python环境(任意版本)Pycharm(或者其它PythonIDE)环境准备微信环境准备步骤一:登录Windows微信,这一步比较简单,就不详细介绍了;步骤二:在windows微信搜索叮咚买菜;步骤三:打开叮咚买菜小程序;步骤四:登录叮咚买菜;Fiddler环境准备步

2022-04-15 11:21:38 1902

原创 SpringMVC 解析(五)URI链接处理

URI在网络请求中必不可少,Spring提供了一些工具类用于解析或者生成URL,比如根据参数生成GET的URL等。本文会对Spring MVC中的URI工具进行介绍,本文主要参考Spring官方文档。工具类UriComponentsUriComponentsBuilder可以用于根据URL和参数来构建路径,比如我们需要一个带GET参数的URL,通常情况下我们需要自己去拼接URL,添加"&"和"?等参数"。UriComponentsBuilder提供一种

2022-04-10 11:32:23 729

原创 SpringMVC 解析(四)编程式路由

多数情况下,我们在使用Spring的Controller时,会使用@RequestMapping的形式把请求按照URL路由到指定方法上。Spring还提供了一种编程的方式去实现请求和路由方法之间的路由关系,这种关系在Spring启动时确定,运行过程中不可变。编程式路由和注解式路由可以使用同一个DispatcherServlet。本文会对Spring编程式Endpoint进行介绍,本文主要参考了Spring官方文档。总览在Spring MVC编程式路由中一次请求会被一个处理方法进行处理,处理方法在Spri

2022-04-04 09:41:05 316

原创 SpringMVC 解析(三) Controller 注解

我在前面的文章中介绍了Spring MVC最核心的组件DispatcherServlet,DispatcherServlet把Servlet容器(如Tomcat)中的请求和Spring中的组件联系到一起,是SpringWeb应用的枢纽。但是我们在日常开发中往往不需要详细知道枢纽的作用,我们只需要处理枢纽分发给我们的请求。Spring中处理请求业务逻辑最常见的组件是Controller,本文会对Spring的Controller及相关组件做详细介绍。Controller的定义Controller是Spri

2022-02-16 17:04:54 5285

原创 SpringMVC 解析(二)DispatcherServlet

在我的关于Tomcat容器介绍的文章中,介绍了Tomcat容器的工作原理,我们知道Tomcat容器在收到请求之后,会把请求处理为Request/Response对象,交给Servlet实例处理。对于Spring的Web应用,得到Tomcat容器的请求之后会交给DispatcherServlet去处理。DispatcherServlet是Spring Web应用处理请求的核心组件,本文会介绍DispatcherServlet的工作原理及关键源码,本文主要参考了Spring的官方文档。Servlet简介

2022-02-09 13:40:07 1136

原创 SpringMVC 解析(一)概览

Spring MVC是Spring提供的构建Web应用程序的框架,该框架遵循了Servlet规范,负责接收并处理Servelt容器传递的请求,并将响应写回Response。Spring MVC以DispatcherServlet为核心,众多组件如HandlerMapping为辅助,为用户封装了请求映射等底层逻辑,让用户可以更专注与业务逻辑的处理。本文会对Spring MVC整体结构做简单介绍。Spring MVC结构图Spring MVC是一个基于Servlet容器的Web应用框架,这里的Servlet

2022-01-11 12:49:48 362

原创 Maven插件开发教程

Maven是一个一个优秀的项目管理开源框架,其插件机制为其功能扩展提供了非常大的便捷性。大多数情况下,我们不需要自己开发Maven插件,因为Maven本身提供了很多便捷的官方插件。但是对于某些特殊场景和特殊需求,开发一个自定义的Maven插件能大大提高开发效率。本文以一个简单的例子,展示如何创建一个自定义的Maven插件。Maven插件开发本文会以一个自制的Maven插件为例,展示如何使用Idea从0开始构建自制的Maven插件。Maven插件目标Maven本质是一个插件执行框架,所有的工作都是通过

2022-01-10 10:53:40 5536 3

原创 SpringBoot自动装配

SpringBoot是对Spring的一种扩展,其中比较重要的扩展功能就是自动装配:通过注解对常用的配置做默认配置,简化xml配置内容。本文会对Spring的自动配置的原理和部分源码进行解析,本文主要参考了Spring的官方文档。自动装配的组件SpringBoot自动装配通过多部分组件协调完成,这些组件主要有下面几种,这几种组件之间协调工作,最终完成了SpringBoot的自动装配。@EnableAutoConfiguration:用于根据用户所引用的jar包自动装配Spring容器,比如用户在Cl

2022-01-06 14:44:43 512

原创 InnoDB学习(八)之 聚簇索引

InnoDB中,表数据文件本身就是以主键为索引的B+树,树的叶子节点存放一条条表数据,此索引树被称为表的聚簇索引。聚簇索引也称为聚集索引,聚类索引,簇集索引,聚簇索引确定表中数据的物理顺序。InnoDB聚簇索引InnoDB表主键InnoDB中每张表都会有一个主键,表中的每一行数据都是按照主键的顺序在聚簇索引中存储的,InnoDB中有两种方式确定一行数据的主键:显式声明:用户可以在建表的时候通过primary key关键字来声明主键列;唯一索引:如果用户没有声明主键列,那么InnoDB会使用第一个

2022-01-05 14:16:18 1635

原创 InnoDB学习(七)之索引结构

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。可以将数据库索引和书的目录进行类比,通过书的目录我们可以快速查找到章节位置,如果没有目录就只能一页页翻书查找了。索引数据结构可以用于提升查询效率的索引结构很多,常见的有B树索引、哈希索引和B+树索引。接下来我们会对这些索引一一进行介绍,并说明InnoDB为什么采用B+树作为索引。磁盘IO文件是存储在硬盘上面的。当下硬盘的读取速度十分有限,所以在进行查询定位某个数据的时候,应该尽可能地减少磁盘I/O次数。磁盘

2022-01-04 16:25:21 3694

原创 InnoDB学习(六)之数据库锁

InnoDB存储引擎的默认隔离级别事可重复读,MVCC多版本并发控制仅仅解决了快照读情况下的数据隔离,而对于当前读,InnoDB通过锁来进行并发控制。InnoDB锁本文主要参考了MySQL官方文档,并在上面添加了一些自己的理解,有兴趣看英文的也可以看MySQL官方文档。本文分为以下章节:共享锁和独占锁;意向锁;行锁;间隙锁;Next-Key锁插入意向锁;自增锁;共享锁和排他锁InnoDB锁的最小粒度是行锁,行锁可以分为两大类:共享锁(S)和独占锁(X)。共享锁:持有某行数据共享

2021-12-23 14:57:27 1031

原创 InnoDB学习(五)之MVCC多版本并发控制

MVCC多版本并发控制,是一种数据库管理系统并发控制的方法。MVCC多版本并发控制下,数据库中的数据会有多个版本,分别对应不同的事务,从而达到事务之间并发数据的隔离。MVCC最大的优势是读不加锁,读写不冲突,在读多写少场景中,读写不冲突可以大幅提升数据库的并发性能。MVCC多版本并发控制在MYSQL中,MyISAM存储引擎使用的是表锁,InnoDB存储引擎使用的是行锁。而InnoDB的事务分为四个隔离级别,其中默认的隔离级别是可重复读,可重复读要求两个并行的事务之间数据的修改互不影响,通过添加行锁的方式

2021-12-15 14:01:26 1764

原创 InnoDB学习(四)之RedoLog和UndoLog

BinLog是MySQL Server层的日志,所有的MySQL存储引擎都支持BinLog。BinLog可以支持主从复制和数据恢复,但是对事务的ACID特性支持比较差。InnoDB存储引擎引入RedoLog和UndoLog事务日志,用于提升事务场景下的数据库性能。本文会对RedoLog和UndoLog进行介绍。RedoLog和UndoLogChangeBuffer和WAL我们以一条SQL更新语句来介绍RedoLog的作用,首先在数据库中创建user_info表,该表包含主键列id和姓名列,并向数据库中

2021-12-14 18:10:12 1205

原创 InnoDB学习(三)之BinLog

BinLog又称为二进制日志,是MySQL服务层的数据日志,MySQL所有的存储引擎都支持BinLog。BinLog记录了MySQL中的数据更新和可能导致数据更新的事件,可以用于主从复制或数据恢复。本文会对BinLog的原理进行详细介绍。BinLogMySQL的BinLog用于记录MySQL的所有数据变更和可能造成数据变更的事件,这些BinLog以二进制日志的形式顺序存储在磁盘中。用户不能直接通过文本编辑器查看BinLog的内容,需要借助MySQL提供的mysqlbinlog工具才能查看文件。需要注意

2021-12-09 17:53:59 905

原创 InnoDB学习(二)之ChangeBuffer

ChangeBuffer是InnoDB缓存区的一种特殊的数据结构,当用户执行SQL对非唯一索引进行更改时,如果索引对应的数据页不在缓存中时,InnoDB不会直接加载磁盘数据到缓存数据页中,而是缓存对这些更改操作。这些更改操作可能由插入、更新或删除操作(DML)触发。缓存区的更改操作会在磁盘数据被其它读操作加载到缓存中时合并到对应的缓存数据页中。ChangeBufferInnoDB ChangeBuffer的官方示意图如下所示,从图中可以看出以下信息:ChangeBuffer用于存储SQL变更操作,比

2021-12-08 16:35:39 628

原创 InnoDB学习(一)之BufferPool

我们知道InnoDB数据库的数据是持久化在磁盘上的,而磁盘的IO速度很慢,如果每次数据库访问都直接访问磁盘,显然严重影响数据库的性能。为了提升数据库的访问性能,InnoDB为数据库的数据增加了内存缓存区(BufferPool),避免每次访问数据库都进行磁盘IO。缓存区BufferPool缓存区并不是Innodb中特有的概念,操作系统中也有缓存区的概念,当用户第一次从磁盘读取文件时,会把文件缓存到内存中,后续再对这个文件进行读操作就可以直接从内存中读,从而减少磁盘IO次数。缓存只是内存中的一块连续空间

2021-12-07 10:54:00 2235

原创 JavaBean内省与BeanInfo

Java的BeanInfo在工作中并不怎么用到,我也是在学习spring源码的时候,发现SpringBoot启动时候会设置一个属叫"spring.beaninfo.ignore",网上只能搜索到这个配置的意思是是否跳过java BeanInfo的搜索,没找到其他信息,但是BeanInfo又是什么呢?JavaBean介绍维基百科JavaBean的定义:JavaBeans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点是可序列化,提供无参构造器,提供getter

2021-12-06 13:59:37 418

原创 分布式锁及其实现

对于Java中的锁大家肯定都很熟悉,在Java中synchronized关键字和ReentrantLock可重入锁在我们的代码中是经常见的,一般我们用其在多线程环境中控制对资源的并发访问,但是随着分布式的快速发展,本地的加锁往往不能满足我们的需要,在我们的分布式环境中上面加锁的方法就会失去作用。为了在分布式环境中也能实现本地锁的效果,人们提出了分布式锁的概念。分布式锁分布式锁场景一般需要使用分布式锁的场景如下:效率:使用分布式锁可以避免不同节点重复相同的工作,比如避免重复执行定时任务等;正确性:

2021-12-01 17:08:28 254

原创 Hibernate数据校验简介

我们在业务中经常会遇到参数校验问题,比如前端参数校验、Kafka消息参数校验等,如果业务逻辑比较复杂,各种实体比较多的时候,我们通过代码对这些数据一一校验,会出现大量的重复代码以及和主要业务无关的逻辑。Spring MVC提供了参数校验机制,但是其底层还是通过Hibernate进行数据校验,所以有必要去了解一下Hibernate数据校验和JSR数据校验规范。JSR数据校验规范Java官方先后发布了JSR303与JSR349提出了数据合法性校验提供的标准框架:BeanValidator,BeanValid

2021-11-25 13:44:36 750

原创 秒杀系统设计

秒杀活动是指网络商家为促销等目的组织会网上限时抢购活动,这种活动具有瞬时并发量大、库存量少和业务逻辑简单等特点。设计一个秒杀系统需要考虑的因素很多,比如对现有业务的影响、网络带宽消耗以及超卖等因素。本文会讨论秒杀系统的各个环节可能存在的问题以及解决方案。秒杀系统傻瓜式秒杀系统秒杀系统的核心难点是并发量,如果不考虑并发问题,那么我们可以用如下图所示的简单的系统结构来实现秒杀系统,用户只有两个简单操作:刷新界面和秒杀按钮,服务端也只有两个服务接口:返回秒杀界面和处理秒杀逻辑。假设本文中秒杀商品有100个,

2021-11-24 13:48:13 945

原创 分布式事务(七)之Seata简介

在前面的文章中,我们介绍了分布式事务的概念以及一些解决方案。fenSeata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案。Seata介绍本文以一个用户下单购买商品的系统为例,介绍开源框架Seata的原理和使用,下单该系统涉及三部分服务:仓储服务:对给定的商品扣除仓储数量;订单服务:根据采购需求创建订单;帐户服务:从用户帐户中扣除余额;分布式事务的主要作用是保证微服务情

2021-11-23 15:06:59 1229

原创 分布式事务(六)之可靠消息最终一致性

消息发送一致性:是指产生消息的业务动作与消息发送的一致。也就是说,如果业务操作成功,那么由这个业务操作所产生的消息一定要成功投递出去(一般是发送到kafka、rocketmq、rabbitmq等消息中间件中),否则就丢消息。可靠消息最终一致性发送消息不可靠性既然提到了可靠消息的最终一致性,那么说明现有的消息发送逻辑存在不可靠性,我们用下面的几种情况来演示消息的不可靠性。先进行数据库操作,再发送消息: public void test1(){ //1 数据库操作 //2 发送MQ消息

2021-11-22 16:15:39 122

原创 分布式事务(五)之最大努力通知

最大努力通知型( Best-effort delivery)是最简单的一种柔性事务,适用于一些最终一致性时间敏感度低的业务,且被动方处理结果不影响主动方的处理结果。典型的使用场景:如银行通知、商户通知等。最大努力通知最大努力通知型( Best-effort delivery)是最简单的一种柔性事务,适用于一些最终一致性时间敏感度低的业务,且被动方处理结果 不影响主动方的处理结果。典型的使用场景:如银行通知、商户通知等。最大努力通知型的实现方案,一般符合以下特点:不可靠消息:业务活动主动方,在完成业务

2021-11-09 17:46:54 500

原创 分布式事务(四)之TCC

在电商领域等互联网场景下,传统的事务在数据库性能和处理能力上都暴露出了瓶颈。在分布式领域基于CAP理论以及BASE理论,有人就提出了柔性事务的概念。在业内,关于柔性事务,最主要的有以下四种类型:两阶段型、补偿型、异步确保型、最大努力通知型几种。我们前边讲过的2PC和3PC都属于两阶段型,两阶段型事务存在长期锁定资源的情况,导致可用性差。接下来我们来介绍的TCC则是补偿型分布式事务。TCCTCC 事务介绍TCC方案是可能是目前最火的一种柔性事务方案了。关于TCC(Try-Confirm-Cancel)的

2021-11-07 17:37:44 293 1

原创 分布式事务(三)之三阶段提交

三阶段提交(3PC)是二阶段提交(2PC)的改进版本,三阶段提交协议主要是为了解决两阶段提交协议的阻塞问题,2pc存在的问题是当协调者崩溃时,参与者不能做出最后的选择。因此参与者可能在协调者恢复之前保持阻塞。三阶段提交(Three-phase commit),是二阶段提交(2PC)的改进版本。三阶段提交3PC与两阶段提交不同的是,三阶段提交有两个改动点:引入超时机制。同时在协调者和参与者中都引入超时机制;在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。

2021-11-02 15:51:13 179

原创 java基础之IO模型

IO操作根据设备类型一般分为内存IO,网络IO,和磁盘IO。其中内存IO的速度大大快于后两者,计算机的性能瓶颈一般不在于内存IO. 尽管网络IO可通过购买独享带宽和高速网卡来提升速度,可以使用RAID磁盘阵列来提升磁盘IO的速度,但是由于IO操作都是由系统内核调用来完成,而系统调用是通过cpu来调度的,而cpu的速度远远快于IO操作,导致会浪费cpu的宝贵时间来等待慢速的IO操作。为了让cpu和慢速的IO设备更好的协调工作,减少CPU在IO调用上的消耗,逐渐发展出各种IO模型。IO模型IO步骤I/O

2021-10-28 17:41:56 130

原创 分布式事务(二)之两阶段提交

前面的文章中,我们介绍了分布式系统中的CAP理论和BASE理论,本文会就分布式事务的实现方案之一:两阶段提交(2PC)进行介绍。2PC是一个非常经典的强一致、中心化的原子提交协议。中心化是指协议中有两类节点:一个是中心化协调者节点(coordinator)和N个参与者节点(partcipant)。2PC一致性概念一致性,是指对每个节点一个数据的更新,整个集群都知道更新,并且是一致的,假设一个具有N个节点的分布式系统,当其满足以下条件时,我们说这个系统满足一致性:全认同: 所有N个节点都认同一个结果

2021-10-21 18:16:48 529

原创 分布式事务(一)—分布式事务的概念

现今互联网界,分布式系统和微服务架构盛行。一个简单操作,在服务端非常可能是由多个服务和数据库实例协同完成的。在互联网金融等一致性要求较高的场景下,多个独立操作之间的一致性问题显得格外棘手。随着业务的快速发展、业务复杂度越来越高,几乎每个公司的系统都会从单体走向分布式,特别是转向微服务架构,随之而来就必然遇到分布式事务这个难题。本文会介绍分布式事务的一些相关概念。分布式事务的概念数据库事务数据库事务的目的数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。

2021-10-19 18:01:37 254

原创 学习Tomcat(七)之Spring内嵌Tomcat

前面的文章中,我们介绍了Tomcat容器的关键组件和类加载器,但是现在的J2EE开发中更多的是使用SpringBoot内嵌的Tomcat容器,而不是单独安装Tomcat应用。那么Spring是怎么和Tomcat容器进行集成?Spring和Tomcat容器的生命周期是如何同步?本文会详细介绍Spring和Tomcat容器的集成。SpringBoot与Tomcat使用SpringBoot搭建一个网页,应该是很多Spring学习者入门的案例。我们只需要在pom添加Spring的web-starter依赖,并添

2021-10-12 10:20:20 3182

原创 学习Tomcat(六)之类加载器

通过前面的文章我们知道,Tomcat的请求最终都会交给用户配置的servlet实例来处理。Servlet类是配置在配置文件中的,这就需要类加载器对Servlet类进行加载。Tomcat容器自定义了类加载器,有以下特殊功能:1. 在载入类中指定某些规则;2.缓存已经载入的类;3.实现类的预加载。 本文会对Tomcat的类加载器进行详细介绍。Java类加载双亲委派模型Java类加载器是用户程序和JVM虚拟机之间的桥梁,在Java程序中起了至关重要的作用,关于其详细实现可以参考了java官方文档关于虚拟机加载

2021-10-06 17:28:40 452

原创 学习Tomcat(五)之Context和Wrapper容器

前面的文章中,我们介绍了Tomcat的Engine和Host容器,我们知道一个Tomcat最多只有一个Engine容器,一个Engine容器可以包含多个Host容器,请求中的不同的Host对应不用的Host容器。本章我们会介绍Tomcat的另外两个容器:Context容器和Wrapper容器。一个Host容器可以包含多个Context容器:同一个Host下面可以包含多个应用,每个应用对应一个Context容器。一个Context容器又可以包含多个Wrapper容器:每个Wrapper容器包含一个Servle

2021-09-29 10:19:16 337

原创 学习Tomcat(四)之Engine和Host容器

在前面的文章中,我们介绍了Tomcat的连接器Connector,连接器会监听指定的端口,并把接受到的消息转为HttpServletRequest和HttpServletResponse,交个Servlet容器处理。Tomcat的Servlet容器分为四种:Engin容器/Host容器/Context容器/Wrapper容器,这四个容器之间是父子关系,Engine容器包含Host容器,Host容器包含Context,Context包含Wrapper容器。本文会介绍Tomcat容器中的Engin容器和Host

2021-09-23 10:21:21 345

原创 学习Tomcat(三)之容器连接器

Tomcat最底层使用的是Java标准的SocketServer和Socket接受和处理请求,但是Socket接受到的数据是网络运输层的TCP或UDP协议的数据,需要转为Http或者其它应用层协议的数据。Tomcat中就是通过连接器Connector来管理Socket连接、解析Scoket请求为Request并封装响应数据为Response对象。新版本的Tomcat容器使用的连接器是Coyote框架,本文会详细介绍Connector的Coyote框架原理。本文很多内容参考了这篇博客什么是CoyoteCo

2021-09-17 10:45:44 247

原创 学习Tomcat(二)之服务器组件

Tomcat容器的Server模块有管理容器的启动和关闭、管理了容器内的服务组件Service、管理了全局JNDI资源的功能,对Tomcat容器的生命周期管理有重要意义。Tomcat的服务组件则是Tomcat的两个核心组件连接器和servlet容器之间的桥梁。本文会对Tomcat容器的服务器组件Server和服务组件Service进行介绍。服务器组件Server我们知道Tomcat容器启动之后就可以一直保持服务,即使请求出现异常也不会退出,只有在收到特定的容器关闭命令时才会退出。Tomcat容器是怎么实

2021-09-15 10:35:22 175

原创 学习Tomcat(一)之容器概览

Tomcat是Apache软件基金会的一个顶级项目,由Apache、Sun和其它一些公司及个人共同开发,是目前比较流行的Web服务器之一。Tomcat是一个开源的、小型的轻量级应用服务器,具有占用系统资源少、扩展性好、功能丰富等优点。虽然Tomcat是一个轻量级容器,但是其本身实现还比较复杂,包含很多模块,本文会对Tomcat的基本结构和各个模块进行简单介绍。Servlet容器概念Servlet容器也叫做Servlet引擎,是Web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,

2021-09-13 12:41:37 545 1

原创 java基础之ThreadLocal

早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。ThreadLocal是指作用域为Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些。此博客很多内容参考了(这篇博客https://www.cnblogs.com/fsmly/p/11020641.html).介绍多线程访问同一个共享变量的时候容易出现并发问题,特别是多

2021-09-10 10:26:54 202

原创 java基础之反射类型Type

Java在加入泛型之后,仅仅Class已经不足以描述数据的类型了,比如List<String>类型的数据,其Class的类型为List.class,但是其类型包含了泛型参数,所以java引入了Type类型来描述泛型类型。除了泛型类型,还有数组格式的数据,其类型也包含两部分,一部分是数组对象本身的class,另外一部分是数组中数据的类型。本文会详细介绍JavaType中的各种类型,分析这些类型的使用方法。Type介绍Type是Java 编程语言中所有类型的公共高级接口,也就是Java中所有&q

2021-09-08 18:21:19 258 1

原创 数据库基础之树形查询结构设计

树形数据结构是我们常见的一种数据结构,比如文件目录、公司组织结构等。但是关系型数据库却没有对应的原生数据结构去存储查询这种数据结构,本文介绍了几种实现关系型数据库树形数据存储的方式供大家参考。前言树形结构是生活中常见的数据结构之一,如公司的组织结构、计算机文件的目录结构和家庭族谱等。本文将以区域作为示例,介绍几种常见的数据库实现树形查询的方式:树形结构的关键属性:深度方案一、毗邻目录模式(adjacency list model)方案原理毗邻目录模式在树形结构数据的每条记录中,记录了指向父数据

2021-09-07 17:08:25 783

空空如也

空空如也

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

TA关注的人

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