自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

IT大白的博客

菜鸟在路上

  • 博客(54)
  • 资源 (6)
  • 收藏
  • 关注

原创 1、线程概述

启动一个Java程序,操作系统就会创建一个Java进程。,也叫轻量级进程(Light Weight Process),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上,让使用者感觉到这些线程在同时执行。随着处理器上的核心数量越来越多,现在大多数计算机都比以往更加擅长并行计算,如何利用好处理器上的多个核心也成了现在的主要问题。一个线程在一个时刻只能运行在一个处理器核心上,如果该程序使用多线程技术,

2026-01-28 10:29:45 848

原创 9、分库分表

分表治大表,分库治单机;先分表,再分库,能不分最好别分。将一张大表的数据,按照某种规则拆分成多张结构相同的小表,以解决单表数据量过大带来的性能、维护或扩展性问题。核心目的:让“大表变小”,提升查询效率、降低锁竞争、便于维护。

2026-01-23 14:39:12 518

原创 8、MySQL相关问题补充

1、最左匹配原则在建立联合索引后,,才能使用到索引。2、相关问题:user表包含主键ID,A,B,C列,创建(A,B,C)联合索引会用到联合索引吗?会。优化器会将查询条件为 where A=3 and B=2 and C=4;会用到联合索引吗?部分使用。自动重排,先使用 A 做范围查询,在使用B筛选(索引下推),C无法使用索引联合索引的使用遵循,并且BETWEENLIKE 'xx%'会用到联合索引吗?会。A等值匹配精准定位,B在A=2的范围内进行范围扫描,C会使用索引下推。

2026-01-23 11:38:34 485

原创 7、MGR(MySQL Group Replication)

单主模式(Single-Primary Mode):只有master节点可读可写(称为 PRIMARY),其余slave节点只读(称为SECONDARY)多主模式(Multi-Primary Mode):所有节点都可读可写。

2026-01-22 21:02:35 1216

原创 6、数据库优化

整数类型:INT有6种类型,不同的类型的最大存储范围不同,占用的存储空间也不同。字符类型:变长情况下,varchar更节省空间,但varchar字段需要一个字节来记录长度。比如:联系地址。固定长度用char,不要用varchar,比如:行政区划编码。非空:非空字段尽量定义成 NOT NULL,提供默认值,或者使用特殊值、空串代替null。NULL类型的存储、优化、使用都存在问题。不要用外键、触发器、视图。

2026-01-21 21:08:15 879

原创 5、InnoDB锁机制

共享锁是一种读锁,允许其他事务添加共享锁或读取数据,不允许其他事务修改数据。不要在加上读锁以后去写数据,可能出现死锁。可以用 select … lock in share mode 的方式手工加上一把读锁。

2026-01-21 19:45:36 839

原创 4、数据库的事务

一组数据库操作,执行后要么都成功,要么都失败。

2026-01-21 16:43:39 903

原创 3、InnoDB索引

比如左子树的深度是2,右子树的深度只能是1或者3。如何保证深度差不能超过1呢?通过左旋/右旋重新调整树的结构。如下图:平衡二叉树作为索引怎么査询数据?平衡二叉树的节点是一个大小固定的单位,作为索引应该存储什么内容?索引必须要存建立索引的字段的值,叫做键值(比如id)。还要存完整记录在磁盘上的地址。由于AVL树是二叉树,所以还要额外地存储左右子树的指针。问题是,索引的数据在磁盘上,用树状结构存储索引时,访问一个节点需要跟磁盘发生一次I/O操作。

2026-01-21 11:22:09 936

原创 2、InnoDB总体架构

InnoDB 中每张表必须有一个聚簇索引。如果用户显式定义了主键,则用主键作为;否则 InnoDB 会自动选择一个合适的列或隐式创建一个 6 字节的 row_id 作为聚簇索引,这个列的内容必须满足 UNIQUE + NOT NULL。聚簇索引以B+树的形式存储在磁盘中,B+树的,每个页中包含了表中的多条数据,页中的数据以有序单链表的形式存储。当访问数据的时候,InnoDB 会以页为最小单位,将页数据从磁盘加载到 Buffer Pool。表的数据就是存储在聚簇索引的叶子节点中。

2026-01-20 16:49:58 848

