自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(213)
  • 资源 (1)
  • 收藏
  • 关注

原创 Spring Security进阶学习

本文带大家实操一个SpringBoot项目,实现认证与授权,接着从源码层面分析认证与授权的工作原理,当然,原理分析是枯燥的,后续还会结合实际项目进行学习的。

2022-12-14 10:05:33 647 1

原创 Spring Security入门学习

Spring Security 是为基于 Spring 的应用程序提供声明式安全保护的安全性框架。本文主要介绍如何使用 Spring Security来实现登录认证与授权,比较简单,后续会深入源码分析认证与授权流程。

2022-12-12 09:52:26 590

原创 基于Session的认证与授权实践

本文主要还是对《认证与授权》一文中提到的知识点进行实操,即基于 session 的认证和授权方式,相对来说比较简单,认证过程清晰明了,但并不适合大型大项目,所以我们还需要继续学习Spring Security。

2022-12-07 09:31:17 583

原创 认证与授权之Cookie、Session、Token、JWT

在互联网应用开发中,主要通过下面几种方式实现授权:Session、Cookie和Token,本文将详细介绍三者间的区别,以及比较火热的JWT是怎么一回事。

2022-12-06 09:08:29 542

原创 Java应用程序安全框架

在构建应用程序时,必须首先考虑其安全性。每个应用程序都是通过网络发布的,随之而来的是安全、隐私和完整性风险的威胁。本文列举市面上比较热门的安全框架,并最终选择使用Spring Security。

2022-12-05 09:13:50 1139

原创 SpringBoot结合XXL-JOB实现定时任务

Quartz 作为一个优秀的开源调度框架,本文将选用 Quartz 来实现两个简单的业务需求,带大家学习如何动态创建任务。

2022-12-02 07:34:38 1171

原创 SpringBoot结合Quartz实现定时任务

Quartz 作为一个优秀的开源调度框架,本文将选用 Quartz 来实现两个简单的业务需求,带大家学习如何动态创建任务。

2022-12-01 09:30:08 3435

原创 Java定时任务技术分析

项目开发中可能会遇到定时任务的需求,比如说定时同步数据等,那么市面上有哪些Java 相关的定时任务开发技术呢?实际开发时又该如何选择呢?本文将带大家认识目前比较流行的一些技术,并给出相关建议。

2022-11-30 09:02:41 2998

原创 SpringBoot结合Liquibase实现数据库变更管理

本文将带着大家实操一个 SpringBoot 结合 Liquibase 的项目,看看如何新增数据表、修改表字段、初始化数据等功能,顺带使用一下 Liquibase 模版生成器插件。

2022-11-29 09:00:29 1213

原创 数据库变更管理:Liquibase or Flyway

项目开发过程中经常涉及到数据库变更,对表结构的修复及对数据的修改,为此我们选择数据库版本管理工具,本文主要分析Liquibase和Flyway利弊,并最终选择Liquibase。

2022-11-28 08:29:47 1414

原创 SpringBoot集成Spring Data JPA项目实操

本文将实现 SpringBoot+ Spring Data JPA 的项目搭建,项目特色是针对 JPA 专门写了一套动态链式查询工具类,进而实现一对多查询和连表查询。

2022-11-24 15:27:45 685 1

原创 SpringBoot集成MybatisPlus项目实操

SpringBoot作为最流行的框架,可以适配多种ORM框架,本文详细讲解了如何从零开发一个基于SpringBoot和Mybatis Plus的微服务项目,项目虽小,但五脏俱全。

2022-11-22 15:07:59 2617

原创 SpringBoot集成Mybatis项目实操

SpringBoot作为最流行的框架,可以适配多种ORM框架,本文详细讲解了如何从零开发一个基于SpringBoot和Mybatis的微服务项目,项目虽小,但五脏俱全。

2022-11-21 07:38:18 495

原创 SpringBoot项目基础设施搭建

每个项目中都会有一些共用的代码,我们称之为项目的基础设施,随拿随用。本文主要介绍 SpringBoot 项目中的一些基础设施。

2022-11-17 07:35:48 476

原创 Spring Data JPA关于懒加载的那些事

本文主要分析Spring Data JPA中出现懒加载的原因以及应对办法,顺带科普一下JPA相关的知识点。

2022-09-28 09:21:43 657

原创 rollback-only异常令我对事务有了新的认识

深入分析为何会产生rollback-only异常,以及对应的解决方法,顺带了解了同类自调用导致事务失效的原因和解决方法。

2022-09-26 09:07:53 270

原创 GraphicsMagick之实践出真知

GraphicsMagick实践过程中遇到了OOM问题,还发现了OpenMP功能,本文主要讲述多线程环境下如何提高图片处理能力,以及怎样避免OOM问题。

2022-09-21 07:02:18 381

