![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 66
CodeSerial
这个作者很懒,什么都没留下…
展开
-
阿里云依赖冲突 java.lang.NoSuchFieldError: REFLECTION
java.lang.NoSuchFieldError: REFLECTION原创 2022-11-09 20:13:41 · 691 阅读 · 0 评论 -
RBAC权限与shiro中登录与session的思考
RBAC权限与shiro中登录与session的思考1. 用户登录状态的思考1.1 Session参考多态电脑登录同一个用户/一台电脑登录多个用户服务端如何识别并处理?cookie/session 来保存交互记录从而实现更多功能Session 提供了一种用户跨多个页面请求/访问某个web 服务器的用户信息跟踪、识别机制。Session在网络协议中表示面向连接、保持状态的含义session的实现也许借助cookie在客户端保存标识以便用户身份认证1.2 cookie由浏览器存储的源原创 2021-12-10 14:12:13 · 1056 阅读 · 0 评论 -
Java Itextpdf 导出pdf
Java Itextpdf 导出pdf需求公司新需求:导出前端页面上的某个部分为pdf,由于涉及领导签名的图片以及只是页面的一部分而非整个页面 这个需求交给后端完成接下去我将以Java为基础讲述在服务端如何导出pdf思路使用itextpdf+原生Document编写过于麻烦需要掌握大量元素,在后端写前端页面使用itextpdf + pdf模板对基本字段替换支持较好样式不好看需要自己绘制模板,工具有限使用html模板+html转为pdf可以与前端同学配合完成cs原创 2021-11-18 17:27:33 · 1057 阅读 · 0 评论 -
3. JVM GC算法及具体垃圾收集器
3. JVM GC算法及具体垃圾收集器3.1 基础目标哪些对象(内存)需要回收什么时候回收如何回收GC和内存分配的作用当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。什么内存需要回收?jvm内存划分PC jvm虚拟机栈 本地方法栈 堆 方法区其中前三个随着线程的创建和消亡分别进行内存分配和回收 因此主要关注点放在堆和方法区3.2 对象已死?从上面的什么内存许要回收中我们知道许要回原创 2021-10-15 18:39:26 · 189 阅读 · 0 评论 -
java前中后 遍历 递归与非递归
public class TreeTraversal { public void preOrder(TreeNode root){ // 先序递归 if (root == null){ return; } // 根左右 每个节点都访问三次 System.out.println("root.val = " + root.val); preOrder(root.left);原创 2021-10-13 22:20:48 · 185 阅读 · 0 评论 -
2.JVM自动内存管理
2.自动内存管理2.1 概述Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。C++需要对构建的每个对象的生命周期进行管理和维护。Java把对象的生命周期(内存管理)交给了JVM,简化编码,但一旦出现问题则很难排查。2.2 运行时数据区Java运行时将内存分为不同区域以方便进行内存管理(例如垃圾回收)。分为线程私有和线程共享线程私有程序计数器本地方法栈虚拟机栈线程共享堆方法区2.2.1 程序计数器程序计数器原创 2021-06-17 23:17:20 · 335 阅读 · 3 评论 -
NGINX 实现jar包灰度发布
NGINX 实现jar包灰度发布1.目标实现jar包在服务器上部署不影响用户使用2.思路 部署多个服务,通过NGINX进行负载均衡,避免服务不可用,但任存在服务调用会出现成功/失败的切换 解决方案:通过心跳检测,尽可能实时的观察服务状态,如果服务不可用(在重新部署或其他故障),自动进行故障转移,将请求分发到可用服务上 Java热部署 本质通过运行时动态加载新的class文件实现,但实现困难,没有完整的支持java -jar的部署方式,并且生产环境基本不会用热部署,只.原创 2021-06-07 18:34:10 · 493 阅读 · 2 评论 -
shiro 登录流程源码分析
shiro 登录流程源码分析 获取subjectSecurityUtils.getSubject() 从ThreadContext获取subject 借助ThreadLocal实现线程私有 从线程私有变量的存储map中使用特定key(org.apache.shiro.util.ThreadContext_SUBJECT_KEY)获取subject对象 ThreadLocal#get()是从当前线程保存的私有map拷贝一个返回 ..原创 2021-06-03 20:14:16 · 231 阅读 · 0 评论 -
OkHttp在jdk11版本下升级变动
Caused by: java.lang.UnsupportedOperationException: clientBuilder.sslSocketFactory(SSLSocketFactory) not supported on JDK 9+获取不走X509证书认证的基于OkHttp的https请求调用客户端原创 2021-05-31 10:15:32 · 755 阅读 · 0 评论 -
shiro@RequiresPermission校验实现
shiro-spring借助Spring AOP特性实现shiro的注解式校验引入shiro-spring依赖后一定要注入AuthorizationAttributeSourceAdvisor以便借助spring aop进行shiro注解校验 @Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) ...原创 2021-05-29 14:52:15 · 1000 阅读 · 2 评论 -
idea出现decompiled .class file 解决方案
idea出现decompiled .class file 解决方案问题原因idea借助反编译插件从.class文件中获取的源码, 并不会携带javadoc。解决方案File->Project structure 选择本地jdk路径即可原创 2021-05-23 15:12:28 · 19131 阅读 · 3 评论 -
shiro用户信息自动更新并删除授权缓存
shiro用户信息自动更新并删除授权缓存业务场景一个权限管理系统下需要切换系统空间,此时需要更新登录用户在不同空间下的用户信息。一个用户在一个空间下会拥有特定的功能权限,因此切换空间的动作会引起当前登录用户功能权限变更。思路通过shiro框架进行登录用户权限管理每个登录用户在shiro中都使用Subject来标识根据subject获取principal将principal反序列化为存储用户信息的POJO对象修改对象中的某项参数达成更新不同空间下用户信息的需求删除用户之前的授权缓存,让下原创 2021-05-16 13:08:23 · 1832 阅读 · 1 评论 -
Redis Stream 消息队列的简单应用
Redis Stream 消息队列的简单应用目标借助Redis Stream构建一个简单消息队列有以下特点:拥有一个不断增长的队列,但支持容量限制自动缩容,避免超出内存限制,并支持配置化开启消息监听,支持 consumer group 监听队列手动确认与消息重试机制,消息被消费并不出现问题时手动确认消息消费,如果出现异常则通过补偿机制对未处理完成队列(pending list)中的消息进行重试。Redis Stream 基础概念介绍基本数据结构中间最核心的是一个基础的消息队列,队列中的原创 2021-04-17 16:12:31 · 780 阅读 · 0 评论 -
nacos 无法获取DATAID 配置刷新失败
遇到nacos上变更完后本地触发拉去动作,但无法获取DATAID的缓存导致本地刷新失败,引用@RefreshScope注解的目的在于 将某个类的scope声明为可刷新模式,spring boot默认的bean实例是单例模式以节省空间,而想动态加载配置文件就意味着某个bean需要刷新,因此需将Java类声明为@RefreshScope以达成此功能。但是版本不一致的清空下使用springboot2.4.3+spring cloud 2020.0.1 + nacos1.4.1 +spring cloud ali原创 2021-03-13 16:47:52 · 5384 阅读 · 0 评论 -
0311小结
0311定时任务先设定各自的开始时间后续用设计模式优化positivenegativecron简单更新冲突,统计必须晚于数据更新observer相对复杂在更新完后通知刷新数据由于事务的存在可能并不一定产生冲突等待数据运行及测试看成果观察者设计模式设定观察者接口,指定update方法具体实现类实现观察者接口,update方法调用具体事务,可为update方法开启事务避免无法使用事务设定subject类,维持observer接口obser原创 2021-03-11 20:06:11 · 90 阅读 · 1 评论 -
JVM_走近Java_ch.1
深入理解Java虚拟机世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程。当我们在使用一门技术时,不再依赖书本和他人就能得到这些问题的答案,那才算升华到了“不 惑”的境界。走近JavaJava技术体系Java程序设计语言·各种硬件平台上的Java虚拟机实现·Class文件格式 ·Java类库API·来自商业机构和开源社区的第三方Java类库我们可以把Java程序设计语言、Java虚拟机、Java类库这三部分统称为JDK(Java Development原创 2021-03-11 17:52:59 · 74 阅读 · 0 评论 -
数据库存储的多叉树遍历
多叉树遍历针对数据库仅由PID存储父子结构的情况递归遍历数据库全量取出数据根据pid找出第一批节点递归组装剩下节点遍历根节点,找到根节点的下一层节点深度优先遍历public List<Node> compositeChildren(Integer pid,List<Node> allNodes){ List<Node> children = new ArrayList<>(); // 找到下一层的子节点 allNod原创 2021-02-04 17:26:16 · 467 阅读 · 0 评论 -
XXL源码解析
源码分析目标:找出执行的故障转移及其他策略如何实现的(居然属于路由策略,去查看路由策略相关的源码由官方文档[执行器 RESTful API](https://www.xuxueli.com/xxl-job/#6.2 执行器 RESTful API)引发的源码阅读现在进度:找到了任务运行的源码,主要是密集调度时的阻塞处理策略分配方式、执行器ID及handler的优先级,具体执行方法handler发生变更时的变化,内部的任务存储容器,任务超时时间的设定、运行模式的匹配对运行产生的影响任务超时时间的设定与原创 2020-10-23 19:07:36 · 1285 阅读 · 0 评论 -
onjava8 函数式编程与流式编程
onjava8 函数式编程与流式编程函数式编程函数式编程允许用户将代码逻辑封装为函数并且将函数作为参数进行传递新旧对比代码:package priv.wzb.javabook.fp;/** * 一个接口 接收String类型的参数返回String类型的结果 */public interface Strategy { String approach(String msg);}/** * @program: Design_Pattern * @description: soft原创 2020-10-02 11:14:11 · 478 阅读 · 0 评论 -
Java的封装、继承、多态
封装Java通过不同的访问修饰符(access specifier)来实现访问控制或隐藏实现四种访问类型public任何类都能访问protected仅限继承关系或包内包访问权限 package access(没有关键字)不加修饰符的默认权限,包内访问权限private类内访问权限是否可以打破这种限制?答案是可以的,通过反射获取某个class的对象然后通过.setAccessible(true)方法打破访问权限package priv.wzb.javabase.re原创 2020-09-05 14:49:53 · 153 阅读 · 0 评论 -
原型模式(prototype pattern)
原型模式简介原型模式是一种个对象创建型模式,它的工作原理很简单:将一个原型对象传给要发动创建的对象(即客户端对象),这个要发动创建的对象通过请求原型对象赋值自己来实现创建过程。由于软件系统中经常会遇到需要创建多个相同或者相似对象的情况,因此原型模式在软件开发中具有较高的使用频率。元凶模式是一种另类的创建想模式,创建新对象(也称为克隆对象)的工厂就是原型类自身,工厂方法由负责赋值原型对象的克隆方...原创 2020-02-03 15:07:34 · 147 阅读 · 0 评论 -
基本计算器
基本计算器实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。示例 1:输入: “1 + 1”输出: 2示例 2:输入: " 2-1 + 2 "输出: 3示例 3:输入: “(1+(4+5+2)-3)+(6+8)”输出: 23说明:你可以假设所给定的表达式都是有效的。请不要使用内置...原创 2019-11-10 21:04:15 · 4050 阅读 · 4 评论 -
验证栈序列
验证栈序列给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2),...原创 2019-11-10 20:51:30 · 1573 阅读 · 0 评论 -
寻找两个有序数组的中位数
寻找两个有序数组的中位数参考:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-w-2/给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复...原创 2019-11-09 00:25:41 · 178 阅读 · 0 评论 -
KMP算法
# KMP算法起因:字符串匹配,使用暴力匹配匹配的时间较慢重复匹配了不需要匹配的东西快速字符串匹配算法–>KMP算法(KMP算法利用了已匹配字符子串中自身所蕴含的信息减少匹配次数)参考http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.htmlhttp://jake...原创 2019-11-07 16:11:42 · 427 阅读 · 0 评论 -
你如何理解AOP中的连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)这些概念?
你如何理解AOP中的连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)这些概念?切面(Aspect)比较大的概念, 是指连接点的集合可以形成。所有功能的总称叫切面。连接点(Joinpoint)在Spring AOP中代表一个方法的执行程序执行的某个特定位置(如:某个方法调用前、...原创 2019-10-27 23:15:10 · 1607 阅读 · 0 评论 -
JVM内存结构 VS Java内存模型 VS Java对象模型
JVM内存结构 VS Java内存模型 VS Java对象模型JVM内存结构(JVM内存分区图解Java代码运行在JVM虚拟机上,虚拟机在执行Java程序的过程中把所管理的内存划分为上述的不同数据区域,每个区域拥有自己的功能。1、以上是Java虚拟机规范,不同的虚拟机实现会各有不同,但是一般会遵守规范。2、规范中定义的方法区,只是一种概念上的区域,并说明了其应该具有什么功能。但是并没有...原创 2019-10-22 21:11:18 · 400 阅读 · 0 评论 -
请说明一下JAVA中反射的实现过程和作用分别是什么?
请说明一下JAVA中反射的实现过程和作用分别是什么?Java语言编译后形成.class文件,反射就是通过字节码文件找到一个类,类中的方法及属性等。反射的实现主要通过四个类Class 类的对象Constructor 类的构造方法Field 类的成员函数Method 类的成员方法反射机制能够在运行时获取类对类的一些信息进行修改从而使Java拥有了动态特性。由于反射的特性从而导致了其实pr...原创 2019-10-22 20:44:24 · 2403 阅读 · 0 评论 -
JAVA中如何确保N个线程可以访问N个资源,但同时又不导致死锁?
JAVA中如何确保N个线程可以访问N个资源,但同时又不导致死锁?使用多线程的时候,一种非常简单的避免死锁的方式:指定获取锁的顺序,并强制现场按照指定的顺序获取锁。因此,所有线程按照同样的顺序加锁和释放就不会出现死锁。产生死锁的四个条件互斥条件一个资源每次只能被一个进程使用,互斥条件是非共享设备所必须的,不仅不能改变还需要加以保证。请求和保持一个进程因请求资源而阻塞且对已获得的资...原创 2019-10-22 20:42:44 · 1266 阅读 · 0 评论 -
请简要说明一下JAVA中cyclicbarrier和countdownlatch的区别分别是什么?
请简要说明一下JAVA中cyclicbarrier和countdownlatch的区别分别是什么?CountDownLatch/*** CountDownLatch* A synchronization aid that allows one or more threads to wait until* a set of operations being performed in oth...原创 2019-10-21 18:18:13 · 1784 阅读 · 0 评论 -
请你解释一下什么是线程池(thread pool)?
请你解释一下什么是线程池(thread pool)?线程池的概念类似人才资源中心,原本每次要运行一个线程(公司找一个员工)都必须去创建(培养)一个员工才行,有了线程池之后就在线程池中准备了多个创建好的线程(培训好的员工)等待被调用在面向对象编程中,创建和销毁对象都是很费时间的,因为创建一个对象要获取内存资源或其他更多资源。在Java中更加如此,虚拟机将视图跟踪每一个对象,以便能够在对象销毁后进...原创 2019-10-20 20:17:16 · 2705 阅读 · 0 评论 -
java线程的基本状态以及状态之间的关系
初始,就绪,运行,阻塞,结束线程被创建出来后处于等待状态(new Thread调用线程的.start()方法后进入就绪状态(也就是可以运行的状态线程有等待状态转为运行态是通过CPU来决定的通常没办法让一个线程强制马上运行(即使Java中有设置运行优先级的方法,就算把优先级设置很高,也只是增加了让线程先运行的概率并不能保证一定先运行在运行态的线程可以通过调用yield()方法来使得从运行...原创 2019-10-20 19:37:01 · 561 阅读 · 0 评论 -
JDK1.8 HashMap源码分析(进行中...
JDK1.8 HashMap源码分析常量/** * The default initial capacity - MUST be a power of two. * 默认初始容量-必须是2的幂(2的n次方) */static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16/** * The maximum ...原创 2019-10-19 21:33:43 · 146 阅读 · 0 评论 -
请解释为什么集合类没有实现Cloneable和Serializable接口?
这个问题说的不清楚,集合类框架中的接口没有实现Cloneable和Serializable接口,但是具体的实现类是实现了这些接口的,比如Arraylist。接口,比如collection list iterable克隆(cloning)或者序列化(serialization)的予以和含义是根具体的实现相关的。因此,应该由集合类的具体实现来决定如何被克隆或者是序列化。实现Serializabl...原创 2019-10-18 21:11:42 · 1436 阅读 · 0 评论 -
网络交互与线程同步
网络交互与线程同步有以下场景一个子线程中有两个网络请求任务,一个任务必须在另一个任务完成后才可以继续执行。解决方法使用CountDownLatch+Thread具体示例如下:public class SaveMSThread implements Runnable { private Handler handler; int insCount = 0; // 用于保...原创 2019-10-17 23:41:07 · 124 阅读 · 0 评论 -
Android AsyncTask与Thread+Handler的分析
Android AsyncTask与Thread+Handler的分析基本概念public abstract class AsyncTaskextends Objectjava.lang.Object↳android.os.AsyncTask<Params, Progress, Result>通过AsyncTask,可以正确,轻松地使用UI线程。 此...原创 2019-10-17 23:34:09 · 228 阅读 · 0 评论 -
什么是值传递和引用传递
引用传递等于是传递了一个句柄Java是值传递值传递是对于基本类型而言的,所传递的是一个基本数据类型的副本,改变副本不改变原变量引用传递一般是对于对象变量类型而言的,传递的是该对象地址的一个副本,而不是源对象本身,所以引用传递的对象改变会改变源对象。参考:https://juejin.im/post/5bce68226fb9a05ce46a0476如果传递的是primitive基本数据类...原创 2019-10-12 22:46:19 · 856 阅读 · 0 评论 -
Thymeleaf在后台获取数据在前台显示
Thymeleaf在后台获取数据在前台显示以及 JavaScript根据获取的数据进行分页初始化后台也设计了分页后台分页:通过pagehelper插件实现后台数据库分页在2019.3.19中有具体描述Pagehelper先正常的通过mybatis的mapper设置查询所有设置的sql语句与方法然后通过配置设置在mysql查询时自动使用pagehelper拦截器然...原创 2019-07-08 14:12:07 · 17898 阅读 · 0 评论 -
LeetCode的算法前三题(java实现)
LeetCode的算法前三题第一题与第二题只有自己的暴力求解要看官方代码请自己去leetcode查看也有中文版的1.two_sum给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15],...原创 2019-07-18 17:32:52 · 162 阅读 · 0 评论 -
工厂模式
Design PatternFactory Pattern设计模式 工厂模式工厂模式主要用于控制类生产的过程,避免客户类直接去使用具体类通过中间件工厂来降低耦合性。简单工厂模式(Simple Factory Pattern)UML图解(类图与时序图)[外链图片转存失败(img-qpWQf8H5-1563874564660)(C:\Users\DELL\AppData\Roaming\T...原创 2019-07-23 17:36:13 · 102 阅读 · 0 评论