自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 真·面试题总结——JVM虚拟机

这些数据包括基本。

2024-04-02 13:58:42 1050

原创 面试题总结——分布式事务(CAP、BASE、XA、2PC、3PC、TCC、SAGA、本地事务表、事务消息、最大努力通知方案)

分布式事务

2024-03-20 16:39:06 441

原创 面试题总结——Redis

Redis1. BIO AIO NIO2. 谈谈Redis为什么是单线程?以及IO多路复用?3. Redis常用的数据结构和各自的应用场景?4. Redis的持久化方式,以及各种各种方式的应用场景?5. Redis怎样实现高可用?详细谈谈Sentinel模式以及Redis集群模式?6. 什么是缓存穿透、缓存击穿、缓存雪崩以及各种问题的解决方式?7. 如何保证Redis缓存和Mysql双写的数据一致性?1. BIO AIO NIOhttps://blog.csdn.net/zlc3323/article

2021-04-08 19:50:23 356 1

原创 面试题总结——MySQL

Mysql1. 数据库的存储引擎有哪些?各自的特点?2.Mysql默认的存储引擎什么? MyISAM与InnoDB的区别?3. Mysql查询(select)语句处理流程?更新(update)语句处理流程?4. 索引4.1 谈谈索引一共有哪些类型?以及各自的特征?4.2 索引有哪些数据结构?重点谈谈谈B+树和B-树索引的实现及区别?4.3 谈谈聚集索引和非聚集索引?4.4 单列索引和复合索引?4.5 索引失效的场景有哪些?4.6 索引覆盖和索引下推?5. 事务5.1 谈谈事务的ACID特性是什么?5.2 什

2021-04-08 19:46:08 1228 2

原创 面试题总结——Java多线程与并发

请完整描述线程的生命周期与5中状态之间流转过程1.1 新建状态:当线程对象创建后,即进入新建状态。1.2 就绪状态:当调用线程对象的start()方法时,线程进入就绪状态,处于就绪状态的线程,只能说明已经做好了准备,随时等待CPU调用,并不是说执行了start()方法,线程立即就会执行。1.3 运行状态:当CPU调用处于就绪状态的线程时,线程才等到真正的执行,即进入到运行状态,注意:就...

2020-12-15 11:22:46 353 2

原创 Tomcat架构解析(2)——Tomcat总体架构

作为一款知名的轻量级应用服务器,Tomcat的架构设设计(如生命周期管理、可扩展的容器组件设计、类加载方式)可以为我们的服务器中间设计,甚至是应用系统组件设计提供非常好的借鉴意义。本章概要的介绍了Tomcat的总体架构,通过本章的学习,可以理解Tomcat各个组件的基本概念,并为进一步了解后续章节讲述的各个组件打下良好基础。本章包含以下几个部分:Tomcat总体架构设计及Tomcat各个组...

2020-04-09 19:35:15 455

原创 一图流——Spring框架之容器的实现

1. 容器的基本用法2. Spring的核心类DefaultListableBeanFactoryXmlBeanDefinitionReader3. 容器的基础XmlBeanFactory

2020-03-24 14:25:38 197

原创 一图流——Spring整体框架

Core Container(核心容器):Core模块:核心工具类,是其他模块的核心;Beans模块:访问配置文件、创建、管理bean,Ioc和DI操作相关的所有类;Context模块:建立在Core模块和Beans模块之上,类似于JNDI注册器式对象访问方式,为Spring核心提供扩展,ApplicationContext是Context模块的关键;Expression Langu...

2020-03-16 13:25:36 112

转载 面试题总结——访问权限关键字

面试题总结——访问权限关键字

2020-03-14 17:03:19 291

原创 一图流——虚拟机堆结构模型

2020-03-14 16:45:18 109

原创 Java设计模式——观察者模式与Spring事件监听器

写在前面的话:终于通读了以便《Spring源码深度解析》,在Spring的事件监听器部分使用了设计模式中的观察者模式的经典实现1. 业务场景2. 传统处理/策略模式2.1 传统模式2.2 策略模式2.3 什么是策略模式3. SpringBoot引入策略模式4. 策略模式优势5. 问题与解决方法...