原创 手把手教你如何通过Java给图片添加文字和图片水印

本文将剖析多个技术方案来实现水印生成,包括文字水印和图片水印,详细讲述了关于水印的实现细节,并最终抉择出最优方案。

2022-09-18 22:35:04 2992 1

原创 rollback-only异常令我对事务有了新的认识

深入分析为何会产生rollback-only异常,以及对应的解决方法,顺带了解了同类自调用导致事务失效的原因和解决方法。

2022-09-13 23:18:38 368

原创 深入理解final关键字

在 Java 中,我们最初认识final 关键字可以用来修饰类、方法和变量(包括成员变量和局部变量),本文从闭包开始带大家认识 Java 的匿名内部类,介绍 final 关键字在匿名内部类中使用。以及最后深入底层分析final 关键字为何可以保证 final 域的可见性。

2022-09-08 07:33:47 303

原创 深入理解synchronized关键字

在并发编程学习过程中,我们应该都听过“线程安全”这个名称,对于这一概念,我们知道它可以解决并发编程不安全的问题,也有一个简单的印象:“代码在并发环境下,可以安全地被多个线程使用,这就是线程安全“。上述关于“线程安全”的认识大致是对的,我们来看看别人是如何定义“线程安全”的。《Java并发编程实战(Java Concurrency In Practice) 》 的作者 Brian Goetz 为“线程安全”做出了一个比较恰当的定义: “

2022-09-01 21:10:03 378 1

原创 深入理解volatile关键字

保证可见性和禁止指令重排序。但是对于 volatile 的使用以及背后的原理我们一无所知,所以本文将带你好好了解一番。由于 volatile 关键字是与 Java的内存模型有关的,因此在讲述 volatile 关键之前,我们先来了解一下Java 内存模型,然后介绍 volatile 关键字的使用,最后详解 volatile 关键字的原理。废话不多说,我们直接进入正文。...

2022-08-16 22:23:11 190

原创 Happens-Before规则详解

本文为《Java高并发》第四篇文章,首发于。在《》一节中提到编译优化会带来有序性问题,具体来说就是JIT编译器会进行指令重排序(InstructionReorder)优化。优化措施引发的有序性问题,Java语言肯定会注意到,所以就引入了Happens-Before(先行发生)原则,它是JMM最核心的概念,在中提到了如何保证可见性和有序性,都和该原则有关联。对应Java程序员来说,理解Happens-before是理解JMM的关键。...

2022-07-14 22:07:34 542

原创 Java并发编程Bug的源头

相信大家都听说过并发编程,面试中也经常会被提问这一知识点,有时候让讲讲自己有没有并发编程的经验,细致地讲一下。结果可想而知,理论知识还可以说一说,但没多少实践经验,更让人头疼的是理论与实践差距极大。在工作中,系统的并发量比较低,借助数据库和类似 Tomcat 这种中间件,我们基本上不用写并发程序。总之一句话,系统并发量不高的时候,并发问题基本上都被中间件和数据库解决了,或者系统数据量比较庞大,对性能有所要求,此时就需要用到并发编程了。并发编程是个好东西,但天下没有免费的午餐,凡事都是有代价的,获得高性能的同

2022-07-07 14:43:35 148

原创 Java并发进阶之:Java内存模型(JMM)详解

紧接前文,在了解了计算机的相关概念后,我们正式进入 Java 并发知识的学习。本文主要讲解 Java 内存模型(Java Memory Model,JMM),它是 Java 虚拟机规范中定义的一种模型,用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的并发效果,JMM 规范了 Java 虚拟机与计算机内存是如何协同工作的:规定了一个...

2022-07-02 14:33:07 432

原创 Java并发进阶之:关于计算机的一些知识

CPU、内存、I/O设备三者的处理速度差异很大,其中 CPU 处理速度最高,I/O设备速度最差。而一个系统中会同时用到这三者,根据木桶理论(一只水桶能装多少水取决于它最短的那块木板),程序整体的性能取决于最慢的操作——读写 I/O 设备,也就是说单方面提高 CPU 性能是无效的。为了合理利用 CPU 的高性能,平衡这三者的速度差异,计算机体系结构、操作系统都做出了贡献,主要体现为:那么接下来让我们看看计算机究竟做了什么贡献,关于进程和线程留到 Java 并发中再做介绍。我们当前使用的计算机硬件架构为冯·诺依

2022-07-02 14:31:41 310

原创 JVM系列之:你知道Java有多少种内存溢出吗

本文为《深入学习 JVM 系列》第二十五篇文章Java内存区域关于这部分内容大多来源于《深入理解Java虚拟机》一书。Java 运行时数据区域(JDK8)如下图所示:关于上述提到的线程共享和线程隔离区域,下图做详细讲解:程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器来完。另外,在多线程的情况下,为了线程切换后能.

