自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

野猿新一

Android、Python、Vue、小程序

  • 博客(379)
  • 资源 (2)
  • 收藏
  • 关注

原创 面向对象设计原则之接口隔离原则

接口隔离原则 Interface Segregation Principle,简称ISP内容:使用多个专门的接口比使用单个总接口好也就是说,一个类对另一个类的依赖应当是建立在最小的接口上的。

2022-09-17 22:56:56 199

原创 面向对象设计原则之依赖倒转原则

依赖倒转原则 Dependence Inversion Principle,简称为DIP依赖倒转原则的内容是:要依赖于抽象,不要依赖于具体实现原文为:Abstractions should not depend upon details.Details should depend upon abstractions.翻译为:抽象不应当依赖于细节,细节应当依赖于抽象另一种表述为:Program to an interface, not an implementation.(要面向接口编程,不要。

2022-09-17 15:33:35 308

原创 面向对象设计原则之里氏代换原则

假设有类型T1及其对象O1以及类型T2及其对象O2,在程序中T1定义的所有对象O1都替换成O2时,程序的行为不会发生任何变化,那么可以认为T2是T1的子类也就是说软件中使用的是基类的话,那么也适用于子类,且软件功能不会受影响比如一个方法接收的是一个父类,那么该方法必然可以接收该父类的任何子类。

2022-09-17 10:57:39 276

原创 面向对象设计原则之开闭原则

例如对于某一需求抽象出一个接口或者抽象类,这一接口或抽象类中定义的抽象方法,一旦定以后就不允许再修改,这对应的就是开闭原则的第二条——对修改关闭。开闭原则从另一个角度讲,就是所谓的“对可变性的封装原则”,找到一个系统的可变因素,将之封装起来。而对于这一定义好的接口可以有无穷无尽个不同的实现,这对应的就是开闭原则的第一条——对扩展开放。Open-Closed Principle,缩写为OOP,是面向对象设计的第一块基石。对于面向对象语言来说,不允许修改的是抽象层,而允许修改的是实现层。

2022-09-17 10:01:20 231

原创 RxJava retryUtil()方法使用详解

因为第一轮完后total值为6,小于12,所以这时候发生异常会retry重新循环,当第二次循环完发生异常的时候,total值已经累加到12,这时候BooleanSupplier的getAsBoolean()方法返回true,表示发生异常不再tetry,所以这时候会走到onError。retryUntil方法传入一个BooleanSupplier对象,提供发生异常后的重试的逻辑,返回false表示发生异常会重试,直到返回false才不会重试。...

2022-08-31 09:50:27 862

原创 Java双重检查懒汉式单例模式中volatile的作用

初始化对象放到了最后,这在单线程环境中是没问题的,但是在多线程环境中就有可能出现问题,拿到的对象可能是还未初始化的,使用对象的时候就会出现问题。所以为了防止指令重排导致的问题,在双重检查懒汉式单例模式中,实例对象必须用volatile关键字修饰。使用volatile关键字的作用是进制JVM在创建实例的时候进行指令重排。由于JVM进行指令重排,以上指令顺序可能发生变化,可能变成如下顺序。可以看到单例对象用关键字volatile声明,而且是必不可少的。JVM在执行new创建对象的时候会执行下面三条指令。...

2022-08-28 00:07:18 889

原创 Java设计模式-单例模式

单例模式(singleton)有一下三个要点为了保证单例类的实例只能由单例类自己创建,需要将单例类的构造方法设置成private私有,防止构造方法被其他类调用单例模式有饿汉式、懒汉式等实现方式,下面一一做介绍。...

2022-08-27 23:04:56 262

原创 Java设计模式-抽象工厂模式

在前面介绍的简单工厂模式和工厂方法模式中都是只有一个产品等级结构,也就是只定义了一个抽象的产品类,而抽象工厂模式最大的区别就是定义了多个产品等级结构,也就是定义了多个抽象产品类,而这些抽象产品类下又可以实现多个具体的产品类这样讲可能比较抽象,我们以具体的示例来讲解假设有IPhone(此IPhone非彼iPhone)和IComputer两个抽象接口,分别表示手机品类和电脑品类IPhone下两个具体的实现类XiaomiPhone和HuaweiPhone,表示小米手机和华为手机。

2022-08-25 15:26:28 685

原创 Java设计模式-工厂方法模式

简单工厂模式有个缺点就是需要负责所有产品的创建工作,且一旦有新的产品加入,就需要修改工厂类,而工厂方法模块可以克服这个缺点,支持开闭原则。工厂方法模式定义了一个生产产品对象的接口,把具体的创建对象的工作交给实现该接口的子类。最后实现不同的工厂,不同的工厂负责不同的产品的生产。Factory1负责Product1的生产。Factory2负责Product2的生产。先分别定义工厂和产品的接口。

2022-08-25 11:34:00 236

原创 Java设计模式-简单工厂模式

简单工厂模式(Simple Factory)又叫静态工厂方法模式(Static Factory Method)

2022-08-24 22:29:54 584

原创 java 判断数组中是否包含某个元素

其实写个循环判断就可以了,如果懒得写代码可以直接用apache库的ArrayUtils.contains方法import org.apache.commons.lang3.ArrayUtils;int[] array = {1, 2, 3};boolean b = ArrayUtils.contains(array, 1);其实ArrayUtils.contains()其内部也是写一个循环,源码如下public static boolean contains(int[] array,.

2020-10-31 23:39:00 1778

原创 java数组转List方法

方法一List<String> list = new ArrayList<>(Arrays.asList(array));方法二List<String> list = new ArrayList<>(array.length);Collections.addAll(list, array);

2020-10-31 23:14:36 386

原创 Spring Boot SLF4J+Logback日志组件入门(一)——控制台打印

Spring Boot中默认集成了SLF4j+Logback,不用额外的maven依赖配置就可以直接使用默认实现Logback有一个默认的最简单配置的控制台实现,不用额外的配置文件就可以输出日志到控制入,如下代码所示@RunWith(SpringRunner.class)@SpringBootTestpublic class LogbackTests { private Logger logger = LoggerFactory.getLogger("yeyuanxinyi");

2020-09-11 14:06:25 583

原创 slf4j Logger使用{}占位符输出日志

使用很简单,直接上代码private Logger logger = LoggerFactory.getLogger("yeyuanxinyi");logger.info("String={},int={},double={}", "野猿新一", 25, 99.9);输出结果如下2020-09-10 16:51:31,794 custom-logback INFO [http-nio-55557-exec-1] yeyuanxinyi - String=野猿新一,int=25,doub.

2020-09-10 17:02:20 3090

原创 Spring Boot slf4j+logback 日志组件学习资料汇总

官方文档LOGBack官网Logback documentation:官方文档官方文档很详细,但是内容也很多,不适合初学者,会被吓到想深入研究的可以看看logback的使用和logback.xml详解目前找到的最详细且讲得最明白的文章,学习logback的话首推这边文章。就是错别字有点多,排版也有点乱,但仍为一篇优秀的文章logback的使用和logback.xml详解(校对)这篇文章对上文的一些错别字进行修改,且补充了过滤器<filter>的内容,单排版依然乱

2020-09-10 16:28:46 220

原创 解决The server time zone value ‘Öйú±ê׼ʱ¼ä‘ is unrecognized or represents more than one time zone问题

问题描述数据库配置如下spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.0.1:3306/mydb?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull username: yeyuanxinyi password: 12.

2020-08-28 16:23:58 9031

原创 解决Spring Boot数据库多数据源配置报jdbcUrl is required with driverClassName错误

原来的单数据源配置如下spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.0.1:3306/mydb?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8 username: yeyu

2020-08-28 13:48:20 1658

原创 Spring Boot 解决同名类导致的bean名冲突bean name conflicts

问题描述项目中有两个同名类都叫MyService,只是放在不同的包名下package com.yeyuanxinyi;@Service()public class MyService {}package com.yeyuanxiner;@Service()public class MyService {}当项目启动的时候会报如下错误Caused by: org.springframework.context.annotation.ConflictingBeanDef

2020-08-28 11:10:19 12889

原创 Android解决Project needs to be converted to androidx.* dependencies问题

问题描述Android Studio升级到3.5版本后,在原来的老项目上新建module的时候却提示Project needs to be converted to androidx.* dependencies,如下图所示,Finish按钮灰色无法点击解决办法1.打开项目的gradle.properties文件,添加如下配置,然后点右上角的Sync Nowandroid.useAndroidX=trueandroid.enableJetifier=true2.然后再创建mo..

2020-08-28 09:22:58 1556

原创 IntelliJ IDEA中Maven项目Skip Tests跳过测试

IntelliJ IDEA的Maven项目有时候通过右边Maven Projects面板的package或者install命令打包的时候,会报错导致打包失败,这是由于这两个命令打包前默认会运行tests测试,若测试失败则打包失败。但是有时候我们打包的时候一些项目配置是针对生产环境的,在本地可能会测试失败,在正式环境是可以正常运行的,这时候我们就需要把打包前的测试禁止调IntelliJ IDEA跳过测试展开左侧Maven Projects面板,顶部有一个Toggle 'Skip Tests' Mode

2020-08-27 16:53:04 7688

原创 IntelliJ IDEA设置Maven国内阿里镜像

国内网络环境访问Maven速度真是慢得让人抓狂,即使打开VPN也无济于事,每当第一次打开项目的时候,要下载一堆的包,有时候一个小时都下载不下来。我们可以通过设置国内的Maven镜像来提高访问速度1.右键项目,选择Maven->Open 'Settings.xml'(第一次创建的话是Create ‘Settings.xml’)2.在打开的文件中复制黏贴以下配置内容,该配置配置了阿里的Maven镜像Settings.xml文件默认存放在C:\Users\Administrator\.m2\

2020-08-25 11:01:52 2403

原创 Spring boot CommandLineRunner启动任务传参

在《Spring boot 通过CommandLineRunner 在启动完成后执行任务》这篇文章中我们介绍了创建CommandLineRunner任务,在Spring boot启动后执行一些任务。有人可能有以为,这run(String... args)方法中的args参数是什么?@Component@Order(value = 1) // 指定其执行顺序,值越小优先级越高public class MyRunner1 implements CommandLineRunner { @Ov

2020-08-21 16:39:43 2808

原创 Spring boot 通过ApplicationRunner在启动完成后执行任务

我们经常会有这样的需求,在Spring boot项目启动后需要马上执行一些任务,比如初始化的任务实现的方法有很多中,今天我们介绍的是通过ApplicationRunner来实现实现ApplicationRunner接口,然后添加@Component注解 然后在run方法中实现具体要运行的任务 如果有多个任务且有先后执行顺序,可用@Order注解,value值越小优先级越高创建如下两个简单的任务,跑起来看看@Component@Order(value = 1) // 指定其执行顺序,值越

2020-08-21 15:44:46 4530 1

原创 Spring boot 通过CommandLineRunner 在启动完成后执行任务

我们经常会有这样的需求,在Spring boot项目启动后需要马上执行一些任务,比如初始化的任务实现的方法有很多中,今天我们介绍的是通过CommandLineRunner来实现实现CommandLineRunner接口,然后添加@Component注解 然后在run方法中实现具体要运行的任务 如果有多个任务且有先后执行顺序,可用@Order注解,value值越小优先级越高创建如下两个简单的任务,跑起来看看@Component@Order(value = 1) // 指定其执行顺序,值越

2020-08-21 15:34:52 1266 1

原创 关于纯洁的微笑《Spring Boot(七):Mybatis 多数据源最简解决方案》文章补充说明多数据源事务的配置

关于Spring boot中使用Mybatis多数据源的配置,我推荐纯洁的微笑博主的《Spring Boot(七):Mybatis 多数据源最简解决方案》这篇文章,简单清晰易懂疑问但是有个疑问就是在DataSource1Config配置注入的数据库事务管理类DataSourceTransactionManager对象test1TransactionManager在后文中却没有使用到,照理说有改有个地方配置使用该对象,使不同的操作对应回滚不同的数据库@Configuration@MapperS

2020-08-21 14:11:38 365

原创 Spring Boot Mybatis数据库datasource多数据源配置

application.yaml文件配置spring: datasource: db1: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://192.168.0.1:3306/ellassay_dev?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serve.

2020-08-21 13:40:10 1992

原创 Android Studio 导入项目没有可运行的module

问题Android Studio 导入一个已有的项目没有可运行的module,只显示一个Add Configurations或者Edit Configurations,正常情况下是要显示App或者其他可运行的Module,如下图解决方法点击工具栏的Sync Project with Gradle Files按钮若找不到这个按钮的或在菜单File下也可以找到点击按钮后会开始同步Gradle,下载一些相关的东西,若同步后有报错就把相关错误修复后再重新同步一次...

2020-08-17 16:58:47 8519

原创 Android build.gradle buildConfigField 配置数组

我们可以在build.gradle中通过buildConfigField配置一些java的基本类型,比如Integer,boolean,还有String等,其实还可以配置数组配置buildConfigField可以在defaultConfig中配置,也可以在buildTypes中分别为不同的编译类型配置不同的值android { defaultConfig { buildConfigField "String[]", "YEYUAN_FAMILY",

2020-08-06 11:01:21 1958

原创 java Arrays.equals()方法简介

简介java Arrays中共定义了如下几种equals方法,用来对比判断数组是否相等equals(boolean[], boolean[]) equals(byte[], boolean[]) equals(char[], boolean[]) equals(double[], boolean[]) equals(float[], boolean[]) equals(short...

2020-08-05 16:57:47 14889

原创 Spring Boot定时任务quartz发生异常时数据库的回滚

无法回滚的代码如下伪代码,在两条数据库插入操作之间抛出了异常,本来以为添加了@Transactional(rollbackFor = Exception.class)注解发生异常后会回滚,但是事与愿违,结果是发生异常后没回滚,第一条数据插入成功了@Service@Transactional(rollbackFor = Exception.class)public class TestJobBean extends QuartzJobBean { @Override protec

2020-08-05 16:32:06 1828 1

原创 Spring Boot定时任务spring-boot-starter-quartz通过@DisallowConcurrentExecution禁止任务并发执行

在Spring Boot定时任务spring-boot-starter-quartz配置运行及测试这篇文章中我们简单介绍了Spring Boot中如何实现定时任务,但是有个问题,当任务的执行时长超过定时任务触发的间隔时,就会导致两个或多个任务并发在执行,如果我们不希望定时任务并发执行可以通过@DisallowConcurrentExecution注解来禁止并发。下面通过简单的代码来演示定时任务并发和串行的情况,关于定时任务的配置先看这篇文章Spring Boot定时任务spring-boot-start

2020-08-05 15:28:07 3058

原创 Spring Boot定时任务spring-boot-starter-quartz配置运行及测试

在Spring Boot中可以通过spring-boot-starter-quartz可以实现定时任务Maven依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId></dependency>Bean配置定时任务相关配置,比如我们设置定时

2020-08-05 15:00:49 8168 7

原创 java FTPClient changeWorkingDirectory()方法切换当前工作目录

二话不说直接上代码boolean result = ftpClient.changeWorkingDirectory("/AA/BB");System.out.println("切换工作目录:" + result);System.out.println("当前工作目录:" + ftpClient.printWorkingDirectory());文件夹路径"/AA/BB"写成/AA/BB/"末尾多一个/也可以,其实多多少个/都无所谓,会自动去掉,最终进入的文件目录还是"/AA/BB"..

2020-07-21 09:39:29 15868

原创 java FTPClient 使用rename()方法移动文件和文件重命名

踩过的坑有个需求是要将ftp中处理过的文件移动到某个备份文件夹一开始走了弯路,一直要找FTPClient中有没remove之类的方法,但是一直找不到后来就曲线救国,采用先复制文件再删除的方法,例如下面的伪代码但是这样的代码不是很优雅,最好是有个方法直接调用,而且后来的操作中出现了一些莫名其妙的问题也不知道这样的写法是否有问题InputStream inputStream = ftpClient.retrieveFileStream("/AAA/test.txt");ftpClient

2020-07-20 16:42:58 9990 9

原创 java FTPClient中的相对路径和绝对路径

根目录FTPClient的根目录为"/"切换到根目录ftpClient.changeWorkingDirectory("/"); // 切换到根目录String dir = ftpClient.printWorkingDirectory(); // 获取当前工作目录System.out.println(dir); // 打印输出当前工作目录,输出结果为"/"绝对路径绝对路径是以/开头的,比如"/AA","/AA/BB","/AA/BB/CC/","/AA/BB/CC/test.tx

2020-07-20 16:00:21 6770

原创 java FTPClient 的连接和断开

导入依赖包使用的是apache的commons-net包<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version></dependency>FTP连接public boolean connect(String ip, St

2020-07-20 14:30:22 6462

原创 java正则表达式或or的表示方法

示例二话不说上代码Pattern pattern = Pattern.compile("^(AAA|BBB|CCC)$");Matcher matcher1 = pattern.matcher("AAA");Matcher matcher2 = pattern.matcher("BBB");Matcher matcher3 = pattern.matcher("CCC");Matcher matcher4 = pattern.matcher("DDD");System.out.print

2020-07-16 15:08:44 10005

原创 java正则表达式最简单入门示例

示例先上示例,看输出结果,然后我们再来说明Pattern pattern1 = Pattern.compile("^\\d{1,3}$");Pattern pattern2 = Pattern.compile("^[a-z]{2}$");Pattern pattern3 = Pattern.compile("^[A-Z]{1,}$");Matcher matcher1 = pattern1.matcher("15");Matcher matcher2 = pattern2.matcher(

2020-07-16 14:48:18 355

原创 Android 判断DialogFragment是否显示中

public boolean isDialogFragmentShowing(DialogFragment dialog) { if(dialog!= null && dialog.getDialog() != null && dialog.getDialog().isShowing()) { return true; } else { return false; }}

2020-07-01 16:47:30 4017 1

原创 解决 java BufferedReader.readLine()方法按行读取文件内容中文乱码的问题

原来的代码如下所示,但是输出的内容都是乱码public void readLine(String path) { InputStreamReader isr = null; BufferedReader br = null; try { isr = new InputStreamReader(new FileInputStream(path)); br = new BufferedReader(isr); String str;

2020-06-01 00:02:39 9491 1

LibraWhitePaper_en_US-1.pdf

FaceBook Libra白皮书,先一睹为快。想了解的同学可以下载看下。

2019-06-28

MySQL java驱动包mysql-connector-java-5.1.45

MySQL java驱动包mysql-connector-java-5.1.45,亲测可以正常使用。在Android平台也可以直接使用直连数据库。

2019-04-11

空空如也

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

TA关注的人

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