![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
java实战案例
java实战
叹人间,美中不足今方信
这个作者很懒,什么都没留下…
展开
-
微信扫码授权登录手游的原理和问题(你使用的浏览器暂不支持微信登录)
这个问题是因为微信服务器会校验请求是否有特定的请求头。原创 2022-11-16 21:07:33 · 1131 阅读 · 2 评论 -
Java范型
import java.lang.reflect.AnnotatedType;import java.lang.reflect.GenericDeclaration;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.lang.reflect.TypeVariable;import java.util.ArrayList;import java.util.stream.Strea原创 2021-11-30 23:18:21 · 291 阅读 · 0 评论 -
ClassLoader加载项目下的资源文件
Bootstrap、ExtClassLoader、AppClassLoader首先先要知道三种类加载器的作用。启动类加载器(Bootstrap)启动类加载器是C++实现的,负责将<JAVA_HOME>/lib路径下的核心类库或-Xbootclasspath参数指定的路径下的jar包加载到内存中,出于安全考虑,Bootstrap只加载包名为java、javax、sun等开头的类##扩展类加载器(ExtClassLoader)ExtClassLoader是Java实现的,是sun.misc原创 2020-12-27 22:12:10 · 1312 阅读 · 3 评论 -
Java实现自旋锁、独占锁和共享锁
简述AQS全称AbstractQueueSynchronizer,在java.util.concurrent.locks包下,是构建锁和其他同步器的框架,它的定位是能够成为实现大部分同步需求的基础。Java中基于AQS的有ReentrantLock、Semaphore、读写锁、CountDownLatch等。同步器内部维护一个volatile的int类型的成员变量表示同步状态,主要使用方式是通过子类继承同步器,实现它的抽象方法(try开头的方法)来管理同步状态。在同步器的内部提供了一个FIFO双向队列完原创 2020-12-18 23:13:20 · 274 阅读 · 1 评论 -
Java每次添加元素生成树
Node:public class Node { public Node(String name, Integer id, Integer pid) { this.name = name; this.id = id; this.pid = pid; } private String name; private Integer id; private Integer pid; public String getN原创 2020-12-12 22:37:38 · 124 阅读 · 0 评论 -
Java使用cmd调用nodejs脚本
简述本博客不是讲使用Java提供的js脚本引擎编写js脚本,而是业务需要,本地模拟http请求动态调用nodejs脚本(本地测试openfaas函数编程,模拟http请求调用nodejs函数)虽然Java有提供执行js脚本的执行引擎,但是在使用时,并不是那么好用,所以测试时使用cmd调用nodejs。代码需求:调用nodejs并传参数Java:String json = "{\"name\":\"yz\"}";json = JSON.toJSONString(json);try {原创 2020-12-12 22:10:08 · 2857 阅读 · 0 评论 -
前后端联调之时间格式化(@DateTimeFormat/@JsonFormat)
前端提交时间字符串数据,后端使用@DateTimeFormat对于时间参数,前端可以传入long类型的时间戳,也可以传入字符串类型2019-03-15等类型。后端可以用String类型或者Date类型来接收字符串格式的时间参数,但是后端直接用Date类型接收参数,并且没有自定义的时间转换器,那么会抛出异常。此时,我们可以用spring提供的注解@DateTimeFormat来接收参数。// 类...原创 2019-03-15 15:46:13 · 6343 阅读 · 1 评论 -
Maven 无效的目标发行版: 1.8
背景个人maven的settings.xml配置的jdk版本是1.8,而公司配置的jdk版本是1.7,我修改本地配置如下复制settings.xml为settings-copy.xml,修改jdk版本为jdk7在idea设置Settings和Project Structure的jdk版本为jdk7在idea设置maven的settings的路径为settings-copy.xml执行c...原创 2020-02-10 16:20:38 · 2140 阅读 · 1 评论 -
windows同时安装不同版本的jdk
背景我首先安装了jdk8,但是公司的maven配置的是jdk7,为了避免已有的项目出现编译环境的问题,因此又安装了jdk7。出现的问题修改环境变量JAVA_HOME,指向jdk7的路径,但是在cmd中执行java -version显示的版本仍然是jdk8的信息。原因官方会默认把java.exe、javaw.exe、javaws.exe复制到C:\Windows\System32目录下...原创 2020-02-10 15:52:49 · 290 阅读 · 1 评论 -
时间相关的统计工具
import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.*;public class StatisticsUtils { /** * 日期格式:yyyy-MM-dd HH:mm:ss */ public static final String ...原创 2020-01-09 10:27:30 · 226 阅读 · 0 评论 -
Java四舍五入保留小数点后几位
(double) + Math.round 返回double类型// 案例:四舍五入保留小数点后1位double d1 = 123.456;double d2 = 654.321;double v1 = (double) Math.round(d1 * 10) / 10;double v2 = (double) Math.round(d2 * 10) / 10;System.out...原创 2019-11-27 19:45:30 · 2708 阅读 · 0 评论 -
Spring mvc前后端数据交互(form表单和json数据)
ajax异步提交请求常用的contentType有两种:contentType:application/x-www-form-urlencoded contentType:application/json,如何使用springmvc处理请求数据呢?首先,我们来看一下js对象的两种数据格式:普通js对象,对象属性名不使用引号标注var baseJob = { jobName:...原创 2018-09-14 14:04:01 · 8575 阅读 · 1 评论 -
spring-data-redis整合redis集群配置
Spring版本:4.3.21.RELEASEspring-data-redis版本:<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.7.2.R...原创 2018-11-30 15:40:27 · 4877 阅读 · 2 评论 -
前后端联调之Form表单提交数组
案例:后端以Form表单的Content-type形式接收Integer数组,接口和前端代码如下,前后端联调时,后端接收不到前端传递的参数接口: @ResponseBody @RequestMapping("/testIntegerArray") public Object o(Integer[] ids){ return "" } 前端: var ids = new Ar...原创 2019-01-14 19:02:29 · 6019 阅读 · 0 评论 -
Java反射常用的方法和使用技巧
SuperClass.isAssignableFrom(Child.class)clazz.newInstance();一定要有无参构造函数Modifier.isFinal(field.getModifiers()),Modifier用来判断修饰符Field#get方法返回的是基本数据类型的包装类型isPrimitive判断基本数据类型instantof判断对象是否是某个classge...原创 2019-11-14 20:17:07 · 303 阅读 · 0 评论 -
Mybatis jdbcType=DATE和jdbcType=TIMESTAMP的坑
实体类中的时间为Date类型,mapper中按时间查询时不指定javaType,Mybatis会视参数为Timestamp类型,时间参数被格式化为yyyy-MM-dd HH:mm:sspublic class UserOnline implements Serializable { private Long userId; // 在线时间,格式为yyyy-MM-dd HH:mm:ss ...原创 2019-11-08 13:42:51 · 7925 阅读 · 0 评论 -
java.net.SocketException:Connection reset
背景HttpClient远程调用HTTPS的API时,报错java.net.SocketException:Connection reset原因Jdk版本差异导致的异常。在初始化SSLContext sslContext = SSLContext.getInstance("TLS");时,由于Jdk1.7默认的是TLS的协议版本是v1.0,而Jdk1.8协议版本是v1.2,所以出现了这种...原创 2019-11-01 16:00:52 · 3682 阅读 · 0 评论 -
commons.cli命令行交互
public static void main(String[] args) throws ParseException { String[] p = {"-h"}; parse(p, "test");}public static void parse(String[] args, String cmdName) throws ParseException { Op...原创 2019-10-22 18:59:49 · 381 阅读 · 0 评论 -
Java各种数据类型序列化
对象序列化是一个用于将对象状态转换为字节流的过程,可以将其保存到磁盘文件中或通过网络发送到任何其他程序;从字节流创建对象的相反的过程称为反序列化。可以理解为序列化是将数据转换成byte[]的表示方式。对象序列化:首先要实现Serializable接口使用ObjectOutputStream序列化,返回byte[],使用ObjectInputStream反序列化byte[]为对象fast...原创 2019-10-18 15:19:41 · 2852 阅读 · 0 评论 -
String的valueOf方法源码解读
String中的valueOf方法大致可以分为三种: String.valueOf(Object)、String.valueOf(char[])、String.valueOf(基本数据类型)案例:Integer arg = null;String.valueOf(arg); // 输出 nullString.valueOf(null); // 抛java.lang.NullPoint...原创 2018-08-21 23:30:23 · 5343 阅读 · 0 评论 -
Java内存分页、Java分批插入数据库
List result = 查询数据;// 内存分页开始下标int start = (当前页码 - 1) * 每页条数;// 内存分页结束下标int end = (当前页码 - 1) * 每页条数 + 当前页条数;// 总条数 > 要查询的下标if (result.size() > end) { result = result.subList(start, end);...原创 2019-04-24 17:51:02 · 2275 阅读 · 0 评论 -
Scanner使用技巧
Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。可以使用不同的 next 方法将得到的标记转换为不同类型的值,例如:Scanner sc = new Scanner(System.in);int i = sc.nextInt();Scanner下有hasNextXxx、nextXxx的方法,Xxx代表值的类型。hasNextXxx返回boolean...原创 2019-04-24 18:20:41 · 1423 阅读 · 0 评论 -
Java打开文件夹/文件
Java执行本地命令,可以用Runtime实现,也可以用ProcessBuilder实现。无论使用哪种方式,必须要给正确的执行命令,例如打开文件夹的命令是explorer.exe,打开txt文件notepad.exe等,注意:对于不同的文件后缀,应该使用正确的命令。执行带有参数的命令,所有命令一定要在一个数组或集合内Runtime案例:String path = System.getP...原创 2019-04-24 18:47:04 · 9168 阅读 · 1 评论 -
Java泛型使用建议(List T、List ?、List Object的使用建议)
泛型在用法上可以分成类泛型和方法泛型两种:类泛型泛型类在实例化时就要指明类型,不同的类型实例必须要重新new一次,不够灵活顶层接口:interface GenericInterface<T>子类实现:不指明泛型类型(<T>必须要带,否则子类中无法引用到T)class GenericInterfaceImpl<T> implements Gen...原创 2019-04-25 11:38:25 · 8907 阅读 · 0 评论 -
Controller接收HttpClient发送的Json数据
@RequestMapping("/test")@ResponseBodypublic Object test(HttpServletRequest request) { StringBuffer str = new StringBuffer(); try { BufferedInputStream in = new BufferedInputStream(re...原创 2019-05-20 19:15:45 · 1344 阅读 · 3 评论 -
Java自定义Socket服务器响应JSON数据
引入 com.alibaba.fastjson.JSON 依赖自定义服务器响应JSON数据需要引入 com.alibaba.fastjson.JSON的依赖import com.alibaba.fastjson.JSON;import java.io.DataInputStream;import java.io.DataOutputStream;import java.net.*...原创 2019-05-11 17:12:44 · 679 阅读 · 0 评论 -
Redis分布式锁/Redis的setnx命令如何设置key的失效时间(同时操作setnx和expire)
Redis的setnx命令是当key不存在时设置key,但setnx不能同时完成expire设置失效时长,即不能保证setnx和expire的原子性。我们可以使用set命令完成setnx和expire的操作,并且这种操作是原子操作。下面是set命令的可选项:set key value [EX seconds] [PX milliseconds] [NX|XX]EX seconds:设置失效时...原创 2019-05-30 14:30:35 · 63561 阅读 · 16 评论 -
Spring Aop根据参数名称获取参数的值(JoinPoint根据参数名获取参数的值)
@Aspect@Componentpublic class AuthAspect { /** * 1.controller包及子包下的所有类的所有方法使用aop * 2.RoomController下的list方法不使用aop */ @Pointcut(value = "execution(* com.open.controller..*.*(....原创 2019-07-01 20:21:40 · 19641 阅读 · 0 评论 -
MySQL按时间查询,date、datetime和timestamp类型查询参数和返回的数据范围是不同的
按时间范围查询,你一定纠结过开始时间和结束时间要不要格式化为00:00:00和23:59:59,也一定纠结过数据库的时间是按照什么类型比较的,between and可以用吗?反正我是纠结过,但是自己模拟一下不就清楚了吗?数据库时间比较是按照什么类型去比较?你一定见过按时间查询的SQL,时间参数用''修饰,那我们可以理解为数据库时间表面上是按字符串类型(字典顺序)去比较的,实战中我们也是这样用的...原创 2019-07-18 17:40:03 · 15721 阅读 · 2 评论 -
JavaBean和Map相互转换
import org.apache.commons.beanutils.BeanUtils;private Map beanToMap(Object obj) { try { return BeanUtils.describe(obj); } catch (IllegalAccessException | InvocationTargetException | NoSuchMet...原创 2018-09-20 15:33:42 · 1307 阅读 · 0 评论 -
Collections内部类EmptyList/EmptySet/EmptyMap的坑
Collections的emptyList、emptySet、emptyMap方法返回的集合不能正常使用。以emptyList为例,它是Collections内部实现的EmptyList,是List的一个实现,但是它没有实现add方法,我们调用add方法时,实际上执行的是AbstractList实现的add方法,这个方法抛出UnsupportedOperationException异常。Emp...原创 2019-09-02 19:25:57 · 658 阅读 · 0 评论 -
Mybatis遍历Map集合(Java/Mybatis动态排序)
以动态order by为例,即通过if和foreach标签动态拼接order by的排序字段Mapper.xml&amp;amp;amp;amp;amp;amp;amp;lt;select id=&amp;amp;amp;amp;amp;amp;quot;dynamicOrder&amp;amp;amp;amp;amp;amp;quot; resultType=&amp;amp;amp;amp;amp;amp;quot;com.p7.d原创 2018-11-28 15:05:13 · 3713 阅读 · 0 评论 -
Java获取泛型真实类型的方法
获取泛型类的泛型public abstract class AbstractDao<T> { public Class<T> getActualType() { ParameterizedType parameterizedType = (ParameterizedType) this.getClass().getGenericSupercla...原创 2019-09-08 00:09:17 · 6766 阅读 · 0 评论 -
Java基本数据类型的包装类型的比较
基本数据类型的包装类型比较分为两种类型:相同类型比较Number类型比较时,只要有一个调用了拆箱,就可以用“==”比较,无论是调用intValue还是longValue。当然对于包装类的比较,建议使用equals比较。Integer id1 = 123456789;Integer id2= 123456789;// falseSystem.out.println(id1 == id...原创 2019-04-24 17:41:19 · 1824 阅读 · 0 评论