![](https://img-blog.csdnimg.cn/20201214165944571.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java技术篇
Java相关的技术总结与分享
漁陽
knowledge reshapes destiny
展开
-
Java 设置定时任务的三种方式
以上是三种常见的定时任务实现方法,每种方法都有其优缺点,可以根据具体需求选择合适的方案。原创 2024-06-07 17:56:01 · 234 阅读 · 1 评论 -
Maven父子工程项目的配置
在Java的Maven多模块(父子工程)项目中,Maven插件的配置非常重要,因为它们可以帮助你进行项目构建、测试、打包等各种任务原创 2023-08-10 11:26:20 · 892 阅读 · 0 评论 -
Java处理Excel文件中的空格和字符“|”
正确处理Excel中空格的方法原创 2022-07-22 16:05:22 · 1022 阅读 · 0 评论 -
List的stream中Long对象与long判等问题记录
在stream.filter中比较Long!=long的过程中的结果并没有真正过滤掉,具体现象如下原创 2022-07-01 19:20:45 · 653 阅读 · 0 评论 -
java.lang.ClassNotFoundException: com.fasterxml.jackson.core.exc.InputCoercionException 异常分析
Jar只导入了 2.10.5 版本的 jackson-databind 库,有个奇怪的设计就是该版本的库,居然在 maven 依赖 2.9.6 版本的 jackson-core 库(难以理解),所以原因就是当只导入 jackson-databind 库时,对应的 jackson-core 版本不对导致,相关类不存在...原创 2022-06-20 18:42:38 · 2711 阅读 · 0 评论 -
crontab命令介绍
Linux crontab是用来定期执行程序的命令。crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。linux 任务调度的工作主要分为以下两类:1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存 2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置..原创 2021-09-03 18:14:08 · 129 阅读 · 0 评论 -
mybatis查询IN模式的写法
eg:查询状态status满足条件的记录(逗号间隔)<if test="status != null and status != ''"> AND t.status IN <foreach collection="status.split(',')" item="item" index="index" separator="," open="(" close=")"> '${item}'原创 2021-08-06 18:41:21 · 364 阅读 · 0 评论 -
Java修饰符
Controlling Access to Members of a ClassAccess Levels Modifier Class Package Subclass World public Y Y Y Y protected Y Y Y N no modifier(未指定默认default) Y Y N N private Y N N N ...原创 2021-07-19 19:08:42 · 232 阅读 · 0 评论 -
cron定时任务参数说明
MIN HOUR DOM MON DOW CMD 0 11 * * * filenameCrontab Fields and Allowed RangesMINMinute field 0 to 59HOURHour field 0 to 23DOMDay of Month 1-31MONMonth field 1-12DOWDay Of Week 0-6CMDCommand Any command to be executed中文说明例如:...原创 2021-07-15 14:36:35 · 631 阅读 · 0 评论 -
Spring BeanUtils忽略空值(或特定字符)拷贝的实践
BeanUtils的常用方法常用BeanUtils类由两个包提供 org.apache.commons.beanutils.BeanUtils、org.springframework.beans.BeanUtils,我们使用的是后者即Spring提供的,如果使用Apache要注意拷贝对象参数位置copy方法BeanUtils.copyProperties(source, target);忽略某些字段拷贝#忽略表字段id,name的copyBeanUtils.copyPrope.原创 2021-07-02 19:34:24 · 3832 阅读 · 0 评论 -
Java中运用streamlist数组转换成逗号间隔的字符串
本地环境是JDK8,如下代码可以实现标题的功能 List<IdAndName> idAndNames = new ArrayList<>(); //组装测试数据 IdAndName idAndName1 = new IdAndName(); idAndName1.setId(1); idAndNames.add(idAndName1);原创 2021-05-24 11:53:22 · 1387 阅读 · 0 评论 -
log4j使用说明
日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包。日志级别说明每个Logger都被了一个日志级别(log level),用来控制日志信息的输出。日志级别从高到低分为:A:off 最高等级,用于关闭所有日志记录。B:fatal 指出每个严重的错误事件将会导致应用程序的退出。C:erro...原创 2021-03-30 18:55:06 · 196 阅读 · 0 评论 -
攻城狮必备-UML
什么是 UML?UML全称是:Unified Modeling Language又称统一建模语言或标准建模语言。UML是 OMG 在1997年1月提出了创建由对象管理组和 UML1.0 规范草案;UML 是一种为面向对象开发系统的产品进行说明、可视化、和编制文档的标准语言;UML 作为一种模型语言,它使开发人员专注于建立产品的模型和结构,而不是选用什么程序语言和算法实现;UML 是不同于其他常见的编程语言,如 C + +,Java中,COBOL 等,它是一种绘画语言,用来做软件蓝图..原创 2020-12-17 15:59:59 · 235 阅读 · 0 评论 -
多线程技术知识
一个线程的完整生命周期新建状态: 使用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序start()这个线程。 就绪状态: 当线程对象调用了start()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中,要等待JVM里线程调度器的调度。 运行状态: 如果就绪状态的线程获取 CPU 资源,就可以执行run(),此时线程便处于运行状态。处于运行状态的线程最为复杂,它可以变为阻塞状态、就绪状态和死亡状...原创 2020-12-14 21:04:00 · 99 阅读 · 0 评论 -
Java实现List的几种排序方式
直接demo代码吧,相信你能看明白~/** * @Author: peter * @Date: 11:58 下午 2020/12/10 * @Description: */public class Test3 { public static void main(String[] args) throws Exception { List<Integer> list = new ArrayList<>(); list.add(12原创 2020-12-14 20:04:08 · 1872 阅读 · 0 评论 -
Socket客户端向服务图片的传输-IMPL篇
简单介绍下什么是socket是指在网路中不同主机上的应用进程之间,进行双向通信的端点的抽象。简单理解就是:两个主机之间要通信,就需要知道彼此的ip,端口号等信息,而一台主机这些信息的集合:就可以理解为一个端点,即为套接字双方通过套接字作为一种坐标,建立信息通道,形成连接(两点连接一条直线)简单理解了套接字的概念后,来看看如何通过java socket编程来实现socket客户端和服务端的加载流程图代码实例,实现客户端向服务端传输一张图片信息:服务端代码p..原创 2020-12-12 17:55:53 · 453 阅读 · 0 评论 -
TCP协议与UDP协议的区别
TCP协议与UDP协议的区别 TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。 TCP/IP协议集包括应用层,传输层,网络层,网络访问层。其中应用层包括: 超文本传输协议(HTTP):万维网的...原创 2020-12-09 19:40:59 · 785 阅读 · 0 评论 -
TCP/IP协议
一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的...原创 2020-12-09 19:10:05 · 174 阅读 · 0 评论 -
Java泛型|通配符
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现?答案是可以使用Java 泛型。使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序.原创 2020-12-14 19:00:32 · 372 阅读 · 0 评论 -
Java部分数据结构
Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:枚举(Enumeration)枚举(Enumeration)接口虽然它本身不属于数据结构,但它在其他数据结构的范畴里应用很广。 枚举(The Enumeration)接口定义了一种从数据结构中取回连续元素的方式。例如,枚举定义了一个叫nextElement 的方法,该方法用来得到一个包含多元素的数据结构的下一个元素。关于枚举接口的更多信息,请参见枚举(Enumeration)。位集合(BitS..原创 2020-12-14 16:17:53 · 217 阅读 · 0 评论 -
字符串链接+和concat的差异对比
日常工作中,字符串的链接应该是比较常见的,小编研究了一下+和concat的差异Demo public static void main(String[] args) throws Exception { String s1 = "hello"; String s2 = " peter"; System.out.println(s1 + s2); System.out.println(s1.concat(s2)); .原创 2020-12-14 11:50:06 · 567 阅读 · 0 评论 -
Stream实现列表的反转
获取2020-06到2020-12之间的所有月份,反转打印出来.代码如下 public static void main(String[] args) throws Exception { //getMonthBetween获取两个月份之间的所有月份列表 List<String> monthList = DateUtil.getMonthBetween("2020-06", "2020-12"); System.out.printl原创 2020-12-12 18:31:26 · 9420 阅读 · 2 评论 -
Socket网络编程准备篇
面试的时候,面试官来了句给我说下网络协议有几层?那么IP协议在哪层?Socket是什么鬼? 分哪几种?TCP和UDP协议又在哪层?有什么区别...嗯,这...所以学习本节概念性的理论还是很有 必要的!那么话不多说,开始本节内容~OSI是一个理想的模型,一般的网络系统只涉及其中的几层,在七层模型中,每一层都提供一个特殊 的网络功能,从网络功能角度观察:下面4层(物理层、数据链路层、网络层和传输层)主要提供数据传输和交换功能, 即以节点到节点之间的通信为主 第4层作为上下两部分的桥梁,是整..原创 2020-12-09 18:03:12 · 186 阅读 · 0 评论 -
Java中列表几种循环遍历方式的耗时对比(for/foreach/stream/parallelStream)
栗子:定义一个数组,赋值十万条数据。然后分别使用四种方式遍历该数组、取出name不包含4的所有列表直接上代码,如下: public static void main(String[] args) throws Exception { List<IntegerIdAndNameEntity> list = new ArrayList<>(); for (int i = 1; i <= 100000; i++) {原创 2020-12-09 15:21:03 · 2241 阅读 · 0 评论 -
Java substring() 方法
Substring() 方法是用来进行字符串的截取功能,返回字符串的子字符串语法//从索引位置开始,到最后public String substring(int beginIndex)或//从索引位置开始,到endIndexpublic String substring(int beginIndex, int endIndex)参数 beginIndex-- 起始索引(包括), 索引从 0 开始。 endIndex-- 结束索引(不包括)。 返回值Str...原创 2020-12-08 19:41:50 · 147 阅读 · 0 评论 -
Java String indexOf() 方法
indexOf()是返回匹配条件的字符位置,方法有以下四种形式:public int indexOf(int ch):返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。public int indexOf(int ch, int fromIndex):返回从 fromIndex 位置开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。int indexOf(String str, int fromIndex):返回从...原创 2020-12-08 19:35:45 · 364 阅读 · 0 评论 -
Java类加载顺序
1、有继承关系的加载顺序关于关键字static,大家 都知道它是静态的,相当于一个全局变量,也就是这个属性或者方法是可以通过类来访问,当class文件被加载进内存,开始初始化的时候,被static修饰的变量或者方法即被分配了内存,而其他变量是在对象被创建后,才被分配了内存的。所以在类中,加载顺序为:1.首先加载父类的静态字段或者静态语句块2.子类的静态字段或静态语句块3.父类普通变量以及语句块4.父类构造方法被加载5.子类变量或者语句块被加载6.子类构造方法被加载父类代码原创 2020-12-08 15:37:02 · 210 阅读 · 0 评论 -
页面和mysql中的换行,邮件内容没有生效
首先要明确的是,邮箱内容的换行是<br>页面和mysql存储的换行符是\n换行符主要有\r\n 或\n知道了上面的内容,问题就迎刃而解了。将 \n替换成<br>Java的解决方案://如果不清楚是什么换行,那就正则匹配就可以了"dssdf\rd\n".replaceAll("\r\n|\r|\n", "<br>")...原创 2020-12-08 14:25:37 · 241 阅读 · 0 评论 -
set集合转成逗号间隔的字符串
分两步1. 将set转为数组set.toArray();2.将数组转为逗号间隔的字符串StringUtils.join(arr,",")代码如下: Set<String> set = new HashSet<>(); set.add("hello1"); set.add("hello2"); set.add("hello3"); Object[] arr = set.toArray();.原创 2020-12-04 18:46:43 · 3135 阅读 · 0 评论 -
Stream中filter过滤条件问题记录
搜索员工列表中,管理者的UID Set<Long> leaderSet = new HashSet<>(); List<StaffDto> allUserList = staffService.getByDepartId(xxx, true); leaderSet = allUserList.stream().filter(staffDto -> { //该语句块中返回true会添加到set集合中,.原创 2020-12-04 18:40:16 · 3906 阅读 · 0 评论 -
Java8新特性
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。元素流在管道中经过中间操作(intermediate operation)原创 2020-11-24 20:21:44 · 266 阅读 · 0 评论 -
Java内存管理知识
目录1.内存分配策略2.JVM中的堆和栈3.堆和栈优缺点比较4.Java中的数据类型有两种5.String在内存中的存放6.数组在内存中的存放7.static变量在内存中的存放8.java中变量在内存中的分配1.内存分配策略按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的。 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间。 这种分配策略要求程序代码中不允许有可变...原创 2020-11-24 11:16:56 · 97 阅读 · 0 评论 -
Java知识图谱
string存储介绍:https://jiayang.blog.csdn.net/article/details/109903364原创 2020-11-23 19:23:42 · 129 阅读 · 0 评论 -
Java的两种传递方式:值传递、引用传递
String s1 = "Hello"; String s2 = "Hello"; String s3 = new String("Hello"); String s4 = new String("Hello"); s1 = s1 + " peter"; //s1==s2返回true是因为s1和s2值相同,编译的时候只创建一个,指向的地址是一个 System.out.println("s1==s...原创 2020-11-21 18:05:52 · 298 阅读 · 0 评论 -
保留Map添加顺序的问题
开发过程中我们最常用的map定义方式就是HashMap,如下:Map<String, Float> labelKeyAndValeMap = new HashMap<>();但是hashMap是无序的,但是现在开发过程中要求添加的顺序不被打乱,其实map是有方式的,map的实现除了有HashMap还有TreeMap和LinkedHashMap LinkedHashMap<String, String> labelMap = new LinkedHash原创 2020-11-18 16:37:52 · 2238 阅读 · 0 评论 -
Java获取两个日期之间的所有天数
将下面的代码直接复制到项目里,可以直接使用: public static List<String> getBetweenDays(String starttime, String endtime) throws ParseException { List<String> betweenTime = new ArrayList<String>(); try { Date sdate= new Si原创 2020-11-18 16:15:46 · 1593 阅读 · 0 评论 -
Java获取两个日期之间的所有月份
public static List<String> getMonthBetween(String minDate, String maxDate) throws ParseException { ArrayList<String> result = new ArrayList<String>(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");//格式化为年月 ...原创 2020-11-18 16:05:29 · 3340 阅读 · 3 评论 -
application/json的post请求接收不到数据
解决这个问题,建议先了解一下form表单几种post请求类型https://blog.csdn.net/I_peter/article/details/109775312接下来就是如何解决前端请求了1.确定前端的请求协议是application/json, text/plain, */*,可以根据日志查看2.前端的请求协议已经确定,再查看服务端(博主用的是Java,dubbo框架)的接收方式请求数据如下:{ "a":1, "b":2}接收方就要使用实体接收,并原创 2020-11-18 15:55:37 · 2589 阅读 · 0 评论 -
FORM表单POST请求的几种处理方式
HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据,我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。类似于下面这样: <method> <request-url> <version> <heade原创 2020-11-18 15:45:01 · 5020 阅读 · 0 评论 -
Float保留一位小数,四舍五入
问题简单,不做描述。几个笔记而已~ public static void countNum() { String a = "1.21"; String a2 = "1.4"; float aa = (Float.valueOf(a) + Float.valueOf(a2)) / 2; System.out.println(Float.valueOf(a) + Float.valueOf(a2)); System.out原创 2020-11-05 14:45:44 · 1626 阅读 · 0 评论