- 博客(31)
- 收藏
- 关注
原创 MySQL系列-终于搞明白了事务和锁了
mysql事务、锁(记录锁、gap锁、next-key 锁)、redo log、binlog、undo log、
2022-07-01 01:17:54 1575 1
原创 spring系列-springboot的starter机制和@Configuration机制-@Enable原理解析
springboot starter机制 @Configuration和@Enable原理
2022-06-19 19:00:16 766
原创 jvm系列-常量池-简介
本文主要总结一下以下三个知识点:类常量池是.class字节码文件中内容,保存了Java类中大多数信息,如方法信息、变量信息等.它是.class字节码文件中的概念.如下,定义一个java类:查看字节码:其中Constant pool,就是.class文件的常量池.我们可以从中看到我们定义的常量信息和方法信息.二、运行时常量池在虚拟机的类加载阶段,jvm会把该.class的字节流所代表的静态存储结构转化为方法区的运行时数据结构.运行时常量池有以下特点:字符串常量池是专门针对String类型设计的常量池.
2022-06-01 23:58:57 6813
原创 ZooKeeper系列-存储原理-事务日志/快照文件介绍
standalone模式下ZooKeeper处理写请求流程分析一.Zookeeper请求处理流程大致说下各个类的作用:CnxnChannelHandler: netty的ChannelHandler ,用来处理zookeeper的连接、数据读取,NettyServerCnxn: 该类代表了一个客户端连接,每当一个新的连接建立,zookeeper服务端就会创建一个NettyServerCnxn,用于处理连接的数据ZooKeeperServer:代表一个单机zookeeper实例,用于时处理客户端
2022-05-23 17:08:40 1267
原创 java源码-定时工具类Timer的原理
Timer是jdk提供的定时任务执行器.我们本文主要分析一下,Timer的工作原理.一、Timer的使用方法1.1.代码package com.study.jdk.sched;import java.util.Timer;import java.util.TimerTask;public class TimerTest { public static void main(String[] args) { Timer timer = new Timer();
2022-05-17 19:27:54 587
原创 ZooKeeper实现分布式锁
一、Zookeeper实现分布式锁思路1.1.分布式锁应具备哪些条件分布式锁应该具备以下条件:在分布式环境下,在一个时间点,最多被一个请求方持有高可用、高性能的获取和释放具备可重入性具备失效机制,防止死锁具备非阻塞特性,即没有获取到锁将直接返回失败1.2.ZooKeeper实现分布式锁所具备的特性1.2.1.高可用、高性能ZooKeeper的数据是内存读取的,本身就具备高性能特性ZooKeeper具备很好的故障恢复能力在集群模式下,当Leader节点宕机后,当前集群会选出新的
2022-05-15 20:22:20 4618 2
原创 ZooKeeper系列-基础知识一
一、ZooKeeper简介1.1.什么是ZooKeeperZooKeeper: A Distributed Coordination Service for Distributed ApplicationsZooKeeper is a distributed, open-source coordination service for distributed applications. It exposes a simple set of primitives that distributed app
2022-05-14 19:59:51 905
原创 一篇文章彻底搞懂spring的ApplicationContext体系
本文主要介绍ApplicationContext在Spring中各个子类的作用和区别一、ApplicationContext子类体系图从图中我们可以得到两个重要信息:ApplicationContext的子类都是继承自AbstractApplicationContextAbstractApplicationContext的子类分为两类,一类是GenericApplicationContext的子类,一类是AbstractRefreshableApplicationContext的子类.接下来
2022-05-14 12:07:21 3458
原创 完全搞懂Spring的BeanDefintion和加载自定义BeanDefintion
一、什么是BeanDefinitionBeanDefinition描述了Bean的定义,包括该bean有哪些属性、构造函数参数、作用域、是否是抽象的等.在Spring中是根据BeanDefinition来创建Bean的.BeanDefinition是Spring非常核心的概念.1.1.BeanDefinition源码介绍public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement { /**
2022-05-11 22:55:10 895
原创 springboot之@Configuration注解原理
本文主要梳理一下Spring @Configuration注解的工作原理.环境:spring 5.0.9启动方式:@SpringBootApplicationpublic class SpringMvcApp { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(SpringMvcApp.class,args);
2022-05-11 17:10:24 1580
原创 springmvc原理-工作原理-DispatcherServlet流程
本文主要讲springMVC的工作原理,以SpringBoot为主,内置web容器为tomcat,主要包括以下几部分:springMVC DisptacherServlet流程分析从主流程入手,逐步深入HandlerMapping 体系分析一、SpringMVC DispatcherServlet分析1.1.DispatchServlet的初始化在SpringBoot中,我们可以通过下面的方式启动一个web服务(前提你已经引入了spring-boot-starter-web模块),@
2022-04-26 15:31:08 385
原创 SpringMVC系列-基础概念介绍
本文主要介绍一下SpringMVC中射击的一些基本概念,后面还会继续补充…一、servlet简介1.1.什么是servletJava Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。我们可以使用servlet创建一个服务端应用,来处理http客户端请求,用来操作/获取数据库数据.1.2.servlet应用架构1.3.Java Servlet1.3.1.java对s
2022-04-14 02:21:56 1659
原创 ApplicationContext启动方式
1.ContextLoaderListener1.1.ContextLoaderListener源码public class ContextLoaderListener extends ContextLoader implements ServletContextListener {...}ServletContextListener源码:public interface ServletContextListener extends EventListener { /** w
2022-04-09 11:11:17 634
原创 Tomcat源码系列-源码idea环境搭建
一、资源准备tomcat版本:8.5.70Tomcat下载:二、搭建过程2.1、搭建步骤:新建maven项目 tomcat-source将下载的tomcat文件解压,并将内容复制到tomcat-source目录下将复制过来的java文件夹设置为Sources Root删除复制过来的test文件夹(里面的测试类会报编译错误)在tomcat-source根目录下新建lib,logs,work目录在pom文件添加依赖信息(见下面pom文件详细信息)配置启动Configurations
2021-09-10 13:45:46 184
原创 剑指 Offer II 021. 删除链表的倒数第 n 个结点
给定一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。递归思想:class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { if(head==null || n<=0){ return head; } int num = deleteNode(head,n); if(num==n){ ret
2021-08-25 14:49:05 79
原创 限流-滑动窗口计数-java实现-循环数组
一、用循环数组实现滑动窗口1.1、实现思想1.定义一个AtomicInteger array数组,每一个元素记录当前区间的计数2.定义一个long数组 times,记录对应array下标元素开始的时间.3.定义一个下标int index 记录当前正在使用的位置.4.定义每个元素的时间区间大小span = 200 msindex变化情况如下:1、如果当前时间now - times[index]>span 说明当前请求计数应当位于下一个位置的元素.index++,如果index>=
2021-08-24 19:24:43 717
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人