
笔记
文章平均质量分 73
wuyingya_12
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
面试题总结——Redis
Redis1. BIO AIO NIO2. 谈谈Redis为什么是单线程?以及IO多路复用?3. Redis常用的数据结构和各自的应用场景?4. Redis的持久化方式,以及各种各种方式的应用场景?5. Redis怎样实现高可用?详细谈谈Sentinel模式以及Redis集群模式?6. 什么是缓存穿透、缓存击穿、缓存雪崩以及各种问题的解决方式?7. 如何保证Redis缓存和Mysql双写的数据一致性?1. BIO AIO NIOhttps://blog.youkuaiyun.com/zlc3323/article原创 2021-04-08 19:50:23 · 708 阅读 · 1 评论 -
Tomcat架构解析(2)——Tomcat总体架构
作为一款知名的轻量级应用服务器,Tomcat的架构设设计(如生命周期管理、可扩展的容器组件设计、类加载方式)可以为我们的服务器中间设计,甚至是应用系统组件设计提供非常好的借鉴意义。本章概要的介绍了Tomcat的总体架构,通过本章的学习,可以理解Tomcat各个组件的基本概念,并为进一步了解后续章节讲述的各个组件打下良好基础。本章包含以下几个部分:Tomcat总体架构设计及Tomcat各个组...原创 2020-04-09 19:35:15 · 534 阅读 · 0 评论 -
一图流——Spring框架之容器的实现
1. 容器的基本用法2. Spring的核心类DefaultListableBeanFactoryXmlBeanDefinitionReader3. 容器的基础XmlBeanFactory原创 2020-03-24 14:25:38 · 244 阅读 · 0 评论 -
一图流——Spring整体框架
Core Container(核心容器):Core模块:核心工具类,是其他模块的核心;Beans模块:访问配置文件、创建、管理bean,Ioc和DI操作相关的所有类;Context模块:建立在Core模块和Beans模块之上,类似于JNDI注册器式对象访问方式,为Spring核心提供扩展,ApplicationContext是Context模块的关键;Expression Langu...原创 2020-03-16 13:25:36 · 159 阅读 · 0 评论 -
Java设计模式——观察者模式与Spring事件监听器
写在前面的话:终于通读了以便《Spring源码深度解析》,在Spring的事件监听器部分使用了设计模式中的观察者模式的经典实现1. 业务场景2. 传统处理/策略模式2.1 传统模式2.2 策略模式2.3 什么是策略模式3. SpringBoot引入策略模式4. 策略模式优势5. 问题与解决方法...原创 2020-03-12 15:46:15 · 278 阅读 · 0 评论 -
Spring源码深度解析笔记(13)——容器的功能扩展
经过前几章的分析,对Spring中的容器功能有了简单的了解,在前面几章中一直以BeanFactory接口以及它的默认实现类XmlBeanFacotory为例进行分析,但是Spring中还提供了另一个接口ApplicationContext,用于扩展BeanFactory中现有的功能。ApplicationContext和BeanFactory两者都是用于加载Bean的,但是相比之下,Applic...原创 2020-03-11 13:49:20 · 416 阅读 · 0 评论 -
一图流——虚拟机栈结构模型
原创 2020-03-11 09:40:15 · 110 阅读 · 0 评论 -
一图流——虚拟机运行时数据区内存结构
原创 2020-03-10 13:55:35 · 117 阅读 · 0 评论 -
深入理解Java虚拟机——虚拟机字节码执行引擎
8.1 概述执行引擎是Java虚拟机最核心的组成部分之一,“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统的层面上,而虚拟机的执行引擎是有自己实现的,因此可以自己定制指令集和执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。在Java虚拟机规范中指定了虚拟机字节码执行引擎的概念模型,这个概念模...原创 2020-02-23 22:15:47 · 763 阅读 · 0 评论 -
深入理解Java虚拟机——虚拟机类加载机制
代码编译的结果是从本地机器码变为字节码,是存储格式发展的一小步,却是编译语言发展的一大步。7.1 概述上一张我们了解了Class文件存储格式的具体细节,在Class文件中描述的各种信息,最终都需要加载到虚拟机之后才能运行和使用,而虚拟机如何加载这些Class文件?Class文件中的信息进入到虚拟机后会发生什么变化?这些都是本章将要讲解的内容。虚拟机把描述类的数据从Class文件加载到内存,并...原创 2020-01-31 22:40:19 · 263 阅读 · 0 评论 -
Spring源码深度解析笔记(12)——bean的加载
经过前面的分析,终于结束了对XML配置文件的解析, 接下来就是对bean加载的探索,bean加载功能的实现远比bean的解析复杂的多,对于加载bean的功能,在Spring中的调用方法为:public Object getBean(String name) throws BeanExceptionreturn doGetBean(name,null,null,false)protected...原创 2020-01-21 10:29:17 · 308 阅读 · 0 评论 -
Spring源码深度解析笔记(11)——自定义标签的解析
在之前的章节中,提到了在Spring中存在默认标签与自定义标签两种,当从配置文件中到Document的转换并提取对应的root后,将开始所有的元素的解析,而在这一过程中便开始了默认标签与自定义标签两种格式的区分,函数如下:protected void parseBeanDefinition(Element ele,BeanDefinitionParserDelegate delegate)d...原创 2020-01-02 13:49:51 · 185 阅读 · 0 评论 -
Spring源码深度解析笔记(10)——默认标签的解析
之前提到过Spring中的标签包括默认标签和自定义标签,而这两种标签的用法以及解析方式存在着很大不同。默认标签的解析是在parseDefaultElement函数进行的,函数中的功能逻辑一目了然,分别对4中不同标签(import、alisa、bean和beans)做了不同处理。private void parseDefaultElement(Element ele,BeanDefinitio...原创 2019-12-31 16:09:26 · 2027 阅读 · 0 评论 -
Spring源码深度解析笔记(9)——Spring容器的基本实现
2.1 容器的基本用法bean是Spring中最核心的东西,因为Spring就像一个大水桶,而bean就像容器中的水,水桶脱离了水也没什么用处。2.2 功能分析Spring创建对象的功能就是一下几点:读取配置文件;根据配置文件中的配置找到对应的类的配置,并实例化;调用实例化后的实例。如果想完成上述功能,至少需要三个类:ConfigReader:用于读取以及验证配置文件,...原创 2019-12-25 15:02:21 · 285 阅读 · 0 评论 -
Spring源码深度解析笔记(8)——Spring整体架构
Spring是于2003年星期的一个轻量级Java开源框架,Spring是为了解决企业应用开发的复杂性而创建的,它使用基本的JavaBean来完成以前只能使用EJB完成的事情。然而,Spring的用途不仅限于服务器的开发。从简单性,可测试性和松耦合性的角度而言,任何Java应用都可以从Spring中受益。1.1 Spring的整体架构spring框架是一个分层架构,它包含一系列的功能要素,并被...原创 2019-12-23 16:35:21 · 156 阅读 · 0 评论 -
Spring源码深度解析笔记(7)——AOP
我能都知道,使用面向对象编程有一些弊端,当需要为多个不具有继承关系的对象引入同一个公共行为时,例如日志、安全检测等,我们只有在每一个对象里应用功能行为,这样程序中产生了大量重复代码,程序就不便于维护了,所以就有了一个对面向对象编程的补充,即面向方面编程(AOP),AOP所关注的方向是横向,不同于OOP的纵向。Spring中提供了AOP的实现,但是在低版本的Spring中定义了一个切面比较麻烦,需...原创 2019-10-05 21:20:56 · 284 阅读 · 0 评论 -
JDK8以上的集合排序方法
Collections.sort(resultList, (o1, o2) -> { return DateUtil.parse(o2.getCreateTime(), "yyyy-MM-dd HH:mm:ss").compareTo(DateUtil.parse(o1.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));...原创 2019-07-08 17:33:17 · 1250 阅读 · 0 评论 -
springBoot如何创建注解
注解接口@Target(ElementType.METHOD) // 作用到方法上@Retention(RetentionPolicy.RUNTIME) // 运行时有效public @interface NoRepeatSubmit {}创建切面@Aspect@Componentpublic class NoRepeatSubmitAop {// 拦截点@Around(“e...原创 2019-07-10 10:10:45 · 879 阅读 · 0 评论 -
Spring源码深度解析笔记(1)——Spring消息
写在前面的话:新项目基本完结了,为了充实自己,决定再读一次Spring源码,直到有新项目,还是希望能养成习惯吧。加油!!对了,这个笔记是完全就是抄书,书名是《Spring源码深度解析》作者是郝佳,有兴趣的同学可以买实体书看看,讲解的挺透彻的。Java消息系统(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于两个应用程序之...翻译 2019-07-15 10:49:26 · 333 阅读 · 0 评论 -
Java设计模式——责任链模式与电子签约
1. 业务场景通过程序,将运营人员线下签约模式转化为线上签约模式,在线上签约过程引入第三方合同验证平台。2. 传统处理/责任链模式2.1 传统模式 需要关注验证的每一步是否成功,如果成功才会继续向下执行,如果不成功需要返回错误信息。代码略。2.2 责任链模式 // 创建责任链各个节点实例 CreateContractTest createContractTest = new ...原创 2019-07-18 15:10:15 · 443 阅读 · 0 评论 -
Java设计模式——策略模式与活动优惠
写在前面的话:项目基本完结了,复盘项目时,突发奇想,负责的模块居然符合策略模式的使用场景,所以引入策略模式,重构了下负责的模块,在此记录一下。1. 业务场景用户购票过程中,可以参加符合条件的优惠活动,并根据不同类型活动,计算优惠金额和需要支付的金额,活动类型包括:1. 立减活动2. 立减到活动3. 满减活动2. 业务流程图3. 传统处理/策略模式3.1 传统模式 if (KaA...原创 2019-07-16 15:30:32 · 3458 阅读 · 0 评论 -
Java设计模式——适配器模式与SpringMVC中HandlerAdapter
1. 业务场景通过解读SpringMVC的源码可知,HandlerAdapter使用了典型的适配器模式,解决了由于Controller的类型不同,有多重实现方式,那么调用方式就不是确定的,如需调用Controller则需要循环判断Controller实例列表中是否有满足条件的实例,并且如果我们增加一个新的Controller,就要在代码中加入一行判断逻辑,这种形式就使得程序难以维护,也违反了设计...原创 2019-07-29 13:57:46 · 549 阅读 · 0 评论 -
Spring源码深度解析笔记(2)——远程服务
Java远程方法调用,即Java RMI(Java Remote Method Invocation),是Java编程语言里一种用于实现远程过程调用的应用程序编程接口。它是客户机上运行的程序能够在网络环境中分布操作。RMI全部的宗旨就是尽可能的简化远程接口对象的使用。Java RMI极大的依赖于接口,在需要创建一个远程对象时,程序员通过传递一个接口来隐藏底层的实现细节。客户端得到的远程对象句柄正...翻译 2019-07-17 16:02:08 · 257 阅读 · 0 评论 -
Spring源码深度解析笔记(3)——SpringMVC
Spring框架提供了构建Web应用程序的全功能MVC模块。通过策略接口,Spring框架是高度可配置的,而且支持多种视图配置,例如JSP技术、Velocity、Tiles、iText和POI。Spring MVC框架并不知道使用的视图,所以不会强迫使用JSP技术。Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。Spring的MVC是基于S...原创 2019-07-31 15:57:31 · 582 阅读 · 0 评论 -
Spring源码深度解析笔记(6)——数据库连接JDBC
JDBC是一种用于执行SQL语句的Java API,可以用于多种关系数据库提供统一访问,它是一组Java语言编写的类和接口组成的。JDBCwei开发人员提供一个标准的API,据此可以构建更高级的工具和接口。使数据库开发人员能够用纯Java API编写数据库应用程序,并且可以跨平台。并且不受数据库供应商的限制。JDBC连接数据库的流程及原理如下。在开发环境中加载指定数据库连接的驱动程序。在...原创 2019-08-08 14:51:19 · 449 阅读 · 0 评论 -
Spring源码深度解析笔记(4)——事务
Spring声明式事务让我们从复杂的事务处理中解脱出来,使我们不需要去处理获得连接、关闭连接、事务提交和回滚等操作,再也不需要在与事务相关的方法中处理大量的try…catch…finally代码。Spring事务的使用虽然已经相对简单,但是,还是有很多的使用及配置规则。创建Spring配置文件<!-- 配置事务 --><tx:annotation-driven transa...原创 2019-08-06 13:15:04 · 268 阅读 · 0 评论 -
Spring源码深度解析笔记(5)——整合MyBatis
MyBatis本事Apache的一个开源项目iBatis,2010年这个项目由Apache Software Foundation迁移到Google Code,并改名为MyBatisMyBatis是普通的SQL查询、存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数手工设置以及结果集的检索,MyBatis使用简单的XML或者注解用于配置和原始映射,将接口和JAV...原创 2019-08-07 10:32:58 · 234 阅读 · 0 评论 -
读代码有感
写在前面的话,最近熟悉新项目代码时,发现了很多好玩的东西,在此记录,以备不时之需。### 1. 不对SQL搞点事情吗!?#### 1.1 业务场景由于业务数据表在初期创建时,是以租户Id为单位划分的,即在查询时,表名中的租户Id是动态生成的,所以在执行sql语句之前要动态将租户Id拼接到sql语句中:``` <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">原创 2019-08-19 09:31:06 · 178 阅读 · 1 评论 -
面试题不了解一下吗!?
1. 类加载执行顺序写在前面的话,被前端小姐姐出的后端的面试题给整郁闷了,贼尴尬,特此记录,知耻后勇!!!本题考点无非以下几点:1、静态代码块和构造函数执行先后顺序--------->类加载时执行顺序为父类静态代码块->子类静态代码块->初始化父类成员变量->父类初始化语句块->父类构造函数->初始化子类成员变量->子类初始化语句块->子类构...原创 2019-08-20 13:27:48 · 111 阅读 · 0 评论 -
深入理解Java虚拟机——自动内存管理机制
Java内存区域和内存溢出异常Java和C++之间有一堵由内存动态分析和垃圾收集技术所围成的“高墙”,墙外面的想进去,墙里面的人却想出来。2.1 概述对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不需要为每一个new操作去配对的delete/free代码,不容易出现内存泄露和内存溢出问题。有虚拟机管理内存之一切看起来都很美好,不过,也正是因为Java程序员把内存控制的权利交给了J...原创 2019-08-12 16:59:50 · 218 阅读 · 0 评论 -
深入理解Java虚拟机——垃圾收集器与内存分配策略
3.1 概述说起垃圾收集,大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史比Java救援,1960年诞生的MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期时,人们就思考GC需要完成的3件事:哪些内存需要回收?什么时候回收?如何回收?经过半个世纪的发展,目前内存的动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化...原创 2019-08-21 19:49:21 · 131 阅读 · 0 评论 -
Maven——Version之有啥不一样,就是不一样
配置Maven版本依赖的时候,一定要注意到大小写;一定要注意到大小写;一定要注意到大小写1.0.0-SNAPSHOT 和 1.0.0-snapshot有啥不一样,就是不一样原创 2019-09-04 10:12:44 · 618 阅读 · 0 评论 -
初识分布式锁(Redis)
业务场景:分布式服务场景下的前后端分离,业务数据库表属性字段有唯一索引校验,前端多次调用服务,并同时传入相同参数,由于分布式服务的特性,且并没有设置访问服务的时权重或顺序,所以可能会导致多个服务保存数据库表时唯一索引校验错误。实现思路:使用分布式锁进行控制,即通过redis控制在同一时间点内只能有一个进行中的操作。1) setNx() 方法;2) incr() 方法。特别鸣谢 https:...原创 2019-03-25 09:50:52 · 172 阅读 · 1 评论