自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 git修改用户名和邮箱

git修改用户名和邮箱

2022-07-12 14:55:30 4581 1

原创 分库分表记录

转载分库分表1、垂直分库分表,按照业务拆分分库:将相同业务的表放在一个库;分表:将表字段按照业务拆分成多个表;2、水平分库分表,按照一定规则拆分分库分表:按照一定规则拆分,比如指定拆分键为id,取hash分为多张表总结垂直分表:可以把一个宽表的字段按访问频次、是否是大字段的原则拆分为多个表,这样既能使业务清晰,还能提升部分性能。拆分后,尽量从业务角度避免联查,否则性能方面将得不偿失。垂直分库:可以把多个表按业务耦合松紧归类,分别存放在不同的库,这些库可以分布在不同服务器,从而使访问压力被多服

2022-03-08 23:47:17 108

原创 分布式事务实现方式

转载 分布式事务1、基于XA协议的两阶段提交XA是一个分布式事务协议,由Tuxedo提出。XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口,而事务管理器作为全局的调度者,负责各个本地资源的提交和回滚。2、消息事务+最终一致性基于消息中间件的两阶段提交,本质上是对消息中间件的一种特殊利用,它是将本地事务和发消息放在了一个分布式事务里,保证要么本地操作成功成功并且对外发消息成功,要么两者都失败。3、TCCTC

2022-03-08 23:40:05 452

转载 使用事务注解@Transactional事务失效的三种原因

第一种 Transactional注解标注方法修饰符为非public时,@Transactional注解将会不起作用。第二种 在类内部调用类内部@Transactional标注的方法。这种情况下也会导致事务不开启。第三种 事务方法内部捕捉了异常,没有抛出新的异常,导致事务操作不会进行回滚。转自https://blog.csdn.net/qq_20597727/article/details/84900994...

2021-09-24 17:47:21 1227

原创 一次多线程优化读取文件的实战

需求描述:商户每天会定时将文件传到我们的sftp服务器,我们需要对文件解析落库等操作。方案A:起初的设计是将文件下载到本地,读取整个文件,落库等一系列处理。方案A的设计本来是没问题的,因为商户每天回传的文件不过5MB左右,程序运行了一年多时间,直到后来对接了一个新商户A,A回传的文件每天都在增长,有一天达到了200+MB,当程序将整个文件加载到内存时直接把CPU打满,最后内存溢出了,于是发现原先的方案已不适用,需要马上修改,此时引入了多线程,也就是方案B。方案B:将文件下载后,不再一次性全部读取,而是

2020-12-30 22:35:27 433 1

原创 spring的事件发布与监听

当一次请求中的某些流程只需要执行,不需要结果时,可以考虑将这些流程的执行放到异步线程去执行,可以使用spring上下文自带的事件发布与监听去实现。spring上下文工具类/** * spring上下文工具类 */@Component@Lazy(false)public class SpringContextUtils implements ApplicationContextAwar...

2020-04-07 23:19:56 607

原创 logback属性配置记录

参考:logback配置文件—logback.xml详解1、设置日志文件名称,让程序加载根据不同的日志系统,按如下规则组织配置文件名,就能被正确加载:Logback:logback-spring.xml, logback-spring.groovy, logback.xml,logback.groovyLog4j:log4j-spring.properties, log4j-sprin...

2020-04-01 18:34:52 503

原创 自己的springboot starter

参考:https://www.cnblogs.com/yuansc/p/9088212.html1、创建一个springboot项目,将以下依赖引入<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <arti...

2020-03-31 22:54:39 119

原创 @ExceptionHandler与@Aspect对异常的全局处理

之前做过的项目都是从service一路抛到controller,然后定义一个controller层的统一异常处理类,最近做的项目却是使用AOP进行全局的异常拦截处理,很好奇两种方式有何不同,如果同时定义又会怎样,经过验证,如果定义了AOP拦截处理异常,@ExceptionHandler就没有用了,因为他是对于controller层抛出去的异常进行处理,而在切面处异常已经被处理,所以不会执行,以下是...

2020-03-25 23:26:09 4308 2

原创 使用@Autowired对set方法参数是map的注入

文章内容简要:1、java使用@Autowired对方法参数是map的注入1、java使用@Autowired对方法参数是map的注入最近在项目中看到对set方法直接使用@Autowired,接收参数是一个Map<String,类名称>集合,一时没搞懂接收的map是从哪里取到的值,经过上网查资料与试验终于明白:spring会将注入的bean的类是指定类的所有对象,聚到一起组成一...

2020-03-24 00:00:38 1395

原创 学习记录3

文章内容简要:1、java8中对元注解的增强1、java8中对元注解的增强1.1 扩展了注解的使用范围在ElementType枚举类型中,增加了两个枚举值:ElementType.PARAMETER,表示注解可以写在类型变量的声明语句中;ElementType.USE,表示注解可以写在使用类型的任何语句中。1.2 增加了@Repeatable元注解JDK8之前,同一个注解在同一个...

2020-03-19 23:11:40 62

原创 学习记录2

