Java
文章平均质量分 63
Java中的基础内容
江湖人称小程
踏实一点,不要着急。你想要的岁月都会给你。
展开
-
Nginx 启动失败和转发请求失败问题解决
Nginx 启动失败和转发请求失败问题解决原创 2022-06-06 14:08:43 · 3566 阅读 · 1 评论 -
Java后端与Vue前端导出Excel表格文件并解决乱码和文件打不开
Java 需要用到 poi 两个依赖包,Maven如下:<!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>5.0.0</version></depende原创 2021-11-26 14:42:42 · 9057 阅读 · 4 评论 -
Java和命令行实现Redis的发布订阅
一、命令行实现 Redis 的发布与订阅1. 开启订阅者窗口与发布者窗口开启几个 Redis 客户端,一个作为发布者,其余作为订阅者。2. 订阅者订阅指定频道订阅频道使用的命令:subscribe channel[channel…]它的作用是:订阅一个或多个频道的信息返回值:订阅的消息3. 发布者向指定频道发布消息消息发布使用命令:publish chanel message它的作用:将message消息发送到channel频道。message是要发送的消息,channel是自定义的频原创 2021-05-12 17:49:41 · 762 阅读 · 0 评论 -
MySQL从5.7升级到8.0.X后Java Spring无法连接到数据库问题整理
问题一:新的SpringBoot项目能够正常连接MySQL,老的Spring不能连接。出现这个现象,我猜测新的项目肯定用的新的包,所以能够正常。经过排查,发现老项目的MySQL驱动包还是使用的5.7的。所以对项目进行升级,直接修改POM文件的对应版本号。<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <versio原创 2021-04-12 14:51:28 · 1933 阅读 · 0 评论 -
注解 @Autowired 的注入机制
在Spring IoC 的概念中,依赖注入( Dependency Injection, DI )可以通过注解 @Autowired 来实现,下面就举例说明该注解的注入机制.假设人类(Person)有时需要自我介绍,比方说 Charles 是来自英国的,张三是来自中国的。为了更好的展示这个过程,我们首先定义一个接口:Personpublic interface Person { /** * 自我介绍 */ void introduce();}接下来创建张三(Zh原创 2021-03-19 17:38:41 · 1880 阅读 · 1 评论 -
Windows使用javah命令编译class从而得到.h头文件
我有这样一个Java类package com.jni;public class HelloJni { static { try { System.loadLibrary("HelloJni"); } catch (UnsatisfiedLinkError e) { e.printStackTrace(); } } public native static void sayHello(原创 2021-03-10 16:51:07 · 915 阅读 · 0 评论 -
Java8获取年、月、周数据和某一天的开始结束时间
在Java8中使用 LocalDate 、LocalDateTime、TemporalAdjusters、TemporalField 获取 上周、上个月、去年、本周、本月、今年、下周、下个月、明年的相关数据public static void main(String[] args) { DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDate today = L原创 2021-01-08 10:26:31 · 2702 阅读 · 0 评论 -
Session 工具类
总结记录 Session 工具类import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import java原创 2020-12-30 16:04:25 · 594 阅读 · 0 评论 -
SpringBoot在AOP中获取HttpServletRequest和HttpSession信息
获取HttpServletRequest信息RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();if(requestAttributes != null){ HttpServletRequest request = (HttpServletRequest) requestAttributes.resolveReference(RequestAttributes.REFERENCE_REQUE原创 2020-12-24 19:18:13 · 2386 阅读 · 2 评论 -
解决Java程序在Linux系统中创建文件或者文件夹后权限不足的问题
tomcat 需要8以及以上我在Java程序里面有很多生成文件的功能,比如用户上传文件、将数据生成xml文本等。我发现生成的文件权限全是:-rw-r—,而文件的拥有者是 root,这样就只有root用户组的才有读取权限。Linux系统为了安全考虑,默认创建文件的最高权限为666,而创建文件夹的最高权限为777,系统通过变量umask来控制创建文件的权限问题。我们假设设置 umask 的值为 025 时,则创建的文件权限为 641,即权限是通过最高权限减去 umask 的值来控制的。我们可以通过修.原创 2020-11-25 15:04:21 · 4524 阅读 · 2 评论 -
Java中自定义类加载器
在上文中(Java中双亲委派机制的实现原理),我们了解到双亲委派机制的实现原理,通过了解它,可以帮助我们更好自定义属于我们自己的类加载器。想要自定义类加载器,只需简单三步:继承 ClassLoader重写 findClass() 方法使用 defineClass() 方法生成 Class 对象流程概述下面我们就来实现自己的类加载器,大致流程如下:创建一个需要被自定义加载器加载的类,并且把它放在 classpath 以外的其他地方。继承 ClassLoader,并重写 findClass原创 2020-06-15 19:02:57 · 587 阅读 · 0 评论 -
Java虚拟机类加载机制中的ClassLoader类加载器详解以及如何自定义ClassLoader类加载器
文章目录1、Java虚拟机的类加载机制概述2、Java虚拟机中的类加载器2.1、查看类加载器加载的路径2.1.1、查看启动类加载器2.1.2、查看扩展类加载器3、类加载器之间的关系3.1、每个类加载器都有一个父加载器3.2、父加载器不是父类3.3、Bootstrap ClassLoader4、双亲委派模式4.1、重要方法4.1.1、loadClass()4.1.2、findClass()4.1.3...原创 2019-05-09 18:04:41 · 7186 阅读 · 3 评论 -
Java加密解密class文件,使用classLoader动态解密class文件
在日常开发中,可能会遇到要对系统中比较敏感的代码进行保护,那么下面就总结一下保护源码的方法中最简单的方式,即文件加密首先,加密和加密的大致思想是:加密无非就是对加密后的class文件进行异或一下,解密呢,那就是再对class文件异或回来即可。加密后的文件如果想要用到的话,就需要classLoader动态加载进来,具体实现为:/** * 加解密类 */public class E...原创 2018-08-07 14:52:48 · 8725 阅读 · 0 评论 -
Java并发编程中使用到的线程池
学习总结于-《Java并发编程实战》为什么要使用线程池?想象一下,如果系统要处理大量简单的并且处理时间很短的任务的话,每一个任务都去创建一个线程的,虽然这种方式能够达到我们的目的,但是有没有更好的方案呢?要知道创建线程不像创建对象那么简单,仅仅是在JVM的堆里分配一块内存而已。创建一个线程,需要调用操作系统内核的API,然后操作系统要为线程分配一系列的资源,这个成本就很高了,所以线程是一个重量级的对象,应该避免频繁创建和销毁。概念区分线程池的设计不像一般意义上池化资源。一般的池化资源是你需要.原创 2020-05-28 15:35:09 · 251 阅读 · 0 评论 -
Java8-Lambda:内置四大函数式接口
package lambda.builtInFunctions;import org.junit.Test;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.function.Consumer;import java.util.function.Function;import java.util.function.Predicate;import java.uti原创 2020-05-13 11:07:44 · 3032 阅读 · 0 评论 -
Java8-Lambda:Lambda语法
简单示例需求:对指定数字进行运算先创建一个函数式接口@FunctionalInterfacepublic interface ICalculation<T> { int calc(T x, T y);}再写一个操作方法 operation,具体进行什么运算现在还不知道,我们对传入的参数x和参数y进行运算并返回结果。public int operation(int x, int y, ICalculation<Integer> iCalculation){ r原创 2020-05-12 10:24:20 · 230 阅读 · 0 评论 -
Java中 FutureTask 的使用
在前面 通过Callable和Future创建线程 已经学习了 Callable 和 Future 两个接口,以及 FutureTask 的简单使用,节约篇幅,这里就不重复介绍了。介绍我觉得 FutureTask 其实就是实实在在的工具类,我们把具体的任务详情在 Callable 接口的实现类中实现,然后将实现类的实例传给 FutureTask,让他来创建任务,它还需要调度者来调度执行。...原创 2020-04-29 15:56:49 · 2951 阅读 · 2 评论 -
Java-CAS学习总结
在前面总结的文章中 详解Java中volatile关键字作用,说到了累加器的线程不安全,不安全的原因就是被累加的成员变量 可见性 和自增时的操作 原子性 上。可见性问题可以用 volatile 来解决,而原子性问题我们可以采用互斥锁的方案,除了互斥的方案,在文章末尾也使用了 AtomicInteger 来保证了自增操作的原子性。用它来改善累加器方法,就可以输出正确的结果。采用 AtomicIn...原创 2020-04-24 10:25:47 · 264 阅读 · 0 评论 -
Java8-Lambda:初识Lambda
Java8-Lambda:初识LambdaJava8新增的 Lambda 表达式虽然看着很NB,但其实 Lambda 表达式的本质只是一个"语法糖"而已。这篇文章只是初识 Lambda,先看看它的好处是什么,它能给我们带来什么样的体验,至于 Lambda 具体怎么用以及什么时候用,会在后面的文章陆续学习到。都说 Lambda 表达式能够优化内部类,我们先来看看它优化后是怎么样的。我们以前要...原创 2020-04-23 11:04:21 · 371 阅读 · 0 评论 -
Java集合源码学习—ArrayList
ArrayList是一种以数组实现的List,与数组相比,它具有动态扩展的能力,因此也可称之为动态数组。ArrayList实现了List,提供了基础的添加、删除、遍历等操作。ArrayList实现了RandomAccess,提供了随机访问的能力。ArrayList实现了Cloneable,可以被克隆。ArrayList实现了Serializable,可以被序列化。1. ArrayList...原创 2020-03-16 16:01:24 · 421 阅读 · 0 评论 -
Java读取证书的两种方式
关于证书基础以及创建、查看、删除、导入、导出以及其他功能详解请参照:Java使用keytool创建CA证书Java读取证书有两种方式1.从文件中读取public static void main(String[] args) throws CertificateException, IOException, KeyStoreException, NoSuchAlgorithmExceptio...原创 2019-11-06 18:46:26 · 7998 阅读 · 0 评论 -
Java使用keytool创建CA证书
keytool是一个密钥和证书管理工具1.keytool工具位置keytool工具在 JDK 的安装目录的 bin 目录下面2.keytool工具命令展示打开命令行进入 bin 目录,然后输入命令 keytool.exe,就能看见keytool工具支持哪些命令,如下图所示:注意下面的用法提示:使用 “keytool -command_name -help” 获取 command_na...原创 2019-11-06 18:36:51 · 2245 阅读 · 0 评论 -
Java中System.out.println()为何会影响内存可见性
先看代码:public class T implements Runnable { private boolean flag = false; public boolean getFlag() { return flag; } public void setFlag(boolean flag) { this.flag = fla...原创 2019-09-20 16:38:20 · 4437 阅读 · 14 评论 -
JSP页面中的EL表达式不被解析的解决方案
背景在jsp页面中使用EL表达式,但是出现不被解析或者乱码的情况,例如1、massase在页面上显示就是{massase} 在页面上显示就是massase在页面上显示就是{massase},没有拿到确切的值。2、${pageContext.request.contextPath}来访问资源的路径的时候在浏览器URL上出现乱码,并在页面上显示404错误。解决办法第一种在JSP页面的EL配...原创 2019-08-17 16:57:32 · 1018 阅读 · 0 评论 -
Spring boot支持热启动方式
在pom.xml中加入如下配置即可。<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> ...原创 2019-08-13 21:05:59 · 1143 阅读 · 0 评论 -
Java I/O学习(二) - FileInputStream
FileInputStream 有两个常用的构造函数构造函数1public FileInputStream(String name) throws FileNotFoundException {this(name != null ? new File(name) : null);}参数 name 表示文件的路径。通过这个传入的路径打开实际的文件。可以看到其中调用了this方法,这个方法...原创 2019-07-18 22:26:33 · 419 阅读 · 0 评论 -
Java I/O学习(一) - FileOutputStream
文章目录1、创作初衷2、FileOutputStream 使用流程3、FileOutputStream 源码分析3.1、FileOutputStream的构造方法3.1.1、构造函数13.1.1.1、使用示例3.1.2、构造函数23.1.2.1、使用示例3.1.3、构造函数33.1.3.1、使用示例3.1.4、构造函数43.1.4.1、使用示例4、FileOutputStream的写入方法4.1、...原创 2019-07-18 22:24:25 · 2349 阅读 · 0 评论 -
Java IO流中偏移量是什么意思
文章目录背景示例前置条件使用 FileInputStream 流读取内容参数详解网上的错误解释正确的解释总结背景在使用Java的 IO过程中,肯定遇到过偏移量这个概念。网上也有很多人都解释过,但是有很多的人都被误导理解错了,也包括我。偏移量确实很容易理解错,刚开始我也理解错了。直到后来看BufferedOutputStream 源码的时候就越发感觉不对劲。下面就详细解释一下偏移量到底什么意思...原创 2019-07-18 22:20:11 · 8663 阅读 · 9 评论 -
Java 在Windows和Linux下执行命令的工具
import java.io.*;/** * 命令行执行工具 * info 命名执行后的输出(包含错误信息) */public class ProcessUtil { private StringBuffer info; private String[] commands; ProcessBuilder pbuilder; public Proce...原创 2019-07-18 22:18:30 · 1283 阅读 · 0 评论 -
超详细,一看就懂!Java中基础对象以及String字符串对象的内存分配情况分析
概述我们通常把Java内存区分为堆内存(Heap)和栈内存(Stack),这种分法比较粗糙,Java内存区域的划分实际上远比这复杂。这种划分方式的流行只能说明大多数程序员最关注的、与对象内存分配关系最密切的内存区域是这两块。其中所指的“栈”就是虚拟机栈,或者说是虚拟机栈中的局部变量表部分在方法中定义的一些基本类型的变量和对象的引用变量都是在方法的栈内存中分配,当在一段代码块定义一个变量时,Ja...原创 2019-05-07 22:50:51 · 2794 阅读 · 2 评论 -
Git教程
https://git-scm.com/book/zh/v2原创 2019-05-06 09:10:07 · 244 阅读 · 0 评论 -
Log4J日志配置与Java中Log4J的使用详解
文章目录Log4j简介Loggers介绍Appenders介绍Layouts介绍配置详解配置根Logger:配置日志信息输出目的地(appender):配置日志信息的输出格式(Layout):示例简单的Log4j配置文件:在Java中应用Log4j比较全面的Log4j的配置Log4j简介 Log4j有三个主要的组件:Loggers(日志记录器),Appenders (日志的输出源)和Layo...原创 2019-04-26 16:49:36 · 4009 阅读 · 2 评论 -
深入浅出Java三大特性之多态
概念所谓多态,就是指程序中定义的引用变量所指向的具体类型,和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定。换句话说,即一个引用变量倒底会指向哪个类的实例对象?该引用变量发出的方法调用到底是哪个类中实现的方法?必须在由程序运行期间才能决定。概念理解起来很抽象,还得用具体的例子来形象的剖析。比如,你进入一个房间,里面有三个人背对着你,从背面看是不知道这三个人到底是谁的。...原创 2019-04-17 17:45:01 · 418 阅读 · 0 评论 -
Java内存泄露排查攻略
1、检查弱引用指向对象是否被垃圾收集关于引用的介绍,详情跳转 Java中的引用介绍如果我们错误的保持了强引用(比如,赋值给了 static 变量),那么对象可能就没有机会变回类似弱引用的可达性状态了,就会产生内存泄漏。所以,检查弱引用指向对象是否被垃圾收集,也是诊断是否有特定内存泄漏的一个思路,如果我们的框架使用到弱引用又怀疑有内存泄漏,就可以从这个角度检查。...原创 2019-03-05 14:05:20 · 409 阅读 · 0 评论 -
Java中的强引用、软引用、弱引用、幻象引用及其区别
文章目录引用的特征介绍强引用(Strong Reference)软引用(Soft Reference)弱引用(Weak Reference)幻想引用(虚引用)对象可达性状态流转分析人为改变对象可达性状态在java语言中,除了基本数据类型的变量,其他所有都是所谓的引用类型。它们执行不同的对象,理解引用对掌握Java的生命周期和JVM内部相关机制非常有帮助不同的引用类型, 主要体现的是对象不同的可...原创 2019-03-05 14:01:18 · 934 阅读 · 0 评论 -
学习 Java编程思想 Thinking in Java 第十章:内部类
前言在读这本书的时候,会有很多示例代码。为了巩固实践,所以将书上的代码都写上一遍(其实是逼自己写代码)。目前我已经读到第十章:内部类了,代码也会从这里开始写。前面的代码就算了,不补了,Just do it!10.5 在方法和作用域内的内部类...原创 2018-11-23 11:19:25 · 274 阅读 · 0 评论 -
Java实现自定义ClassLoader类加载器动态加载class文件并解密
要实现classLoader动态解密class文件,就必须先了解Java的类加载机制、了解双亲委托机制。然后自定义一个classLoader,继承于classLoader。文章中引用到上一篇文章中的解密方法(edCipher.decryptClass(name)),详情请移步至:https://blog.csdn.net/qq_28082757/article/details/81481215...原创 2018-08-07 15:23:28 · 7170 阅读 · 1 评论 -
Java压缩技术之解压篇,支持:ZIP、RAR、7Z、TAR、GZ、TAR.GZ、BZ2、TAR.BZ2
Java压缩技术之解压篇,支持:ZIP、RAR、7Z、TAR、GZ、TAR.GZ、BZ2、TAR.BZ2原创 2017-12-29 16:19:42 · 6116 阅读 · 3 评论 -
经典String str = new String("abc")内存分配问题
String str = new String("abc");首先将这行代码分成String str、=、”abc”和new String()四部分来看待。String str只是定义了一个名为str的String类型的变量,因此它并没有创建对象;=是对变量str进行初始化,将某个对象的引用(或者叫句柄)赋值给 它,显然也没有创建对象;现在只剩下new String(“abc”)了。先看一下new原创 2017-05-27 17:00:53 · 9001 阅读 · 4 评论 -
Java Web实现使用浏览器从服务器下载文件(后台)
Java Web实现 使用浏览器从服务器下载文件。 下面实现两种情况的下载,需求如下:需求(一):1、用户在页面填写表单。 2、填写完成后,选择下载,将表单内容发往后台。 3、后台根据内容生产一个文件,发送给前端。 4、前端成功下载文件到本地。 此需求简单来说就是,用户在页面上填写内容,然后将内容转变成文件的形式。后台设计思路:1、首先拿到前端发送过来的内容。 2、将内容解析,存放至缓冲原创 2017-05-26 16:22:37 · 10214 阅读 · 2 评论