Java
文章平均质量分 62
彧卿丶
知道的越多,不知道的就越多
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Spring Cloud Gateway 网关跨域问题解决
Spring Cloud Gateway 网关跨域问题解决原创 2023-11-24 15:24:23 · 2403 阅读 · 0 评论 -
Hashmap遍历时用map.remove方法为什么会报错?
private static HashMap<Integer, String> map = new HashMap<Integer, String>();; public static void main(String[] args) { for(int i = 0; i < 10; i++){ map.put(i, "value" + i); } } for(Map.Entry&l.原创 2022-05-30 11:41:48 · 2134 阅读 · 0 评论 -
Java Json 数据下划线与驼峰格式进行相互转换
开发中,我们经常会使用JSON格式的数据进行传输。但是不同的需求,可能传递的数据格式不太一样,有的需要下划线,有的需要驼峰,而我们的 Java 实体类又是一个,如何将他们来回转换呢? 其实,在各种JSON 工具中,都提供了这个方法,下面针对Fastjson、Jackson、Gson 这三种常用的工具来进行下简单的介绍。User类public class User { private String nameInfo; private String ag...原创 2021-06-29 19:11:02 · 9085 阅读 · 0 评论 -
mybatis的注解开发之三种动态sql
1.脚本sql 即XML配置方式的SQL,方式如下:@Select("<script>select * from user <if test=\"id !=null \">where id = #{id} </if></script>") public List<User> findUserById(User user); 很明显,在java中写xml可读性和维护性太差,尤其当SQL很长时,这样写是很痛苦的。而且使用...原创 2020-10-26 16:06:03 · 453 阅读 · 0 评论 -
使用@NotBlank、@NotNull、@NotEmpty注解的注意事项
ctrl c \ ctrl v 代码时没有注意,在 List 上面加了 @NotBlank 注解,导致调试接口时,直接报错: javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint之前使用@NotEmpty,@NotNull和@NotBlank时,并没有注意他们的区别,导致出现了上面的问题。1. @NotNull:不能为null,但可以为empty 。与...原创 2020-10-26 15:57:48 · 1469 阅读 · 0 评论 -
在Java8的foreach()中使用return/break/continue
用foreach时发现无法使用 break/continue,只能使用 return;作用类似于普通for循环中使用continue , 可以把foreach中大括号的代码看作是一个方法体,并不是一个for循环,所以不能使用break/continueimport java.util.ArrayList;import java.util.List;public class LambdaReturnTest { public static void main(String[] a...原创 2020-09-22 09:42:37 · 1005 阅读 · 0 评论 -
JavaWeb三大组件(Servlet,Filter,Listener)以及interceptor拦截器
下面主要从几个方面阐述一下题目中四个概念的区别与联系:概念 生命周期 职责 执行过程一、概念1、servletservlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。2、filterfilter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是设置字符集、控制权限、控制转向、做一些业务逻辑判断等。其工作原理是,只要你在web.xml文件配置好要拦截的..原创 2020-07-02 11:41:39 · 1102 阅读 · 0 评论 -
Spring @ControllerAdvice 注解
通过@ControllerAdvice注解可以将对于控制器的全局配置放在同一个位置。 注解了@Controller的类的方法可以使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上。 @ControllerAdvice注解将作用在所有注解了@RequestMapping的控制器的方法上 @ExceptionHandler:用于全局处理控制器里的异常。 @InitBinder:用来设置WebDataBinder,用于自动绑定前台请求参数到Model原创 2020-07-02 09:36:37 · 397 阅读 · 0 评论 -
如何使用jstack查看问题?
我们知道jdk提供了对线程的监控命令jstack,但是具体怎么使用呢,那么我们一起来探讨一下吧。一、jstack用法1. jstask基本命令参数jstask的用法网上遍地都是,我就不详细介绍了,把基本的命令参数贴过来。/opt/java8/bin/jstackUsage: jstack [-l] <pid> (to connect to running process) 连接活动线程 jstack -F [-m] [-l] <p..原创 2020-05-13 09:49:56 · 3083 阅读 · 0 评论 -
从零实现一个http服务器
说到http协议和http请求,很多人都知道,但是他们真的“知道”吗?我面试过很多求职者,一说到http协议,他们能滔滔不绝,然后我问他http协议的具体格式是啥样子的?很多人不清楚,不清楚就不清楚吧,他甚至能将http协议的头扯到html文档头部<head>。当我问http GET和POST请求的时候,GET请求是什么形式一般人都可以答出来,但是POST请求的数据放在哪里,服务器如何...翻译 2020-03-24 14:53:12 · 632 阅读 · 0 评论 -
Java实现定时任务的几种方式
目前主要有以下几种实现方式: - JDK自带 :JDK自带的Timer以及JDK1.5+ 新增的ScheduledExecutorService; - Quartz :简单却强大的JAVA作业调度框架; - Spring3.0以后自带的task :可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多。一、JDK 自带的定时器实现Timer类...原创 2020-03-24 14:07:24 · 390 阅读 · 0 评论 -
string对象不可变的原理
ps:主要是其内部使用了private final修饰成员,如果想修改,需要使用到反射技术string方法的修改效果是通过新建StringBuilder来实现的,更老的版本使用StringBuffer,后者是线程安全版本,但效率较低什么是不可变对象?众所周知, 在Java中, String类是不可变的。那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,...翻译 2020-02-07 14:23:14 · 394 阅读 · 0 评论 -
List中去除重复字符串的三种方式
String字符串逆序输出的两种方式 http://blog.youkuaiyun.com/sunrainamazing/article/details/71583954String字符串的之间的各类转化操作 http://blog.youkuaiyun.com/sunrainamazing/article/details/71583685判断是否为回文字符串,逆序输出字符串 http://blog.cs...原创 2018-08-24 13:36:11 · 4352 阅读 · 1 评论 -
java.io.IOException 断开的管道 解决方法 ClientAbortException: java.io.IOException: Broken pipe
查看采集数据的tomcat日志,习惯性的先翻到日志的最后去查看有没有异常的打印,果然发现了好几种异常信息,但是最多还是这个:24-Nov-2016 09:54:21.116 SEVERE [http-nio-8081-Acceptor-0] org.apache.tomcat.util.net.NioEndpoint$Acceptor.run Socket accept failed ja...转载 2019-02-26 14:11:34 · 2284 阅读 · 0 评论 -
递归return的问题
递归的四条基本法则:(引自《数据结构与算法分析——C语言描述》Mark Allen Weiss 著)1. 基准情形。2. 不断推进。3. 设计法则。4. 合成效益法则。这里说下return的作用域:return 对当前函数来说是结束了,对调用它的父函数来说你这个函数执行完成了,父函数就会接着执行下一语句。没想到父函数马上又遇到一个return,父函数结束了,对爷爷函数来说...原创 2019-03-21 19:19:36 · 1352 阅读 · 0 评论 -
java获取当前日期时间代码总结
本想获取一个 yyyy-mm-dd (只要年月日,不要时间),找了半天没有类似的方法,使用new Date出来的包含时间,想了办法后:SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date parseDate = sdf.parse(sdf.format(new Date()));先将new Date() 格...原创 2019-03-26 11:13:33 · 4978 阅读 · 2 评论 -
HashMap,LinkedHashMap,TreeMap的区别
Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写Ha...原创 2019-04-25 14:13:54 · 170 阅读 · 0 评论 -
通过Java反射获得对象里面的所有字段名以及字段对应的值
public class Student { public Student() { } private int id; private String name; private int math; private int english; public int getId() { return id; } public void setId(int id) ...原创 2019-04-25 14:54:24 · 3157 阅读 · 1 评论 -
如何解决fastJson无序问题?
在开发过程中,遇到过一种一开始觉得很莫名其妙的情况——在将json解析成一个map的时候,会出现顺序颠倒的情况,虽然数据读取和存储都没有出错,但是顺序的颠倒在开发中处理特定问题时也是一件很令人头疼的事情,那么为什么会出现这种情况,怎么避免出现这种情况呢?(解决方法来源于网络)跟踪fastjson源码,在com.alibaba.fastjson.parser.DefaultJSONParser ...原创 2019-04-25 14:58:27 · 574 阅读 · 0 评论 -
后台解决跨域问题的几种方式
一、Spring跨域拦截注解方式配置1、spring版本至少在4.2以上,本人使用的是4.32、跨区没配置之前请求访问会报错请求方式:当前域地址:http://192.168.1.78:9080/testGit/(index):1 Failed toload http://192.168.1.78:8800/bronzecoll/share/shareNews?id=1: N...原创 2019-05-23 14:12:32 · 4036 阅读 · 0 评论 -
BigDecimal add方法问题
BigDecimal 遇到一个比较坑的问题,使用add时,原数值竟然不变。package cn.wzz.test.bigDecimalTest;import java.math.BigDecimal;public class MethodAdd { public static void main(String[] args) { // add函数不会给原来的变量 Bi...原创 2019-06-04 14:42:40 · 911 阅读 · 0 评论 -
Spring采用视图时,使用@SessionAttributes("")注解出现异常
Spring采用视图时,使用@SessionAttributes("")注解出现Cannot expose session attribute 'user' because of an existing model object of the same name异常问题错误原因:因为request session默认是不会加入velicity context中的,所以要配置上expo...原创 2019-06-04 14:52:33 · 539 阅读 · 0 评论 -
java中获取类加载路径和项目根路径的5种方法
import java.io.File; import java.io.IOException; import java.net.URL; public class MyUrlDemo { public static void main(String[] args) { MyUrlDemo muDemo = new MyUrlDemo(); ...原创 2019-01-09 09:08:51 · 389 阅读 · 0 评论 -
Arrays.sort 实现原理和 Collections.sort 实现原理
排序时小数组使用快排(插入排序):Use Quicksort on small arrays之后考虑归并排序Collection和Collections区别java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。java.util.Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程...原创 2019-01-24 16:59:58 · 1570 阅读 · 0 评论 -
java队列——queue详细分析
Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口。 Queue的实现1、没有实现的阻塞接口的LinkedList: 实现了java.util.Queue接口和java.util.AbstractQueue接口 内置的不阻塞队列: Prior...原创 2018-09-06 14:10:38 · 208 阅读 · 0 评论 -
JAVA中对null进行强制类型转换
今天很好奇,对null进行强转会不会抛错。做了如下测试得到的结果是,如果把null强转给对象,是不会抛异常的,本身对象是可以为null的。但是如果是基本类型,比如 int i = (Integer)obj的强转,其实内部会调用intvalue方法去赋值给基本类型,所以这时候是会报错的。代码如下Object obj = null;Integer s1 = (Integer...原创 2018-09-05 10:50:26 · 2486 阅读 · 0 评论 -
@JsonFormat和@DateTimeFormat的作用
大部分开发者都知道,在SpringMvc中@JsonFormat用于将后台返回前台的Date变量转换为字符串类型;而@DateTimeFormat用于将前台传到后台字符串变量转换为Date类型。 今天针对这两个注解亲自测试了一下。@JsonFormat不仅可以完成后台到前台参数传递的类型转换,还可以实现前台到后台类型转换。当content-type为application/j...原创 2018-08-27 09:05:51 · 408 阅读 · 0 评论 -
BeanUtils.copyProperties(A,B)字段复制
BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。 注意:属性复制,不同jar中的方法,用法不一样。1、package org.springframework.bea...转载 2018-08-24 14:05:22 · 185 阅读 · 0 评论 -
java request.setAttribute和session.setAttribute有什么区别
最近撸代码有点上头,感觉好多基础都忘掉了,比如web对象 request、session...的作用域。下面借着setAttribute() 方法的使用,来简单聊一聊这两个对象的作用域吧。 1,request.setAttribute(“curruser”,curruser)这个方法是将curruser这个对象保存在request作用域中,然后在转发进入的页面就可以获取到你...原创 2018-08-24 13:53:11 · 1589 阅读 · 1 评论 -
Java多线程中的一些方法介绍wait()、notify()、sleep()、interrupt()
对比分析Java中的各个线程相关的wait()、notify()、sleep()、interrupt()方法方法简述Thread类sleep:暂停当前正在执行的线程;(类方法)yield:暂停当前正在执行的线程,并执行其他线程;(类方法)join:等待该线程终止;interrupt:中断该线程,当线程调用wait(),sleep(),join()或I/O操作时,将收到InterruptedExce...原创 2018-03-18 00:18:24 · 292 阅读 · 0 评论 -
Java中枚举几种常用的用法
JDK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便。用法一:常量在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 Java代码 public enum Color { RED, GREEN, BLANK, Y...原创 2018-03-18 20:16:02 · 407 阅读 · 0 评论 -
关于Java类加载的双亲委派机制
预定义类加载器和双亲委派机制JVM预定义的三种类型类加载器:启动(Bootstrap)类加载器:是用本地代码实现的类装入器,它负责将 <Java_Runtime_Home>/lib下面的类库加载到内存中(比如rt.jar)。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。标准扩展(Extension)类加载器:是由 Su...原创 2018-03-19 20:44:09 · 211 阅读 · 0 评论 -
反射处理java泛型
ReflectionUtil就是为了解决一类问题的辅助工具类,为java.lang.reflect标准库的工具类。它提供了便捷的访问泛型对象类型(java.reflect.Type)的反射方法。原创 2017-12-14 17:30:33 · 386 阅读 · 0 评论 -
Java中的数组[ ]、List、Set互相转换
数组转ListString[] staffs = new String[]{"Tom", "Bob", "Jane"};List staffsList = Arrays.asList(staffs);需要注意的是, Arrays.asList() 返回一个受指定数组决定的固定大小的列表。所以不能做 add 、 remove 等操作,否则会报错。List staffsList = A...原创 2018-10-11 15:09:30 · 241 阅读 · 0 评论 -
java 比较两个对象属性值变化情况,用于记录日志使用
package com.cdc.console.controller;import java.beans.PropertyDescriptor;import java.lang.reflect.Field;import java.lang.reflect.Method;public class Test<T> { public String contrastOb...原创 2018-10-11 17:34:33 · 1652 阅读 · 0 评论 -
关于Java中单线程处理数据过慢的问题解决
有个需求调用了外部接口查询客户的违章信息,一共一千多辆车,查看日志的时候这段程序居然跑了有半个多小时。之前的处理逻辑是将所有的数据遍历,根据客户的车辆信息一个个去调用接口。这么长时间,肯定要优化。想了想:可以将查出来的所有数据分片,分n片,启动n个线程,分别去执行查接口的功能。由于公司使用的服务器一般四核cpu,所以使用可以将数据分成8片,并启动8个线程。(一个并发程序开多少线程合...原创 2018-12-26 10:59:41 · 2642 阅读 · 0 评论 -
Java ExecutorService四种线程池的例子与说明
1、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub }}).start();那你就out太多了,new Thread的弊端如下...原创 2018-12-26 10:28:38 · 426 阅读 · 0 评论 -
List分片处理
写代码时有时需要将List按XX大小分片,或者均分成几个List,此时最好不要new很多新的List然后向里面add,这样做效率很低,下面介绍两种高效分片的方法。一. 按固定大小分片1.直接用guava库的partition方法即可。import com.google.common.collect.Lists;public class ListsPartitionTest { ...原创 2018-12-26 10:10:04 · 1324 阅读 · 0 评论 -
JUC学习笔记--从阿里Java开发手册学习线程池的正确创建方法
前言使用了阿里代码规范检查工具后,再查看自己之前对线程处理数据的代码时《关于Java中单线程处理数据过慢的问题解决》,有一个线程池的建议:【强制】线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。发现这条建议还是十分有用的,因为自己经常使用Executors提...原创 2019-01-04 17:15:24 · 1089 阅读 · 0 评论 -
线程池创建
一、简单来说使用线程池有三个好处:1、降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2、提高响应速度:当任务到达时,任务可以不需要的等到线程创建就能立即执行。3、提高线程的可管理性:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配、调优和监控。二、线程池的实现原理当一个新任务提交到线程池时,简单来...转载 2018-12-26 13:50:22 · 203 阅读 · 0 评论
分享