java se and java ee
java se and java ee
Vance.
时光如流水。
展开
-
Scanner next()和nextLine()的区别
测试完整字符串:哈哈 呵呵 笑嘻嘻scanner.next():读取输入内容中第一个没有空白符的内容。在它之后的读取操作(next或nextLine)会继续读,直到流中的内容被读完。比如第一次读的是"哈哈",第二次读的是"呵呵"。scanner.nextLine():读取输入内容中整行内容。示例1:nextLine+nextLine Scanner input = new Scanner(System.in); System.out.println("请输入字符串原创 2021-10-05 12:27:15 · 1265 阅读 · 0 评论 -
让我云里雾云的volatile
volatile 简介volatile关键字是Java虚拟机提供的的最轻量级的同步机制。它作为一个修饰符出现,可以用来修饰变量。它有什么作用呢?它修饰的是变量,可以保证变量对所有线程的可见性,禁止指令重排,但是不能保证原子性。现代计算机的内存模型计算机执行程序时,指令是由CPU处理器执行的,而打交道的数据是在主内存当中的。ps:由于计算机的存储设备与处理器的运算速度有几个数量级的差距,总不能每次CPU执行完指令,然后等主内存慢悠悠存取数据吧,影响协作效率。所以现代计算机系统加入一层读写.原创 2021-09-07 20:57:11 · 441 阅读 · 0 评论 -
一款idea插件,让接口测试效率提升N倍
idea 中的:HTTP Client,这款工具挺好用的,主要优点:1、若想测试一个接口,只需要几行代码2、运行特别容易3、可以切换各种环境的请求地址创建一个 springboot 项目核心实现IndexControllerpackage com.example.demo;import org.springframework.web.bind.annotation.*;import org.springframework.web.multipart.MultipartFil原创 2021-08-28 14:40:16 · 4459 阅读 · 1 评论 -
表单数据提交时的编码类型
application/json和application/x-www-form-urlencoded都是表单数据提交时的两种编码类型。EncTypeenctype 属性规定在请求发送到服务器之前,应该如何对表单数据进行编码。默认地,表单数据会编码为 "application/x-www-form-urlencoded"。查看请求的编码方式application/x-www-form-urlencoded对应的数据格式为键值对,比如 “name=xxx”application/jso原创 2021-08-28 14:34:09 · 951 阅读 · 0 评论 -
form-data、x-www-form-urlencoded、raw、binary
1、form-data就是http请求中的multipart/form-data,用于处理表单数据。可以上传一般的键值对参数,也可以上传文件参数。当上传的是文件参数时,Content-Type会显示文件类型;content-disposition,会显示上传文件的一些具体信息。由于有boundary作为边界分隔符,所以multipart/form-data既可以上传文件参数,也可以上传键值对参数。它采用了键值对的方式,所以可以上传多个文件。2、x-www-form-urlencoded.原创 2021-08-28 14:31:09 · 986 阅读 · 0 评论 -
date类型的数据转json时,自动转为时间戳的问题
方式一:在对应的实体类的get方法上定义一个注解@JSONField(format = "yyyy-MM-dd HH:mm:ss")方式二:使用另一个API方法JSON.toJSONStringWithDateFormat(parseObj,dateformat,SerializerFeature.WriteDateUseDateFormat)原创 2021-08-15 15:43:45 · 530 阅读 · 0 评论 -
多线程:通信
线程通信:多个线程之间进行信息交流与传递。常用于公共数据的通信。下面我们分别演示一下单消费者、单生产者,多消费者、多生产者的通信。在演示之前,强调一下:多个线程访问同一个类的不同synchronized方法时, 都是串行执行的 ! 就算有多个cpu也不例外 ! synchronized方法使用了java的内置锁, 即锁住的是方法所属对象本身。也就是说,多个线程不能同时(并发)访问同一个同步方法,也不能同时(并发)访问不同的同步方法。消费者、生产者(1-1)示例1.面包类public c原创 2021-07-10 12:44:18 · 173 阅读 · 0 评论 -
多线程:使用同步措施解决并发引起的可见性问题
解决线程并发问题的常用两种方法:1.volatile关键字2.synchronized关键字下面主要介绍下synchronized关键字这种方式。多线程可见性问题,具体可以参看另一篇文章:点击这里另外,插一嘴,多个线程访问同一个类的不同synchronized方法时, 都是串行执行的 ! 就算有多个cpu也不例外 ! synchronized方法使用了java的内置锁, 即锁住的是方法所属对象本身。什么意思呢?就是多个线程不能同时(并发)访问同一个同步方法,也不能同时(并发)访问不同原创 2021-07-10 12:17:57 · 246 阅读 · 1 评论 -
多线程:并发引起的可见性问题及常用方法小结
现象:一个线程修改了共享变量的值,另一个线程却不可见。示例:缓存类public class MyCache { public String key; public String value; /** * 标记cache是否为空 */ public boolean isEmpty = true; @Override public String toString() { return "MyCache{" +原创 2021-07-08 21:47:43 · 340 阅读 · 0 评论 -
redis 缓存穿透、雪崩、击穿
缓存穿透概念缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。“穿透”的意思就是穿过redis进入到DB。下图是一个简单的缓存实现:...原创 2021-05-29 13:28:09 · 220 阅读 · 0 评论 -
java 并发之synchronized
前言在多线程开发中,我们经常看到synchronized(this)、synchronized(*.class)、synchronized(Object o)这些玩意。它们都围绕synchronized关键字,用于同步方法或同步代码块,解决线程安全问题,保证在同一时刻最多只有一个线程执行某段代码。一、synchronized(this)...原创 2021-05-29 13:18:37 · 193 阅读 · 0 评论 -
java 锁的分类
一、简介锁,是一种同步机制,用于在多线程中实现对资源的控制,解决并发问题。二、锁的种类公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁上面包含了8种锁的名词,这些分类并不全是指锁的状态,有的是指锁的特性,有的是指锁的设计。下面,将对每个锁的名词进行解释。在介绍之前,说一下饥饿现象如果一个线程的cpu执行时间都被其他线程抢占了,导致得不到cpu的分配执行,这种情况就叫做“饥饿”。解决饥饿现象的..原创 2021-05-29 13:08:27 · 1042 阅读 · 3 评论 -
java 可重入锁、不可重入锁
可重入锁广义上的可重入锁指的是可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并且不发生死锁(前提得是同一个对象或者class),这样的锁就叫做可重入锁。我的理解就是,某个线程已经获得某个锁,可以无需等待而再次获取锁,并且不会出现死锁(不同线程当然不能多次获得锁,需要等待)。简单的说,就是某个线程获得某个锁,之后可以不用等待而再次获取锁且不会出现死锁。常见的可重入锁Synchronized和ReentrantLock 都是可重入锁。可重入锁的释放同一个线程..原创 2021-05-29 12:57:01 · 624 阅读 · 1 评论 -
java 枚举的使用
实现原理在使用关键字enum创建枚举类型并编译后,编译器会为我们生成一个相关的类,这个类继承了Java API中的java.lang.Enum类。也就是说通过关键字enum创建枚举类型,在编译后事实上也是一个类类型而且该类继承自java.lang.Enum类。(可以看看反编译的结果)结论:从反编译的代码可以看出编译器确实帮我们生成了一个Day2类,而且该类继承自java.lang.Enum类。除此之外,编译器还帮我们生成了7个Day2类型的实例对象,分别对应枚举类中定义的7个枚举元素。同时生原创 2021-05-23 17:37:33 · 74 阅读 · 0 评论 -
java List集合分批处理
List集合分批处理public List<OpSectionBerthSensorStatus> selectOpSectionBethSensorStatusBatchProcess(List<String> dataList) { if (null != dataList && dataList.size() > 0) { List<OpSectionBerthSensorStatus> allLi原创 2021-05-01 20:30:58 · 399 阅读 · 0 评论 -
java List集合之subList()引发的ConcurrentModificationException异常
对List进行subList()操作或subList().clear()连缀操作时,可能会出现以下异常:ConcurrentModificationException产生的原因:子集合先引用原集合,引用之后再对原集合进行了操作(改变了原集合的结构),此时操作使用子集合就会出现该异常!解决方案:将子集合拷贝到新集合中,然后直接操作使用该新集合,不要去引用原集合,除非能保证引用的原集合在引用之后不再操作(改变结构)! public static void main(String[] .原创 2021-04-21 22:17:55 · 549 阅读 · 0 评论 -
java 透明图片添加水印
对应非透明图片,在上传保存后,保存的图片和原图不一样,背景变成黑色的了。经过一波三折,终于折腾出来了。下面给出实现:public static void addWaterMark(InputStream input, File file) throws Exception { Color color = new Color(255, 200, 0, 118); Font font = new Font("微软雅黑", Font.ITALIC, 15); .原创 2021-03-16 21:57:27 · 521 阅读 · 0 评论 -
springboot 支付宝支付
实现步骤1. 登陆支付宝开放平台支付宝开放平台链接:https://open.alipay.com右侧直接支付宝扫码支付就完事了。登陆之后需要填写入驻信息,如果是个人开发者的话可以切换一下信息,默认为系统服务商,可自行切换到开发者身份。如下图所示。2. 进入沙箱环境登陆成功后,如下图所示,页面往下拉,找到开发服务>研发服务这就是沙箱环境的入口了,接下来就是需要设置一下参数了。3. 设置必要参数第一个需要设置的参数为RSA2(SHA25...原创 2021-03-14 12:31:39 · 4877 阅读 · 1 评论 -
xxl-job 不同版本的搭建
xxl-job简述XXL-JOB是一个轻量级的分布式任务调度平台,基于quartz实现,它修改了任务调度的模式,并且任务调度采用注册+RPC的方式实现。架构图xxl-job特性简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效调度中心HA(中心式):调度采用中心式设计,“调度中心”基于集群Quartz实现,支持集群部署,可保证调度中心HA(高可用)执行器HA(分布式):任务分布式原创 2021-03-14 12:20:44 · 2687 阅读 · 3 评论 -
java 生成二维码
生成带logo和文字的二维码pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://mave原创 2021-03-14 12:17:13 · 282 阅读 · 0 评论 -
dubbo调用 Bean被自动处理为HashMap类型
在dubbo调用端将List处理为JSON字符串JSON.toJSONString(plateList);然后在dubbo被调用端将JSON字符串转回ListJSONObject.parseArray(plateList, VehicleReq.class);原创 2021-03-14 12:11:00 · 1531 阅读 · 0 评论 -
java 获取两个List集合的交集
在使用retainAll方法时,不要直接使用Arrays.asList这种方式,可能会出现以下异常:System.out.println(Arrays.asList("101,105").removeAll(Arrays.asList("101,105")));原因:Arrays.asList() 返回的是Arrays的内部类ArrayList, 而不是java.util.ArrayList!正确姿势如下 : List<String> list1=ne.原创 2021-02-17 12:32:08 · 8961 阅读 · 0 评论 -
java 后端Long类型数据返回到前端精度丢失
问题简述Java后端的Long类型数据,传到前端会出现精度丢失(位数一样,但数据不正确),比如后端返回的数据为17位:52525415252525248,前端会变成17位的52525415252525240。虽然位数一致,但是数据不正确。问题原因对于前后台传参过程中的Long类型,JS内置有32位整数,而number类型的安全整数是53位。如果超过53位,则精度会丢失。如果后台传来一个64位的Long型整数,因为超过了53位,所以后台返回的值和前台获取的值会不一样。出现数据解析后不一致的问题原创 2021-01-26 21:14:18 · 3511 阅读 · 0 评论 -
java8 基本操作(持续更新)
1.取出list中元素某一属性的集合,比如取出所有的编号list.stream().map(User::getUserCode).collect(Collectors.toList());2.list<String>列表转字符串列表list.stream().collect(Collectors.joining(","));3.list转maplist.stream().collect(Collectors.toMap(User::getId, a -> a,(k原创 2021-01-26 21:05:19 · 290 阅读 · 1 评论 -
mybatis 生成器 数据库tinyint类型自动生成为boolean类型
在jdbc连接参数上加上以下内容?tinyInt1isBit=false原创 2021-01-23 21:15:04 · 531 阅读 · 0 评论 -
java getActualMaximum()方法
Calendar dateCalendar = Calendar.getInstance();dateCalendar.setTime(new Date());//假设当前时间为1月System.out.println(dateCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));//获取月中的天,取最大值,比如1月就是31System.out.println(dateCalendar.getActualMaximum(Calendar.DATE));/.原创 2021-01-20 09:47:25 · 7926 阅读 · 1 评论 -
mongo 数据导入导出
mongo 数据导入导出1.备份式导出全库数据(导出的数据库目录为xxx)mongodump -h ip:port -u username -p "passward" --authenticationDatabase admin -o E:\mongo-data-export2.导入集合数据到另一个库mongoimport --host 127.0.0.1 --port 27017 --db xxx --collection sys_dictionary E:\mongo-data-expor..原创 2020-12-13 19:43:44 · 206 阅读 · 0 评论 -
SQL中SUM()、AVG()、COUNT()对NULL值的处理
SQL中的SUM()、AVG()、COUNT()对NULL值的处理方式SUM() 该聚集函数可以用来对单个列求和,也可以对多个列运算后进行求和 当单列中含有NULL值的时候,SUM()会忽略该NULL值进行求和。如果涉及多列的求和运算,某一列的值为NULL,会忽略该组合列(多个参与求和的列),也即忽略该行,该行返回的求和数将为null。 AVG()AVG()和SUM()相同,也会忽略NULL值进行运算COUNT()这个聚集函数处理NULL值的时候就比较特殊了,有以下两种情况原创 2020-08-29 22:37:41 · 6039 阅读 · 0 评论 -
java 双冒号用法
JDK8中有双冒号的用法,形如Class::methodname,符号左边是调用方法所处的类名,符号右边是调用的静态方法。简单的说,就是逐一传入参数值到某个类的静态方法并调用该静态方法。以前的方式public static void printValue(String str){ System.out.println("print value : "+str);}public static void main(String[] args) { List<Str...原创 2020-08-29 17:36:48 · 6427 阅读 · 1 评论 -
java Collection.stream().map().collect()
Collection.stream().map().collect()先看一个类似结构的用法通过上图我们发现不管是这种结构还是Collection.stream().map().collect()这样的结构等等,它们都是分步骤处理的,比如图示中的就是先创建实例,然后当前Stream转换成另一个Stream,最后对新Stream中包含的内容进行某个处理操作。Collection.stream().map().collect()各部分说明steam():把一个源数据,可以是集合,数组,I原创 2020-08-29 17:25:31 · 2626 阅读 · 0 评论 -
GSON-使用指南(三)
本次的主要内容:字段过滤的几种方法 基于@Expose注解 基于版本 基于修饰符 基于策略 POJO与JSON的字段映射规则一、字段过滤的几种方法字段过滤Gson中比较常用的技巧,在处理业务逻辑时可能需要在设置的POJO中加入一些字段,但显然在序列化的过程中是不需要的,在序列化的过程中可能带来一个问题就是循环引用 ,那么在用Gson序列化之前为了不防止这样的事情发生,你不得不作另外的处理。以一个商品分类Category 为例:{ "id": 1, "name"原创 2020-08-23 11:06:42 · 351 阅读 · 0 评论 -
GSON-使用指南(四)
本次文章的主要内容:TypeAdapter JsonSerializer与JsonDeserializer TypeAdapterFactory @JsonAdapter注解 TypeAdapter与 JsonSerializer、JsonDeserializer对比 TypeAdapter实例一、TypeAdapterTypeAdapter 是Gson自2.1版本开始提供的一个抽象类,用于接管某种类型的序列化和反序列化过程,包含两个主要方法 write(JsonWriter,T) 和原创 2020-08-22 23:14:12 · 1865 阅读 · 0 评论 -
GSON-使用指南(二)
本次的主要内容:Gson的流式反序列化 Gson的流式序列化 使用GsonBuilder导出null值/格式化输出/日期时间及其它小功能一、Gson的流式反序列化自动方式Gson提供了fromJson()和toJson()这 两个直接用于解析和生成的方法,前者实现反序列化,后者实现序列化。同时每个方法都提供了重载方法,常用的总共有5个。Gson.toJson(Object);Gson.fromJson(Reader,Class);Gson.fromJson(Reader,Type)原创 2020-08-22 22:45:59 · 195 阅读 · 0 评论 -
DecimalFormat中#.00和0.##的使用
#:表示该位没有数字时填空显示,有则直接显示;出现在小数位部分时,n个#只保留n位有效小数(比如1.00不保留,1.11则保留)0: 表示该位没有数字时补零显示,有则直接显示;出现在小数位部分时,n个0表示保留n位小数另外,还有一个神奇的特例现象,不过总体表现就是上述的几个特点:#.00:小数点左边的#表示在没有数字时或只有个位且个位为零的时候填位为空 #.##:小数点左边的#表示在没有数字时填位为空 public static void main(String[] args) {原创 2020-08-20 23:59:02 · 12689 阅读 · 0 评论 -
mysql-视图入门(一)
视图简述MySQL视图是一个虚拟表,其内容由查询定义.同真实的表一样,可以显示查询列和数据行,但视图并不以数据行的形式存储于数据库中.一般用于保存复杂sql逻辑的实现,方便使用,且每次使用的时候都会进行sql的查询.视图实践ft_v_userCREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `ft_v_user` AS select `u`.`user_code` AS `us原创 2020-08-15 14:28:18 · 443 阅读 · 0 评论 -
GSON-使用指南(一)
JSON 是一种文本形式的数据交换格式,它比XML更轻量、比二进制容易阅读和编写,调式也更加方便。其重要性不言而喻。解析和生成的方式很多,Java中最常用的类库有:JSON-Java、Gson、Jackson、FastJson等,本次介绍的是Gson。GSON-基本类型的转换import com.google.gson.Gson;/** * @author ASUS 2020/8/10 22:19 */public class GsonTest { public static v原创 2020-08-10 23:59:56 · 1791 阅读 · 0 评论 -
com.alibaba.druid.pool.DruidDataSource : testWhileIdle is true, validationQuery not set
properties形式的相关配置#申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。default=truespring.datasource.druid.test-on-borrow=false#建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。default=falsespring.datasource.dr.原创 2020-07-30 12:17:25 · 11465 阅读 · 0 评论 -
java 枚举常量还能这么用
枚举类package com.atguigu.springcloud.alibaba;public enum Foo { //常量列表 VALUE_1 { public int myVariable = 1; }, VALUE_2 { int i=1; public int myMethod() { return 2; } }; public int myMe.原创 2020-07-25 18:11:58 · 618 阅读 · 0 评论 -
一文了解分布式事务、CAP原则、Base理论
什么是分布式事务?介绍这个之前,先来了解一下这几个问题什么是事务? 什么是本地事务? 什么是分布式? 什么是分布式事务?什么是事务?完成某件事情,需要执行多个步骤,最终多个步骤要么全部成功,要么全部失败。这个过程中可能有多个参与者。举个例子:微信上A给B转账100元,A账户减少100,B账户增加100,这就是一个事务,这个操作中要么都成功,要么都失败。事务的场景有很多,参与者也是多种多样用户注册成功发送邮件,包含2个操作:db中插入用户信息,给用户发送邮件,主..原创 2020-07-25 11:59:27 · 1232 阅读 · 0 评论 -
SpringCloud-Alibaba之nacos cluster环境搭建
linux-nginx+nacos+mysql环境搭建准备工作:1个nginx+3个nacos注册中心+1个mysql 下载linux版的nacoshttps://github.com/alibaba/nacos/releases/tag/1.1.4nacos-server-1.1.4.tar.gz集群配置 测试 高可用总结linux-nacos sql脚本(需创建好数据库)/******************************************//* 数据库原创 2020-07-24 23:08:00 · 320 阅读 · 0 评论