文章内容简要:1、java8中接口方法的变化2、Lambda表达式3、函数式接口1、java8中接口方法的变化接口中方法默认使用public abstract修饰,字段默认使用public static final修饰;java8中可以定义default修饰的方法,也可以定义static修饰的方法default修饰的方法,实现类可以重写,也可以不重写static修饰的方法,实现类...

2020-03-15 21:10:51 133

原创 springboot学习笔记-2

文章内容简要:springboot启动端口;1、修改启动端口,IDEA内置tomcat,启动时默认使用8080,可通过以下配置在application.properties文件中修改程序启动默认端口server.port=8012或者通过以下配置在application.yml文件中修改server: port: 8012...

2020-03-14 22:44:09 130

原创 学习记录1

文章内容简要:1、IDEA里java文件图标显示不正确的修改1、首先在项目名称右键选择Open Module Settings(F12),在打开的窗口从左向右依次选择Modules——自己的项目——src,最后再点击Sources即可,(Sources最后的状态是按下去的状态)...

2020-03-11 22:32:55 75

原创 springboot学习笔记-1

1、IDEA命令行可通过在项目根目录执行mvn spring-boot:run运行启动程序,ctrl+c结束运行注意:如果提示mvn不是内部或外部命令,也不是可运行的程序或批处理文件问题说明本地没有配置maven环境变量,配置即可。配置方式如下变量名:MAVEN_HOME,变量值:maven安装路径,如:D:\apache-maven-3.6.3变量名:Path,变量值:%MAVEN_HO...

2020-03-07 21:31:27 96

原创 使用java操作linux命令

记一次使用java操作linux命令经历需求:在本地生成文件后,通过linux命令生成校验文件(字节码,字节数,文件名),使用命令cksum fileName > jiaoYanFile来生成校验文件第一次接触这个命令,经过linux系统验证后,需要首先到达文件所在路径,然后使用上述命令即可,上网查询java写linux命令,很多文章,直接拿过来使用,由于本地是windows,部署到测试...

2019-12-19 15:02:13 1073 1

原创 spring boot跳转到html页面

spring boot项目自动跳转到html页面首先在pom文件引入依赖<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 ...

2019-10-22 22:58:15 618

原创 美团面试题

美团一面:中间省略掉大概几个问题,因为我不记得了,下面记得的基本都是我没怎么答好的。1、了解SOA,微服务吗?什么是微服务?1、由一些独立的服务共同组成系统2、单独部署,跑在自己的进程里3、每个服务为独立的业务开发4、分布式的管理特点1、组件化与多服务2、围绕业务组建团队3、做产品而不是做项目4、智能端点与弱管道5、去中心化管理数据6、基础设施自动化优点1、提升开发...

2019-10-10 21:03:36 1396

原创 面试相关

一、微服务的理解什么是微服务?1、由一些独立的服务共同组成系统2、单独部署,跑在自己的进程里3、每个服务为独立的业务开发4、分布式的管理特点1、组件化与多服务2、围绕业务组建团队3、做产品而不是做项目4、智能端点与弱管道5、去中心化管理数据6、基础设施自动化优点1、提升开发交流,每个服务足够内聚,足够小,代码容易理解2、服务独立测试、部署、升级、发布3、容易扩大开发...

2019-10-10 21:03:23 156

原创 java面试相关

1、初始化顺序父类静态变量->父类静态代码块->子类静态变量->子类静态代码块->父类非静态变量->父类非静态代码块->父类构造方法->子类非静态变量->子类非静态代码块->子类构造方法总结:先父类静态变量,静态代码块,再子类,先父类非静态变量,非静态代码块,构造,再子类。...

2019-07-09 21:51:22 216

原创 java算法题解答(一)

