自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring经典面试题---面试前必看

1.BeanFactory和FactoryBean的区别?BeanFactory是Spring容器的顶级接⼝,给具体的IOC容器的实现提供了规范。FactoryBean也是接⼝,为IOC容器中Bean的实现提供了更加灵活的⽅式,FactoryBean在IOC容器的基础上给Bean的实现加上了⼀个简单⼯⼚模式和装饰模式。区别:BeanFactory是个Factory,也就是IOC容器或对象⼯⼚,FactoryBean是个Bean。在Spring中,所有的Bean都是由BeanFactory(也就是.

2022-02-28 23:39:43 6612

原创 Spring事务&分布式事务Seata

编程式事务:在业务代码中添加事务控制代码,这样的事务控制机制就叫做编程式事务声明式事务:通过xml或者注解配置的⽅式达到事务控制的⽬的,叫做声明式事务事务基本概念1.事务概念事务指逻辑上的⼀组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功。从⽽确保了数据的准确与安全。2.事务的四大特性原⼦性(Atomicity)原⼦性是指事务是⼀个不可分割的⼯作单位,事务中的操作要么都发⽣,要么都不发⽣。从操作的⻆度来描述,事务中的各个操作要么都成功要么都失败⼀致性(Consistency

2022-02-16 22:16:32 17669 2

原创 SpringMVC执行流程

Spring MVC 请求处理流程流程说明:第⼀步:⽤户发送请求⾄前端控制器DispatcherServlet第⼆步:DispatcherServlet收到请求调⽤HandlerMapping处理器映射器第三步:处理器映射器根据请求Url找到具体的Handler(后端控制器),⽣成处理器对象及处理器拦截器(如果 有则⽣成)⼀并返回DispatcherServlet第四步:DispatcherServlet调⽤HandlerAdapter处理器适配器去调⽤Handler第五步:处理器适配器.

2022-02-12 10:42:26 6004

原创 面试官最最最常问的几种算法(Java实现)

算法的概念算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。描述:算法是一种解决特定问题的思路常见算法:递归概念递归,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。也就是说,递归算法是一种直接或者间接调用自身函数或者方法的算法。递归三要素递归结束条件:既然是循环就必须要有结束,不结束就会OOM了函数的功能:这个函数要干什么,打印,计算…函数的等价关系式:递归公式,一般是每次执行之间

2022-01-07 23:10:21 745

原创 Mybatis 工作中最值得看的常用技巧以及SQL写法

数据库与实体自定义类型转换枚举MarkFieldTypeEnum:public enum MarkFieldTypeEnum { /** * 流水号 */ SERIAL_NUMBER(1,65927,"流水号位数", IntMarkFieldValueImpl.class), /** * 固定内容 */ FIX_CONTEXT(17,57934,"固定内容", FixContentMarkFieldValueImpl.cla.

2022-01-03 14:11:14 457

原创 Spring IOC超详解

Spring IOC 应⽤1.Spring IoC基础1.1BeanFactory与ApplicationContext区别BeanFactory是Spring框架中IoC容器的顶层接⼝,它只是⽤来定义⼀些基础功能,定义⼀些基础规范,⽽ApplicationContext是它的⼀个⼦接⼝,所以ApplicationContext是具备BeanFactory提供的全部功能的。通常,我们称BeanFactory为SpringIOC的基础容器,ApplicationContext是容器的⾼级接⼝,⽐.

2021-12-28 15:03:47 2285

原创 工作中常用String工具类以及正则

StringString类表示字符串。 Java程序中的所有字符串文字(例如"abc" )都实现为此类的实例。String Api方法描述char charAt(int index)返回指定索引处的 char 值int compareTo(Object o)把这个字符串和另一个对象比较int compareTo(String anotherString)按字典顺序比较两个字符串int compareToIgnoreCase(String str)按字典.

2021-12-19 14:22:14 248

原创 JVM优化

JVM基础JVM的位置JVM是运行在操作系统之上的,它与硬件没有直接的交互JVM的体系结构JVM调优是在堆中,栈+本地方法栈+程序计数器不会有垃圾回收。类加载器作用: 加载class文件种类(四种):虚拟机自带的加载器启动类(根)加载器BOOT rt.jar扩展类加载器ROOT jre/lib/ext应用程序加载器APP classpath双重委派机制双亲委派机制的工作原理:一层一层的让父类去加载,最顶层父类不能加载往下数,依次类推。确保Java核心类库中的

2021-12-12 09:34:09 122

原创 Spring Cloud

架构发展1.单体应用架构项⽬所有的功能模块都放在⼀个⼯程中编码、编译、打包并且部署在⼀个Tomcat容器中的架构模式就是单体应⽤架构,这样的架构既简单实 ⽤、便于维护,成本⼜低。优点:项⽬前期开发节奏快,团队成员少的时候能够快速迭代架构简单:MVC架构,只需要借助IDE开发、调试即可易于测试:只需要通过单元测试或者浏览器完成易于部署:打包成单⼀可执⾏的jar或者打成war包放到容器内启动缺点:随着不断的功能迭代,单个项⽬过⼤,代码杂乱,耦合严重,开发团队逐渐壮⼤以后,沟通 成本变.

2021-11-30 10:31:20 692

原创 synchronized详解

锁的本质如果一份资源需要多个线程同时访问,需要给该资源加锁。加锁之后,可以保证同一时间只能有一个线程访问该资源。资源可以是一个变量、一个对象或一个文件等。锁是一个“对象”,作用如下?这个对象内部得有一个标志位(state变量),记录自己有没有被某个线程占用。最简单的情况是这个state有0、1两个取值,0表示没有线程占用这个锁,1表示有某个线程占用了这个锁。如果这个对象被某个线程占用,记录这个线程的thread ID。这个对象维护一个thread id list,记录其他所有阻塞的、等.

2021-11-28 11:58:03 576

原创 Java - 异常

异常体系结构1.Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。2.在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception。从图中可以看出所有异常类型都是内置类Throwable的子类,因而Throwable在异常类的层次结构的顶层。接下来Throwable分成了两个不同的分支,一个分支是Error,它表示不希望被程序捕获或者是程序无法处理的错误。另一个分支是Exception,它表示用户程.

2021-11-27 22:01:18 108

原创 Java-集合框架

集合框架概括集合可以看作是一种容器,用来存储对象信息。一些优秀的算法和数据结构被封装到了Java的集合框架中。Collection 接口存储一组不唯一,无序的对象List 接口存储一组不唯一,有序的对象。Set 接口存储一组唯一,无序的对象Map 接口存储一组键值对象,提供key到value的映射Collectionpublic interface Collection<E> extends Iterable<E> { //返回集合中元素的数量,.

2021-11-06 22:47:36 162

原创 Spring AOP&IOC初步引入-银行转账案例改造

Spring 概述1.Spring 简介Spring 官⽅⽹址:http://spring.io/Spring 是分层的 full-stack(全栈) 轻量级开源框架,以 IoC 和 AOP 为内核,提供了展现层 SpringMVC 和业务层事务管理等众多的企业级应⽤技术,还能整合开源世界众多著名的第三⽅框架和类库,已经成为使⽤最多的 Java EE 企业应⽤开源框架。我们经常说的 Spring 其实指的是Spring Framework(spring 框架)。2.Spring 发展历程.

2021-10-30 14:30:47 447

原创 Redisson分布式锁

数据并发竞争这里的并发指的是多个redis的client同时set 同一个key引起的并发问题。多客户端(Jedis)同时并发写一个key,一个key的值是1,本来按顺序修改为2,3,4,最后是4,但是顺序变成了4,3,2,最后变成了2。第一种方案:分布式锁+时间戳1.整体技术方案这种情况,主要是准备一个分布式锁,大家去抢锁,抢到锁就做set操作。加锁的目的实际上就是把并行读写改成串行读写的方式,从而来避免资源竞争。2.Redis分布式锁的实现主要用到的redis函数是setnx()实.

2021-10-23 23:03:42 860

原创 OSS云存储

阿里云对象存储服务(Object Storage Service 简称OSS) 是阿里云提供的海量 安全 低成本 高可靠的云存储服务。OSS云存储简介阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。其数据设计持久性不低于 99.9999999999%(12 个 9),服务设计可用性(或业务连续性)不低于 99.995%。可以使用阿里云提供的 API、SDK 接口或者 OSS 迁移工具轻松地将海量数据移入或移出阿

2021-10-23 17:16:45 2724

原创 SpringBoot原理深入

   传统的Spring框架实现一个Web服务,需要导入各种依赖JAR包,然后编写对应的XML配置文件等,相较而言,Spring Boot显得更加方便、快捷和高效。那么,Spring Boot究竟如何做到这些的呢?依赖管理问题:(1)为什么导入dependency时不需要指定版本?    在Spring Boot入门程序中,项目pom.xml文件有两个核心依赖,分别是spring-boot-starter-parent和spring-boot-starter-web,关于这两个依赖的相关介绍具体

2021-10-06 22:28:09 292

原创 分布式ID

为什么需要分布式ID?对于单表A来说,可以设置主键自增的形式。 ----> 但是在集群环境下,A表被拆分成了3个表(A1,A2,A3),如果A1,A2,A3三个表的结构和A表一直,如果这个三个表都是主键自增长的话,肯定会存在重复的ID。 ----> 因此需要一种机制在外围提供全局唯一的ID。分布式ID解决方案之UUIDUUID 是指Universally Unique Identifier,翻译为中⽂是通⽤唯⼀识别码产⽣重复 UUID 并造成错误的情况⾮常低(UUID的生成.

2021-10-06 18:46:54 98

原创 狂神说Redis笔记

Redis概述Remote Dictionary Server(远程字典服务器)Redis中文网是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(Key/Value)分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一,也被人们称为数据结构服务器。Redis与其他key-value缓存产品有以下三个特点Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单.

2021-09-22 23:10:53 331

原创 Swagger

Swagger简介号称世界上最流行的API框架Restful Api文档在线自动生成器 => API 文档 与API 定义同步更新直接运行在线测试API支持多种语言 (如:Java,PHP等)官网:https://swagger.io/相较于传统的Postman或Curl方式测试接口,使用swagger简直就是傻瓜式操作,不需要额外说明文档(写得好本身就是文档)而且更不容易出错,只需要录入数据然后点击Execute,如果再配合自动化框架,可以说基本就不需要人为操作了。S.

2021-09-14 22:18:13 126

原创 Stream操作List

概述Stream是Java8的一大亮点,是对容器对象功能的增强,它专注于对容器对象进行各种非常便利、高效的 聚合操作(aggregate operation)或者大批量数据操作。Stream API借助于同样新出现的Lambda表达式,极大的提高编程效率和程序可读性。1. 流的常用创建方法://1.通过集合获取Stream<User> stream = userList.stream();// 获取顺序流Stream<User> userStream = user.

2021-09-11 22:35:50 5382

原创 消息队列-RabbitMq

什么是中间件?中间件是一类连接软件组件和应用的计算机软件,它包括一组服务。以便于运行在一台或多台机器上的多个软件通过网络进行交互。该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常用于支持并简化那些复杂的分布式应用程序,它包括web服务器、事务监控器和消息队列软件。举例:1,RMI(Remote Method Invocations, 远程调用)2,Load Balancing(负载均衡,将访问负荷分散到各个服务器中)3,Transparent Fail-over(透明的故障切.

2021-09-10 21:01:08 191

原创 工作中JUC中并发&锁的常用知识

回顾进程/线程进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。线程:通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义,线程可以利用进程所有拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系

2021-09-05 15:46:49 228

原创 Java BigDecimal类的常用Api

概述1.java.math.BigDecimal类提供了算术,缩放操作,舍入,比较,散列和格式转换的操作加减乘除BigDecimal bignum1 = new BigDecimal("10");BigDecimal bignum2 = new BigDecimal("5");BigDecimal bignum3 = null;//加法bignum3 = bignum1.add(bignum2);System.out.println("求和:" + bignum3);//减法b.

2021-08-01 16:37:29 723 1

原创 Mysql索引优化超详细解析

基础规范1.表必须有主键,建议使用整型作为主键(因为字符串占的磁盘空间更大,Long占4个字节,BigInt占8个字节,varchar类型33个字节)2.禁止使用外键(影响性能和深度),表之间的关联性和完整性通过应用层来控制3.表在设计之初,应该考虑到大致的数据级,若表记录小于1000万,尽量使用单表,不建议分表。4.建议将大字段,访问频率低,或者不需要作为筛选条件的字段拆分到拓展表中,(做好表垂直拆分)5.控制单实例表的总数,单个表分表数控制在1024以内。列设计规范1.正确区分ti.

2021-05-04 19:03:30 235

原创 Java全栈学习路线

后端Java SE基础(最难)计算机基础知识Java 入门基础知识基本数据类型数组面向对象编程异常常用类集合框架IO流多线程网络编程注解反射JUCJava8新特性数据结构与算法JVM23种设计模式数据库Mysql基础JDBCMysql高级Java WebHttp协议TomcatServletCookieSessionJspJSTL+ELMVC三层架构过滤器拦截器文件上传下载邮件收发SSM框架MavenSpringS

2021-02-15 21:09:03 3071 6

原创 Spring Cloud拉取注册Eureka服务和RestTemplate调其他接口

个人理解公司临近过年放假,我所在的项目有这么一个实现,那就是如何维护Oracle数据库不同用户的一张OrgBelong表的数据一致???(这里补充一下,我个人也是第一次使用Oracle数据库,也不是特别熟练Oracle数据库,Oracle就只有一个库,这个库里有不同的用户,不同的用户可以看到不同的表,Oracle数据库中的不同的用户就相当于Mysql中不同的数据库)。但是由于这个项目是针对银行的业务,项目经理说银行那边的技术要求不支持使用Mq,其实这种场景最适合的就是使用消息队列来实现。那么我就使用了另外

2021-02-08 13:39:01 603 1

原创 SpringBoot读取resource目录下properties文件&@DependsOn

个人理解在企业开发中,我们经常需要自定义一些全局变量/不可修改变量或者参数来解决大量的变量重复问题,当需要这个全局变量时,只需要从配置文件中读取即可,根据开发中常见的情况,可以分为以下两种情况,分别是:配置文件为SpringBoot默认的application.properties文件中的自定义参数加载自定义properties文件中的自定义参数,比如xxx.properties的自定义参数加载SpringBoot默认的application.properties准备工作server.p

2021-02-05 22:05:35 2611 4

原创 工作中常用的关于树的递归算法

递归介绍递归算法在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。众所周知的数据结构的快速排序算法就是基于递归实现的。递归这是一种很重要的算法思想,在C语言,Java中普遍应用,大学期间参加算法竞赛递归算法在所难免。根据我个人的理解,一个递归程序就是方法自身调用自身,一个递归函数中主要包含三个部分,第一递归出口,第二执行的逻辑代码,第三子问题递归执行。案例介绍递归获取菜单树第一种: stream流实现(推荐)/** * stream流获取菜单树

2021-02-04 22:07:53 4579 3

原创 Java-函数式接口

函数式接口简介接口中只有一个抽象(abstact,一般省略不写)方法的接口;@FunctionalInterface:检查一个接口是否为函数式接口;简化编程模型,在新版本的框架底层大量应用!四大函数式接口Function函数型接口import java.util.function.Function;/** * Function 函数型接口, 有一个输入参数,有一个输出 */public class Demo01 { public static void main(Str

2021-01-31 12:50:34 216

原创 Java8-日期时间API

与旧版Java的日期API比较在旧版的 Java 中,日期时间 API 存在诸多问题,其中有:非线程安全 − java.util.Date 是非线程安全的,所有的日期类都是可变的,这是Java日期类最大的问题之一。设计很差 − Java的日期/时间类的定义并不一致,在java.util和java.sql的包中都有日期类,此外用于格式化和解析的类在java.text包中定义。java.util.Date同时包含日期和时间,而java.sql.Date仅包含日期,将其纳入java.sql包并不

2021-01-30 17:43:39 170 2

原创 Java-链式编程

链式编程概述链式编程可以使得代码可读性高,同时也减少了代码量,变得优雅,简约。//我们经常使用的StringBuffer 就是通过链式编程实现的StringBuffer builder = new StringBuffer();builder.append("aaa").append("bbb").append("ccc").append("dddd");在Setter方法中实现原理就是返回一个this对象,就是返回本身,达到链式效果。(1)实体类:import java.io.Ser

2021-01-23 21:04:47 784

原创 拷贝 && BeanUtils

Java提供了一个操作Set、List和Map等集合的工具类:Collections,该工具类提供了大量方法对集合进行排序、查询和修改等操作,还提供了将集合对象置为不可变、对集合对象实现同步控制等方法。这个类不需要创建对象,内部提供的都是静态方法。Collectios概述此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。它包含在 collection 上操作的多态算法,即“包装器”,包装器返回由指定 collection 支持的新 collection,以及少

2021-01-23 19:16:33 168

原创 SpringBoot整合POI实现对Excel的读写操作

了解Excel2003和Excel2007的区别如下:(1)Excel2003的保存格式为duxxx.xls,其后缀名为.xls;Excel2007的保存格式为xxx.xlsx,其后缀名名为.xlsx。(2)Excel2003表格共有65536行,256列;Excel2007表格共有1048576行,16384列。(1).pom.xml中导入依赖 <!-- 使用poi操作Excel所需要的的依赖 --> <dependency> <!-- .

2021-01-23 18:30:08 745 1

原创 Java-注解和反射

注解-Annotation注解概念注解Annotation 是从JDK5.0开始引入的新技术;Annotation的作用: - 不是程序本身 , 可以对程序作出解释.(这一点和注释(comment)没什么区别) - 可以被其他程序(比如:编译器等)读取.Annotation的格式: - 注解是以"@注释名"在代码中存在的 - 还可以添加一些参数值 , 例如:@SuppressWarnings(value="unchecked")Annotation在哪里使用? - 可

2021-01-17 19:18:30 130

原创 Optional

Optional描述Optional是jdk1.8中java.util.Optional下的一个容器类,可以保存任意类型的值,代表这个值存在,或者仅仅保存Null,表示这个值不存在,用来避免空指针异常。创建Optional(三种方式)(1). Optional.of(T t) # t必须为非空(2). Optional empty = Optional.empty(); # 创建一个空的Optional对象(3). Optional.ofNullable(T t) # t可以为空,也可以

2021-01-10 19:58:38 113

原创 Mysql引擎之INNODB和MYISAM

变迁在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。区别MYISAMINNODB事务支持不支持支持数据行锁定不支持(支持表锁)支持外键约束不支持支持全文索引支持不支持表空间大小较小约为MYISAM的2倍MYISAM:节约空间,速度较快INNODB:安全性高,事务处理,多表关联查询物理空间上存储区别所有的数据库文件都存在data目录下

2021-01-10 18:48:55 134

原创 Git常用命令总结

Git描述(1)版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术,***简单说就是用于管理多人协同开发项目的技术。***没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题。Git是目前世界上最先进的分布式版本控制系统。工作描述Git本地有三个工作区域:工作目录(Workspace)、暂存区(Stage/Index)、资源库(Reposi

2021-01-10 18:26:34 171

原创 Docker镜像容器常用命令总结

Docker概述镜像(Image):就是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。就好似Java中的类和对象,类就是镜像,容器就是对象。可以大到一个OS,小到一个Mysql。容器(container): Docker利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例(一个镜像在端口号不冲突的情况下可以启动多个容器,容器对外提供服务)。它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。可以把容器看做是一个简易版的Lin

2021-01-10 16:53:47 324

原创 工厂(Factory)模式

工厂模式1.定义一个创建产品的接口,由子类决定生产什么产品。(实现了创建者和调用者的分离) 核心:实例化对象不使用new,用工厂方法代替2.分类(1)简单工厂模式(2)工厂方法模式...

2020-12-01 12:51:48 316

原创 设计模式--适配器模式

适配器模式1.描述: 将一个类的接口转成客户希望的另一个接口,使得由于接口不兼容而不能一起工作的那些类能一起工作。2.类似于usb网线转接口,使得电脑可以通过转接口连接网线进行上网。3.代码实现:(1)需要被适配的类:/** * 要被适配的类(相当于网线) */public class Adaptee { // 上网的方法 public void request() { System.out.println("连接网线进行上网");

2020-11-30 09:57:44 118

空空如也

空空如也

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

TA关注的人

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