2020-03-12 15:46:15 174

原创 Spring源码深度解析笔记(13)——容器的功能扩展

经过前几章的分析,对Spring中的容器功能有了简单的了解,在前面几章中一直以BeanFactory接口以及它的默认实现类XmlBeanFacotory为例进行分析,但是Spring中还提供了另一个接口ApplicationContext,用于扩展BeanFactory中现有的功能。ApplicationContext和BeanFactory两者都是用于加载Bean的,但是相比之下,Applic...

2020-03-11 13:49:20 339

原创 一图流——虚拟机栈结构模型

2020-03-11 09:40:15 72

原创 一图流——虚拟机运行时数据区内存结构

2020-03-10 13:55:35 81

原创 面试题总结——插入排序

1. 原理从整个待排序序列中选择一个元素插入到已经有序的子序列中去,得到一个有序的、元素个数加一的子序列,直到整个序列的带插入元素为0,则整个序列全部有序。2. 思路设置监视哨r[0],将待插入的记录值赋值给r[0];设置开始查找的位置j;在数组中搜索,搜索中将第j个元素记录后移,直到r[0] >= r[j]为止;将r[0]插入到r[j + 1]的位置上。3. 代码...

2020-03-07 11:57:55 169

原创 面试题总结——选择排序

1. 原理每次从数组元素中选出最小(或最大)的一个元素,存放在已经排序好序列的起始位置(或者末尾位置),直到全部待排序的元素排完。2. 思路第一趟排序,在待排序数据arr[1],arr[2]…arr[n]选取最小的数据,将其与arr[1]进行交换;第二趟排序,在待排序数据arr[2],arr[3]…arr[n]选取最小的数据,将其与arr[2]进行交换;…如此继续,第i趟在待排...

2020-03-07 11:23:32 251

原创 面试题总结——冒泡排序

1. 原理比较数组中两个相邻的元素,将值大的元素交换到右边,如果遇到相等的值不进行交换,这种排序方式是稳定的排序方式。2. 思路依次比较相邻的两个数,将比较小的数放在左边,比较大的数放在右边。第一次比较:比较第一和第二个元素,将较小的元素放在左边,将较大的数放在右边;比较第二和第三个元素,将较小的元素放在左边,较大的元素放在右边;····················依次进...

2020-03-06 12:48:39 334

原创 面试题总结——Linux操作系统

对于Linux的fsync,下列哪个说法是正确的?A. 文件的脏页以及metedata会同步到存储设备B. 文件的脏页会同步到存储设备,但不含文件的metedataC. 新同步的文件内容一定不会丢失D. fsync比fdatasync的性能更好正确答案:A畅通的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多说磁盘I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该...

2020-02-25 23:10:38 185

原创 面试题总结——异常类(Exception)相关