原创 1、一条SQL是如何执行的

一条SQL的执行流程。

2026-01-19 16:48:39 635

原创 5、Redis分布式锁

假设Redis服务是主从结构的,应用1获取到了分布式锁,但master还没将信息同步至slave就宕机了,slave升级为新的master,此时应用2同样可以获取到相同的分布式锁。Redis单线程执行命令,且会把Lua脚本看作一个完整的命令来执行,一次保证了操作命令的原子性。设置值和给值设定过期时间需要进行两次操作,如果 setnx 成功了,但是在设定过期时间之前,进程崩溃,那么这个锁就永远不会失效,除非手动删除对应kv。尽管可以原子性的设置锁和过期时间,但是如果业务执行时间超过过期时间,锁就失效了。

2026-01-16 11:29:10 596

原创 4、Redis核心原理

kv结构的内存数据库,时间复杂度0(1)。

2026-01-15 16:41:20 655

原创 3、Redis数据结构

当存入kv时,对key进行hash运算,得到的结果作为dictEntry[]数组的下标,这个kv就存储在这个下标对应的dictEntry *table(存储kv的哈希桶)中。如果不同的key进行hash运算后得到相同的结果,即发生hash冲突,dictEntry[]数组这个位置,就会以dictEntry *table链表的形式,存储所有的kv值。Hyperloglogs提供了一种不太精确的基数统计方法,用来统计一个集合中不重复的元素个数,比如统计网站的UV,或者应用的日活、月活,存在一定的误差。

2026-01-15 15:13:08 653

原创 HashMap源码分析

初始化加载因子loadFactor = 0.75,如果不设置容量,初始化容量默认16。容量指的是底层,而不是HashMap中的元素个数。当HashMap中的已使用容量超过【】时,如果本次插入数据后,已占用【初始化容量*0.75】这么多的容量,那么下次插入数据时触发扩容。扩容后的容量=初始化容量*2。如代码,如果创建时指定了初始化容量12,并不是指HashMap能容纳的键值对数量,而是底层数据的长度。

2026-01-13 15:13:21 450

原创 2、Redis集群

自动故障迁移:master节点宕机后,会将一个slave节点升级为新的master节点,并将新master节点信息同步给客户端。slave加载完rdb文件后,master将缓存的指令发送给slave。一个哨兵进程对Redis服务器进行监控,可能会出现问题一般是使用多个哨兵进行监控,各个哨兵之间还会进行监控,形成多哨兵模式。如果是yes,则支持无磁盘复制,master子进程直接将rdb文件通过网络发送给slave,不存储到master磁盘。主节点故障,可将从节点升级为主节点,实现。,分担主节点读压力。

2026-01-12 16:50:30 314

原创 1、Redis基础

hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。GET、SET、GETSET(设置新值、返回旧值)、MGET、MSET、SETNX(指定key不存在则设置新值,若存在则返回0,无法覆盖)、INCR(设置value+1)、、ZSet 是 String 类型的有序Set集合,很多地方也被称为SortedSet,Set集合成员是唯一的。Set集合是通过哈希表实现的,添加、删除、查找的复杂度都是 O(1),对Set操作的执行效率极高。

2026-01-12 15:16:47 776

原创 性能优化篇

按行对数据进行拆分,根据某个分片算法(范围法、Hash法)将记录分别存放在不同表中,通过大表拆小表的方式缩小数据查询范围、提高处理效率,所有分表的表结构完全相同。将一张大表分成若干小表,小表表结构不同,通过主键进行关联,如将一张商品信息表分为基本信息表和详情信息表,通过商品id做关联。

2026-01-09 21:28:15 685

原创 5、Kafka面试相关问题

顺序I/O、索引、批量读写和文件压缩、零拷贝 磁盘的构造如图。磁盘的盘片不停地旋转,磁头会在磁盘表面画出一个圆形轨迹,叫磁道。从内到外半径不同有很多磁道。然后又用半径线,把磁道分割成了扇区(两根射线之内的扇区组成扇面)。如果要读写数据, 必须找到数据对应的扇区,这个过程就叫寻址。 Kafka的message是不断追加到本地磁盘文件末尾的,而不是随机的写入,这使得 Kafka写入吞吐量得到了显著提升。  顺序IO到底有多快呢?下图显示,在一定条件下测试,磁盘的顺序读写可以达到53

