
java
文章平均质量分 75
java相关问题
之诚
期待改变命运
展开
-
EasyExcel使用管道流连接InputStream和OutputStream
Java中的InputSteam是程序从其中读取数据,是程序可以往里面写入数据。如果我们有在项目中读取数据库的记录, 在转存成Excel文件, 再把文件转存到OSS中。生成Excel使用的是阿里的EasyExcel。他支持Output的方式写出文件内容。而我使用的OSS的Client却只支持InputSteam的方式传入内容。这就需要我把excel的数据流从传输到中了。这就要用到JAVA中的管道流功能了。原创 2024-12-12 19:59:55 · 621 阅读 · 0 评论 -
LogBack的日志报错解决办法 org.xml.sax.SAXNotRecognizedException
LogBack的日志报错解决办法 org.xml.sax.SAXNotRecognizedException原创 2023-11-10 18:38:53 · 2207 阅读 · 3 评论 -
Incompatible because this component declares an API of a component compatible with Java 异常
No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.0.1 was found. The consumer was configured to find a runtime of a library compatible with Java 11, packaged as a jar, and its dependencies declared externally, as well as attribute原创 2023-09-06 18:15:37 · 3062 阅读 · 0 评论 -
任务加入线程池是的生效和启动过程详解
前言很早之前我就写过两篇关于线程池的博客, 但是这两篇博客的认识比较浅陋, 有很多需要订正的地方, 所以我决定新开一篇博客.https://blog.youkuaiyun.com/leisurelen/article/details/107872827https://blog.youkuaiyun.com/leisurelen/article/details/107872827在这里我先简单描述下线程池的工作流程加入一个Task, 如果没有达到核心线程数, 启动一个新Worker执行这个Task再加入一个Task原创 2021-12-16 20:29:07 · 3066 阅读 · 0 评论 -
基于AOP的Controller接口脱敏方式
目录前言常见方案方案一方案二方案三实现方式两个注解类切面类脱敏序列化类接口类接口调用踩过的坑前言我们的后台系统收到了数据脱敏的需求, 要求在一些关联页面的手机号, 收货地址等重要信息需要进行脱敏显示. 所以才有了这个脱敏方案常见方案方案一在关键的DTO 和VO上增加注解, 然后这些对象通过接口返回调用者的时候, 会屏蔽掉注释字段的值.优点:只要增加了注释, 所有的返回这个对象的接口都会屏蔽, 不用每个接口单独写代码缺点:无法针对特定的接口精细化控制返回的前端的DTO对象是其原创 2021-09-06 19:26:29 · 1826 阅读 · 3 评论 -
TeamCity的安装(docker) 构建 和 部署 (1)
前言没有其他的目的, 就是想折腾.安装查看官网看到提供有docker镜像, 那就简单了.配置安装docker镜像按照docker hub 中的文档操作,# 下载镜像docker pull jetbrains/teamcity-server# 运行镜像docker run -it --name teamcity-server-instance \ -v /home/xiezc/teamcity/data:/data/teamcity_server/datadir \ -v原创 2021-04-03 23:01:09 · 3481 阅读 · 0 评论 -
Nacos的Docker部署
nacos 是alibaba 出品的一个服务注册和发现的服务, 同时也支持配置管理功能, 能很好的整合进SpringCloud中实现注册中心的功能.文档地址:https://nacos.io/zh-cn/docs/what-is-nacos.html中文文档, 看起来清楚明白有舒心源码直接部署是java项目, 按照文档中操作即可. 安装包中直接有启动脚本, 不细说了.https://nacos.io/zh-cn/docs/quick-start.htmlDocker方式部署这是我最喜欢原创 2021-02-08 17:38:51 · 1040 阅读 · 0 评论 -
设计模式的六大原则
程序开发中, 需要使程序有高内聚, 低耦合的特性,才会使得程序易维护, 可扩展, 又可靠。 而如何保证程序符合这个要求呢? 我们则设计中需要尽量遵守6大原则。单一职责原则对类来说, 一个类只负责单一职责。 当然也可以宽泛的说, 微服务中一个服务只负责单一的功能。 对于数据库来说, 一个库只负责记录单一的一类数据。这个原则的理解很简单,但是难的地方就是则单一职责的划分上。现实中往往有很多的类即属于职责A 又可以归类于职责B, 此时很难划分职责。也有可能如果强行遵守单一职责原则,代码的调用组织就很麻烦原创 2021-01-03 17:33:17 · 267 阅读 · 0 评论 -
JVM的内存的自己理解
目录堆(Heap)新生代和老年代。程序计数器方法区虚拟机栈本地方法栈java程序运行过程启动申请内存加载class执行main方案思考跨平台垃圾回收严谨的语言格式规范jvm的内存基本就是这五个分区, 不同版本中方法区是有变动的。堆(Heap)java 中最大的一块内存空间, 内部会进行分代。新生代和老年代。新生代和老年代的大小比例建议为1:2。 如果比例不对会出现问题,我就遇到过xmx=512M xmn=384M的配置的情况。 运行一段时间后,jvm进程自动结束了。 查看GC日志发现频繁的原创 2020-09-22 23:01:01 · 318 阅读 · 0 评论 -
java一个“批处理”工具类
前言我们在日常的开发中有时候会面临着大批量的执行某个方法的时候,我们有时候会需要把一个大的任务拆分成小的任务执行,这个时候我提供的工具就派上用场了下面的工具支持同步的拆分执行和通过线程池异步执行.本工具充分利用了java的泛型和lambda表达式, 可以执行各种批量的业务逻辑,但是使用异步方式的时候要注意线程安全的问题。使用方式同步方法的使用方式这个是批量的从数据库中查询出数据的使用方式 List<DialBookDO> dialPlanPhoneBookDOList = Batc原创 2020-08-27 20:04:25 · 793 阅读 · 0 评论 -
几种常见垃圾收集器理解
简单的讲述下几种垃圾回收器, 其中包含很多我的个人理解,难免有错漏之处, 欢迎指正借用一张图新生代的垃圾收集器Serial 和ParNew单线程和多线程的垃圾收集器, 可以配合CMS使用, 在回收的时候会暂停整个应用。Parallel Scavenge多线程的垃圾收集器, 他是控制吞吐量来减少停顿的垃圾收集器。 每次发生垃圾回收操作的时候, 如果把新生代的垃圾全部回收完这需要消耗太多的时间了, 那么我们设置一个吞吐量,当回收到一定量的时候就结束垃圾收集动作, 这样就相当于控制了垃圾收集的原创 2020-08-12 23:03:28 · 566 阅读 · 0 评论 -
JVM的类加载机制和加载器的理解
JVM的类加载机制Class的载入7大阶段加载: 从文件或者其他地方将一个类的字节信息加载到内存中,验证:验证字节信息是否符合虚拟机的规范,防止格式不对的字节码信息载入到虚拟机中准备:开始在内存中准备一些静态变量区域,并且给这些变量赋初始值。 比如Int的初始值为0解析: 替换符号引用为直接引用。比如: 类中是通过类名来关联其他类的, 但是类名无法表示其他类的在内存中的位置, 这一步就是把类名替换成真正的类在内存中的应用。初始化: 在前面已经为类在内存中开辟空间了, 这一步就是把类中定义的静态原创 2020-08-12 22:03:04 · 303 阅读 · 0 评论 -
OOM问题排查中Jstat,jstack,jmap和MAT等工具的使用
出现OOM问题后, 我们如何排查问题的出现点呢? 在这篇博客中我只是简单的说下如何排查问题的。找到问题进程ID第一步都是确定你的服务的进程id,有两种linux指令使用,top命令使用top -c 会列出当前的进程列表:如果你的应用出现问题,cpu占用很高, 内存占用也很高的话, 你的进程就会排在很前面。 在图中列表的第一列就是进程的id关于其中的图中各个参数的意义 可以参考: https://blog.youkuaiyun.com/yjclsx/article/details/81508455ps原创 2020-08-12 16:26:41 · 3247 阅读 · 0 评论 -
分布式事务的四种方式方案的优缺点
目录2pc 两阶段提交方案第一阶段: 准备阶段第二阶段 : 提交阶段2PC的优劣优点:缺点:3PC三阶段原创 2020-08-09 23:14:32 · 2652 阅读 · 1 评论 -
java的线程池的使用推荐方式
目录问题说明代码验证:创建全局的线程池。线程池是一个很好的使用线程的方式, 但是如果使用不当还是会引起问题的。问题说明当一个对象变成垃圾后会被垃圾对象回收, 其内部的成员变量自然也会被回收, 但是如果成员变量是线程池, 那么这个就会出现问题。线程池使用后内部还是会维护核心线程存活,而存活的线程不是垃圾对象,反而线程可以作为GC Roots如果确实需要局部使用线程变量,请在使用完后一定要调用shutdown方法。 调用了这个方法后,线程池的中的线程不会再维护存活了,可以回收了。 shutdown方原创 2020-08-08 15:19:52 · 2048 阅读 · 1 评论 -
阿里为何不推荐使用Executors来创建线程池
目录线程池的启动流程任务的加入流程:定时任务线程池:线程池中线程数的设置多少合理Executors 线程池创建工具Executors.newCachedThreadPool()Executors.newSingleThreadExecutor()Executors.newFixedThreadPool(3)Executors.newScheduledThreadPool(1)不推荐使用Executors来创建线程池Executors.newCachedThreadPool()Executors.newFix原创 2020-08-08 00:55:56 · 4412 阅读 · 2 评论 -
分布式唯一性id生成方案 ------- 百度的UidGenerator
在分库分表中必定会面临着一个问题, 就是如何快速高效的生成唯一性ID。 而网络上也有一些通用的解决方案:使用uuid作为主键优点:不用依赖任何第三方, 每台应用都能独立生成;生成的id重复率极低, 并且无法被人猜测到缺点:生成的id是字符串,不是数字,难以比较大小生成的不是有序增长的, 在很多的查询中不方便生成的长度过长使用数据库自增序列, 只是步进长度不同这种方式也只用依赖数据库就可以了, 不用在引入过多的依赖。优点:不用引入过多依赖绝对不会重复, 依赖各自的数据库,效原创 2020-08-07 16:11:55 · 2461 阅读 · 0 评论 -
java面试的知识点和我的回答
java基础知识Java 的基本语法都要了解,并发编程、NIO、JVM 等,你多少要有点儿了解,Spring、Netty 这些框架也要了解。String类为何要设计成final不可变的?答:String类是java中最常用的类, 并且String可以表示任何的数据。 所以java对于String类做了还多的优化,其中之一就是不可变, String 的 intern() 的方法会把字符串添加到常量池中。 new的方式会新生成常量池, 一艘字符串不建议使用new的方式, 建议直接使用引号。 new Str原创 2020-07-30 17:17:18 · 516 阅读 · 0 评论 -
ThreadLocal原理详细说明
1.ThreadLocal 是什么?ThreadLocal 是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,适用于各个线程不共享变量值的操作。2.ThreadLocal 工作原理是什么?ThreadLocal 原理:每个线程的内部都维护了一个 ThreadLocalMap,它是一个 Map(key,value)数据格式,key 是一个弱引用,也就是 ThreadLocal 本身,而 value 存的是线原创 2020-07-29 23:17:35 · 551 阅读 · 0 评论 -
线程中断的方法
stop方法停止线程是不安全的方法, 是通过异常来停止线程的, 线程捕捉到异常后会释放所有的锁后停止线程, 释放所有的锁就会有问题,interrupt 方式停止线程实际上是 通过线程停止标识来停止线程的, 线程在sleep和wait等阻塞函数的时候会一直 不断的轮询标识, 如果标识改变了就会终止线程. 至于他抛出的异常是主动抛出的, 并且需要显式的捕捉处理的1、为什么废弃Thread的stop函数?对于有多线程开发经验的开发者,应该大多数在开发过程中都遇到过这样的需求,就是在某种情况下,希.原创 2020-07-29 22:54:09 · 507 阅读 · 0 评论 -
为什么集合类没有实现Cloneable和Serializable接口?
克隆(cloning)或者是序列化(serialization)的语义和含义是跟具体的实现相关的。因此,应该由集合类的具体实现来决定如何被克隆或者是序列化。克隆分为深拷贝和浅拷贝, 具体的拷贝实现需要用户自己根据对象的特性来实现, 集合类又是一个容器, 会装载不同的对象(各种各样的). 不可能每个对象都实现克隆,序列化也是同样的道理查看ArrayList 看到起实现了这两个接口, 所以集合类有实现ArrayList中clone方法 先是使用super.clone()方法生成一个另外一个 新A原创 2020-07-29 22:37:51 · 1906 阅读 · 0 评论 -
源码分析ReentrantReadWriteLock
查看两个类的定义两个类的定义几乎一模一样, 都继承自java.lang.AbstractStringBuilder类,父类AbstractStringBuilder内部和String一样,都维护了一个char数组和count长度两个变量, 但是它的数组没有使用final修饰, 所以这个数组是可以改变的,而StringBuilder的可变长度就是通过改变扩展这个数组来实现的, 实现原理很像ArrayList;最常用的append方法StringBuffer的append方法: @Over原创 2020-07-28 17:02:17 · 355 阅读 · 0 评论 -
如何获取ClassPath路径下的配置文件
通常我们获取classpath路径下的文件使用如下的方式:public class FileLoader { public boolean exists() throws IOException { InputStream resourceAsStream = this.getClass().getResourceAsStream("/BaseMapper.xml"); if (resourceAsStream == null) { retu原创 2020-06-16 09:53:22 · 3684 阅读 · 0 评论 -
Dubbo的IllegalArgumentException问题的解决
IllegalArgumentException: @Service interfaceClass() or interfaceName() or interface class must be present! 异常引发的思考问题。原创 2020-05-22 17:36:21 · 6535 阅读 · 0 评论 -
发布包到maven公共仓库图文教程(2) --- gpg签名和pom.xml的配置等
在操作这篇文章之前你需要做一些账号注册和提交申请前置操作, 前置操作我已经写了另一篇博客, 请移步 链接在此。这篇接着讲如何使用gpg和和配置发布信息。 因为内容有点多, 所以最重要的打包和发布环节在第三篇博客中讲解,敬请期待。各位读者,能否给我这个小博主一个关注点赞,谢谢。目录申请账号提交申请GPG签名使用下载安装 GPG生成秘钥项目的pom文件的配置基本信息licenses 证书信息scm软件配置管理插件配置开发者信息distributionManagement配置仓库信息build打包配置pro原创 2020-05-22 00:38:46 · 5344 阅读 · 0 评论 -
造轮子,实现一个spring类似框架
框架代码不多,十分简单。 实现了类似spring的功能,整合了mybatis和netty.原创 2020-05-21 19:25:25 · 4901 阅读 · 5 评论 -
发布包到maven公共仓库图文教程(1) --- 注册账号和提交申请
当你有个很好的想法, 写了一个开源的项目,想发布到仓库给别人用的时候, 你可能就需要这篇教程。发布jar包主要分以下几步。申请账号提交申请GPG的安装使用打包上传发布申请账号打开网址: https://issues.sonatype.org/secure/Dashboard.jspa这个网址打开会有点慢, 如果不能打开就需要一些科技了。 毕竟国外的网络只能这样。 因为我已经注册了账号并记住密码了, 所以图中账号密码自动填写了。注册账号点击sign up 链接会跳转到注册信息填写页面原创 2020-05-21 00:56:54 · 4973 阅读 · 3 评论 -
java正则表达式使用注意事项, demo
java中的正则表达式的简单实用demo需要注意项:java中的反斜线需要两个在获取配置项是需要先调用matcher.matches() 和matcher.find()中的一个方法来判断 匹配中了没有表达式的初始化可以放在成员变量中, 没必要重复初始化可以先在一些在线正在表达式网站上面先调试好正则 public static void main(String[] args) { //可以把这句放在类的成员变量中, 因为每次生成对象耗费资源。 并且正则表达式是线程安全的原创 2020-05-18 16:59:11 · 3563 阅读 · 0 评论 -
ReentrantLock源码简单分析
ReentrantLock 能用于更精细化的加锁的Java类, 通过它能更清楚了解Java的锁机制ReentrantLock 类的集成关系有点复杂, 既有内部类, 还有多重继承关系原创 2020-05-11 20:27:18 · 3487 阅读 · 0 评论