
JavaWeb高级
文章平均质量分 94
主要讲解javaWeb项目中JSP相关知识原理。
常生果
技术达人、精通Java、大数据和机器视觉,爱好编程,喜欢创造!
邮箱:zhaohaiyang1988@aliyun.com
微信号:zhao1002298335
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Mysql】详解数据库的分库分表
当MySQL单表数据量过大,比如超过5千万条的时候,读写性能变得很差。而且常规的优化手段已经不起作用了,比如:SQL调优、添加索引、主从复制、读写分离。这时候就需要用到MySQL终极优化方案 — 分库分表。当数据库的QPS过高,数据库连接数不足的时候,就需要分库。当单表数据量过大,读写性能较差,就需要分表。当两者都有的时候,就需要分库分表。垂直分库分表以及分库分表的多种策略:范围法,基因法,Hash取模法以及路由配置法等。原创 2024-11-07 21:38:14 · 1262 阅读 · 0 评论 -
【Mysql】雪花算法(Snowflake)
雪花算法(Snowflake)是一种生成全局唯一ID的分布式算法。它的主要功能是在分布式系统中生成一个全局唯一的ID,且ID是按照时间有序递增的。Snowflake 中文的意思为雪花,所以 Snowflake算法 常被称为 雪花算法,是 Twitter(现“X”)开源的分布式 ID 生成算法,是一种分布式主键ID生成的解决方案。生成后是一个 64bit 的 long 型的数值,组成部分引入了时间戳,基本保持了自增。互联网大厂实现的雪花开源项目:二、核心思想Snowflake算法使用一个64位的二进原创 2024-11-07 18:49:52 · 3508 阅读 · 0 评论 -
【SpringBoot】SpringBoot自动装配原理
SpringBoot的自动来讲,我们之前在写ssm项目时候,配置了大量坐标和配置内容,搭环境的过程在项目开发中占据了大量时间,SpringBoot的最大的特点就是简化了各种xml配置内容,所以springboot的自动配置就是用注解来对一些常规的配置做默认配置,简化xml配置内容,使项目能够快速运行。这个类中有一个非常重要的方法——selectImports(),它几乎涵盖了组件自动装配的所有处理逻辑,包括获得候选配置类、配置类去重、排除不需要的配置类、过滤等,最终返回符合条件的自动配置类的全限定名数组。原创 2024-10-15 13:00:52 · 1453 阅读 · 0 评论 -
【SpringBoot】WebMvcConfigurer的工作原理
WebMvcConfigurer是Spring MVC框架中的一个核心接口,它允许开发者自定义Spring MVC的配置,以满足应用程序的特定需求。通过实现这个接口,开发者可以注册拦截器、添加视图控制器、配置视图解析器等,而无需使用XML配置。@OverrideWebMvcConfigurer是一个回调接口,它提供了一系列方法来配置Spring MVC的行为。原创 2024-11-05 20:35:25 · 1798 阅读 · 0 评论 -
【Mysql】实时监听数据库变化
最近遇到一个需求,需要监听数据库中的数据变化,并及时通知后端服务做出相应的处理。本文将介绍如何使用四种方式实现监听MySQL数据库中的数据变化并通知后端服务的功能原创 2024-11-02 14:54:17 · 1802 阅读 · 0 评论 -
【Redis】应用场景-布隆过滤器(Bloom Filter)
BloomFilter 的算法是,首先分配一块内存空间做 bit 数组,数组的 bit 位初始值全部设为 0。加入元素时,采用 k 个相互独立的 Hash 函数计算,然后将元素 Hash 映射的 K 个位置全部设置为 1。检测 key 是否存在,仍然用这 k 个 Hash 函数计算出 k 个位置,如果位置全部为 1,则表明 key 存在,否则不存在。原创 2024-11-05 16:42:47 · 842 阅读 · 0 评论 -
【Redis】应用场景-统计海量 UV日活(HyperLogLog)
Redis 提供了一种高效的解决方案:HyperLogLog。HyperLogLog 是一种基数估算算法,能够在常量时间内对集合中不同元素的近似数量进行快速估算。本文就来详细介绍下如何使用 Redis 统计海量 UV。HyperLogLog 是一种基数估算算法,可以用于快速计算一个集合中的不同元素数量的近似值。hyperloglog 算法,利用非常少的空间,实现比较大的数据量级统计;原创 2024-11-05 16:27:29 · 1115 阅读 · 0 评论 -
【Redis】应用场景-排行榜(ZSet)
我们将全面解析 Redis 的 Zset 类型。我们将从 Zset 的基本概念和特性开始,然后深入到它的内部实现和性能优化。我们还将通过实际的示例来展示如何在实际应用中使用 Zset。无论你是刚接触 Redis,还是已经有一定经验的开发者,我相信你都能从这篇文章中学到一些有用的知识。在 Redis中Zset(有序集合)类型可能是最复杂,但也是最强大的一种。Zset 不仅可以存储键值对,还可以为每个元素分配一个分数,然后根据这个分数进行排序。这使得 Zset 非常适合用于实现排行榜、时间线等功能。原创 2024-11-05 15:17:46 · 2285 阅读 · 0 评论 -
【Redis】应用场景-统计访问次数(BitMap)
本文详细介绍了Redis中的位图操作,包括SETBIT用于设置二进制位,BITCOUNT统计位图中1的个数,BITPOS查找指定值的二进制位位置,以及BITFIELD在位图中存储和操作整数值。位图在内存管理和统计场景中具有高效性,BITFIELD提供了灵活的数据存储和计算选项。原创 2024-11-04 19:39:51 · 1543 阅读 · 0 评论 -
【Redis】事务处理
Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。简单的解释就是一组命令,要吗全部执行,要吗全部执行。redis的事务虽然遵守ACID,但是与DB的事务相比,还是弱事务。总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。3,Redis 事务命令Redis 通过MULTI和EXEC命令执行事务操作,在执行EXEC。原创 2024-11-04 11:23:35 · 848 阅读 · 0 评论 -
【Redis】分布式锁&Redisson
本文深入解析Redisson的分布式服务,涵盖分布式锁(如可重入锁ReentrantLock、公平锁FairLock、红锁RedLock)、同步器(如CountDownLatch、Semaphore)以及分布式执行服务ExecutorService和调度任务SchedulerService。通过实例代码展示了如何使用这些服务,实现高并发场景下的数据一致性与任务调度。 redis 常用数据结构命令服务,还提供了许多分布式服务,例如分布式锁、分布式对象、分布式集合、分布式远程服务、分布式调度任务服务等。原创 2024-11-03 15:16:48 · 1102 阅读 · 0 评论 -
【MySql】Canal实现数据增量同步
MySQL数据库的二进制日志文件,记录了数据库的所有变更操作,如INSERT、UPDATE、DELETE等。通过解析这些文件,我们可以获取到数据库的变更历史,这对于数据恢复、数据迁移、数据同步等场景非常有用。canal 翻译为管道,主要用途是基于 MySQL 数据库的增量日志 Binlog 解析,提供增量数据订阅和消费。原创 2024-11-02 17:40:35 · 1215 阅读 · 0 评论 -
【MySql】 搭建主从复制
主从复制是指将主库的数据变更同步到从库,从而保证主库和从库数据一致,可用于数据备份、失败迁移、读写分离、降低单库读写压力等场景。对于面向大企业的B端产品而言,主从复制技术尤为重要。原创 2024-11-02 15:46:00 · 1534 阅读 · 0 评论 -
【Springboot】 集成redis服务集群,以及 (Lettuce & Jedis)
比较突出的是 Lettuce 和 jedis,RedissonLettuce 和 jedis 的都是连接 Redis Server的客户端,Jedis 在实现上是直连 redis server,多线程环境下非线程安全,除非使用连接池,为每个 redis实例增加 物理连接。原创 2024-11-01 13:26:45 · 2636 阅读 · 0 评论 -
【SpringBoot】Jedis和Lettuce的区别
本文比较了Jedis和Lettuce在设计、实现、线程安全性和性能上的差异,指出Lettuce适合高并发场景且支持异步编程,而Jedis则适用于性能要求不高的场景,选择取决于具体需求。原创 2024-11-01 11:38:47 · 752 阅读 · 0 评论 -
【SpringBoot】JdbcTemplate&MyBatis-Plus&MyBatis多数据源切换
本文主要讲述ORM相关框架,分别介绍了MyBatis、MyBatis-Plus等相关框架的远离,同时详细介绍了多数据源的整合:MyBatis-Plus、MyBatis和JDBCTemplate等,每种方式各有有缺点,具体实现可以根据业务场景自行选择。原创 2024-11-01 09:30:22 · 1266 阅读 · 0 评论 -
【SpringBoot】多数据源N种实现详解
1、SpringBoot+MyBatis整合多数据源2、SpringBoot+MyBatis-Plus整合多数据源3,AbstractRoutingDataSource+AOP实现多数据源4,JdbcTemplate 实现多数据源整合原创 2024-10-31 23:42:00 · 8148 阅读 · 0 评论 -
【SpringBoot】多数据源切换
市面上常见的多数据源实现方案如下:方案1:基于Spring框架提供的AbstractRoutingDataSource。优点: 简单易用,支持动态切换数据源;适用于少量数据源情况。场景:适用于需要动态切换数据源,且数据库较少的情况。文档地址:方案2:使用MP提供的Dynamic-datasource多数据源框架。原创 2024-10-30 14:25:49 · 2690 阅读 · 0 评论 -
【JavaWeb】ELK介绍
1.ELK简介ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。原创 2024-10-28 13:22:17 · 1020 阅读 · 0 评论 -
【SpringBoot】嵌入式Tomcat启动流程
以上就是Tomcat内嵌web容器的创建、初始化流程,整个过程其实是在()方法中完成的。在Spring Boot应用程序中,内嵌的Tomcat服务器是通过Spring Boot Starter Web模块提供的功能来启动的,下面是Spring Boot启动Tomcat的大致过程:引入Spring Boot Starter Web依赖:在项目的pom.xml文件中添加Spring Boot Starter Web依赖,它会自动包含Tomcat作为内嵌服务器。二、内置Tomcat启动流程。原创 2024-10-26 23:46:07 · 1988 阅读 · 0 评论 -
【SpringBoot】一张图看懂初始化阶段-refreshContext
springboot的启动分为两部分,一部分是注解,一部分是SpringApplication.run(Springboot.class, args),那么我们的注解又是如何嵌入到程序中呢?进入ConfigurationClassParser这个类后,方法调用也是挺绕的,这里就不深究了…到这里,就可以看到一系列bean的操作,继续跟踪进入invokeBeanFactoryPostProcessors(调用在上下文中注册为bean的工厂处理器)方法。原创 2024-10-25 09:21:56 · 529 阅读 · 0 评论 -
【SpringBoot】一张图看懂初始化阶段-Environment
ConfigurableEnvironment,应用上下文环境包括什么呢?包括计算机的环境,Java环境,Spring的运行环境,Spring项目的配置(在SpringBoot中就是那个熟悉的application.properties/yml)等等。原创 2024-10-23 22:19:45 · 1003 阅读 · 0 评论 -
【SpringBoot】一张图看懂初始化阶段-ApplicationContext
如果说BeanFactory是Spring的心脏,那么ApplicationContext就是完整的身躯了。ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的功能。ApplicationContext到底是什么?字面含义是应用的上下文。这块我们需要看看ApplicationContext的具体的结构。原创 2024-10-23 17:31:26 · 1597 阅读 · 0 评论 -
【SpringBoot】一张图看懂初始化阶段-EventPublishingRunListener
本文深入解析了Spring中的事件机制,重点介绍了SimpleApplicationEventMulticaster,它是Spring事件广播器的一种实现,负责同步地按顺序触发事件到注册的监听器。文章还涵盖了ApplicationEventPublisher、ApplicationListener接口以及它们在事件处理中的角色,同时讨论了SimpleApplicationEventMulticaster的工作原理,包括监听器的注册、事件检测和发布流程。原创 2024-10-22 23:35:41 · 1442 阅读 · 0 评论 -
【SpringBoot】一张图看懂初始化阶段-ApplicationEventMulticaster
AbstractApplicationContext拥有一个applicationEventMulticaster成员变量,applicationEventMulticaster提供了容器监听器的注册表,将Springpublish的事件广播给所有的监听器。Spring 提供了多个事件广播器的实现,其中 SimpleApplicationEventMulticaster 是一个简单的单线程实现。原创 2024-10-22 17:52:07 · 1195 阅读 · 0 评论 -
【SpringBoot】一张图看懂初始化阶段-createApplicationContext创建应用上下文
createApplicationContext到底做了什么?说的简单点:创建web应用上下文,对其部分属性:reader、scanner、beanFactory进行了实例化;reader中实例化了属性conditionEvaluator;scanner中添加了两个AnnotationTypeFilter:一个针对@Component,一个针对@ManagedBean;原创 2024-10-21 23:49:16 · 1206 阅读 · 0 评论 -
【SpringBoot】一张图看懂初始化阶段-SpringApplicationRunListener运行周期
它其实是用来在整个启动流程中接收不同执行点事件通知的监听者,SpringApplicationRunListener接口规定了SpringBoot的生命周期,在各个生命周期广播相应的事件,调用实际的ApplicationListener类。 Spring Boot 的启动配置原理可以概括如下:总的来说,Spring Boot 的启动配置原理是基于自动化的约定和条件化配置机制。它通过读取配置文件、扫描注解、自动配置组件等步骤,简化了应用程序的配置过程,并提供了灵活性和易用性。java程序由启动主类调用mai原创 2024-10-21 22:36:58 · 1262 阅读 · 0 评论 -
【SpringBoot】一张图看懂初始化阶段-ApplicationContextInitializer运行周期
用于在spring容器刷新之前初始化Spring ConfigurableApplicationContext的回调接口。(剪短说就是在容器刷新之前调用该类的 initialize 方法,并将 ConfigurableApplicationContext 类的实例传递给该方法)通常用于需要对应用程序上下文进行编程初始化的web应用程序中。Spring Boot 的启动配置原理是基于自动化的约定和条件化配置机制。它通过读取配置文件、扫描注解、自动配置组件等步骤,简化了应用程序的配置过程,并提供了灵活性和易用性原创 2024-10-21 16:19:45 · 1186 阅读 · 0 评论 -
【JavaWeb】Spring Security的工作原理和机制
本文主要讲,Filter是过滤器原理,依赖与web容器,拦截器(Interceptor)是一个 Spring 组件,并由 Spring 容器管理,是反射+AOP并不依赖 Tomcat 等容器,是可以单独使用的。Spring Security为J2EE企业级应用提供了全面的安全服务,底层是Filter实现,将认证与授权分开的体系结构,并兼备多种策略和扩展点,实现了精细化的授权和认证作业,支持你通过各种Filter实现准确的安全控制。原创 2024-10-21 07:27:37 · 1137 阅读 · 0 评论 -
【JavaWeb】过滤器与拦截器
过滤器和拦截器的区别主要体现在触发时机、功能、实现方式以及使用场景上。触发时机不同:过滤器在请求进入容器后、进入Servlet之前进行预处理,请求结束是在Servlet处理完后返回给前端之前。而拦截器在请求进入Servlet后、进入Controller之前进行预处理。过滤器:Servlet 规范中的一部分,任何java web工程都可以使用。拦截器:SpringMVC 框架自己的,只有使用了SpringMVC框架的工程才能用。原创 2024-10-20 15:52:50 · 1262 阅读 · 0 评论 -
【JavaWeb】Spring ApplicationContextInitializer
ApplicationContextInitializer发生在Spring容器刷新(初始化)之前,在容器刷新之前调用此类的initialize方法。这时由于Spring容器还未刷新(实例化),所以不能对Spring容器下的Bean做扩展操作。通常被用来设置环境属性、激活配置等操作。比如在中间件配置中心Apollo中就是使用了ApplicationContextInitializer扩展点来完成对配置的加载。原创 2024-10-19 21:47:21 · 745 阅读 · 0 评论 -
【JavaWeb】Spring BeanDefinitionRegistryPostProcessor & BeanFactoryPostProcessor & BeanPostProcessor详解
BeanFactoryPostProcessor和BeanPostProcessor,这两个接口,都是Spring初始化bean时对外暴露的扩展点。为了更好地理解,让我们用一个图书馆的类比:制定书单:图书馆先列出了所有想要的书的名称和作者,但还没有实际购买书籍。在Spring中,这就类似于创建BeanDefinition。在这个步骤后,但在图书馆真正购买书籍之前,假设图书馆收到了一个特别的捐赠列表(BeanDefinitionRegistryPostProcessor)。原创 2024-10-18 17:24:39 · 1344 阅读 · 0 评论 -
【JavaWeb】什么是BeanDefinition
本文详细介绍了Spring中的BeanDefinition对象及其在bean初始化过程中的作用,特别是BeanFactoryPostProcessor接口的使用。它允许程序员在bean实例化前修改bean工厂,提供了对bean初始化过程的扩展点。通过示例展示了如何动态添加和修改beanDefinition,强调了理解beanDefinition和初始化过程的重要性。原创 2024-10-18 13:05:24 · 698 阅读 · 0 评论 -
【JavaWeb】SpringAOP 动态代理 精讲
Spring AOP的自动代理功能主要由DefaultAdvisorAutoProxyCreator类来实现,它是Spring框架中一个核心组件,用于在Spring IoC容器创建Bean的过程中自动化地应用切面编程(Aspect-Oriented Programming, AOP)。该类在整个Spring AOP源码目录中的位置位于SpringAOP源码05,紧随ProxyFactory和JdkDynamicAopProxy的学习之后。首先,理解代理时机至关重要。Spring AOP的自动代理不是在所原创 2024-10-17 22:47:40 · 1051 阅读 · 0 评论 -
【JavaWeb】SpringIOC 循环依赖 精讲
spring IOC容器初始化和Bean的生命周期流程,以及Spring如何通过三级缓存解决循环依赖。二级缓存和三级缓存的必要性,以及三级缓存存储的函数式表达式,什么情况会生成动态代理。原创 2024-10-17 19:56:43 · 653 阅读 · 0 评论 -
【JavaWeb】Spring 如何解决循环依赖
循环依赖:一个或多个对象实例之间存在直接或间接的依赖关系,这种依赖关系构成了构成一个环形调用。第一种情况:自己依赖自己的直接依赖第二种情况:两个对象之间的直接依赖第三种情况:多个对象之间的间接依赖Spring 处理循环依赖的方式:有构造器注入,不一定会产生问题,具体得看是否都是构造器注和 BeanName 的字母序;如果单纯为了打破循环依赖,不需要三级缓存,两级就够了;三级缓存是否为延迟代理的创建,尽量不打破 Bean 的生命周期。原创 2024-10-17 11:23:09 · 1110 阅读 · 0 评论 -
【JavaWeb】一文读懂Cookie、Session&Token 的区别和联系
Cookie、Session、Token 这三者是不同发展阶段的产物,都是为了解决无状态的 HTTP 协议,提升网站的交互体验。但是他们各有优缺点,三者也没有明显的对立关系,反而常常结伴出现,这也是容易被混淆的原因。客户端与服务器端使用Http协议通讯,但是http无状态协议(短socket链接接,而非长socket),1,客户端每次都携带信息,发送方给服务器(早期的cookie机制)2,客户端第一次请求,服务器分配唯一标识,客户端之后每次携带标识(中期的Session机制)原创 2024-10-14 15:32:15 · 1205 阅读 · 0 评论 -
【JavaWeb】一张图看懂Http和Https协议
本文介绍了HTTP协议的基础知识,包括HTTP的简介、URL的组成和解析,详细讲解了GET和POST请求的区别,如请求方法、请求头、请求参数等。同时,讨论了HTTP请求头中的User-Agent、Accept、Accept-Encoding等字段,以及数据编码和压缩的重要性。此外,还提到了POST请求中Content-Type用于指定数据类型的重要性。原创 2024-10-13 21:07:44 · 969 阅读 · 0 评论 -
【JavaWeb】一张图看懂TCP三次握手四次挥手原理
计算机网络基础中, TCP提供的是全双工通信,TCP协议建立连接 & 释放连接时的三次握手、四次挥手十分重要。TCP位于OSI七层模型中的网络层。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。原创 2024-10-13 17:40:20 · 785 阅读 · 0 评论 -
【JavaWeb】一张图看懂浏览器请求服务器的流程
本文详细描述了从用户输入URL到页面加载完成的完整网络访问流程,包括DNS解析、TCP连接建立、HTTP请求与响应,以及三次握手和四次挥手的TCP连接管理机制。同时,对DNS缓存和TCP/IP协议进行了深入剖析。计算机七层模型自下而上,IP属于传输层协议,TCP和UDP属于网络层协议,而最上层就是HTTP应用层协议,也就是说TCP是TCP/IP协议的调用者,HTTP协议是通过TCP/IP协议进行传输数据的。原创 2024-10-13 12:23:43 · 1741 阅读 · 0 评论