2026-01-08 16:47:38 680

原创 4、Kafka原理-Consumer

正常情况下,我们希望消费没有被消费过的数据,而且是从最先发送(序号小的) 的开始消费(这样才是有序和公平的)。为了保证系统最大的利用率,Kafka的分配策略一定会遵循一个最基本的原则——平均分配,简单理解,不会有任意两个消费者消费的分区数差大于1。注意:这不是表示一个消费者和一个Topic的关系,而是一个consumer group和topic中的一个partition的关系(offset在partition中连续编号而不是全局连续编号)。所以当消费者数量大于分区数量时,多余的消费者是无法消费消息的。

2026-01-08 15:41:03 946 1

原创 3、Kafka原理-消息存储

若B重启期间发生过leader选举(假设存在副本C、D),则leader-epoch-checkpoint文件存在多条记录(0 0),(1 10),(2 50)(又发生两次选举),此时B的epoch小于2,会将B的LEO与10比较(大于epoch(B)的最小epoch是1),同样不会丢弃数据。若B重启期间未发生leader选举,则A的leader-epoch-checkpoint文件与B一致,都是(0 0),即epoch(A)=epoch(B),此时LEO(B)=LEO(A)=1,无需截取。

2026-01-08 11:03:15 878

原创 2、Kafka原理-Producer

所以,kafka服务端应该要有一种响应客户端的方式,只有在服务端确认以后,生产者才发送下一轮的消息,否则重新发送数据。所以我们的规则就不能那么粗暴了,把规则改一下,不是所有的follower都有权利 让我等待,而是只有那些正常工作的follower同步数据的时候我才会等待。为了安全性考虑,Kafka会等待所有的follower全部完成同步,才发送ACK给客户端,延迟相对来说高一些,但是节点挂掉的影响相对来说小一些,因为所有的节点数据都是完整的。消息发送的整体流程。它返回的是一个分区的编号,从0开始。

2026-01-08 09:46:17 1018

原创 1、Kafka基础

Apache Kafka 是一款开源的消息系统。可以在系统中起到“肖峰填谷”的作用,也可以用于异构、分布式系统中海量数据的异步化处理。Kafka作为一个中间件,是帮我们存储和转发消息的,它做的事情有点像中介,所以我们把kafka的服务叫做Broker,默认是9092的端口。生产者和消费者都需要跟这个Broker建立一个连接,才可以实现消息的收发。

2026-01-08 09:18:32 1101

原创 Spring-AOP源码分析

1、@EnableAspectJAutoProxy注解中,将AspectJAutoProxyRegistrar类注入到了容器。3、AnnotationAwareAspectJAutoProxyCreator类,会自动创建代理。1、JDK代理中,存在多个代理的话,这些代理的handler不能是同一个,不然无法实现多层代理。2、AspectJAutoProxyRegistrar类,注册了AspectJ相关的处理组件。3、Spring以链式调用的方式,实现多层代理。2、CgLib不能代理之后再代理。

2025-07-29 10:07:20 1029

原创 Spring-解决循环依赖源码

(2)二级缓存(HashMap<String, Object> earlySingletonObjects)完成了从三级缓存中Bean工厂中获取到的Bean对象。三级缓存存bean工厂对象,二级缓存存bean代理对象,是为了延迟代理对象的创建时间。(1)通过setter()方法注入的、多例模式对应的循环依赖(多例对象不归容器创建)。(2)构造器循环依赖(实例化、属性注入同时发生,无法通过缓存拿到属性实例)。(1)通过setter()方法注入的、单例模式对应的循环依赖。1、不可以解决的场景。

2025-07-26 15:10:54 374

原创 Spring-Ioc源码流程

4、将beanDefinition对象放入ConcurrentHashMap中,key=beanName、value=beanDefinition对象;3、根据配置文件,创建beanDefinition对象,一个<bean>标签创建一个beanDefinition对象。4、对实例化的bean对象进行属性注入,调用populateBean()方法,最后还是调用getBean()方法。2、只处理非抽象的、是单例模式的、非懒加载的beanDefinition对象。3、使用反射机制,实例化bean对象。

2025-07-26 13:52:19 235

原创 Spring-事务管理

