![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaEE开发
Walter Sun
我小时候的理想是做一名科学家,用梦想改变世界。资深匠心码农 阿里扫地僧 Java天花板 IT极客 篮球梦 绘画乐器
展开
-
lambda实现原理
个人博文地址:http://www.waltersun.cn/documents/java/java-lambdaprinciple.htmlLambda表达式声明的地方会生成一个invokedynamic指令,同时编译器生成一个对应的引导方法(Bootstrap Method)。第一次执行invokedynamic指令时,会调用对应的引导方法(Bootstrap Method),该引导方法会调用LambdaMetafactory.metafactory方法动态生成内部类。引导方法会返.原创 2020-11-30 15:23:18 · 440 阅读 · 0 评论 -
找对象攻略 - 必不可少的Spring IOC
具体内容可参见个人网站:http://www.waltersun.cn/documents/java/spring-iocfindbeans.html找对象攻略 - 必不可少的Spring IOC什么是IOC我们常说Java程序员需要对象,⾃⼰new⼀个就⾏了,但实际没那么简单。举个例⼦,如果我找对象,我希望对⽅⻓得好看、⼼地善良,这就产⽣了两个条件:条件1:⻓得好看条件2:⼼地善良什么样的姑娘满⾜这两个条件并且能看上我呢?我不知到,我得去接触,然后了解,最后再确定是不是彼此合拍,这个过程需.原创 2020-10-24 09:34:06 · 198 阅读 · 0 评论 -
allatori集成
allatori集成目录why allatoriwhat allatorihow allatoristep 1 放置文件step 2 pom依赖中增加allatori编译插件step 3 配置allatori.xml编码注意why allatoriJava编译后的class容易被反编译,从而暴露代码逻辑。经过混淆器处理后的字节码会重新组织,在保证不影响运行逻辑的前提下,保护逻辑不会被人类易读地泄露。what allatoriAllatori是一个Java 混淆器原创 2020-10-15 18:50:59 · 317 阅读 · 0 评论 -
IntelliJ IDEA——插件之java内存分析工具(JProfiler)
1.marketplace中搜索jprofiler2.installed后需要去jprofiler官网安装jprofiler可执行客户端官网地址:https://www.ej-technologies.com/products/jprofiler/overview.html3.下载完后运行exe文件,安装jprofiler,安装过程中需要的license如下:jprofiler11L-J11-Everyone#speedzodiac-327a9wrs5dxvz#463a59A-J11-Eve原创 2020-10-09 20:26:20 · 3732 阅读 · 1 评论 -
maven配置详解
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <!-- 本地仓库的路径。默认值为 --原创 2020-07-21 11:34:59 · 180 阅读 · 0 评论 -
常用Linux命令(精简提取)
常用Linux命令文章目录常用Linux命令系统信息关机 (系统的关机、重启以及登出 )文件和目录文件搜索挂载一个文件系统磁盘空间用户和群组文件的权限 - 使用 "+" 设置权限,使用 "-" 用于取消文件的特殊属性 - 使用 "+" 设置权限,使用 "-" 用于取消打包和压缩文件RPM 包 - (Fedora, Redhat及类似系统)YUM 软件包升级器 - (Fedora, RedHat及类似系统)DEB 包 (Debian, Ubuntu 以及类似系统)APT 软件工具 (Debian, Ubun原创 2020-07-05 19:18:47 · 288 阅读 · 0 评论 -
HashMap的设计与优化
深入浅出HashMap的设计与优化常用的数据结构ArrayList 是基于数组的数据结构实现的,LinkedList 是基于链表的数据结构实现的, HashMap 是基于哈希表的数据结构实现的。我们不妨一起来温习下常用的数据结构,这样也有助于你更好地理解后面地内容。数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为 O(1),但在数组中间以及头部插入数据时,需要复制移动后面的元素。链表:一种在物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实原创 2020-06-23 15:31:35 · 189 阅读 · 0 评论 -
JVM性能监测及调优(5)
内存持续上升,我该如何排查问题?我想你肯定遇到过内存溢出,或是内存使用率过高的问题。碰到内存持续上升的情况,其实我们很难从业务日志中查看到具体的问题,那么面对多个进程以及大量业务线程,我们该如何精准地找到背后的原因呢?常用的监控和诊断内存工具工欲善其事,必先利其器。平时排查内存性能瓶颈时,我们往往需要用到一些 Linux 命令行或者 JDK 工具来辅助我们监测系统或者虚拟机内存的使用情况,下面我就来介绍几种好用且常用的工具。Linux 命令行工具之 top 命令top 命令是我们在 Linux 下原创 2020-06-23 15:29:35 · 234 阅读 · 0 评论 -
JVM性能监测及调优(4)
如何优化JVM内存分配?JVM 调优是一个系统而又复杂的过程,但我们知道,在大多数情况下,我们基本不用去调整 JVM 内存分配,因为一些初始化的参数已经可以保证应用服务正常稳定地工作了。但所有的调优都是有目标性的,JVM 内存分配调优也一样。没有性能问题的时候,我们自然不会随意改变 JVM 内存分配的参数。那有了问题呢?有了什么样的性能问题我们需要对其进行调优呢?又该如何调优呢?JVM 内存分配性能问题谈到 JVM 内存表现出的性能问题时,你可能会想到一些线上的 JVM 内存溢出事故。但这方面的事故原创 2020-06-23 15:28:48 · 228 阅读 · 0 评论 -
JVM性能监测及调优(3)
如何优化垃圾回收机制?我们知道,在 Java 开发中,开发人员是无需过度关注对象的回收与释放的,JVM 的垃圾回收机制可以减轻不少工作量。但完全交由 JVM 回收对象,也会增加回收性能的不确定性。在一些特殊的业务场景下,不合适的垃圾回收算法以及策略,都有可能导致系统性能下降。面对不同的业务场景,垃圾回收的调优策略也不一样。例如,在对内存要求苛刻的情况下,需要提高对象的回收效率;在 CPU 使用率高的情况下,需要降低高并发时垃圾回收的频率。可以说,垃圾回收的调优是一项必备技能。我们就把这项技能的学习进行原创 2020-06-23 15:27:55 · 192 阅读 · 0 评论 -
前后端分离项目,mvn打包自动打包前端文件至指定目录,依赖配置maven插件
插件配置插件1<plugin> <groupId>com.github.eirslett</groupId> <artifactId>frontend-maven-plugin</artifactId> <version>1.9.1</version> <configuration> <nodeVersion>v10.16.0</nodeVer原创 2020-06-16 11:39:52 · 982 阅读 · 0 评论 -
IO模型
如何解决高并发下I/O瓶颈什么是 I/OI/O 是机器获取和交换信息的主要渠道,而流是完成 I/O 操作的主要方式。在计算机中,流是一种信息的转换。流是有序的,因此相对于某一机器或者应用程序而言,我们通常把机器或者应用程序接收外界的信息称为输入流(InputStream),从机器或者应用程序向外输出的信息称为输出流(OutputStream),合称为输入 / 输出流(I/O Streams)。机器间或程序间在进行信息交换或者数据交换时,总是先将对象或数据转换为某种形式的流,再通过流的传输,到达指定机器原创 2020-06-12 09:53:25 · 227 阅读 · 0 评论 -
JVM性能监测及调优(2)
深入JVM即时编译器JIT,优化Java编译说到编译,我猜你一定会想到 .java 文件被编译成 .class 文件的过程,这个编译我们一般称为前端编译。Java 的编译和运行过程非常复杂,除了前端编译,还有运行时编译。由于机器无法直接运行 Java 生成的字节码,所以在运行时,JIT 或解释器会将字节码转换成机器码,这个过程就叫运行时编译。类文件在运行时被进一步编译,它们可以变成高度优化的机器代码,由于 C/C++ 编译器的所有优化都是在编译期间完成的,运行期间的性能监控仅作为基础的优化措施则无法进行原创 2020-06-11 15:39:27 · 254 阅读 · 0 评论 -
JVM性能监测及调优(1)
JVM内存模型为什么 JVM 在 Java 中如此重要?首先你应该知道,运行一个 Java 应用程序,我们必须要先安装 JDK 或者 JRE 包。这是因为 Java 应用在编译后会变成字节码,然后通过字节码运行在 JVM 中,而 JVM 是 JRE 的核心组成部分。JVM 不仅承担了 Java 字节码的分析(JIT compiler)和执行(Runtime),同时也内置了自动内存分配管理机制。这个机制可以大大降低手动分配回收机制可能带来的内存泄露和内存溢出风险,使 Java 开发人员不需要关注每个对象原创 2020-06-11 10:47:44 · 226 阅读 · 0 评论 -
Java多线程调优上
初识上下文切换我们首先得明白,上下文切换到底是什么。其实在单个处理器的时期,操作系统就能处理多线程并发任务。处理器给每个线程分配 CPU 时间片(Time Slice),线程在分配获得的时间片内执行任务。CPU 时间片是 CPU 分配给每个线程执行的时间段,一般为几十毫秒。在这么短的时间内线程互相切换,我们根本感觉不到,所以看上去就好像是同时进行的一样。时间片决定了一个线程可以连续占用处理器运行的时长。当一个线程的时间片用完了,或者因自身原因被迫暂停运行了,这个时候,另外一个线程(可以是同一个线程或原创 2020-06-10 11:40:02 · 174 阅读 · 0 评论 -
swagger注释@API详细说明
swagger注释@API详细说明swagger是当前最好用的Restful API文档生成的开源项目,通过swagger-spring项目实现了springMVC框架的无缝集成功能,方便生成restful风格的接口文档,同时,swagger-ui还可以测试spring restful风格的接口功能作用范围API使用位置对象属性@ApiModelProperty...原创 2019-11-29 10:47:27 · 280 阅读 · 0 评论 -
使用try with resource 关闭流,关闭资源
在Commons方法废弃前,关闭流方式:public static void main(String[] args) { FileInputStream inputStream = null; try { inputStream = new FileInputStream(new File("test")); System.out.println(...原创 2019-03-19 16:35:34 · 1867 阅读 · 0 评论 -
Swagger2的集成和使用
Swagger2介绍Swagger是一款RESTful接口的文档在线自动生成、功能测试功能框架。一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务,加上swagger-ui,可以有很好的呈现。SpringBoot集成这里选用的swagger版本为:2.8.0pom依赖<!--swagger --><dependency> ...原创 2019-04-01 13:42:49 · 1193 阅读 · 0 评论 -
IntelliJ IDEA——配置注释模板
Settings中File > Other Settings > Default Settings … > Editor > File and Code Templates配置方式In this template, you can specify a code fragment to be included into file templates (Template...原创 2019-03-30 17:20:36 · 297 阅读 · 0 评论 -
IntellJIDEA——Debug快捷键之F7(步入)和Shift+F7(智能步入)的区别
F7:普通步入,按照代码运行顺序,一步一步进入;Shift+F7:当一行代码出现方法套方法,通过智能步入可列出步入的方法,有开发人员自己选择步入的方法。(如图)...原创 2019-03-23 16:26:10 · 3220 阅读 · 0 评论 -
Mybaits——批量入库方式实现思路
思路将对象封装成list传入;接收list对象,传入XxbeanMapper.java的insert方法;在mapper.xml中foreach遍历拼接sql;XxbeanMapper.xml<insert id="insertBatch"> insert into db_ag.t_xsfb (c_bh,c_wtxs_bh,c_clfs,...原创 2019-03-25 22:13:53 · 474 阅读 · 0 评论 -
Vue.js——v-if控制显示控件等
vue的v-if控制显示显示“supreme”<!DOCTYPE html><html><head><meta charset="utf-8"><title>Vue test</title><script src="https://cdn.staticfile.org/vue/2.2.原创 2019-03-13 15:57:15 · 1796 阅读 · 0 评论 -
详解设计模式在 Spring 中的应用
第一种:简单工厂又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。如下配置,就是在 Hello...原创 2019-03-18 13:14:22 · 154 阅读 · 0 评论 -
Vue.js——路由router-link
html代码<!-- 使用 router-link 组件来导航. --><!-- 通过传入 `to` 属性指定链接. --><!-- <router-link> 默认会被渲染成一个 `<a>` 标签 --><router-link to="/foo">Go to Foo</router-link><...原创 2019-03-25 00:44:03 · 364 阅读 · 0 评论 -
Vue.js——vue-router路由,关于exact-active-class 和 active-class 的区别
exact-active-class 和 active-class 的区别router-link 默认情况下的路由是模糊匹配,例如当前路径是 /article/1 那么也会激活 ,所以当设置 exact-active-class 以后,这个 router-link 只有在当前路由被全包含匹配时才会被激活 exact-active-class 中的 class。当用户访问 /article/1...原创 2019-03-25 00:34:51 · 1006 阅读 · 0 评论 -
jstack线程分析
先附上jstack命令1. 通过linux的top命令,显示当前活跃线程数,为CPU使用率降序排列2. 使用jstack pid(示例:jstack 10420)命令查看java进程的堆栈状态3. 通过thread dump分析线程状态例如:jstack -F 10420大多数情况下会基于thead dump分析当前各个线程的运行情况,如是否存在死锁、是否存在一个线程长时间持有锁...原创 2019-03-21 01:04:48 · 527 阅读 · 0 评论 -
MyBatis——存放“数组形式”数据的xml配置
Mapper.xml<update id="aaa"> update db_xspch.t_xspch set <if test="arrBgyfs != null and arrBgyfs!=''"> "arr_bgyfs" = #{arrBgyfs}::_VARCHAR, ...原创 2019-03-28 16:42:08 · 2572 阅读 · 0 评论 -
myeclipse2014安装Memory Analyer Tool插件,或使用eclipse独立分析工具Eclipse Memory Analyer ,分析内存溢出的.hprof的镜像文件
插件下载地址:http://www.eclipse.org/mat/downloads.php1、下载插件:2、解压文件到myeclipse2014安装目录下的dropins文件夹内目录如下:3、在dropins目录下新建mat.link文件,编辑内容如下:4、重启项目即可。 注:也可使用eclipse独立的MemoryAnalyzer...原创 2018-07-17 14:23:15 · 485 阅读 · 0 评论 -
Java调试体系
Java调试体系,就是虚拟机的一整套用于调试的工具和接口。通过JDPA提供的API,开发人员可以方便灵活的搭建Java调试工具。JPDA组成模块JVMTI(Java虚拟机工具接口)JDWP(Java调试线协议)JDI(Java调试接口)JVMTIJVMTI定义了虚拟机应该提供的调试服务,包括调试信息(Information譬如栈信息)、调试行为(Action譬如客户端设置一个断...原创 2019-09-17 20:46:26 · 341 阅读 · 0 评论 -
Vue.js——目录结构详解(即npm run build后),spring boot+thymeleaf+vue整合
目录结构解释基于 vue.js 的前端开发环境,用于前后端分离后的单页应用开发,可以在开发时使用 ES Next、scss 等最新语言特性。项目包含:基础库: vue.js、vue-router、vuex、whatwg-fetch编译/打包工具:webpack、babel、node-sass单元测试工具:karma、mocha、sinon-chai本地服务器:express├── ...原创 2019-06-22 20:41:45 · 1957 阅读 · 1 评论 -
IntelliJ IDEA——配置远程调试
配置步骤开启服务器端的远程调试,配置远程调试端口配置IDEA远程调试启动IDEA的debug远端开启远程调试IDEA配置控制台出现如下图日志,即表示连接成功...原创 2019-05-09 16:53:11 · 1213 阅读 · 0 评论 -
Vue.js——通过监听(setItem)缓存,实现页面刷新
问题需求嵌入其他系统页面,页面关闭后需刷新原页面实现思路在链接处监听嵌入页面是否有返回数据(或者消息等),在监听中设置缓存,在需刷新的原页面监听缓存中对应内容,进行刷新操作。监听操作均在Vue.js的mounted生命周期中进行附上Vue.js代码监听嵌入页面返回的数据信息,并在缓存中设置reloadYymmounted:function (){ window.addEv...原创 2019-04-18 12:27:14 · 2004 阅读 · 0 评论 -
Vue.js——监听弹框页面关闭,回刷原页面
问题需求按钮嵌入另一个系统的页面,在该页面关闭后需要回刷原页面。困难在于链接的目标页面的js不在本系统,只能通过监听页面关闭,再回刷原页面。实现思路通过对象监听方式实现。将链接的目标页面作为对象监听,监听该对象是否关闭,同时判断是否回刷原页面。附上Vue.js代码huishuaOnClick: function() { //将链接目标页面作为对象 var spwindow...原创 2019-04-18 10:27:13 · 4169 阅读 · 0 评论 -
postgresql——执行计划查看方式与计划分析
执行计划查看命令explain[(option[,…])]explain [analyze][verbose]statement可选的option选项有:analyze[boolean]:得到statement的真实运行时间。默认是falseverbose[boolean]:得到statement语句的执行计划和执行计划中的每个节点的详细信息。默认为falsecosts[boole...原创 2019-04-20 21:36:51 · 11047 阅读 · 2 评论 -
Spring boot通过注解解决跨域请求,跨域访问问题
注解@CrossOriginSpring Framework 4.2 GA为CORS提供了第一类支持,使您比通常的基于过滤器的解决方案更容易和更强大地配置它。所以springMVC的版本要在4.2或以上版本才支持@CrossOrigin代码示例 /** * 处理跨域请求 * * @param flid 分流id * @return ...原创 2019-04-03 16:47:37 · 2544 阅读 · 0 评论 -
IntelliJ IDEA——Free Mybatis Plugins(自动关联Mapper.xml和Mapper.java,可通过快捷键从mapper.java入mapper.xml)
该插件可以关联DemoMapper.java和DemoMapper.xml可通过Ctrl+B从java文件进入xml文件在编码界面也有绿色箭头按钮(进入或返回)原创 2019-03-28 21:38:23 · 1861 阅读 · 0 评论 -
git——git命令(依据日常开发会持续更新)
git configGit 一共有3个配置文件:仓库级的配置文件:在仓库的 .git/.gitconfig,该配置文件只对所在的仓库有效。全局配置文件:Mac 系统在 ~/.gitconfig,Windows 系统在 C:\Users&lt;用户名&gt;.gitconfig。系统级的配置文件:在 Git 的安装目录下(Mac 系统下安装目录在 /usr/local/git)的 etc ...原创 2019-03-15 00:56:17 · 146 阅读 · 0 评论 -
yml语法规则(spring boot配置文件)
编写规则1、大小写敏感,同json;2、通过缩进表示层级关系;符号含义先写个注意事项:字符串默认不需要加上单引号或双引号。#:用于注释;“”:不会转义特殊字符,表示字符串本身想表达的意思,如name: ‘aaa \n bbb’ :输出 aaa 换行 bbb‘’:会转义字符,如name: ‘aaa \n bbb’:输出;aaa \n bbb对象animal: petshash: ...原创 2019-03-14 17:53:23 · 3515 阅读 · 0 评论 -
BIO、NIO和AIO的区别(简介)
BIO 同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。NIO 同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。AIO(NIO.2) 异...原创 2019-03-14 15:44:46 · 126 阅读 · 0 评论 -
IntelliJ IDEA——快速搭建spring boot项目,IntelliJ IDEA快速搭建spring boot项目
方法一:1、新建项目:2、选择Spring Initializr,这里会去调用spring官网接口,选择jdk版本,点next3、修改项目配置4、选择项目类型(本例为web项目)5、修改项目名,选择项目地址,完成方法二:快速构建spring boot地址:http://start.spring.io/如图选择,选择完成后点击“Gnerate ...原创 2018-11-08 22:08:15 · 432 阅读 · 2 评论