1、自己答案public class Text { public static void main(String[] args) { int[] A = new int[]{1,5,8,8,9,2,5,2,3,1,3}; int i = new Text().singleNumber(A); System.out.println(i); ...

2019-06-23 15:58:11 380

原创 java算法题问题(一)

1、给出 2 * n + 1个数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。

2019-06-23 15:51:12 663

原创 小记录

1、使用Collections.max()或者Collections.min()获取最大值或者最小值。OrderMaster max = Collections.max(list, new Comparator<OrderMaster>() { //找到最大值 @Override public int compare(OrderMaster o1, OrderMas...

2019-06-13 21:51:51 92

转载 redis分布式锁

转自:https://mp.weixin.qq.com/s?__biz=MjM5NzMyMjAwMA==&mid=2651479543&idx=1&sn=4ec576a71901d9207a4ddec0eb3e7c32&chksm=bd2531888a52b89ec7b0d4efe04672397f1840ba1e948b6622acca753d8901ef824c...

2019-06-09 11:29:38 94

转载 jvm一些记录

转自:https://www.cnblogs.com/andy-zhou/p/5327288.htmljvm参数-Xmx:JVM最大可用内存-Xms:JVM初始内存-Xmn:年轻代大小-Xss:每个线程的堆栈大小-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/...

2019-06-08 18:14:38 81

转载 缓存穿透、缓存雪崩和缓存击穿

缓存穿透缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存。代码流程1、参数传入对象主键ID2、根据key从缓存中获取对象3、如果对象不为空,直接返回4、如果对象为空,进行数据库查询5、如果从数据库查询出的对象不为空,则...

2019-06-08 17:30:43 56

原创 数据库一些记录

存在即更新,不存在即删除,防止高并发下读取的数据不是最新导致后一次更新数据后错误。INSERT INTO 表名 (col1,col2…) VALUES (val1,val2…) ON DUPLICATE KEY UPDATE col1 = col1+1,col2 = val2…...

2019-05-28 21:30:14 66

原创 spring常用注解记录

使用注解之前要开启自动扫描功能其中base-package为需要扫描的包(含子包)@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。@Lazy(true) 表示延迟初始化@Service用于标注业务层组件、@Controller用于标注控制层组件@Repository用于标注数据访问组件,即DAO组件...

2019-02-20 21:10:50 77

转载 算法

转自:https://www.cnblogs.com/zknublx/p/5885840.html 通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出...

2018-08-31 21:58:25 175

原创 Redis介绍

1、Redis安装http://www.redis.net.cn/tutorial/3503.html2、Redis简介Redis 是完全开源免费的,遵守BSD协议,是一个基于内存的高性能的key-value数据库。3、Redis优点性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。 丰富的数据类型 – Redis支持二进制案例的 St...

2018-08-28 16:41:40 135

原创 JAVA设计模式——迭代器模式

迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。当需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式。需要对聚集有多种方式遍历时,可以考虑用迭代器模式。为遍历不同的聚集结构提供如开始,下一个,是否结束,当前项等统一的接口。(foreach就是迭代器模式) 迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负...

2018-08-21 20:45:45 89

原创 JAVA设计模式——组合模式

组合模式:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 透明方式:在Component中声明所有用来管理子对象的方法,其中包括Add、Remove等。这样实现Component接口的所有子类都具备了Add和Remove。这样做的好处是叶节点和枝节点对于外界没有区别,它们具备完全一致的行为接口。但问题是因为Leaf类不具备Add()...

2018-08-21 20:43:28 92

原创 JAVA设计模式——备忘录模式

备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的哪些内部状态。 Memento(备忘录):负责存储Origin...

2018-08-20 21:51:18 119

原创 JAVA设计模式——访问者模式

访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 访问者模式适用于数据结构相对稳定的系统。它把数据结构和作用于结构上的操作之间的耦合解开,使得操作集合可以相对自由地演化。访问者模式的目的是要把处理从数据结构分离出来。如果系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较适合的,因为访问者模式使得算法操...

2018-08-20 21:47:46 135

原创 JAVA设计模式——解释器模式

解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。如果一个特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。使用:当有一个语言需要解释执行,并且可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。缺点:解释器模式为文法...

2018-08-20 21:45:36 151

原创 JAVA设计模式——享元模式

享元模式:运用共享技术有效地支持大量细粒度的对象。 接口有方法,具体类实现接口中的方法,工厂生产该实体,若存在则直接返回,不存在则new一个新的对象返回,无论客户端调用多少次,只产生了一个实体。享元模式可以避免大量非常相似类的开销。在程序设计中,有时需要生成大量细粒度的类实例来表示数据。如果这些实例除了几个参数外基本上都是相同的,有时能受大幅度减少需要实例化的类的数量。如果能把那些参数移...

2018-08-20 21:42:01 93

原创 JAVA设计模式——中介者模式

中介者模式:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 抽象中介者定义方法接收抽象Colleague,具体中介者定义需要接收的Colleague实体,调用具体Colleague的方法,抽象Colleague含有抽象中介者属性,具体Colleague含有具体通知方法。优点:减少了各个Colleague的耦合...

2018-08-20 21:39:28 74

原创 JAVA设计模式——职责链模式

职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 类似链表,一个抽象处理请求的类,含有自身的属性,相当于设置上下级,实现类设置对应属性为哪个对象,哪个对象即为其上下级,抽象类含有处理请求的方法,子类各自拥有不同的处理请求实现,当其处理不了请求时若其上下级不为空则去请求其上下级的处理请求...

2018-08-20 21:37:16 81

原创 JAVA设计模式——命令模式

命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。优点: 1、能较容易地设计一个命令队列 2、需要时可以较容易地将命令记入日志 3、允许接收请求的一方决定是否要否决请求 4、可以容易地实现对请求的撤销和重做 5、由于加新的命令类不影响其他的类,因此很容易增加新的具体命令类 6、把请求一个操作的对象与知道怎么执...

2018-08-20 21:35:14 89

原创 JAVA设计模式——桥接模式

桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立的变化。 并不是说,让抽象类与其派生类分离,因为这没有任何意义。实现指的是抽象类和它的派生类用来实现自己的对象。实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。当发现需要多角度去分类实现对象,只用继承会造成大量的类增加,要考虑使用桥接模式。接口作为桥,接口实现类...

2018-08-20 21:30:43 96

空空如也

空空如也

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

TA关注的人

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