
Java进化之旅
文章平均质量分 55
是摩卡不是抹茶呀
纯粹地爱Java
展开
-
设计思想 - 第三篇 为什么要用Wrappers来创建QueryWrapper?
设计思想 - 第三篇 为什么要用Wrappers来创建QueryWrapper?文章目录设计思想 - 第三篇 为什么要用Wrappers来创建QueryWrapper?使用案例Wrappers核心原理缺点使用案例LambdaQueryWrapper<Demo> lambdaQueryWrapper = Wrappers.lambdaQuery();lambdaQueryWrapper.eq(Demo::getName, name);Wrapperspublic final clas原创 2021-10-23 20:40:56 · 1330 阅读 · 1 评论 -
设计思想-第二篇
设计思想 - 第二篇文章目录设计思想 - 第二篇1)、设计思想之获取泛型T的真实类型2)、设计思想之通过String,StringBuffer实现字符串反转3)、设计思想之MVC表现层框架的核心思想4)、设计思想之使用fastjson获取用户open_id5)、设计思想之BigDecimal去掉多余的位数6)、forEach新用法1)、设计思想之获取泛型T的真实类型private Class<T> targetClass; // 得到泛型T的真实类型public GenericDAO原创 2021-10-23 20:35:11 · 286 阅读 · 0 评论 -
设计思想-第一篇-初出茅庐
MoCha 设计思想 - 第一篇文章内容是初学Java时,记录的内容,现在回头看感觉很有意思。文章目录MoCha 设计思想 - 第一篇1)、设计思想之限制接口调用的参数范围2)、设计思想之利用Properties类读取配置文件3)、设计思想之关于多线程中线程安全问题4)、设计思想之生产者与消费者问题5)、设计思想之关于文件复制和删除问题6)、设计思想之在GUI中,如何善用API?(查找我们不了解的方法或类)7)、设计思想之如何将JFrame窗体的坐标位置居中?8)、设计思想之IO版用户登录注册9)、原创 2021-10-23 20:10:17 · 1026 阅读 · 0 评论 -
Java基础进阶系列-08之结合JLS深度解读三目运算符
文章目录一、三目运算符的类型务必一致案例分析二、代码案例分析三、解读JLS规范规范说明操作数表达式分类布尔条件表达式数字型表达式引用条件表达式二元数字提升拓宽简单类型转换四、解读阿里巴巴Java规范三目运算符,从代码逻辑上看,其实就是if-else条件判断语句的简化版。一、三目运算符的类型务必一致观察以下代码案例,看看两者是否相等答案是:falsepublic static void main(String[] args) { int i = 100; String s原创 2020-11-07 23:02:44 · 854 阅读 · 2 评论 -
Java基础进阶系列-07之数组基础进阶开发小指南
文章目录一、深入思考(一)避开基本类型数组转换集合陷阱(二)不可忽略的默认初始化(三)数组转换为List集合com.google.common.primitives.Intsjava.util.Arrays#asList(T... a)Apache org.apache.commons.lang3.ArrayUtils.toObjectArrays.stream().boxed().collect()(四)数组转换为Set集合将基本数据类型数组转换为Set集合将引用类型数组转换为Set集合(五)List集合原创 2020-11-07 22:58:45 · 465 阅读 · 0 评论 -
Java基础进阶系列-06之数组基础语法
Java基础进阶-数组基础语法文章目录Java基础进阶-数组基础语法一、数组基础语法(一)数组声明(二)数组初始化(三)数组默认元素的初始值二、注意事项输出数组内容一、数组基础语法(一)数组声明type代表数组的数据类型,arrayName代表数组名称。想要声明几维数组就在type或arrayName后面加几个[]。type[]...[] arrayName;或type arrayName[][];(二)数组初始化int[] intArray = new int[4];intAr原创 2020-11-07 22:53:23 · 382 阅读 · 0 评论 -
Java基础进阶系列-05之从for-each循环深入解读ArrayList与LinkedList不同遍历方式带来的影响,深度好文!
文章目录关于for-each循环一、深入思考(一)将局部变量的作用域最小化(二)for-each循环Collection对象的陷阱场景引入遍历Collection对象时尝试删除元素,出现ConcurrentModificationException异常解决方案一:遍历时将待删除元素存放到临时集合,再调用removeAll来实现解决方案二:通过迭代器遍历时,进行删除操作解决方案三:Java8 Collection提供的removeIf(三)嵌套循环中使用迭代器的陷阱(四)Collection对象为何能与for原创 2020-10-24 20:42:19 · 659 阅读 · 0 评论 -
Java基础进阶系列-04之循环结构基础讲解
文章目录一、循环结构基础语法for循环for-each循环while循环do-while循环二、深入思考for循环与while循环之间的转换do-while循环为什么在开发中不常见do-while使用场景联想抢票场景进制转换CAS自旋操作while(true)与for(;;)的区别三、最佳实践与注意事项一、循环结构基础语法for循环// JLS(Java Language Specification)for ([FotInit]; [Expression]; [ForUpdate]) Stateme原创 2020-10-24 20:34:51 · 847 阅读 · 0 评论 -
Java基础进阶系列-03之JMH分析if条件判断语句与switch性能差异
文章目录背景说明JMH 微基准测试 验证性能效率引入依赖场景代入测试代码重构一,try{}catch()重构二,使用guava重构三,静态Map索引解决问题的本质就是回归源码和阅读说明文档背景说明我们知道switch-case结构,当case值是“密集”时,底层指令会优化为tableswitch结构,执行效率上要比“稀疏”时的lookupswitch好。Java 虚拟机规范 基于JDK8->3.10 编译switch章节编译器会使用tableswitch和lookupswitch指令来生成原创 2020-10-11 10:17:19 · 1010 阅读 · 1 评论 -
JMH报错:ERROR: Unable to find the resource: /META-INF/BenchmarkList
文章目录问题原因背景说明:最近在尝试用JMH做性能测试时,出现Exception in thread “main” java.lang.RuntimeException: ERROR: Unable to find the resource: /META-INF/BenchmarkList问题<!-- JMH基准测试框架依赖 --><!-- The jmh is a Java harness for building, running,and analysing nano/m原创 2020-10-10 08:54:37 · 1987 阅读 · 3 评论 -
Java基础进阶系列-02之if与switch的斗法
文章目录一、if条件语句基础语法二、switch-case语句基础语法三、深入思考四、最佳实践与注意事项关于if条件语句关于Switch结构归纳总结扩展内容lookupswitch 和 tableswitch指令一、if条件语句基础语法if (布尔表达式1) { // 如果布尔表达式1的值为true时执行代码} else if (布尔表达式2) { // 如果布尔表达式2的值为true时执行代码} else if (布尔表达式3) { // 如果布尔表达式3的值为true时执原创 2020-09-26 09:40:47 · 705 阅读 · 0 评论 -
Java基础进阶系列-01之常量
Java基础之常量一、怎样才算是常量二、定义常量的几种方式三、关于常量的几个深度思考四、定义常量的最佳实践一、怎样才算是常量即需要具备怎样的特点,就可以称之为常量由final关键字修饰常量的特性只能被赋值一次,赋值后值不再改变对基本类型使用final关键字不能改变的是其数值对于对象引用,不能改变的是其引用,而对象本身是可以修改的关于静态常量通过final关键字来声明常量,配合static关键字进行修饰,该常量则为静态常量,语法格式如下:权限修饰符 static原创 2020-09-26 09:34:46 · 1109 阅读 · 8 评论 -
Spring Boot集成Redis Caused by: java.lang.ClassNotFoundException: redis.clients.jedis.util.SafeEncoder
Caused by: java.lang.ClassNotFoundException: redis.clients.jedis.util.SafeEncoder背景:尝试将Spring Boot由2.1.x版本升级到2.2.x时,集成redis.clients时,出现以下问题:Caused by: java.lang.ClassNotFoundException: redis.clients.jedis.util.SafeEncoder解决方案在升级Spring Boot版本的同时,将re原创 2020-09-05 13:44:05 · 1530 阅读 · 0 评论 -
IDEA CamelCase 驼峰格式切换插件
在项目开发过程中,我们经常需要进行下划线与大小驼峰格式的切换,IDEA就提供了这样的插件可以帮我们实现这个需求。首先在IDEA插件市场中找到CamelCase插件以下是CamelCase插件个性化设置,可根据自己实际需求进行勾选...原创 2020-08-30 14:17:52 · 997 阅读 · 0 评论 -
设计模式系列(一)之建造者模式
文章目录一、如何理解建造者?二、深入分析建造者(一)为什么会有建造者模式(二)优缺点分析1、优点2、缺点(三)建造者模式 VS 工厂模式三、从JDK+MyBatis角度分析建造者模式(一)StringBuilder 建造者模式的运用(二)MyBatis 建造者模式的运用四、建造者模式的不同实现方式(一)通过Client、Director、Builder和TargetObject形成的建造者模式框架结构(二)通过静态内部类的方式(三)以QueueBuilder为例的目标类与Builder分离的原则一、如何理原创 2020-08-08 10:49:51 · 1343 阅读 · 1 评论 -
如何在IDEA单元测试中使用Scanner获取输入内容
实际案例@Testpublic void contextLoads() { Scanner scanner = new Scanner(System.in); while (true) { System.out.println("测试1"); System.out.println("测试2"); System.out.println("测试3"); System.out.println("测试4"); in原创 2020-07-22 17:28:33 · 5227 阅读 · 5 评论 -
带你认识 Maven dependencies与dependencyManagement之间的区别
面向对象的思想同样适用于Maven使用dependencyManagement优势统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承父类版本号。两者原创 2020-07-20 21:47:54 · 278 阅读 · 0 评论 -
Maven 构建Spring Boot 多模块项目 心得
参考文章Spring-Cloud笔记02:IDEA中构建多模块的Maven项目心得总结1、更多是将common模块作为依赖引入,不是直接继承(而是通过继承父pom)2、对于spring-boot-dependencies里面存在的依赖,父pom不需要处理。当子项目继承父项目后,直接使用<groupId>,<artifactId>即可从spring-boot-dependencies引入。因为spring-boot-dependencies里面就是使用<depe原创 2020-07-20 21:44:37 · 471 阅读 · 2 评论 -
关于包装类的误区
包装类才有缓存池技术,而且不是所有包装类才有。Byte,Short,Integer,Long。范围为[128, 127)Character的范围为[0, 127)Boolean的范围为true,falseDouble和Float没有。原创 2020-07-07 16:26:18 · 233 阅读 · 0 评论 -
Spring 源码分析之@ComponentScan 深入解读
文章目录解读@ComponentScan解读FilterType/* * @since 3.1 */@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Repeatable(ComponentScans.class)public @interface ComponentScan { /** * Alias for {@link #basePackages}. * <p>Allow原创 2020-06-27 10:16:23 · 389 阅读 · 0 评论 -
Spring 源码分析之@Bean 深入解读
文章目录@Bean带参方法/** * Indicates that a method produces a bean to be managed by the Spring container. * <p> * 说明: * 1. 被@Bean注解标识的方法能够生成一个Bean,并且该Bean由Spring容器进行管理 * 2. 返回类型即为Bean类型 * 3. 方法名即为Bean的Id * 4. 我们可以通过@Bean(name = "")的方式来指定Bean的Id,name的原创 2020-06-27 10:13:48 · 457 阅读 · 0 评论 -
Spring 源码分析之@Autowired 深入解读
文章目录@Autowired 源码分析多个同类型的Bean,直接使用@Autowired时@Primary与@Bean,@Autowired搭配使用总结@Autowired 源码分析/* * @since 2.5 * @see AutowiredAnnotationBeanPostProcessor * @see Qualifier * @see Value */@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType原创 2020-06-27 10:09:26 · 510 阅读 · 0 评论 -
Spring Boot Loader源码分析
分析Spring Boot Loader源码其实就是在搞懂为何Spring Boot打成jar包可以直接运行起来。一)、探索从解压jar包开始解压项目打包成的jar包,我们可以得到三个文件夹BOOT-INF,内部还有两个文件夹classes(存放项目相关字节码文件)和lib(存放项目所依赖第三方jar包)META-INF,关于项目的一些元数据Manifest-Version: 1.0Implementation-Title: spring_boot_dissectImplement原创 2020-06-13 13:10:49 · 874 阅读 · 0 评论 -
IDEA 远程调试 Spring Boot 源码
一)、查看关于-agentlib命令在终端命令行中输入"java"就能看到"-agentlib"命令二)、关于-agentlib的详细使用说明根据上边提示的文字,我们可以输入以下命令来查看关于-agentlib的详细使用java -agentlib:jdwp=help我们一般会使用到前面列举的四个选项,transport的值为dt_socket。如果是本地环境,address可以不用加ip地址运行以下命令,就可以让jar以远程调试的形式启动,会监听调试器的连接java -agent原创 2020-06-13 10:38:46 · 845 阅读 · 0 评论 -
Spring Boot 2.1.9 整合 RabbitMQ 实现延时队列处理超时未支付订单
前置条件RabbitMQ服务端需要安装rabbitmq_delayed_message_exchange插件CentOS7 为RabbitMQ安装延时队列插件一)、引入依赖<!-- 引入RabbitMQ 消息中间件依赖 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</ar原创 2020-06-06 20:09:56 · 781 阅读 · 0 评论 -
Spring Boot 2.2.6 整合 Redisson分布式锁
官方参考文档redisson-spring-boot-starter 官方文档通过YAML文件配置单节点模式一)、引入Redisson整合Spring Boot依赖<!-- Spring Boot 相关依赖 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactI原创 2020-06-06 20:05:25 · 1385 阅读 · 3 评论 -
IDEA 搭建JDK源码阅读环境
一)、找到JDK源码包,并解压src.zipJDK1.8版本,直接在安装目录下可找到src.zip压缩包JDK11版本,则是在安装目录的lib文件夹下找到src.zip压缩包二)、删除不需要的文件夹三)、设置IDEA的Debugger找到IDEA的Settings->Build, Execution, Deployment->Debugger->Stepping...原创 2020-06-06 20:02:12 · 412 阅读 · 0 评论 -
SpringBoot 在生产快速禁用Swagger2
解决方案使用注解@ConditionalOnProperty(name = "swagger.enable", havingValue = "true") 在测试配置或者开发配置中 添加 swagger.enable = true 即可开启,在生产环境不填,则默认关闭Swagger详解@ConditionalOnProperty注解@Retention(RetentionPolicy.RU...原创 2020-04-28 19:41:27 · 1442 阅读 · 1 评论 -
Spring Boot 配置跨域访问CORS
Spring Boot 配置 CORSSpringBoot 2.x主要提供了两种方式来支持Cors,如下:@CrossOrigin:默认boolean DEFAULT_ALLOW_CREDENTIALS = false;方式作用范围说明@CrossOrigin一个Controller中全部接口或其中一个特定的接口配置、定制特定的请求接口实现WebMvcConf...原创 2020-04-28 19:36:10 · 568 阅读 · 0 评论 -
Spring Boot 个性化自定义Banner
参考文章:Spring boot 之自定义 Banner// 不直接放Banner.txt文件来控制Spring Boot Banner图样// 而是通过实现org.springframework.boot.Banner接口来重写Banner图样// 这样做的目的是为了在分布式系统中,只要通用模块重写了Banner,其他模块就可以引用从而实现Banner代码复用// 如果想要实现上面的需求...原创 2020-04-28 19:33:34 · 253 阅读 · 0 评论 -
Docker 推送 Spring Boot镜像到阿里云容器镜像仓库
一)、配置项目pom.xml文件docker-maven-plugin 官方文档需要Docker事先开启远程访问的功能<properties> <!-- 仓库地域 --> <docker.region>registry.cn-shenzhen.aliyuncs.com</docker.region> <!-- 仓库...原创 2020-04-12 19:10:57 · 595 阅读 · 0 评论 -
如何开启 Docker 远程访问?
编辑以下文件vim /lib/systemd/system/docker.service在ExecStart=后添加配置,注意,需要先空格后,再输入-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock刷新配置,重启服务systemctl daemon-reloadsystemctl restart docker由...原创 2020-04-12 19:09:12 · 307 阅读 · 0 评论 -
手把手教你 CentOS7 安装Docker
参考文章Get Docker Engine - Community for CentOSinstall-using-the-repository安装步骤移除旧版本sudo yum remove docker \ docker-client \ docker-client-latest \ ...原创 2020-04-05 19:46:25 · 264 阅读 · 0 评论 -
解读ArrayList集合中,for循环遍历和迭代器遍历的不同
/** * 解读ArrayList集合中,for循环遍历和迭代器遍历的不同 * * @author MoCha * @date 2020/4/3 */public class Demo { public static void main(String[] args) { ArrayList<Integer> arrayList = new Array...原创 2020-04-04 08:26:00 · 1054 阅读 · 0 评论 -
SpringBoot 2.0 进行GET请求时,url中携带特殊符号,如[,会抛出状态码400错误
原因分析Tomcat的新版本中增加了一个新特性,就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。问题解决/** * 主要解决请求url携带...原创 2020-03-28 19:58:30 · 2677 阅读 · 0 评论 -
Spring Boot 将yyyy-MM-dd格式的文本字符串直接转换为LocalDateTime出现的问题
问题复现Exception in thread "main" java.time.format.DateTimeParseException: Text '2020-03-12' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {},ISO resolved to 2020-03-12 of t...原创 2020-03-28 19:55:36 · 3568 阅读 · 0 评论 -
关于Mybatis-Plus org.apache.ibatis.binding.BindingException问题解决
问题描述org.apache.ibatis.binding.BindingExceptionInvalid bound statement (not found): com.demo.server.system.mapper.UserMapper.findUserDetailPage解决方案:确定是否有配置mapper-locations检查application配置文件是否配置了ma...原创 2020-03-15 21:32:00 · 1753 阅读 · 0 评论 -
Java8 LocalDateTime 实用技巧
LocalDate today = LocalDate.now();// 2020-01-01 获取本月第一天LocalDate firstDayOfMonth = LocalDate.of(today.getYear(), today.getMonth(), 1);// 2020-01-31 获取本月最后一天LocalDate lastDayOfMonth = today.with(Te...原创 2020-01-22 16:07:22 · 375 阅读 · 0 评论 -
解读ArrayList 迭代器删除元素ConcurrentModificationException异常
一句话总结:modCount != expectedModCount导致异常的出现接着往下看!错误案例public static void main(String[] args) { List<String> testList = new ArrayList<>(); testList.add("Hello"); testList.add("_...原创 2020-01-13 22:00:22 · 338 阅读 · 0 评论 -
Spring Boot 解决MyBatis-Plus整合Druid 出现的nested exception is java.sql.SQLFeatureNotSupportedException问题
问题分析Druid相关issuenested exception is java.sql.SQLFeatureNotSupportedException问题的出现,主要是因为实体类的日期字段使用的是LocalDateTime类型解决方案:调整MyBatis-Plus相关版本mybatis-plus-generator是关键,不能缺少,否则一样会出现SQLFeatureNotSupport...原创 2019-12-13 13:14:16 · 7376 阅读 · 2 评论