2022-04-06 23:44:42 1969

原创 JVM系列之:日志分析工具:GCViewer、VisualVM、GCeasy

本文为《深入学习 JVM 系列》第二十四篇文章GCViewerGCViewer 是一个可以将 JVM 中的 gc log 可视化的工具,使用该工具可以帮助你充分的发现 JVM 垃圾回收中的潜在问题,让你可以更加准确的做出关于 JVM GC 优化的决策。安装并启动git clone https://github.com/chewiebug/GCViewer.git//或者用 IDEA打开项目后,用 maven进行打包mvn clean pacakge//得到一个 jar包cd target.

2022-04-01 21:15:07 5203

原创 JVM系列之:MAT工具使用教程

本文为《深入学习 JVM 系列》第二十三篇文章Eclipse Memory Analyzer (MAT)是一个快速且功能丰富的Java堆分析器,可帮助您发现内存泄漏并减少内存消耗。安装并启动直接参考 Mac下MAT的安装需要注意的是注意 JDK 版本和 MAT 版本的映射,最新的 MAT 版本为 1.12.0,需要在 JDK11 以上运行。如果 JDK 版本为 11,且 MAT 版本是最新的,还需要修改 /Applications/mat.app/Contents/Eclipse/Memor.

2022-03-31 21:31:18 7789

原创 JVM系列之:GC调优基础以及初识jstat命令