A开启了事务,B会在A事务中创建一个保存点,B发生异常,B会回滚至保存点,不影响A事务。A开启了事务,B会在A事务中创建一个保存点,A发生异常,整个事务都回滚(不是部分回滚)。支持当前事务后,A、B合并为一个事务,A、B中任意位置发生异常后,A、B同时回滚。加入当前事务后,A、B合并为一个事务,A、B中任意位置发生异常后,A、B同时回滚。加入当前事务后,A、B合并为一个事务,A、B中任意位置发生异常后,A、B同时回滚。挂起A事务,执行B事务,B事务出现异常且未在内部捕获,抛出异常会使A事务回滚。

2025-07-23 09:39:39 970

原创 Spring-AOP

Spring中的AOP就是通过动态代理实现的,使用时会根据目标类的形态自动选择JDK或CGLib动态代理(目标类实现了接口就用JDK动态代理,若没有就用CGLib动态代理),可以通过配置指定使用某一种动态代理。同时使用多个切面类,通过在所有切面类上添加@Order(数字)注解,来控制切面执行顺序,数值越小、优先级越高。2、环绕通知(@Around)一般不与其他通知一起使用。1、后置通知(@After)无法获取方法执行的返回值,六、复用切入点表达式步骤(在切面类中)3、编写切面类(要使用。

2025-07-22 08:31:40 629

原创 Spring-注解

2、特点:根据类型自动装配,如果存在同类型多个Bean会报错,此时需要通过。(2)后置处理器装载后,容器扫描到属性上标注有。2、定义一个类用于应用自定义注解。4、定义一个后置处理器(1、作用:用于自动装配(依赖注入)。定义修饰在 类/方法 上的自定义注解。在对象初始化后,去包含代理逻辑)注解指定具体的Bean名称。一、@Autowired。容器中自动查找到需要的。@Autowired和。

2025-07-20 21:03:05 310

原创 Java关于数字的正则校验

// 判断整数数字的正则表达式private static Pattern NUMBER_PATTERN = Pattern.compile("^[-\\+]?[\\d]*$"); // 判断小数点后0-2位的数字的正则表达式private static Pattern NUMBER_PATTERN_TWO = Pattern.compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$"); /** *校验是否为数字 */privat.

2021-10-08 14:58:45 5386

原创 MyBatis(二)-入门案例

一、环境搭建1、步骤(1)创建maven工程并导入坐标。(2)创建实体类和dao的接口。(3)创建Mybatis的主配置文件SqlMapConifg.xml。(4)创建映射配置文件IUserDao.xml。2、注意事项(1)在Mybatis中,持久层的操作接口名称和映射文件也叫做Mapper,IUserDao.xml也被习惯命名为IUserMapper.xml。(2)在idea中创建目录和创建包是不同的,创建包com.test.dao是三级结构,创建目录com.test.dao只是一

2021-02-01 15:21:50 220

原创 MyBatis(一)-JDBC编程

一、jdbc查询数据库主要步骤1、加载驱动。2、通过驱动管理类,获取数据库链接。3、定义sql语句,用?表示占位符。4、获取预处理statement。5、设置参数,参数序号从1开始。6、执行sql语句,查询结果集。7、遍历查询结果集。8、释放资源。二、jdbc的不足1、数据库链接创建、释放频繁,造成系统资源浪费,从而影响系统性能。可使用数据库链接池解决此问题。2、Sql语句在代码中为硬编码,不易维护,实际应用中sql变化可能较大,sql变动需要改变java代码。3、使用prep

2021-02-01 13:59:16 319

原创 SpringMVC(九)-拦截器

一、概述1、作用SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。 用户可以自己定义一些拦截器来实现特定的功能。拦截器链(Interceptor Chain):将多个拦截器按一定的顺序联结成一条链,在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。2、拦截器和过滤器(1)拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能用。 过滤器是servlet规范中...

2021-01-31 14:41:26 269

原创 SpringMVC(八)-异常处理

一、思路客户端发送请求的流程是:客户端-->核心控制器DispatcherServlet-->Controller-->Service-->Dao,如果发生异常,异常会被反向逐层抛出,不做任何处理的话,异常信息最终会在页面显示。SpringMVC框架提供了异常处理器HandlerExceptionResolver,配置后,当异常被抛至核心控制器DispatcherServlet后,DispatcherServlet会调用异常处理器对异常进行处理。需要自定义异常、自定义异常

2021-01-31 11:18:46 197

原创 SpringMVC(七)-文件上传

一、传统文件上传1、必要前提(1)form表单的enctype取值必须是:multipart/form-data (默认值是:application/x-www-form-urlencoded), enctype是表单请求正文的类型。当form表单的enctype是默认值时,form表单的正文内容是用&连接起来的键值对,若不是默认值,其正文内容就变为其他形式,request.getParameter()将失效。(2)method属性取值必须是Post。(3)提供一个文件选择域<

2021-01-30 17:10:16 232

原创 SpringMVC(六)-响应数据和结果视图

一、返回值分类1、请求返回值为字符串(1)点击response.jsp中的超链接,发送请求。(2)根据请求路径,执行UserController类中的testString()方法,查到数据放入Model中,Model可以把值传到request域,这样页面就可以拿到数据了。(3)UserController类中的testString()方法返回字符串"success",在springmvc.xml中配置的视图解析器,会根据配置及返回值,找到/WEB-INF/pages/目录下的success.

2021-01-30 15:59:22 251

原创 SpringMVC(三)-常用注解

一、@RequestMapping1、作用:用于建立请求URL和处理请求方法之间的对应关系。2、位置:类上:请求URL的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。方法上:请求URL的第二级访问目录。3、...

2021-01-29 15:56:42 191

原创 SpringMVC(五)-自定义类型转换器和原生ServletAPI对象的获取及使用

一、自定义类型转换器表单提交的任何数据类型全部都是字符串类型,但是后台定义Integer类型,数据也可以封装上,因为Spring框架内部会默认进行数据类型转换。但是并不能覆盖所有的类型转换,比如字符串转为日期类型,框架只能转换 "2021/1/27" 格式的,无法转换 "2021-01-27" 格式的,这时可以使用自定义类型转换器。1、定义一个类型转换器类,必须实现Converter<S, T>接口,该接口有两个泛型,S表示接收的类型,T表示目标类型。public class

2021-01-27 22:14:11 209

原创 SpringMVC(四)-请求参数的绑定

一、绑定机制表单提交的数据都是k=v格式的,SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的,要求提交表单的name与参数的名称是相同的。二、支持的数据类型1、基本数据类型和字符串类型。2、实体类型(JavaBean)。3、集合数据类型(List、map集合等)。三、使用要求及示例1、基本数据类型和字符串类型要求:表单提交的name参数名称必须和控制器中方法的形参名称保持一致,严格区分大小写。主要代码示例: <!--

2021-01-27 21:32:40 346

原创 SpringMVC(二)-工作流程

一、入门案例使用idea开发软件,创建maven工程。1、创建Web工程,引入开发jar包。(pom.xml文件主要内容如下)<!-- 版本锁定 --><properties> <spring.version>5.0.2.RELEASE</spring.version></properties><dependencies><dependency> <groupId>or.

2021-01-27 14:39:46 195

原创 SpringMVC(一)-基本概念

一、SpringMVC是什么SpringMVC是一种基于Java的、实现MVC设计模型的请求驱动类型的轻量级Web框架,属于Spring FrameWork的后续产品,已融合在Spring Web Flow中。SpringMVC通过一套注解,让一个简单的Java类成为处理请求的控制器(与Servlet技术对比),无需实现任何接口,还支持RESTful编程风格的请求。二、SpringMVC的优势1、清晰的角色划分(可以把SpringMVC想象成一个代码工程,角色就是其中的模块或组件)前端控

2021-01-26 21:32:15 618 2

Struts2基础Jar包13个

Struts2基础Jar包13个

2017-05-08

struts2.3.24

struts2.3.24

2017-05-09

jstl+standard_jar包.zip

jstl+standard_jar包.zip

2017-04-13

commons-beanutils+chain+digester_jar包

commons-beanutils-1.8.0.jar,commons-chain-1.2.jar,commons-digester-1.8.jar

2017-04-13

struts核心jar包1.3.10

struts核心jar包1.3.10

2017-04-14

struts-core-1.3.10.jar

2017-04-13

空空如也

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

TA关注的人

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