面试题中的异常(Exception)相关问题、解决以及延伸(持续更新)下面关于异常处理,哪些说法是正确的?A. 所有在本方法中可能抛出的异常都必须显式的在方法上用throws进行声明B. Error的子类表示无法修饰的问题C. RuntimeException表示只在运行时(runtime)才可能出现这个异常。而普通Exception表示在运行时(runtime)和编译期(compile...

2020-02-24 19:36:51 1843

原创 深入理解Java虚拟机——虚拟机字节码执行引擎

8.1 概述执行引擎是Java虚拟机最核心的组成部分之一,“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统的层面上,而虚拟机的执行引擎是有自己实现的,因此可以自己定制指令集和执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。在Java虚拟机规范中指定了虚拟机字节码执行引擎的概念模型,这个概念模...

2020-02-23 22:15:47 605

原创 深入理解Java虚拟机——虚拟机类加载机制

代码编译的结果是从本地机器码变为字节码,是存储格式发展的一小步,却是编译语言发展的一大步。7.1 概述上一张我们了解了Class文件存储格式的具体细节,在Class文件中描述的各种信息,最终都需要加载到虚拟机之后才能运行和使用,而虚拟机如何加载这些Class文件?Class文件中的信息进入到虚拟机后会发生什么变化?这些都是本章将要讲解的内容。虚拟机把描述类的数据从Class文件加载到内存,并...

2020-01-31 22:40:19 220

原创 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 234

原创 Spring源码深度解析笔记(11)——自定义标签的解析

在之前的章节中,提到了在Spring中存在默认标签与自定义标签两种,当从配置文件中到Document的转换并提取对应的root后,将开始所有的元素的解析,而在这一过程中便开始了默认标签与自定义标签两种格式的区分,函数如下:protected void parseBeanDefinition(Element ele,BeanDefinitionParserDelegate delegate)d...

2020-01-02 13:49:51 138

原创 Spring源码深度解析笔记(10)——默认标签的解析

之前提到过Spring中的标签包括默认标签和自定义标签,而这两种标签的用法以及解析方式存在着很大不同。默认标签的解析是在parseDefaultElement函数进行的,函数中的功能逻辑一目了然,分别对4中不同标签(import、alisa、bean和beans)做了不同处理。private void parseDefaultElement(Element ele,BeanDefinitio...

2019-12-31 16:09:26 1461

原创 Spring源码深度解析笔记(9)——Spring容器的基本实现

2.1 容器的基本用法bean是Spring中最核心的东西,因为Spring就像一个大水桶,而bean就像容器中的水,水桶脱离了水也没什么用处。2.2 功能分析Spring创建对象的功能就是一下几点:读取配置文件;根据配置文件中的配置找到对应的类的配置,并实例化;调用实例化后的实例。如果想完成上述功能,至少需要三个类:ConfigReader:用于读取以及验证配置文件,...

2019-12-25 15:02:21 235

原创 Spring源码深度解析笔记(8)——Spring整体架构

Spring是于2003年星期的一个轻量级Java开源框架,Spring是为了解决企业应用开发的复杂性而创建的,它使用基本的JavaBean来完成以前只能使用EJB完成的事情。然而,Spring的用途不仅限于服务器的开发。从简单性,可测试性和松耦合性的角度而言,任何Java应用都可以从Spring中受益。1.1 Spring的整体架构spring框架是一个分层架构,它包含一系列的功能要素,并被...

2019-12-23 16:35:21 128

原创 Spring源码深度解析笔记(7)——AOP

我能都知道,使用面向对象编程有一些弊端,当需要为多个不具有继承关系的对象引入同一个公共行为时,例如日志、安全检测等,我们只有在每一个对象里应用功能行为,这样程序中产生了大量重复代码,程序就不便于维护了,所以就有了一个对面向对象编程的补充,即面向方面编程(AOP),AOP所关注的方向是横向,不同于OOP的纵向。Spring中提供了AOP的实现,但是在低版本的Spring中定义了一个切面比较麻烦,需...

2019-10-05 21:20:56 201

原创 Maven——Version之有啥不一样,就是不一样

配置Maven版本依赖的时候,一定要注意到大小写;一定要注意到大小写;一定要注意到大小写1.0.0-SNAPSHOT 和 1.0.0-snapshot有啥不一样,就是不一样

2019-09-04 10:12:44 528

原创 深入理解Java虚拟机——垃圾收集器与内存分配策略

3.1 概述说起垃圾收集,大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史比Java救援,1960年诞生的MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期时,人们就思考GC需要完成的3件事:哪些内存需要回收?什么时候回收?如何回收?经过半个世纪的发展,目前内存的动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化...

2019-08-21 19:49:21 94

原创 面试题不了解一下吗!?

1. 类加载执行顺序写在前面的话,被前端小姐姐出的后端的面试题给整郁闷了,贼尴尬,特此记录,知耻后勇!!!本题考点无非以下几点:1、静态代码块和构造函数执行先后顺序--------->类加载时执行顺序为父类静态代码块->子类静态代码块->初始化父类成员变量->父类初始化语句块->父类构造函数->初始化子类成员变量->子类初始化语句块->子类构...

2019-08-20 13:27:48 81

原创 读代码有感

写在前面的话,最近熟悉新项目代码时,发现了很多好玩的东西,在此记录,以备不时之需。### 1. 不对SQL搞点事情吗!?#### 1.1 业务场景由于业务数据表在初期创建时,是以租户Id为单位划分的,即在查询时,表名中的租户Id是动态生成的,所以在执行sql语句之前要动态将租户Id拼接到sql语句中:``` <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">

2019-08-19 09:31:06 134 1

原创 深入理解Java虚拟机——自动内存管理机制

Java内存区域和内存溢出异常Java和C++之间有一堵由内存动态分析和垃圾收集技术所围成的“高墙”,墙外面的想进去,墙里面的人却想出来。2.1 概述对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不需要为每一个new操作去配对的delete/free代码,不容易出现内存泄露和内存溢出问题。有虚拟机管理内存之一切看起来都很美好,不过,也正是因为Java程序员把内存控制的权利交给了J...

2019-08-12 16:59:50 169

原创 Spring源码深度解析笔记(6)——数据库连接JDBC

JDBC是一种用于执行SQL语句的Java API,可以用于多种关系数据库提供统一访问,它是一组Java语言编写的类和接口组成的。JDBCwei开发人员提供一个标准的API,据此可以构建更高级的工具和接口。使数据库开发人员能够用纯Java API编写数据库应用程序,并且可以跨平台。并且不受数据库供应商的限制。JDBC连接数据库的流程及原理如下。在开发环境中加载指定数据库连接的驱动程序。在...

2019-08-08 14:51:19 361

原创 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 167

原创 Spring源码深度解析笔记(4)——事务

Spring声明式事务让我们从复杂的事务处理中解脱出来,使我们不需要去处理获得连接、关闭连接、事务提交和回滚等操作,再也不需要在与事务相关的方法中处理大量的try…catch…finally代码。Spring事务的使用虽然已经相对简单,但是,还是有很多的使用及配置规则。创建Spring配置文件<!-- 配置事务 --><tx:annotation-driven transa...

2019-08-06 13:15:04 208

原创 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 470

原创 Java设计模式——适配器模式与SpringMVC中HandlerAdapter

1. 业务场景通过解读SpringMVC的源码可知,HandlerAdapter使用了典型的适配器模式,解决了由于Controller的类型不同,有多重实现方式,那么调用方式就不是确定的,如需调用Controller则需要循环判断Controller实例列表中是否有满足条件的实例,并且如果我们增加一个新的Controller,就要在代码中加入一行判断逻辑,这种形式就使得程序难以维护,也违反了设计...

2019-07-29 13:57:46 471

原创 Java设计模式——责任链模式与电子签约

1. 业务场景通过程序,将运营人员线下签约模式转化为线上签约模式,在线上签约过程引入第三方合同验证平台。2. 传统处理/责任链模式2.1 传统模式 需要关注验证的每一步是否成功,如果成功才会继续向下执行,如果不成功需要返回错误信息。代码略。2.2 责任链模式 // 创建责任链各个节点实例 CreateContractTest createContractTest = new ...

2019-07-18 15:10:15 339

翻译 Spring源码深度解析笔记(2)——远程服务

Java远程方法调用,即Java RMI(Java Remote Method Invocation),是Java编程语言里一种用于实现远程过程调用的应用程序编程接口。它是客户机上运行的程序能够在网络环境中分布操作。RMI全部的宗旨就是尽可能的简化远程接口对象的使用。Java RMI极大的依赖于接口,在需要创建一个远程对象时,程序员通过传递一个接口来隐藏底层的实现细节。客户端得到的远程对象句柄正...

2019-07-17 16:02:08 195

原创 Java设计模式——策略模式与活动优惠

写在前面的话:项目基本完结了,复盘项目时,突发奇想,负责的模块居然符合策略模式的使用场景,所以引入策略模式,重构了下负责的模块,在此记录一下。1. 业务场景用户购票过程中,可以参加符合条件的优惠活动,并根据不同类型活动,计算优惠金额和需要支付的金额,活动类型包括:1. 立减活动2. 立减到活动3. 满减活动2. 业务流程图3. 传统处理/策略模式3.1 传统模式 if (KaA...

2019-07-16 15:30:32 3028

空空如也

空空如也

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

TA关注的人

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