本文为《深入学习 JVM 系列》第二十二篇文章影响垃圾收集性能有三个主要的属性,垃圾收集调优又有三个基本原则,以及垃圾收集调优时需要采集的信息。如果想要对垃圾收集进行调优,则需要根据实际场景对不同属性做出取舍,理解调优的原则以及收集什么信息。性能属性吞吐量吞吐量是评价垃圾收集器能力的重要指标之一,指不考虑垃圾收集引起的停顿时间或内存消耗,每单位时间可以执行的工作量的指标。通常,吞吐量的增加是以延迟增加和/或内存占用增加为代价的。一般吞吐量需求(Generic requirements for .

2022-03-30 22:32:38 860

原创 JVM系列之:你知道Jhsdb整合的故障处理工具

本文为《深入学习 JVM 系列》第二十一篇文章Jhsdb 是 JDK9 引入的新的命令行工具,它有 clhsdb、debugd、hsdb、jstack、jmap、jinfo、jsnap 这些 mode 可以使用,其中有几个在名称和功能上与以前的 JDK 发行版中可用的各个命令行工具相对应。看得出来,官方想要 jhsdb 工具整合多个其他工具的功能,甚至还做了一些功能拓展。所以本文将带大家认识一下 jhsdb 下的这些 mode。在使用 jhsdb 工具之前,必须先获取 PID,所以我们先来认识一下 .

2022-03-29 23:06:16 3123

原创 JVM系列之:关于即时编译器的其他一些优化手段

本文为《深入学习 JVM 系列》第二十篇文章在前面两篇文章讲述了即时编译器的两种特殊优化技术:方法内联和逃逸分析,其中基于逃逸分析结果又有三种优化方式:同步消除、栈上分配以及标量替换。除此之外,即时编译器还有很多优化手段,其中有不少经典编译器的优化手段,也有许多针对 Java 语言,或者说针对运行在 Java 虚拟机上的所有语言进行的优化。相较于方法内联,其他优化手段理解起来并不困难。一开始没打算整理这块内容,但是看了一下,觉得和之前的《如何提升代码质量》一文息息相关,除了要熟悉重构的手段,了解更深.

2022-03-28 20:47:39 657

原创 JVM系列之:关于逃逸分析的学习

本文为《深入学习 JVM 系列》第十九篇文章上文讲解完方法内联后,JIT 即时编译还有一个最前沿的优化技术:逃逸分析(Escape Analysis) 。废话少说,我们直接步入正题吧。逃逸分析首先我们需要知道,逃逸分析并不是直接的优化手段,而是通过动态分析对象的作用域,为其它优化手段提供依据的分析技术。具体而言就是:逃逸分析是“一种确定指针动态范围的静态分析,它可以分析在程序的哪些地方可以访问到指针”。Java虚拟机的即时编译器会对新建的对象进行逃逸分析,判断对象是否逃逸出线程或者方法。即时编译.

2022-03-27 20:41:53 6151

原创 JVM系列之:深入学习方法内联

在前面多篇文章中多次提到方法内联,作为编译器最重要的优化技术,该技术不仅可以消除调用本身带来的性能开销,还能够触发更多的优化。本文将带领大家对该技术一探究竟。方法内联方法内联指的是:在编译过程中遇到方法调用时,将目标方法的方法体纳入编译范围之中,并取代原方法调用的优化手段。以 getter/setter 为例,如果没有方法内联,在调用 getter/setter 时,程序需要保存当前方法的执行位置,创建并压入用于 getter/setter 的栈帧、访问字段、弹出栈帧,最后再恢复当前方法的执行。而当内

2022-03-24 22:25:09 1146

原创 JVM系列之:关于即时编译器的优化措施

本文为《深入学习 JVM 系列》第十七篇文章我们来继续讲解 Java 虚拟机中的即时编译。Profiling上篇文章中介绍了关于分层编译的交互关系图,这里再贴一遍。对于图片中描述的四种编译途径做过详细介绍,这里就不重复介绍了,其中提到了如下内容:分层编译中的 0 层、2 层和 3 层都会进行 profiling,收集能够反映程序执行状态的数据。其中,最为基础的便是 2层进行的 profiling,它只需要统计方法的调用次数以及循环回边的执行次数,当统计之和超过阈值就会触发即时编译。0 层和 .

2022-03-23 22:41:25 667

原创 JVM系列之:关于即时编译器的那些事

本文为《深入学习 JVM 系列》第十六篇文章我们在前文学习 Java 是如何执行的这篇文章中有提及即时编译器,这是一项用来提升应用程序运行效率的技术。通常而言,代码会先被 Java 虚拟机解释执行,之后反复执行的热点代码则会被即时编译成为机器码,直接运行在底层硬件之上。那么问题来了,既然在 HotSpot 中即时编译可以提升程序运行效率,为什么还需要解释器呢?解释器与编译器首先需要了解的是,并不是所有的 Java 虚拟机都采用解释器与编译器并存的运行架构, 但是主流的 Java 虚拟机,比如说 .

2022-03-22 22:05:13 1642

原创 JVM系列之:你知道Lombok是如何工作的吗

本文为《深入学习 JVM 系列》第十五篇文章在学习本文前,也许你只是用过 Lombok,知道有一些注解可以帮助我们快速开发,但是你是否了解它是怎么工作的,为什么可以产生这样的效果?让我们带着上述问题,开始本文的学习。在前文讲解《Javac编译器》时学习编译器的执行过程时,有这么一张流程图:第二步处理过程就是插入式注解处理器的注解处理过程,当时没做过多了解,本文就来好好学习一番。首先我们来认识一下注解。注解注解(Annontation)是 Java 5 引入的,Annontation 像一种.

2022-03-21 21:53:18 1482

原创 JVM系列之:初识Javac编译器和Java语法糖

本文为《深入学习 JVM 系列》第十四篇文章Javac编译器概念《Java虚拟机规范》 中严格定义了 Class 文件格式的各种细节, 可是对如何把 Java 源码编译为Class 文件却描述得相当宽松。这里的 javac 编译器称为前端编译器,其他的前端编译器还有诸如 Eclipse JDT 中的增量式编译器 ECJ 等。相对应的还有后端编译器,它在程序运行期间将字节码转变成机器码,如 HotSpot 自带的 JIT 编译器,后续章节我们会详细介绍。在《深入理解Java虚拟机》一文中描述了 j.

2022-03-20 21:05:57 1106

原创 JVM系列之:你知道为什么要有两个 Survivor吗?关于卡表技术又有多少了解

本文为《深入学习 JVM 系列》第十三篇文章分代收集理论以下内容来源于《深入理解Java虚拟机》一文。分代收集理论实质是一套符合大多数程序运行实际情况的经验法则, 它建立在两个分代假说之上:1、弱分代假说(Weak Generational Hypothesis) : 绝大多数对象都是朝生夕灭的。2、强分代假说(Strong Generational Hypothesis) : 熬过越多次垃圾收集过程的对象就越难以消亡基于上述两个分代假说,当前流行的垃圾收集器都遵循如下设计原则:收集器应该将.

2022-03-17 22:54:33 2044

原创 JVM系列之:聊一聊垃圾收集器

关于 JVM 垃圾回收内容比较多,本文将继续讲述一下 JVM 发展历程中的各个垃圾收集器,这部分内容大多来源于《深入理解Java虚拟机》一文,没有太多的扩展性内容可以补充,但是为了整个系列的完整性,还是补发一下。Serial 收集器Serial(串行)收集器收集器是最基本、历史最悠久的垃圾收集器,是基于标记-复制算法的新生代收集器。大家看名字就知道这个收集器是一个单线程收集器了。它的 “单线程” 的意义不仅仅意味着它只会使用一条垃圾收集线程去完成垃圾收集工作,更重要的是它在进行垃圾收集工作的时候必须暂停

2022-03-15 23:14:13 231

instantclient_11_2.rar

本机不装oracle,远程连接oracle时需要下载该文件,解压引用其中的dll文件。 欢迎访问个人博客主页:https://blog.csdn.net/Herishwater

2019-12-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除