JAVA核心技术
文章平均质量分 64
Java开发基础及核心技术知识的学习与积累
Andya_net
公众号:CodingTechWork
觉得为时已晚的时候,恰恰是最早的时候。
展开
-
Java | 使用Java Mail发送邮箱
在一些业务功能中,发送邮件是必须的,比如告警通知、日报、月报等信息推送,都需要通过邮件服务器来发送邮件。原创 2024-04-07 11:19:21 · 362 阅读 · 0 评论 -
Java | 数据一致性校验遇到的时间序列化格式不一致问题如何解决?
在开发过程中,有数据一致性校验需求。方法进行时间格式的统一准换。进行序列化时,我们可以使用。原创 2023-11-30 22:32:27 · 355 阅读 · 0 评论 -
Java | 多线程并发编程CountDownLatch实践
在并发编程过程中,如何让多个线程之间协调执行任务,如主线程等所有其他异步线程执行完毕后再继续执行下面的步骤,如何做到?我们可以考虑使用。主要是起到线程之间的同步协调作用,而不是互斥。它可以让一个线程等待其他线程完成任务后,再继续执行自己的任务。是一个同步工具类,主要应用于多线程编程场景中,可以用于控制等待线程的执行,或者说是协调多个线程之间的同步。用好这个工具类,主要关注这个工具类的初始计数值的设置、方法、await()方法即可实现编程。原创 2023-11-25 12:10:44 · 263 阅读 · 0 评论 -
SpringBoot | @EnableAutoConfiguration注解介绍
SpringBoot | @EnableAutoConfiguration注解介绍。原创 2023-11-12 17:50:17 · 215 阅读 · 0 评论 -
SpringBoot |引用外部jar包中的类方式
在本工程中引入外部jar包的类进行反射获取,如何获取?原创 2023-11-12 17:39:05 · 343 阅读 · 0 评论 -
Java | 使用ServerSocket查找TCP可用端口
在项目开发中,有一个程序是专门给服务下发tcp端口占用的,但是tcp端口有时候会被其他服务给占用,此时端口就会冲突。本文提供一个工具类进行端口占用判断并返回可用端口。查找当前服务器被占用的tcp端口,如查看到64661端口被占用,运行上述main函数。原创 2023-08-21 11:21:38 · 638 阅读 · 0 评论 -
SpringBoot | RestTemplate异常处理器ErrorHandler使用详解
异常处理器功能描述异常处理器接口,是restTemplate所有异常处理器的实现接口默认的异常处理器,处理客户端和服务端异常将HTTP错误响应转换RestClientException不处理异常/*** 继承默认错误处理器DefaultResponseErrorHandler,无需关注hasError和handlerError方法*/@Component/*** my service进行定制化处理*/@Autowired@Override=302;@Override。原创 2023-08-17 23:10:27 · 983 阅读 · 0 评论 -
Java | 使用切面AOP拦截并修改Controller接口请求参数
在开发过程中,会有一些需求将controller层的一些方法入参进行全量转换,最容易想到的可能是在调用下层service方法时,调用公共的方法进行入参转换,这时带来的唯一问题就是代码不雅观,比较冗余。那还有什么方法可以更优雅的解决这个问题吗?答案是有的:切面。我们实现一个AOP切面程序,对入参中的需转换的参数进行专项转换,而无需在各个controller层的各个方法中进行转换处理。原创 2023-06-29 09:12:00 · 5872 阅读 · 0 评论 -
Java | 反射调用类和方法时依赖注入失效问题排查与解决
在开发过程中,使用反射进行类的方法调用时,遇到了依赖注入问题,通过demo进行问题复现和还原并记录。原创 2023-06-27 13:48:39 · 1202 阅读 · 0 评论 -
Java | 枚举Enum中使用反射转换属性值
在开发过程中,有时候需要需要根据各个枚举类中一个字段属性值转为另一个字段属性值,如根据code转为name的需求进行前端展示。本文总结一下如何通过反射简单巧妙的进行枚举属性值的互相映射。原创 2023-06-27 13:48:21 · 599 阅读 · 0 评论 -
SpringBoot——SpringBoot服务启动过程源码详解剖析!
SpringBoot服务启动流程源码剖析!不服来战!原创 2023-06-13 14:49:54 · 1201 阅读 · 0 评论 -
RPC——RPC协议介绍及原理详解
RPC(Remote Procedure Call Protocol) 远程过程调用协议。RPC是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。RPC主要作用就是不同的服务间方法调用就像本地调用一样便捷。序列化:将消息对象转换为二进制流。反序列化:将二进制流转换为消息对象。原创 2023-06-11 12:10:52 · 23694 阅读 · 0 评论 -
SpringBoot——MyBatis-Plus源码分析及开发实践详解
在上一家公司一直使用,它是对基于JPA的数据访问层的增强支持,底层使用框架,支持使用原生L或查询语言。是基于的,它把代码和分离,即在代码和之间增加了新的一层,从而间接操作,大家可能觉得这个学习成本比较高,但其实也还好,都用不到文件等。 而在新的公司,使用的是,面向基于的模式,复杂的需要通过写文件来操作可能更直观友好,当结合就原地起飞了。本文主要总结使用的一些实践经验及源码分析。 是的增强工具,可以简化开发,提高我们的开发效率。原创 2023-04-25 14:22:56 · 1103 阅读 · 0 评论 -
SpringBoot——邮箱地址列表过滤出合法地址列表
SpringBoot——邮箱地址列表过滤出合法地址列表。原创 2023-04-23 14:38:09 · 226 阅读 · 1 评论 -
SpringBoot——@ConditionalOnProperty和@ConditionalOnProperty注解的详解和使用
在SpringBoot中可以通过该注解来控制是否生效。同时,我们可以通过该注解判断一个property属性,是否符合我们设定的配置值,符合则使该注解修饰的类或方法生效,否则不生效。该注解是的扩展注解。上述讲解的只能精准的匹配中的值进行控制,无法根据更多的属性值进行匹配(即使它有数组的value值,也只能配合进行与校验)我们可以通过注解进行其他属性值的表达式来校验。是执行Spel表达式,根据返回的布尔值判断是否符合条件。本来只想用用,用完更爽一些!原创 2023-04-17 16:27:25 · 1298 阅读 · 0 评论 -
SpringBoot——单元测试实践总结
mock是指在测试过程中,创建一个虚拟的对象来模拟指定对象的行为。PowerMock时一个Java单测模拟的框架,扩展了EasyMock和Mockito框架。PowerMock通过提供定制的类以及一些字节码篡改技巧进行模拟。PowerMock可模拟静态方法、私有方法、构造方法、final方法等。PowerMock支持JUnit和TestNG。原创 2023-04-16 20:06:07 · 1396 阅读 · 4 评论 -
SpringBoot——使用ThreadLocal解决类成员变量并发线程安全问题!
换句话说,就是当前线程变量,它是一个本地线程变量,其填充的是当前线程的变量,这个变量对于其他线程来说都是封闭且隔离的。如何实现变量隔离这一功能?可以为每个线程创建一个自有副本,每个线程可以访问自己内部的副本变量来达到隔离效果,从而解决共享变量的线程安全问题。变量是线程内部的局部变量,在不同的线程Thread中有不同的副本,副本只能由当前Thread使用,不存在多线程共享问题。一般由修饰,线程结束时,可回收掉副本。使用注解,解决Bean的多例问题,替代性的解决多线程类成员变量共享问题。原创 2023-04-14 09:44:31 · 3259 阅读 · 0 评论 -
SpringBoot——结合nacos实现动态刷新自定义线程池
1. 实现自定义线程池2. 实现线程池参数动态刷新原创 2023-04-07 17:31:11 · 276 阅读 · 0 评论 -
设计模式—策略模式的设计与使用
针对一组算法,将每一个算法封装到具有共同接口的独立类中,也就是给出一个接口或者抽象类A(类似于规范),其他类B、C、D实现或者继承A进行具体算法或行为的描述。原创 2022-11-01 15:00:47 · 151 阅读 · 0 评论 -
Java—通过sign签名认证实现安全的开放接口API
Java—通过sign签名认证实现安全的开放接口API原创 2022-08-11 19:33:48 · 2590 阅读 · 0 评论 -
Java—反射机制实战及动态代理总结
反射在Java技术应用中是老生常谈的事了,我们每次都是知道个皮毛,这个反射可以动态获取类的信息,比如类的属性和方法,但是在平时疯狂写CURD业务代码时,却很少关注或接触使用到反射机制。当然,这并不代表反射没落,反射无用,其实,在高级开发中,还是大量使用了反射机制的,比如我们常说的动态代理、注解等场景都是需要依靠反射来实现。 反射是在运行状态中,对于任意一个类,我们都能够通过反射机制获取到这个类的所有属性和方法,对于任意一个对象,我们都可以通过...原创 2022-06-18 18:10:03 · 271 阅读 · 0 评论 -
算法—学习、练习和总结
学习、联系和总结算法,让思维变得更敏捷!原创 2022-05-21 23:30:42 · 388 阅读 · 0 评论 -
Java—异或运算^的使用详解
关注微信公众号:CodingTechWork,一起学习进步。引言 在代码中,我们经常看到一个运算符^,这个运算符叫做异或,相比较于与&和或|这些运算符更不容易记住,下面我们一起学习这个运算符的用法。介绍概念 异或也叫半加运算,不带进位的二进制加法。我们知道,在二进制中1表示真,0表示假。异或的运算法则即为:相同为0,不同为1。一般用⊕或者^来表示异或运算符,我们在代码中还是习惯用^。运算同为00 ^ 0 = 01 ^ 1 = 0异为11 ^ 0 = 10 ^ 1 = .原创 2022-05-21 18:01:18 · 933 阅读 · 1 评论 -
SpringBoot—Entity父子类表@Inheritance和@MappedSuperclass
问题 在使用Spring Boot框架时,选用@Entity和@Table生成实体类对应的MySQL表,但是在开发过程中,同一个项目下可能存在一些共用字段的表,如何抽取这些共用字段?方案使用注解创建抽象Entity类,子类继承该抽象类即可,子类中使用@Entity和@Table注解进行表映射创建。@Inheritance使用方式:创建抽象实体类,使用注解@Entity@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)Inherit原创 2021-08-13 17:54:51 · 1164 阅读 · 0 评论 -
SpringBoot—@ComponentScan注解过滤排除某个类
问题 在抽取公共swagger配置类时,将swagger放入com.test.common.config包内,其他模块通过@ComponentScan进行进行引用,但有的模块在引用时,会扫描到common.config包路径下的其他配置类而引发错误,如引用到RedisConfig类而报错,此时需要将该类排除掉。解决方案 通过@ComponentScan中的excludeFilters属性进行排除类。@SpringBootApplication@ComponentScan(basePackage原创 2021-06-21 17:38:51 · 3585 阅读 · 0 评论 -
JAVA—object映射转化为long类型方式
问题 开发过程中,有时候会遇到object类型转换时,出现java.lang.Integer cannot be cast to java.lang.Long异常。解决方案long value01 = Long.valueOf(obj.get("key01").toString()).longValue();原创 2021-06-21 15:39:32 · 452 阅读 · 0 评论 -
JVM—类加载器和双亲委派模型
关注微信公众号:CodingTechWork,一起工作学习总结。引言 在学习虚拟机类加载机制时,我们已经了解虚拟机把描述类的数据从Claas文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,整个生命周期经历了加载->验证->准备->解析->初始化->使用->卸载这些阶段,而加载就是类加载的一个阶段,主要完成以下三件事:通过一个类的全限定名来获取定义此类的二进制字节流。将这个字节流所代表的静态存储结构转化为方法区的.原创 2021-05-15 17:20:02 · 260 阅读 · 1 评论 -
SpringBoot——@Scheduled的自定义周期性线程池解决任务延时执行问题
关注微信公众号:CodingTechWork,一起学习进步。问题 在使用Spring中的@Scheduled注解设置定时任务时,遇到这样2个问题:定时任务未按时执行,现象是延后了一段时间才执行定时任务。多个定时任务有时间重叠时,无法并发调度执行。分析 出现上面问题现象的根因是Spring的定时任务默认是单线程执行,所以会在某些场景下造成阻塞。当然我们可以通过@Async注解来异步执行这些并发的@Scheduled注解的定时任务,而@Async线程池容量是100,当超过100个线程并发执.原创 2021-03-31 08:49:55 · 2612 阅读 · 0 评论 -
设计模式——单例模式详解
单例介绍 单例模式(Singleton Pattern)是Java中最基础最忌惮的设计模式之一,这种欧式属于创建型模式,提供的就是一种创建对象的方式。这种模式中的单一类创建自己的对象,确保只有一个对象被创建,并且为所有对象提供一个访问它的全局访问点。 单例模式用来解决频繁创建与销毁实例对象问题,当我们想要控制实例创建个数或者复用实例时,就可以使用单例模式,这样有助于节省系统资源。特点单例类,顾名思义,只有一个实例。单例类必须是自己创建自己的唯一实例。单例类必须给所有对象提供这个唯一实例。.原创 2021-03-12 08:56:34 · 199 阅读 · 2 评论 -
JAVA—HTTP客户端警告:Going to buffer response body of large or unknown size.
关注微信公众号:CodingTechWork,一起学习进步。原编码问题 在修复原有代码bug时,发现日志里经常抛出Going to buffer response body of large or unknown size. Using getResponseBodyAsStream instead is recommended,这种提示。查看了原有代码中的逻辑如下:... ...HttpClient httpclient = new HttpClient();GetMethod getMet.原创 2021-03-07 10:36:47 · 4378 阅读 · 1 评论 -
JAVA——实现json bean实体类的传参校验模板及注解详解
关注微信公众号:CodingTechWork,一起学习进步。引言 在java开发中,经常需要和外界系统进行参数对接,api设计中难免会遇到json传参不一致的情况,虽然纸面或者接口规范约束了应该怎么传参,仍然不可避免在对接过程中,出现传参不符合要求的,如传空值、传超过范围的值等。除了在Controllers层面使用@Validated或者@Valid注解外,本文将总结使用javax.validation.*;下的包进行校验的模板和常用的注解含义。常用注解注解类型说明@Not.原创 2021-02-25 21:04:03 · 1500 阅读 · 3 评论 -
JAVA——以ReentrantLock为例学习重入锁以及公平性问题
引言 重入锁,顾名思义在于这个重字。开发过程中,我们在用到锁时,可能会用于递归的方法上加锁,此时,那同一个方法对象去重复加锁,是怎么加的呢?本文一起学习一下重入锁这个概念。重入锁介绍重入锁概念 重入锁ReentrantLock,是指支持重进入的锁,表示锁可以支持一个线程对资源的重复加锁,也就是说任意线程在获取到这个锁之后,如果说再次获取该锁时,不会被锁所阻塞(递归无阻塞)。另外,重入锁还支持锁时的公平和非公平性(默认)选择。重入锁实现 实现重入机制,必须解决两个问题:1)线程需要再次获取锁原创 2020-12-07 19:25:48 · 1116 阅读 · 3 评论 -
JVM——字符串常量池详解
引言 在Java开发中不管是前后端交互的JSON串,还是数据库中的数据存储,我们常常需要使用到String类型的字符串。作为最常用也是最基础的引用数据类型,JVM为String提供了字符串常量池来提高性能,本篇文章我们一起从底层JVM中认识并学习字符串常量池的概念和设计原理。字符串常量池由来 在日常开发过程中,字符串的创建是比较频繁的,而字符串的分配和其他对象的分配是类似的,需要耗费大量的时间和空间,从而影响程序的运行性能,所以作为最基础最常用的引用数据类型,Java设计者在JVM层面提供了字符串原创 2020-12-01 18:11:37 · 418 阅读 · 0 评论 -
JAVA——两个List集合求交集、并集和差集(去重)模板
关注微信公众号:CodingTechWork,一起学习进步。引言 经常遇到一些集合类之间的过滤数据、求合集之类的问题,在此以List为例,毕竟在数据库中取数据后,我们使用比较多的是List集合进行操作。模板代码public static void main(String[] args) { List<String> stringList = new ArrayList<>(); stringList.add("a"); s.原创 2020-11-25 18:13:49 · 3662 阅读 · 2 评论 -
SpringBoot—项目启动时几种初始化操作及SpringApplication类详解
引言 在使用Spring Boot搭建项目时,启动项目工程,经常遇到一些需要启动初始化数据或者资源的需求,比如提前加载某个配置文件内容,初始化某个信息、做好安全认证等。这里一起学习总结了几种初始化数据的方式。@Bean注解配置使用方式 编写配置类,使用@Configuration和@Bean注解进行初始化。使用示例package com.example.andya.demo.conf;import org.springframework.beans.factory.annotation.原创 2020-09-15 18:54:02 · 1789 阅读 · 0 评论 -
SpringBoot—自定义线程池及并发定时任务模板
介绍 在项目开发中,经常遇到定时任务,今天通过自定义多线程池总结一下SpringBoot默认实现的定时任务机制。定时任务模板pom依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <原创 2020-05-29 16:00:24 · 824 阅读 · 0 评论 -
Java—基于Fastjson的JSON串序列化和反序列化模板总结
介绍模板需求说明 开发中经常遇到前端传递过来的JSON串的转换,后端需要解析成对象,有解析成List的,也有解析成Map的。依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.57</version></dependency>解析原创 2020-05-29 10:27:50 · 770 阅读 · 0 评论 -
Java—CountDownLatch使用详解
CountDownLatch介绍CountDownLatch概述CountDownLatch一般用作多线程倒计时计数器,强制它们等待其他一组(CountDownLatch的初始化决定)任务执行完成。有一点要说明的是CountDownLatch初始化后计数器值递减到0的时候,不能再复原的,这一点区别于Semaphore,Semaphore是可以通过release操作恢复信号量的。CountDownLatch使用原理使用原理创建CountDownLatch并设置计数器值。启动多线程并且调用C原创 2020-05-20 19:34:27 · 1341 阅读 · 0 评论 -
Java—线程的生命周期及线程控制方法详解
线程生命周期5种状态介绍 线程的生命周期经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Bolocked)和死亡(Dead)状态转换图新建(New) 程序使用new关键字创建一个线程之后,该线程就处于新建状态,仅仅由Java虚拟机为其分配内存,并初始化其成员变量的值。不会执行线程的线程执行体。如Thread thread = new Thread()。就绪(Runnable) 也称为“可执行状态”,线程对象调用start()方法后,该线程处于就绪状态。如th原创 2020-05-19 20:38:37 · 595 阅读 · 0 评论 -
Java—多线程创建详解
多线程介绍线程和进程进程定义:进程是一块包含了某些资源的内存区域,操作系统利用进程把它的工作划分为一些功能单元。(应用程序是由一个或多个相互协作的进程组成)从资源看:进程是资源分配的最小单位;从基本单位看:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位;从操作系统资源管理方式看:进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响,所以多进程的程序要比多线程的程序健壮;在进程切换时,耗费资源较大,效率要差一些;独立原创 2020-05-18 19:22:05 · 409 阅读 · 0 评论