- 博客(192)
- 收藏
- 关注
原创 安全算法 - 加密算法
加密技术包括两个元素: 加密算法和密钥。加密算法是将普通的文本(或者可以理解的信息)与一串数字(密钥)的结合,产生不可理解的密文的步骤。密钥是用来对数据进行编码和解码的一种算法。在安全保密中,可通过适当的密钥加密技术和管理机制来保证网络的信息通讯安全。
2025-05-07 13:50:21
536
原创 安全算法 - 摘要算法
消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密。只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。消息摘要算法主要应用在“数字签名”领域,作为对明文的摘要算法。著名的摘要算法有RSA公司的MD5算法和SHA-1算法及其大量的变体。无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。消息摘要看起来是“伪随机的”。也就是说对相同的信息求摘要结果相同。消息轻微改变生成的摘要变化会很大。
2025-05-07 13:49:51
966
原创 算法思想 - 回溯算法
Backtracking(回溯)属于 DFS, 本文主要介绍算法中Backtracking算法的思想。回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。
2025-04-29 13:49:26
975
原创 算法思想 - 二分法
本文主要介绍算法思想中分治算法重要的二分法,比如二分查找;二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
2025-04-28 13:15:38
613
原创 调试排错 - Java动态调试技术原理
断点调试是我们最常使用的调试手段,它可以获取到方法执行过程中的变量信息,并可以观察到方法的执行路径。但断点调试会在断点位置停顿,使得整个应用停止响应。在线上停顿应用是致命的,动态调试技术给了我们创造新的调试模式的想象空间。本文将研究Java语言中的动态调试技术,首先概括Java动态调试所涉及的技术基础,接着介绍我们在Java动态调试领域的思考及实践,通过结合实际业务场景,设计并实现了一种具备动态性的断点调试工具Java-debug-tool,显著提高了故障排查效率。
2025-04-27 13:46:52
1041
原创 调试排错 - Java 问题排查之使用IDEA本地调试和远程调试
Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化;并且在实际的排错过程中,还会用到Remote Debug。IDEA 相比 Eclipse/STS效率更高,本文主要介绍基于IDEA的Debug和Remote Debug的技巧。
2025-04-27 13:46:24
990
原创 调试排错 - Java 问题排查之应用在线调试Arthas
在学习Arthas之前,推荐先看上一篇美团技术团队的Java 动态调试技术原理及实践,这样你会对它最底层技术有个了解。可以看下文中最后有个对比图:Greys(Arthas也是基于它做的二次开发)和Java-debug-tool。
2025-04-27 13:45:58
810
原创 调试排错 - Java 线程分析之线程Dump分析
Thread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是 大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可能的话还有源代码的行数。
2025-04-24 11:04:22
600
原创 调试排错 - Java 内存分析之堆外内存
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。于是修改代码,配置扫包路径,发布上线后内存问题解决。
2025-04-24 11:04:02
879
原创 调试排错 - Java 内存分析之堆内存和MetaSpace内存
本文以两个简单的例子(堆内存溢出和MetaSpace (元数据) 内存溢出)解释Java 内存溢出的分析过程。
2025-04-23 09:44:04
632
原创 GC - Java 垃圾回收器之CMS GC问题分析与解决
自 Sun 发布 Java 语言以来,开始使用 GC 技术来进行内存自动管理,避免了手动管理带来的悬挂指针(Dangling Pointer)问题,很大程度上提升了开发效率,从此 GC 技术也一举成名。GC 有着非常悠久的历史,1960 年有着“Lisp 之父”和“人工智能之父”之称的 John McCarthy 就在论文中发布了 GC 算法,60 年以来, GC 技术的发展也突飞猛进,但不管是多么前沿的收集器也都是基于三种基本算法的组合或应用,也就是说 GC 要解决的根本问题这么多年一直都没有变过。笔者认
2025-04-22 10:34:55
813
原创 GC - Java 垃圾回收器之ZGC详解
停顿时间不超过10ms;停顿时间不会随着堆的大小,或者活跃对象的大小而增加(对程序吞吐量影响小于15%);支持8MB~4TB级别的堆(未来支持16TB)。从设计目标来看,我们知道ZGC适用于大内存低延迟服务的内存管理和回收。GC之痛:介绍实际业务中遇到的GC痛点,并分析CMS收集器和G1收集器停顿时间瓶颈;ZGC原理:分析ZGC停顿时间比G1或CMS更短的本质原因,以及背后的技术原理;ZGC调优实践:重点分享对ZGC调优的理解,并分析若干个实际调优案例;
2025-04-21 09:43:42
750
原创 GC - Java 垃圾回收器之G1详解
G1垃圾回收器是在Java7 update 4之后引入的一个新的垃圾回收器。G1是一个分代的,增量的,并行与并发的标记-复制垃圾回收器。它的设计目标是为了适应现在不断扩大的内存和不断增加的处理器数量,进一步降低暂停时间(pause time),同时兼顾良好的吞吐量。G1垃圾回收器是compacting的,因此其回收得到的空间是连续的。这避免了CMS回收器因为不连续空间所造成的问题。如需要更大的堆空间,更多的floating garbage。
2025-04-18 09:27:09
971
原创 GC - Java 垃圾回收基础知识
垃圾收集主要是针对堆和方法区进行;程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收。
2025-04-18 09:26:48
721
原创 JVM 基础 - Java 内存模型详解
顺序一致性内存模型是一个理论参考模型,JMM 和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM 和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序一致性模型来实现处理器和 JMM,那么很多的处理器和编译器优化都要被禁止,这对执行性能将会有很大的影响。放松程序中写 - 读操作的顺序,由此产生了 total store ordering 内存模型(简称为 TSO)。
2025-04-17 09:04:51
1491
原创 JVM 基础 - Java 内存模型引入
现代硬件内存架构与内部Java内存模型略有不同。了解硬件内存架构也很重要,以了解Java内存模型如何与其一起工作。本节介绍了常见的硬件内存架构,后面的部分将介绍Java内存模型如何与其配合使用。这是现代计算机硬件架构的简化图:现代计算机通常有2个或更多CPU。其中一些CPU也可能有多个内核。关键是,在具有2个或更多CPU的现代计算机上,可以同时运行多个线程。每个CPU都能够在任何给定时间运行一个线程。这意味着如果您的Java应用程序是多线程的,线程真的在可能同时运行.
2025-04-16 10:18:44
736
原创 JVM 基础 - JVM 内存结构
通过下面两个问题,理解下PC计数器使用PC寄存器存储字节码指令地址有什么用呢?为什么使用PC寄存器记录当前线程的执行地址呢?因为CPU需要不停的切换各个线程,这时候切换回来以后,就得知道接着从哪开始继续执行。JVM的字节码解释器就需要通过改变PC寄存器的值来明确下一条应该执行什么样的字节码指令。PC寄存器为什么会被设定为线程私有的?多线程在一个特定的时间段内只会执行其中某一个线程方法,CPU会不停的做任务切换,这样必然会导致经常中断或恢复。
2025-04-16 10:18:22
1009
原创 JVM 基础 - Java 类加载机制
通常情况下,我们都是直接使用系统类加载器。但是,有的时候,我们也需要自定义类加载器。比如应用是通过网络来传输 Java 类的字节码,为保证安全性,这些字节码经过了加密处理,这时系统类加载器就无法对其进行加载,这样则需要自定义类加载器来实现。自定义类加载器一般都是继承自 ClassLoader 类,从上面对 loadClass 方法来分析来看,我们只需要重写 findClass 方法即可。try {
2025-04-15 09:20:58
840
原创 JVM 基础 - 字节码的增强技术
字节码增强技术相当于是一把打开运行时JVM的钥匙,利用它可以动态地对运行中的程序做修改,也可以跟踪JVM运行中程序的状态。此外,我们平时使用的动态代理、AOP也与字节码增强密切相关,它们实质上还是利用各种手段生成符合规范的字节码文件。综上所述,掌握字节码增强后可以高效地定位并快速修复一些棘手的问题(如线上性能问题、方法出现不可控的出入参需要紧急加日志等问题),也可以在开发中减少冗余代码,大大提高开发效率。泽恩,美团点评研发工程师。
2025-04-15 09:20:33
692
原创 Java 17 新特性概述
Amber 项目的目标是探索和孵化更小的、以生产力为导向的 Java 语言功能,这些功能已被 OpenJDK JEP 流程接受为候选 JEP。本项目由 Compiler Group 赞助。大多数 Amber 功能在成为 Java 平台的正式部分之前至少要经过两轮预览。对于给定的功能,每轮预览和最终标准化都有单独的 JEP。此页面仅链接到某个功能的最新 JEP。此类 JEP 可能会酌情链接到该功能的早期 JEP。
2025-04-14 09:26:27
1088
原创 Java 16 新特性概述
JDK 16 在 2021 年 3 月 16 号发布!根据发布的规划,这次发布的 JDK 17 是一个长期维护的版本(LTS)。Java 16 提供了数千个性能、稳定性和安全性更新,以及 17 个 JEP(JDK 增强提案),进一步改进了 Java 语言和平台,以帮助开发人员提高工作效率。
2025-04-11 09:18:47
690
原创 Java 15 新特性概述
OracleJDK 15 下载地址:https://www.oracle.com/java/technologies/javase-downloads.htmlOpenJDK 15 地址:https://openjdk.java.net/projects/jdk/15/
2025-04-11 09:18:27
1054
原创 Java 14 新特性概述
在这一版中,主要带来了 ZGC 增强、instanceof 增强、Switch 表达式更新为标准版等方面的改动、增强和新功能。本文主要介绍 Java 14 中的主要新特性,带您快速了解 Java 14 带来了哪些不一样的体验和便利。
2025-04-10 15:56:17
739
原创 Java 13 新特性概述
Java 13 已如期于 9 月 17 日正式发布,此次更新是继半年前 Java 12 这大版本发布之后的一次常规版本更新,在这一版中,主要带来了 ZGC 增强、更新 Socket 实现、Switch 表达式更新等方面的改动、增强。本文主要针对 Java 13 中主要的新特性展开介绍,带你快速了解 Java 13 带来的不同体验。
2025-04-10 09:33:07
903
原创 Java 12 新特性概述
JDK12 在 2019 年 3 月 19 号正式发布,不同于JDK11,JDK12并不是一个LTS版本。作为一个中间版本,JDK12版本特性增加较少。2017年宣布的加速发布节奏要求每六个月发布一次功能,每季度更新一次,每三年发布一次长期支持(LTS)更新版本(或每六个版本一次)。
2025-04-09 10:33:32
741
原创 Java 11 新特性概述
Java 11 在 2018 年 9 月 25 日正式发布,之前在 Java 10 新特性介绍 中介绍过,为了加快的版本迭代、跟进社区反馈,Java 的版本发布周期调整为每六个月一次——即每半年发布一个大版本,每个季度发布一个中间特性版本,并且做出不会跳票的承诺。通过这样的方式,Java 开发团队能够将一些重要特性尽早的合并到 Java Release 版本中,以便快速得到开发者的反馈,避免出现类似 Java 9 发布时的两次延期的情况。
2025-04-08 09:29:24
1014
原创 Java 10 新特性概述
作为当今使用最广泛的编程语言之一的 Java 在 2018 年 3 月 21 日发布了第十个大版本。为了更快地迭代、更好地跟进社区反馈,Java 语言版本发布周期调整为每隔 6 个月发布一次。Java 10 是这一新规则之后,采用新发布周期的第一个大版本。Java 10 版本带来了很多新特性,其中最备受广大开发者关注的莫过于局部变量类型推断。除此之外,还有其他包括垃圾收集器改善、GC 改进、性能提升、线程管控等一批新特性。
2025-04-07 10:34:37
846
原创 Java 9 新特性概述
Java 9 正式发布于 2017 年 9 月 21 日。作为 Java8 之后 3 年半才发布的新版本,Java 9 带来了很多重大的变化。其中最重要的改动是 Java 平台模块系统的引入。除此之外,还有一些新的特性。本文对 Java9 中包含的新特性做了概括性的介绍,可以帮助你快速了解 Java 9。
2025-04-06 09:56:35
760
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人