- 博客(46)
- 收藏
- 关注
原创 Spring bean生命周期详解
Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean,这其中包含了一系列关键点。Spring bean生命周期 四个阶段Bean的实例化阶段Bean的设置属性阶段Bean的 初始化阶段Bean的销毁阶段Spring bean生命周期13个环节阶段1:Bean元信息配置阶段阶段2:Bean元信息解析阶段阶段3:将Bean注册到容器中阶段4:BeanDefinition合并阶段阶段5:Bean Class加载阶段阶段6:Bean实例化阶
2021-10-27 16:22:09
14038
原创 mysql MVCC产生幻读原因及解决方式
事务隔离级别有四种,mysql默认使用的是可重复读,mysql是怎么实现可重复读的?为什么会出现幻读?是否解决了幻读的问题?一、事务的隔离级别Read Uncommitted(未提交读)在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。读取未提交的数据,也被称之为脏读(Dirty Read)。该级别用的很少。Read Committed(提交读)这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变,换句话说就是事务提交
2021-08-25 16:12:45
4351
1
原创 2个线程交替打印数据(多种方案)
public class PrinterAB { private final Object monitor = new Object(); private int limit; private PrinterAB(int limit) { this.limit = limit; } private void sycFoo() { for (int i = 0; i < limit; i++) { sy
2021-07-14 14:44:14
680
原创 字符串切割,数组转特殊字符串
开发过程,经常要对数组或特殊字符串相互转换.字符串切割 String.split()与StringUtils.split()String.split()会包含空字符串,而且是包含 头部的和中间的, 不包含有效数字后面所有的空字符串.StringUtils.split()会过滤所有的空字符串. 当然空格不会被过滤.StringUtils.split()性能也比String.split()略高; //切割 String s =",a,,b,c,,"; String
2021-03-24 14:44:16
448
转载 什么是动态规划(Dynamic Programming)?动态规划的意义是什么?
希望本文不仅能告诉你什么是动态规划,也能给你一种如何分析、求解动态规划问题的思考方式。0001b 动态规划介绍运筹学中的动态规划动态规划(Dynamic Programming,简称DP)是运筹学的一个分支,它是解决多阶段决策过程最优化的一种数学方法。把多阶段问题变换为一系列相互联系的的单阶段问题,然后逐个加以解决。这里提到动态规划其实是一种数学方法,是求解某类问题的一种方法,而不是一种特殊的算法,没有一个标准的数学表达式或明确定义的一种规则。比如我们接触过的”排序算法“,”二叉树遍历算法“等,这些算法都是
2021-03-18 14:15:12
4378
原创 Java业务开发常见错误20例
六类典型空指针问题包装类型的空指针问题级联调用的空指针问题Equals方法左边的空指针问题ConcurrentHashMap 这样的容器不支持 Key 和 Value 为 null。集合,数组直接获取元素对象直接获取属性1.1包装类型的空指针问题public class NullPointTest {public static void main(String[] args) throws InterruptedException {System.out.println(testIn.
2021-02-07 14:00:00
509
转载 mysql虚拟列(Generated Columns)及JSON字段类型的使用
mysql 5.7中有很多新的特性,但平时可能很少用到,这里列举2个实用的功能:虚拟列及json字段类型一、先创建一个测试表:?123456789drop table if exists t_people; CREATE TABLE t_people( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL DEFAULT '',  ...
2021-02-07 11:35:06
2151
转载 CompletableFuture 组合式异步编程
CompletableFuture是jdk1.8引入的一个新特性。 它主要是为了解决多个Future结果之间的依赖关系。比如:1.将两个异步计算合并为一个——这两个异步计算之间相互独立,同时第二个又依赖于第一个的结果。2.等待Future集合中的所有任务都完成。3.仅等待Future集合中最快结束的任务完成(有可能因为它们试图通过不同的方式计算同一个值),并返回它的结果。4.通过编程方式完成一个Future任务的执行(即以手工设定异步操作结果的方式)。5.应对Future的完成事件(即当Futu
2020-12-29 10:25:40
187
转载 使用 Google Guava
Google Guava 编程 前言 阿里巴巴出了一本Java规范,在国内java开发眼里被赋予了神圣的殿堂,我不推荐你用阿里巴巴的开发手册。 目前Google Guava在实际应用中非常广泛,本篇博客将以博主对 Guava 使用的认识以及在项目中的经验来给大家分享!学习使用 Google Guava可以让你快乐编程,写出优雅的 Java 代码,在业务允许的条件下,我推荐使用 ...
2020-12-14 11:24:15
265
转载 Java中的精确计算(金额),BigDecimal使用
标题一、BigDecimal概述Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度。所以开发中,如果我们需要精确计算的结果,则必须使用BigDe
2020-09-04 13:50:46
1848
转载 Java代理模式详解及案例分析:静态代理/动态代理
标题:Java代理模式详解及案例分析:静态代理/动态代理我们以几个问题,来开始我们今天的学习,如果下面几个问题,你都能说出个一二,那么恭喜你,你已经掌握了这方面的知识。1,什么是代理模式?2,Java中,静态代理与动态代理的区别?3,Spring使用的是JDK的动态代理,还是CGLIB的动态代理?4,JDK的动态代理的实现原理?5,JDK的动态代理与CGLIB的动态代理的实现上,有何不同?6,你知道的,还有其他动态代理技术吗?请简述实现原理。OK,言归正传。 &.
2020-08-24 17:17:53
189
转载 [Head First 设计模式] 命令模式-headfirst例子改进
分析命令模式引入情景分析现在我们有很多智能家居,他们都由同一个控制器控制,比如,能控制点灯,窗帘,电视等每一个按钮(相当于命令)都对应一个电器的功能,列如点灯的开,电视的关等但是控制器1按钮,对应功能不一定是电视开功能,也可能是电灯开功能,或者其他,也就是说,我们的控制器按钮,可以绑定任意的具体电器功能,(这也是我们在设计模式中所追求的),所有我们修改一下设计,定义统一接口,以便控制器能够自由更换绑定功能开启第一个例子我们为智能家庭控制器的第一个控制,给电视的开功能原始电视功能//原始
2020-08-19 11:35:42
182
转载 [Head First 设计模式] 单例模式
独一无二的对象单例模式的类图可以说是所有设计模式中最简单的,事实上,它的类图上只有一个类!但是可不要兴奋过头,尽管从类设计的视角来说它很简单,但是实际上还是会遇到相当多的波折。有一些对象其实我们只需要一个,比方说:线程池、缓存、对话框、注册表……事实上,这类对象只能有一个实例,如果制造出多个就会导致许多问题产生。许多时候,的确通过程序员之间的约定就可以办到。但如果有更好的做法,大家应该都乐意接受。单例模式是经得起时间考验的方法,可以确保只有一个实例会被创建。单例模式也给了我们一个全局的访问点,和全局变
2020-08-19 10:51:30
139
原创 [Head First 设计模式] 装饰者模式
装饰者模式定义动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。(由定义可知,装饰对象的)实例分析星巴兹咖啡订单管理系统 管理、计算各种饮料的售价若顾客根据个人喜好,添加不同的调料,那么系统就要有根据调料的不同来计算价格,按照原来的设计,必定会出现下面的情况。第一种方案设计:继承有多少种口味的咖啡,你就得建多少种对应的类。烦不?第二种方案设计:思考当哪些因素改变时会影响这个设计?调料价钱的改变会使我们更改现有代码。一旦出现新的调料,我们就需要加上新的方
2020-08-18 14:57:48
193
转载 [Head First 设计模式]观察者模式
前言: 这一节开始学习观察者模式,开始讲之前会先像第一节那样通过一个应用场景来引入该模式。具体场景为:气象站提供了一个WeatherData对象,该对象可以追踪获取天气的温度、气压、湿度信息,WeatherData对象会随即更新三个布告板的显示:目前状况(温度、湿度、气压)、气象统计和天气预报。1. 基本需求:利用WeatherData对象获取数据、并更新三个布告板:目前状况、气象统计和天气预报WeatherData类图如下:说明:GetTemperature()、GetHumidity()
2020-08-18 11:24:19
144
转载 [Head First 设计模式]策略模式
策略模式定义策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。书中鸭子的例子模拟鸭子的简单应用Joe上班的公司做了一套相当成功的模拟鸭子游戏SimUDuck,游戏中出现各种鸭子,一边游戏戏水,一边呱呱叫。此系统的内部设计使用了标准的OO技术,设计了一个鸭子超类,并让各种鸭子继承此超类。让鸭子能飞去年,公司的竞争力加剧,公司主管认为该是创新的时候了。主管认为,此模拟程序需要会飞的鸭子,将竞争者抛在后面。改进继承Joe认识到继承可能不
2020-08-18 10:27:13
303
转载 使用reflectasm实现bean快速复制
BeanUtils简介:BeanUtils提供对 Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很 多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。谨记:BeanUtils.copyProperties只对bean属性进行复制,这里的复制属于浅复制。且不能复制集合和数组。BeanUtils.copyProperties利用反射,直接将对象的引用set进去,并
2020-08-12 17:36:47
575
转载 原型模式和java拷贝
原型模式定义指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。特点不需要知道创建的细节,不调用构造函数类型创建型适用场景类初始化消耗较多资源new产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)构造函数比较复杂循环体中生产大量对象时优点原型模式性能比直接new 一个对象性能高简化创建过程缺点必须配备克隆方法对克隆复杂对象或克隆出的对象进行复杂改造时,容易引入风险。深拷贝、浅拷贝必须引用得当下面看代码,写代码之前我们先假设一个业务场景,假设我们现在要
2020-08-12 17:23:28
140
转载 深入理解 abstract class 和 interface
理解抽象类abstract class 和 interface 在 Java 语言中都是用来进行抽象类(本文中的抽象类并非从 abstract class 翻译而来,它表示的是一个抽象体,而 abstract class 为 Java 语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象
2020-08-12 15:34:05
233
转载 控制反转和依赖注入的理解(通俗易懂)
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。一、分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解...
2020-08-07 09:51:28
357
转载 Spring执行顺序与ApplicationContext
一、spring容器初始化bean对象的顺序是listener-->filter-->servlet,其中stattic>构造方法 > @Autowired > @PostConstruct。故在static方法里面调用某个Bean,不可以用Autowired ,可以让通过Appli...
2020-08-06 11:49:51
566
原创 【Spring容器】项目启动后初始化数据的两种实践方案
1.继承Spring 的 ApplicationListener 接口借助Spring监听接口为数据库初始化数据,代码如下借助Spring容器是个很好的解决方案。Spring框架提供了事件机制,而事件机制必须实现ApplicationListener监听器,因此我们只要编写一个实现类实现该接口的onApplicationEvent方法,在方法体中检测数据库的初始化数据是否存在并选择初始化之。步骤:1、实现ApplicationListener接口2、交给Spring管理3、ok!@Reposi
2020-08-06 11:02:30
457
转载 ThreadPoolTaskExecutor的提交方法execute和submit
前面提到了线程池提交任务有两种方法:无返回值的任务使用public void execute(Runnable command) 方法提交;有返回值的任务使用public <T> Future<T> submit(Callable) 方法提交。下面具体来看下两者的应用以及区别。一、与主线程执行顺序的区别:...
2020-08-06 09:40:15
981
转载 阿里巴巴并发的最佳实践
【强制】获取单例对象需要保证线程安全,其中的方法也要保证线程安全。【强制】创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。【强制】线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。【强制】线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。【强制】Simp...
2020-08-03 09:32:36
113
转载 细说 Java 的深拷贝和浅拷贝
一、前言任何变成语言中,其实都有浅拷贝和深拷贝的概念,Java 中也不例外。在对一个现有的对象进行拷贝操作的时候,是有浅拷贝和深拷贝之分的,他们在实际使用中,区别很大,如果对其进行混淆,可能会引发一些难以排查的问题。本文就在 Java 中的深拷贝和浅拷贝做一个详细的解说。二、什么是浅拷贝和深拷贝首先需要明白,浅拷贝和深拷贝都是针对一个已有对象的操作。那先来看看浅拷贝和深拷贝的概念。在 Java 中,除了基本数据类型(元类型)之外,还存在 类的实例对象 这个引用数据类型。而一般使用 『 = 』号做赋值操作的时
2020-07-27 18:27:04
94
转载 MySQL数据库面试题(2020最新版)
文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个M...
2020-07-16 14:40:52
395
转载 MySQL一些优化[转]
1.uuid用binary保存 建议uuid不要使用char来保存,而用binary(16)来保存。这里在长度上来讲用binary会节省一半。因为一个字符占用1个字节,而一个字节实际上可以表示0-256(2^8),用16进制的表示需要2个字节00-FF(0-256)。优化前:SET uuid = UUID() (类型:char(36))优化后:SET uuid = HEX(REPLACE(UUID(), '-', '')) (类型:binary(16))2.用crc32替换长字符串的查找如果索引列是
2020-07-16 14:31:15
121
原创 同一IP请求限流AOP+RateLimiter+redis
import java.lang.annotation.*;@Inherited@Documented@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface AccessLimit { int limit() default -1; int sec() default 5;}import
2020-07-15 17:20:10
466
转载 MySQL性能优化的最佳21条经验
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用...
2020-07-15 11:08:46
96
转载 35个Java代码性能优化总结
前言 代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须...
2020-07-15 09:48:39
87
原创 mysql dual表的用途及案例
mysql文档中对于dual表的解释:You are allowed to specify DUAL as a dummy table name in situationswhere no tables are referenced: 你可以在没有表的情况下指定一个虚拟的表名 mysql> SELECT 1 +1 FROM DUAL;-> 2 DUAL is purely for the convenience of people who require that all SELECT
2020-07-02 14:30:00
1765
1
原创 mysql索引特点及索引优化方案
一、什么是索引?索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。二、有哪些索引普通索引这是最基本的索引类型,而且它没有唯一性之类的限制。唯一任务是加快对数据的访问速度。唯一索引唯一索引是不允许其中任何两行具有相同索引值的索引。当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止
2020-07-01 15:30:49
474
原创 mysql自定义变量及案例(排名)
mysql自定义变量及案例(排名)利用SQL语句将值存储在用户自定义变量中,然后再利用另一条SQL语句来查询用户自定义变量。这样以来,可以再不同的SQL间传递值。用户自定义变量的声明方法形如:@var_name.用户自定义变量是会话级别的变量。其变量的作用域仅限于声明其的客户端链接。当这个客户端断开时,其所有的会话变量将会被释放。用户自定义变量是不区分大小写的。使用 SET 语句来声明用户自定义变量:SET @curRank := 0;使用 子查询来声明用户自定义变量:(SELECT @c
2020-06-28 14:34:53
619
原创 文件压缩与解压
package com.sg.test.utils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.*;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.Enumeration;import...
2020-01-20 10:35:32
87
原创 Elasticsearch完整案例(设置索引,删除索引,查询)
项目配置见上一篇HouseInfoControllerimport io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.we...
2020-01-20 10:33:48
378
原创 Elasticsearch安装及使用(完整版)
一、Elasticsearch 7.2.0 安装步骤1.1 下载 Elasticsearch 7.2.0https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-2-01.2 解压安装我的是window版,下载完后,ES 文件目录结构如下图所示:bin :脚本文件,包括 ES 启动 & 安装插件等等con...
2020-01-20 10:27:27
523
转载 excel读取后去空行
原文链接:https://blog.csdn.net/sanyaoxu_2/article/details/80555328
2019-12-23 00:07:42
2056
原创 上传文件类型验证
@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD})@Documentedpublic @interface PermitFileCategory { /** * 允许的文件类别 * @return */ FileCategoryEnum[] value();}...
2019-12-23 00:06:14
346
原创 EasyExcel解析工具,同步处理数据
<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.4</version> </...
2019-12-23 00:05:42
1113
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人