- 博客(98)
- 资源 (5)
- 收藏
- 关注
原创 21条实用Linux命令
jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。使用 “+” 设置权限,使用 “-” 用于取消。(向一个命令启动的进程发送一个信号)pwd 显示工作路径。
2024-04-25 11:30:20 198
原创 SpringBoot常见的52个注解
用于定义Bean初始化顺序,可以用在@Configuration、@Component、@Service、@Repository等注解以及@Bean方法上。用于定义配置类或Bean仅在特定的Profile激活时才会生效,可以用在@Configuration类或@Bean方法上。用于定义在特定Bean存在或不存在时的条件配置,可以用在@Configuration类或@Bean方法上。用于定义在特定类存在或不存在时的条件配置,可以用在@Configuration类或@Bean方法上。
2024-04-19 14:17:25 550
原创 超实用IDEA技巧,让生产力突飞猛进
尽管本质都是去改变 .vmoptions配置文件,但推荐使用Change Memory Settings去调整,选择Edit Custom VM Options 或者在本地磁盘目录更改,通过某些方法破解的idea 很可能造成idea打不开的情况。与eclipse类似,idea也可以自己关闭代码检查 减少资源使用,但不推荐全部关闭,(是大佬当我没说),把我们项目中不会使用到的关闭就好了。idea默认是选择显示单行的,我们把这个去掉,就可以显示多行tab了,在打开tab过多时的场景非常方便!
2024-02-23 13:35:09 326
原创 Java 的 8 种异步实现方式
如果我们希望一旦计算完成就拿到结果展示给用户或者做另外的计算,就必须使用另一个线程不断的查询计算状态。Future件彼此孤立:有时某一个耗时很长的异步任务执行结束之后,你想利用它返回的结果再做进一步的运算,该运算也会是一个异步任务,两者之间的关系需要程序开发人员手动进行绑定赋予,Future并不能将其形成一个任务流(pipeline),每一个Future都是彼此之间都是孤立的,所以才有了后面的CompletableFuture,CompletableFuture就可以将多个Future串联起来形成任务流。
2024-02-19 14:22:40 833
原创 @Transactional 事务注解
在这里我也放个问题吧,希望有高手可以回复指点指点我,因为JVM动态代理是基于接口实现的,那么是不是service层都要按照接口和实现类的开发模式,注解才会生效呢,就是说controller层直接调用没有接口的service层,加了注解也一样不起作用吧,这个懒了,没有测试,其一是因为没有人会这么开发吧,其二是我就认为是不起作用的,哈哈。代码太长了,超过屏幕了,粘贴出来截的图,红框注释需要仔细看,希望不要影响你的阅读体验,至此,本篇关于@Transactioinal注解的使用就到此为止啦,
2024-01-09 17:09:31 352 1
原创 Spring中Bean的生命周期
值得注意的是:实例化和初始化是两个完全不同的过程,前者只是给Bean分配内存空间,而后者则是将程序执行权从系统级别转到用户级别,执行用户添加的业务代码。进行初始化工作(使用注解 @PostConstruct 初始化 或者 使用(xml)init-method 初始化, 前者技术比后者技术先进~);: 给Bean分配内存空间(对应JVM中的“加载”,这里只是分配了内存);: 进行Bean的注入和装配;执行初始化的前置工作;执行初始化的后置工作;
2024-01-09 16:18:17 413
原创 一个 Java 对象到底有多大?
Object Header占4byte,Pointer占4byte,一个int字段(size)占4byte,elementData数组本身占12(4+4+4),数组中10个Integer对象占10×16。一个long比一个int才多4byte,但是你要想,如果内存中有100W个long,那就白白浪费了约4MB空间,不要小看这一点点的空间浪费,因为随便一个跑着在线应用的JVM中,对象都能达到上千万!结果是16byte!一个int在java中占据4byte,所以Integer的大小为4+4+4=12byte。
2023-10-13 15:12:33 212
原创 Java 序列化和反序列化为什么要实现 Serializable 接口
如果不显示指定serialVersionUID, JVM在序列化时会根据属性自动生成一个serialVersionUID, 然后与属性一起序列化, 再进行持久化或网络传输. 在反序列化时, JVM会再根据属性自动生成一个新版serialVersionUID, 然后将这个新版serialVersionUID与序列化时生成的旧版serialVersionUID进行比较, 如果相同则反序列化成功, 否则报错..先说结论, 被transient关键字修饰的属性不会被序列化, static属性也不会被序列化.。
2023-10-11 13:58:11 100
原创 多线程并发之线程通信
场景:当你有很大一个List的时候,有时候业务处理时就需要将List拆分处理,比如你调用依赖方接口,Get请求中包含这个超长的List入参,这样请求URL就会出现过长的问题,所以可以使用Lists.partition进行分割。结合Semaphore是为了控制并发量,以防依赖方接口不能支撑住很大并发量,使用Semaphore控制并发量以保证不给依赖方接口打死。多个线程并发执行时,在默认情况下CPU是随机切换线程的,有时我们希望CPU按我们的规律执行线程,此时就需要线程之间协调通信。
2023-07-10 16:32:24 127
原创 Java8之Stream
第一、Java8 Stream之filter,distinct,skip,limit,map,flatmap详细介绍List<Integer> list= Arrays.asList(1,2,3,4,5,1);//1.filter过滤流中的数据。List<Integer> result=list.stream().filter(i->i%2==0).collect(Collectors.toList());System.out.println("filter过滤流中的数
2022-05-22 18:19:24 1069
原创 Java内置线程池ExecutorService介绍及商品秒杀案例
第一、ExecutorService接口是java内置的线程池接口,通过学习接口中的方法,可以快速的掌握java内置线程池的基本使用常用方法:void shutdown() 启动一次顺序关闭,执行以前提交的任务,但不接受新任务。List shutdownNow() 停止所有正在执行的任务,暂停处理正在等待的任务,并返回等待执行的任务列表。 Future submit(Callable task) 执行带返回值的任务,返回一个Future对象。Future<?> submit(Ru
2022-05-14 19:52:19 809
原创 自定义线程池
第一、什么是线程池线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队里中,然后在创建线程后自动启动这些任务。这里的任务就是实现了Runnable或Callable接口的实例对象。第二、为什么使用线程池使用线程池最大的原因就是可以根据系统的需求和硬件环境灵活的控制线程的数量,且可以对所有线程进行统一的管理和控制,从而提高系统的运行效率,降低系统运行压力;第三、使用线程池有哪些优势a.线程和任务分离,提升线程重用性b.控制线程并发数量,降低服务器压力,统一管理所有线程c.提升系统响应速
2022-05-08 21:02:32 863
原创 Oracle的SQL优化建议
第一、SQL语句尽量用大写的因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行第二、使用表的别名当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。第三、选择最有效率的表名顺序(只在基于规则的优化器(RBO)中有效)ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表也称为驱表,driving table)将被最先处理,在FROM子
2022-05-04 22:07:33 1269
原创 docker查询日志输出到文件的优雅实践
第一、创建日志文件vim file.txt顺便普及一下vim退出的方式按 ESC,左下角就可以进行输入:w 保存但不退出:wq 保存并退出:q 退出:q! 强制退出,不保存:e! 放弃所有修改,从上次保存文件开始再编辑命令历史第二、查询容器iddocker ps第三、写入指定容器在某时间段的日志--将最近225分钟的日志写到file.txt文件docker logs --since 225m 4261ce7f5c14 >>file.txt第四、将file.tx
2022-01-15 15:13:18 16820
原创 序列化与反序列化
1.序列化与反序列化的概念序列化:将对象写入到IO流中反序列化:从IO流中恢复对象Serializable接口是一个标记接口,不用实现任何方法,标记当前类对象是可以序列化的,是给JVM看的。序列化机制允许将这些实现序列化接口的对象转化为字节序列,这些字节序列可以保证在磁盘上或者网络传输后恢复成原来的对象。序列化就是把对象存储在JVM以外的地方,序列化机制可以让对象脱离程序的运行而独立存在。序列化在业务代码也许用的不多,但是在框架层面用的是很多的。先给出序列化的例子。package com.s
2021-12-16 15:34:11 530
原创 Java代码优化之超搞笑的小技巧
前言代码优化是一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的:呜呼!泰山不让土壤,故能成其大;河海不择细流,故能就其深;王者不却众庶,故能明其德。一点一滴的优化都是未来系统飞速疾驰的巨大动力。代码优化的目标是:1.减小代码的体积。2.提高代码运行的效率。优化细节1、尽量指定类、方法的final修饰符带有 final 修饰符的类是不可派生的。在 Java 核心 API 中,有许多应用 final 的例子,例如 jav
2021-09-29 11:03:50 174
原创 Spring MVC及Spring Boot项目中RestTemplate的运用
第一、RestTemplate简介RestTemplate是Spring提供的用于访问Rest服务的客端, RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率,所以很多客户端比如Android或者第三方服务商都是使用RestTemplate请求restful服务。第二、Spring MVC项目中RestTemplate的使用1、使用RestTemplate之前,需要初始化其实例。创建一个工具类如下,初始化实例后,可以通过注解注入调用类中。import or
2021-03-09 19:21:22 769
原创 Tomcat配置图片保存路径
1.使用Tomcat作为服务器的时候,如果不配置图片保存路径,将图片保存在项目路径下,那么再次打war包发布项目可能会造成图片的丢失,每次重启前将图片先保存再copy到服务器明显不方便,这时可以配置图片保存位置,将图片保存到项目外的地方,方法如下:打开tomcat - conf下的server.xml文件,在Host节点下添加<Context docBase="D:/imgs" path="/imgs" />docBase为图片保存的位置,path为图片的访问路径。例如:1.该
2020-12-24 10:06:44 2085
原创 Java后端正则表达式校验数字、字母及特殊字符
下面以Java代码为例简述用正则表达式校验密码复杂度。/** * 正则表达式校验密码复杂度 * @author shixiangcheng * 2020-12-17 */public class TestPattern { public static final String LETTER_PATTERN="^.*[a-zA-Z]+.*$";//字母 public static final String NUMBER_PATTERN="^.*[0-9]+.*$";//数字 public s
2020-12-17 11:08:25 16692
原创 org.apache.commons.beanutils.ConversionException: No value specified for ‘BigDecimal‘
问题描述:当使用org.apache.commons.beanutils.BeanUtils进行对象拷贝时,遇到BigDecimal的属性会报错No value specified for ‘BigDecimal’问题重现:1.新增类:Aimport java.math.BigDecimal;public class A { private String name; private BigDecimal money; public String getName() { return nam
2020-10-14 14:53:57 2920
原创 Java Out Of Memory解决之JAVA_OPTS参数说明与配置
JAVA_OPTS="-server -Xms1024m -Xmx2048m -Xss512k -XX:PermSize=300m -XX:MaxPermSize=1024m"-Xms256m :初始化内存-Xmx1024m :能获得的最大内存-Xss1024K :每增加一个线程消耗的内存-XX:PermSize=300m :最小内存的永久保存区域,主要存放class文件。-XX:MaxPermSize=456m :最大内存的永久保存区域。...
2020-09-30 17:28:36 674
原创 Eclipse如何安装lombok工具
第一、下载lombok.jar第二、双击下载好的lombak.jar,安装步骤如下1、点击Specify location,选择eclipse安装目录2、点击:Install/Update3、点击Quit Installer,完成安装第三、安装完成之后,请确认eclipse安装路径下是否多了一个lombok.jar包,并且其配置文件eclipse.ini中是否 添加了如下内容:-javaagent:D:\Tools\Eclipse2020\eclipse\lombok.jar第四、重启e
2020-09-17 17:18:19 809
原创 JSON串的字段和类中字段不一致时如何转换?
第一、前言Json串是我们现在经常会遇到的一种描述对象的字符串格式。在用Java语言开发的功能中,也经常需要做Json串与Java对象之间的转换。第二、正常转换fastjson就是经常用来做Json串与Java对象之间的转换,就像下面我用fastjson实现的示例。import com.alibaba.fastjson.JSON;/** * JSON与对象转换 * @author shixiangcheng * 2020-08-22 */public class JsonDemo {
2020-08-22 18:36:42 7841 1
原创 JSP+Servlet中使用cos.jar实现文件上传下载
第一、前言本文通过JSP+Servlet的架构,用cos.jar实现文件的上传与下载。不涉及数据库交互。第二、引入相关jar包第三、代码示例1、新建com.servlet.UploadServlet.javaimport java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;impor
2020-08-09 11:49:41 657
原创 JQuery实现复选框全选或全不选
第一、前言在做前端开发时,经常会遇到对复选框的全选或全不选,本文主要探讨JQuery实现方式。第二、下载JQuery开发包第二、代码示例<%@ page contentType="text/html;charset=UTF-8"%><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitiona
2020-08-09 09:41:49 221
原创 JQuery.validate验证表单后Ajax异步提交
第一、前言本文主要介绍jquery.validate+jquery.form实现表单验证,然后用Ajax方式异步提交。本文重在介绍前端技术,故省略和数据库交互部分。后端仅提供Controller代码来模拟效果。第二、场景用户注册时,录入个人信息后,做表单验证,然后提交。第三、代码示例1、新建web Project,命名:Examination1,引入Spring MVC相关jar包。下面仅提供jar包截图,请读者自行下载,若个人无法自行下载,可在文章下留言向本人索要相关jar包。2....
2020-08-08 21:29:18 969
原创 探究ThreadLocal内存泄漏及弱引用
第一、前言有些程序员在使用ThreadLocal的过程中会发现有内存泄漏的情况,就猜测这个内存泄漏与Entry中使用了弱引用的key有关系。第二、内存泄漏的相关概念1.Memory overflow:内存溢出是没有足够的内存提供申请者使用。2.Memory leak:内存泄漏是指程序中已动态分配的内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃的严重后果。内存泄漏的堆积终将导致内存溢出。第三、弱引用的相关概念Java中的引用有4种类型:强、软、弱、虚。当
2020-08-02 21:23:24 917
原创 ThreadLocalMap线性探测法解决hash冲突
第一、前言ThreadLocal使用的是自定义的ThreadLocalMap,接下来我们来探究一下ThreadLocalMap的hash冲突解决方式。第二、ThreadLocal的set()方法public void set(T value) { Thread t = Thread.currentThread(); ThreadLocal.ThreadLocalMap map = getMap(t); if (map != null) map.set(this,
2020-08-01 17:20:33 5474
原创 ThreadLocal无锁化线程封闭及与Synchronized的区别
第一、前言建议将本文和ThreadLocal应用场景-事务案例一起阅读。第二、ThreadLocal简介从Java官方文档中的描述:ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文。总结:1.线程并发:在多线程并发的场景下2.传递数据:我们可以通过ThreadLocal在同一线程,不同组件中
2020-07-25 10:48:08 185
原创 ThreadLocal的核心方法源码
第一、前言基于ThreadLocal的内部结构,我们继续探究一下ThreadLocal的核心方法源码,更深入的了解其操作原理。除了构造之外, ThreadLocal对外暴露的方法有以下4个:第二、get方法1、源码和对应的中文注释 /** * 返回当前线程中保存ThreadLocal的值 * 如果当前线程没有此ThreadLocal变量,则它会通过调用{@link #initialValue} 方法进行初始化值 * @return 返回当前线程对应此Thread
2020-07-19 21:16:33 142
原创 ThreadLocal内部结构探究实现线程数据隔离的原理
第一、前言本篇文章主要通过分析ThreadLocal的内部结构,探究它能够实现线程数据隔离的原理。第二、JDK早期设计每个ThreadLocal都创建一个Map,然后用线程作为Map的Key,要存储的局部变量作为Map的value,这样就能达到各个线程的局部变量隔离的效果。第三、JDK8的设计每个Thread维护一个ThreadLocalMap,这个Map的key是ThreadLocal实例本身,value才是真正要存储的值Object。具体的过程是这样的:1、每个Thread线程内部都有一
2020-07-19 20:54:51 573 1
基于 Spring MVC 的教辅平台的设计与实现
2024-03-11
基于 Java 的在线学习网站的设计与实现
2024-03-11
JSP+Servlet+cos文件上传下载Jar包.rar
2020-08-09
jquery.validate+jquery.form.rar
2020-08-08
Oracle之分析函数.pdf
2019-08-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人