![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA基础
JAVA基础
球球罐罐
我若精彩,天自安排
展开
-
Docker openjdk java AES 解密报错
java AES 解密报错java.security.InvalidKeyException: Illegal key size or default parameters报错信息java.security.InvalidKeyException: Illegal key size or default parameters at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1026) at javax.crypto原创 2022-05-31 10:02:48 · 1111 阅读 · 0 评论 -
区域教育应用中心建设的心得
应用得有版本有插件;版本:大版本 ,小版本, 定制版场景如下:1.A开发商在应用中心上架了一个应用, 安装给部分学校单位了;2.使用一段时间后, B学校提了一个需求, A开发商迭代了一个新版本; 想要上架;此时有三种操作可能一. 重新上架一个应用重新上架一个应用 , 应用中心就会有俩个此应用, 这样显然不符合初衷, 也不友好; 长此以往的迭代, 应用中心惨不忍睹;二. 覆盖原应用上架覆盖原应用上架, 强制其他学校也升级, 这样做相对于让所有学校接受了B学校提出的需求, 不符合实际场景; 很原创 2021-12-23 09:33:11 · 180 阅读 · 0 评论 -
设计集成万能单点登录注意事项
设计单点登录需要注意什么1 登陆方式2 客户端类型 如:电脑端WEB/手机端WEB/APP/IPAD3 客户端种类 如: QQ/企业微信/微信小程序4 客户端唯一标识 如: 企业微信id/ 小程序id5 扩展字段: 一般第三方会在url中返回携带用户一次性凭证;对于多身份系统,有时候单点登录需要定位到具体类型的身份信息; 还有一些发布给第三方的链接; 当用户访问该链接时,如果未登陆 还需要走第三方登录理解;6 需要身份定位字段...原创 2021-11-11 21:17:31 · 141 阅读 · 0 评论 -
WEB接口安全怎么做总结
下面我们就来讨论下常用的一些API设计的安全方法,可能不一定是最好的,有更牛逼的实现方式,但是这篇是我自己的经验分享.一、token 简介Token:访问令牌access token, 用于接口中, 用于标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请一个接口调用的账号,服务器会给出一个appId和一个key, key用于参数签名使用,注意key保存到客户端,需要做一些安全处理,防止泄露。Token的值一般是UUID,服务端生成Token后需要原创 2021-02-25 09:21:38 · 574 阅读 · 0 评论 -
记一次服务器CPU高,内存高的解决
一 后台服务器问题排查步骤java后台服务故障排除网络与硬件故障外;可能出现以下问题:1),CPU过高:例如gc频繁,代码循环逻辑,高并发;2),内存过高:例如频繁创建对象,内存泄露等这里会有俩种情况,一种报oom,一种导致系统卡,访问等待.3),IO过高:例如持续磁盘读写,这种情况目前还没有发生过;4), 硬盘空间满了,这种情况一般系统访问不了;好排查;针对以上情况我们有以下定位问题步骤二 cpu过高CPU过高一般是有gc频繁或代码里有循环逻辑导致;第一步: top命令定位进程确认是哪个原创 2020-12-09 14:41:43 · 787 阅读 · 0 评论 -
操作日志的使用
系统框架zw-edu-framework-base增加了日志明细记录的支持具体使用如下业务系统添加maven依赖,一般都添加了的<dependency> <groupId>com.weiyan.zw</groupId> <artifactId>zw-edu-framework-base</artifactId></dependency>系统使用任何需要进行日志记录的类中引入LogClient。例..原创 2020-10-27 17:27:47 · 363 阅读 · 0 评论 -
JVM知识汇总——学习入口
java程序执行过程 java文件经过编译器生成字节码文件(.class); 字节码文件 》》CPU指令集:字节码(.class)文件并不能直接被CPU执行,要想成为可被cpu执行的指令,它需要经过字节码解释器;这就是java不依赖操作系统的原因,不同的操作系统安装了不同的jdk,这样字节码经过解释器就生成了不同操作系统的cpu指令了。 类加载的过程j...原创 2020-02-19 22:40:24 · 191 阅读 · 0 评论 -
GC 主要的四种算法
程序在运行过程中,会产生大量的内存垃圾(一些没有引用指向的内存对象都属于内存垃圾,因为这些对象已经无法访问,程序用不了它们了,对程序而言它们已经死亡),为了确保程序运行时的性能,java虚拟机在程序运行的过程中不断地进行自动的垃圾回收(GC)。关于 JVM 的 GC 算法主要有下面四种:引用计数算法(Reference counting)算法思想:每个对象在创建的时候,就给这个对象绑定...转载 2020-01-12 13:21:04 · 4161 阅读 · 0 评论 -
深入理解Java Stream流水线
Stream API ,用起来真的很爽,但简洁的方法下面似乎隐藏着无尽的秘密,如此强大的API是如何实现的呢?Pipeline是怎么执行的,每次方法调用都会导致一次迭代吗?自动并行又是怎么做到的,线程个数是多少?本节我们学习Stream流水线的原理,这是Stream实现的关键所在。首先回顾一下容器执行Lambda表达式的方式,以ArrayList.forEach()方法为例,具体代码如下...转载 2020-01-06 11:30:28 · 130 阅读 · 0 评论 -
Object类的wait/notify和LockSupport(park/unpark)的区别
Object中的wait()和notify()使用注意事项:1、因为wait需释放锁,所以必须在synchronized中使用(没有锁时使用会抛出IllegalMonitorStateException)2、notify也要在synchronized使用,并且应该指定对象3、synchronized(),wait(),notify() 对象必须一致,一个synchronized()代码块...原创 2020-01-05 22:03:39 · 1270 阅读 · 0 评论 -
JAVA CAS-ABA的问题解决 AtomicStampedReference
在说AtomicStampedReference前,我们回顾一下CAS是什么?CAS 是Compare-And-Swap的简写即对比交换,它在保证数据原子性的前提下尽可能的减少了锁的使用 也就是我们经常是的乐观锁 ;目标值 期望值。Java中实现CAS主要还是依赖unsafe类提供的底层方法,看源码我们可知其都是native 方法;所以说是原子性操作public final native...原创 2020-01-04 23:03:54 · 212 阅读 · 0 评论 -
【死磕Java并发】限流的方式总结
对于一个应用系统来说一定会有极限并发/请求数,即总有一个TPS/QPS阀值,如果超了阀值则系统就会不响应用户请求或响应的非常慢,因此我们最好进行过载保护,防止大量请求涌入击垮系统。如果不知道自己应用TPS/QPS阀值的,可以看下我的另外一篇博文。那么常用的限流方法有容器限流常用的有tomcat容器最大线程数,最大连接数,nginx 限制ip的链接和并发等;tomcat参数配置...原创 2020-01-04 13:37:34 · 556 阅读 · 0 评论 -
ArrayList 坑 的引发思考
单线程 ArrayList.remove()的坑 public static void main(String[] args) { singleThread(); } public static void singleThread(){ ArrayList<String> list = new ArrayList<Str...原创 2019-12-20 11:14:31 · 592 阅读 · 0 评论 -
spring-cloud-starter-oauth2与swagger2.4.0 大坑 password密码模式登录不了
一切配置正常,某天某月同事优化界面 感觉swagger2.8.0版本管理页面升不好看,于是改成了 swagger2.4.0;奇怪的申请发生了;前端登录请求总是不支持password模式;客户端模式正常;{ "error": "unsupported_grant_type", "error_description": "Unsupported grant type: p...原创 2019-12-17 15:42:13 · 1599 阅读 · 0 评论 -
tomcat 日志分割 按天输出
接手公司一个老项目,查看tomcat 服务器硬盘爆满,全部是删除未清除的tomcat 日志文件;一个文件高达60G 我也醉醉的了;当时那心呀;废话不多说 赶紧对于日志分割配置;第一步:安装cronolog下载安装包wget https://files.cnblogs.com/files/crazyzero/cronolog-1.6.2.tar.gz解压编译安装tar z...原创 2019-12-16 11:44:41 · 1629 阅读 · 0 评论 -
Linux下安装jdk8步骤详述
0.下载jdk8登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html选择对应jdk版本下载。(可在Windows下下载完成后,通过文件夹共享到Linux上)1. 登录Linux,切换到root用户su root 获取root用户权限,当前工转载 2017-04-20 21:40:21 · 774 阅读 · 0 评论 -
java 开发遇到的坑
一、数据库问题1、MySQL max_allowed_packet设置及问题1、mysql根据配置文件会限制server接受的数据包大小。有时候大的插入和更新会被max_allowed_packet 参数限制掉,导致失败。查看目前配置show VARIABLES like '%max_allowed_packet%';设置配置方法1可以编辑my.cnf来修改(win翻译 2017-06-08 11:08:26 · 442 阅读 · 0 评论 -
java.io.IOException 断开的管道 解决方法 ClientAbortException: java.io.IOException: Broken pipe
重复请求下载 这个异常非常多,看报错信息,是tomcat的connector在执行写操作的时候发生了Broken pipe异常,connector是tomcat处理网络请求的,难道是网络出问题了,但是为什么发生异常的都是写,读就没问题呢?为了判断是不是网络问题,于是用wget命令访问了一下服务器的一个接口,结果发现等了好久都没有响应,正常情况下应该是马上就有响应的,这说明不是网络的原原创 2017-12-08 13:49:28 · 4025 阅读 · 0 评论 -
spring,mybatis事务管理配置
spring,mybatis事务管理配置与@Transactional注解使用[转]spring,mybatis事务管理配置与@Transactional注解使用概述事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。Spring Framework对事务管理提供了一致的抽象,其特点如下:为不同的事务API提供一致的编程模型,比原创 2017-11-16 16:25:32 · 267 阅读 · 0 评论 -
怎样编写高质量的Java代码
代码质量概述怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行一些粗略的介绍。也请有过代码质量相关经验的朋友提出宝贵的意见。代码质量所涉及的5个方面,编码标准、代码重复、代码覆盖率、依赖项分析、复杂度分析。这5方面很大程序上决定了一份代码的质量高低。我们分别来看一下这5方面:编码标准:这个想必原创 2018-01-26 13:50:52 · 238 阅读 · 0 评论 -
四种线程池的使用
Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。newSingl...转载 2018-03-28 09:20:39 · 208 阅读 · 0 评论 -
【死磕Java并发】--深入分析volatile的实现原理
通过前面一章我们了解了synchronized是一个重量级的锁,虽然JVM对它做了很多优化,而下面介绍的volatile则是轻量级的synchronized。如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度。Java语言规范对volatile的定义如下:Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,...原创 2018-03-29 13:48:37 · 191 阅读 · 0 评论 -
【死磕Java并发】--Java内存模型之happens-before
在上篇博客(【死磕Java并发】—–深入分析volatile的实现原理)LZ提到过由于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题。那么我们正确使用同步、锁的情况下,线程A修改了变量a何时对线程B可见?我们无法就所有场景来规定某个线程修改的变量何时对其他线程可见,但是我们可以指定某些规则,这规则就是happens-before,从JDK 5 开始,JMM就使用h...原创 2018-03-29 13:49:29 · 158 阅读 · 0 评论 -
spring 4.2 版本以下的vue跨域问题解决
如果是 spring 4.2 版本以上的跨域问题解决, @CrossOrigin注解既可注解在方法上,也可注解在类上。我主要说 springmvc 4.1 以下版本的处理方式拦截器中放过options校验请求 // 拦截器中判断,如果请求方式 是 options 直接放回false 不请求业务代码 String m = request.getMethod(); ...原创 2018-12-24 15:22:19 · 577 阅读 · 0 评论 -
java 实现 :Base64字符串 和 文件(图片,pdf 等)之间的相互转换
import java.io.BufferedInputStream;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;impo...原创 2019-01-17 14:41:16 · 13980 阅读 · 0 评论 -
安全扫描漏洞解决
Appscan漏洞已解密的登录请求该漏洞,可能会窃取诸如用户名和密码等未经加密即发送了的用户登录信息;整改方案:1.对于用户名和密码等敏感信息,字段名匿名, 字段内容行非对公私钥加密处理;2.采用post请求;3.启用https协议;SQL注入漏洞在系统部分url处存在该漏洞,该漏洞可能会查看、修改或删除数据库条目和表;整改方案:1.请求参数进行过滤一些非法的...原创 2019-05-24 09:34:50 · 7382 阅读 · 0 评论 -
window 下安装jdk (java环境)
首先上甲骨文公司的官方网站下载JDK的安装包,根据自己电脑的操作系统选择正确的版本下载。不知道下载地址的同学可以百度一下很快就能搜到。下载还的安装包如下图所示。2用鼠标左键双击JDK安装包,会出现下图所示的安装界面。3其实上面那个步骤是在加载配置,为安装JDK做前转载 2017-01-09 17:05:05 · 484 阅读 · 0 评论