![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 85
普通网友
这个作者很懒,什么都没留下…
展开
-
Spring Cloud Gateway 雪崩了,我 TM 人傻了
问题现象与背景昨晚我们的网关雪崩了一段时间,现象是:1.不断有各种微服务报异常:在写 HTTP 响应的时候,连接已经关闭:reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE response 复制代码2.同时还有请求还没读取完,连接已经关闭的异常:org.springframework.http.converter.HttpMessageNotReadable原创 2021-09-27 22:02:07 · 663 阅读 · 0 评论 -
实战!聊聊如何解决MySQL深分页问题
我们日常做分页需求时,一般会用limit实现,但是当偏移量特别大的时候,查询效率就变得低下。本文将分4个方案,讨论如何优化MySQL百万数据的深分页问题,并附上最近优化生产慢SQL的实战案例。公众号:捡田螺的小男孩limit深分页为什么会变慢?先看下表结构哈:CREATETABLEaccount(idint(11)NOTNULLAUTO_INCREMENTCOMMENT'主键Id',namevarchar(255)DEFAULTNULLCOMMENT...原创 2021-09-27 21:59:55 · 217 阅读 · 0 评论 -
面试官:JVM三种核心内容有?并从实战角度解析!
01 前言这章节主要从实战角度方面,去解读JVM。问:JVM三种核心内容有哪一些?答:类加载机制+JVM调优实战+代码优化02 类加载机制Java源代码经过编译器编译成字节码之后,最终都需要加载到虚拟机之后才能运行。虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java 类型,这就是虚拟机的类加载机制。2.1 类加载时机一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(L原创 2021-09-15 14:35:16 · 791 阅读 · 0 评论 -
【JVM系列8】JVM知识点总览
前言我理解JVM应该属于Java高阶的知识,之前是通过博客学习这块知识,后来对照着《深入理解Java虚拟机》书籍把重点知识又过了一遍。经过大半个月的学习,我给出我学习的感受。我感觉其实通过博客学习这块知识其实就够了,因为博客中的知识直击JVM的靶心,基本都是干货,但是对于一些实际的场景用例,博客给的示例不多,这个是通过博客学习唯一的缺点。通过书籍学习JVM知识,真的感觉这本书太厚了,不建议新人学习,因为这本书也就前5章的内容比较干货,后面的大部分知识可以直接跳过,或者作为选学的知识,比如你学习书原创 2021-09-15 14:34:22 · 169 阅读 · 0 评论 -
设计模式-责任链(职责链)模式及责任链设计模式的应用
1.什么是责任链设计模式责任链设计模式主要构成有抽象处理者、具体处理者、客户类,在处理请求的时候,将请求通过客户类发送至处理链路上,这样所有处理对象都有机会处理请求,使发送者与接受者解耦在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,所以责任链将请求的发送者和请求的处理者解耦了。2.责任链模式的优点/缺点和使用场景使用责任链模式的优点:发送者与接收方的处理对象类之间解耦 封装每个处理对象,处理类的最小封装原则 可以任意添加处理对象,调整原创 2021-09-15 14:33:16 · 254 阅读 · 0 评论 -
两张图让你快速读懂JVM字节码指令
(一)概述很多人可能会觉得JVM字节码很神秘,我们写的一行行代码放到底层竟然可以用一串16进制的数字保存。再到计算机底层竟然可以用0和1执行如何复杂的代码。JVM的设计确实十分巧妙,但对我们几乎所有开发者来说,这些底层的内容我们已经不需要再去掌握了,因此今天我们不去讲JVM字节码究竟是怎么设计的,我们通过最简单的方法来快速读懂JVM字节码。(二)什么是字节码我们写的Java代码经过编译之后就会变成一个个.class文件,这就是字节码文件。用一些专门打开.class的工具打开后,可以发现里面就是一原创 2021-09-15 14:32:46 · 145 阅读 · 0 评论 -
详细介绍java关键字enum
今天,咱们来聊一下枚举enmu。枚举作为JDK1.5引入了新的类型,相信大家都不陌生,那么,具体有哪些用法呢,下面展开讲讲:一、定义常量在1.5之前,我们定义一个常量,通常用final关键字。而有了枚举之后,我们可以将一类常量定义在枚举类中,这样方便查找,代码逻辑也更清晰。如:public enum ErrorCodeEnum { CODE_ACCOUNT_ERROR, CODE_TOKEN_ERROR, CODE_PARAM_EMPTY, CODE_PARAM_ERROR,原创 2021-09-15 14:27:05 · 202 阅读 · 0 评论 -
Java 17 正式发布,Oracle推出免费JDK许可证,Spring 6 以 Java17为基准
一个小时前,JAVA 17 正式发布,这是一个LTS(长期支持)版本,带来了不少有用的新特性。关于Java 17 的一些新特性,胖哥已经在往期的文章中进行了介绍,这里就不再赘述了,有兴趣的可以移步文章 Java 17 新特性确定。Oracle 免费 JDKJAVA 17 带来的不仅仅是新功能。更快的 LTS 节奏和免费的 Oracle JDK 使其成为有史以来支持最好的现代版本。Oracle JDK收费为人诟病,此次Oracle推出了Free Java License ,大致摘要:Oracl..原创 2021-09-15 14:15:19 · 811 阅读 · 0 评论 -
Java17 新特性确定,Java之父:终于可以和一个长达25年的漏洞说再见了
Java 17 目前已经进入Rampdown Phase One阶段,所有的功能特性都已经被冻结。这说明Java 17的新特性已经定了,不会再增加新的JEP(JDK增强建议)。之所以关心Java 17是因为和Java 8、Java 11一样它是下一个LTS版本。发布日程距离Java 17发布的时间已经越来越近了。Rampdown Phase One阶段将持续近一个月。接下来的工作将以JEP3为基准,对可能出现的Bug进行修复、延迟修复、甚至是将Bug所在特性从版本中移除。大家关心的Java17发布时原创 2021-09-15 14:14:23 · 94 阅读 · 0 评论 -
面试官讲你这15道题都不会,你怎么来吊打我
前言1. redo log是什么? 为什么需要redo log?redo log 是什么呢?redo log 是重做日志。 它记录了数据页上的改动。 它指事务中修改了的数据,将会备份存储。 发生数据库服务器宕机、或者脏页未写入磁盘,可以通过redo log恢复。 它是Innodb存储引擎独有的为什么需要 redo log?redo log主要用于MySQL异常重启后的一种数据恢复手段,确保了数据的一致性。 其实是为了配合MySQL的WAL机制。因为MySQL进行更新操作,为了能够原创 2021-09-15 13:49:10 · 171 阅读 · 0 评论 -
设计模式七大原则(哪七个)及代码示例,请看本篇文章
七大原则:单一职责原则; 接口隔离原则; 依赖倒转原则; 里氏替换原则; 开闭原则ocp; 迪米特法则; 合成复用原则。设计模式其实包含了面向对象的精髓,封装、继承、多态。一、单一职责原则对于类来说,一个类应该只负责一项职责。假设A负责两个不同的职责1和2,如果1的内容需要改变,影响了2,那可能2会执行错误,所以需要将A分为两个类。1.1 示例public class SingleResponsibility1 { public static void mai原创 2021-09-14 16:14:41 · 183 阅读 · 0 评论 -
「难点-核心-遗漏」Java线程状态流转及生命周期的技术指南
前提介绍本章主要介绍相关线程声明周期的转换机制以及声明周期的流转关系以及相关AQS的实现和相关的基本原理,配合这相关官方文档的中英文互译的介绍。线程状态流转及生命周期当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过新建(New)、就绪/可运行状态(Runnable)、阻塞(Blocked)和等待(Wait)、时间等待(Time_wait)、终止状态(Terminate)六种状态。尤其是当线程启动以后,它不能一直“霸占”着CPU独自原创 2021-09-14 16:14:03 · 119 阅读 · 0 评论 -
JVM内存区域以及各区域的内存溢出异常,内存分代策略,垃圾收集
本文整理自周志明老师的《深入理解Java虚拟机-JVM高级特性与最佳实践》第3版的第二章和第三章。加上了一些网上拼拼凑凑的图片,个人认为很多博客复制来复制去,最后的东西都看不懂,所以从书里码了一下知识点,也用作自己记忆。一、一个命令上面的结果显示了 jvm 的模式:Client VM(-client),为在客户端环境中减少启动时间而优化;Server VM(-server),为在服务器环境中最大化程序执行速度而设计。在文件路径:jdk-11.0.7+10\lib 下面可以更改 jv原创 2021-09-14 16:13:29 · 239 阅读 · 0 评论 -
类文件结构、JVM的类加载过程、加载机制、加载器、双亲委派模型
一、类文件的结构我们都知道,各种不同平台的虚拟机,都支持 “字节码 Byte Code” 这种程序存储格式,这构成了 Java 平台无关性的基石。甚至现在平台无关性也开始演变出 “语言无关性” ,就是其他语言也可以运行在 Java 虚拟机之上,比如现在的 Kotlin、Scala 等。实现语言无关性的基础仍然是虚拟机和字节码存储格式,Java 虚拟机步包括 Java 语言在内的任何语言绑定,他只和 “Class 文件” 这种特定的二进制文件格式所关联,Class 文件中包含了 Java 虚拟机指令集原创 2021-09-14 16:12:38 · 121 阅读 · 0 评论 -
juc包:使用 juc 包下的显式 Lock 实现线程间通信
一、前置知识线程间通信三要素:多线程+判断+操作+通知+资源类。上面的五个要素,其他三个要素就是普通的多线程程序问题,那么通信就需要线程间的互相通知,往往伴随着何时通信的判断逻辑。在 java 的 Object 类里就提供了对应的方法来进行通知,同样的,保证安全的判断采用隐式的对象锁,也就是 synchronized 关键字实现。这块内容在:java多线程:线程间通信——生产者消费者模型已经写过。2|0二、使用 Lock 实现线程间通信那么,我们知道 juc 包里提供了显式的原创 2021-09-14 16:12:00 · 78 阅读 · 0 评论 -
java字符串之理论重点
1、简单概述一直以来,对String这个字符串类都是心存疑惑的,也不知道如何来进行解决。最近花点时间看了下别人的博客来研究一下,觉得挺有意思的,所以将此来记录下来。String将会牵扯到堆和常量池,字符串常量池在JDK8中是存在于堆中的,是属于堆的一部分。引入:String str = "计算机";"computer"也是一个字符串对象,只不过上面创建的这个会存在于字符串常量池中,返回来的是在字符串在常量池中的地址。String str = "计算机";String str原创 2021-09-14 16:10:52 · 384 阅读 · 1 评论 -
Java入门姿势 三大特性之一多态性
多态(polymorphism)是面向对象三大特征之一。同一行为,通过不同的子类,可以体现出来的不同的形态。多态指的是同一个方法调用,由于对象不同可能会有不同的行为。现实生活中,同一个方法,具体实现会完全不同。 比如:同样是调用人的“休息”方法,张三是睡觉,李四是旅游,王五是听音乐; 同样是调用人“吃饭”的方法,中国人用筷子吃饭,英国人用刀叉吃饭,印度人用手吃饭。编译器类型指的是‘=’左边的类型,运行期类型指的是‘=’右边的类型。当有继承关系时,可能发生编译期类型和运行期类型不同的情况,即编译期类型原创 2021-09-14 16:08:35 · 77 阅读 · 0 评论 -
Idea的springMVC项目,jsp页面的EL表达式失效问题,数据显示不出来。(已解决)
一、问题在做一个demo,因为很久没有重新用 jsp 页面直接 EL 取数据了,遇到了问题,记录一下。简单来说就是用 EL 在 jsp 页面里面从域中用 ${ xxx } 取数据:但是浏览器对应页面的位置是空白。 也没有显示 ${ xxx } 这个表达式的字符串本身。二、前置条件:已经引入了jstl和taglibs的依赖; 引入依赖之后在 jsp 页面的头部需要添加命名空间,也就是<%@ taglib prefix="c" uri="Oracle Java Technolo...原创 2021-09-14 16:05:01 · 1846 阅读 · 3 评论 -
java的各种集合为什么不安全(List、Set、Map)以及代替方案
我们已经知道多线程下会有各种不安全的问题,都知道并发的基本解决方案,这里对出现错误的情况进行一个实际模拟,以此能够联想到具体的生产环境中。1|0一、List 的不安全1|11.1 问题看一段代码:public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); for (int i = 0; i < 3; i++){ new Th..原创 2021-09-14 15:58:20 · 307 阅读 · 0 评论 -
计算机网络:TCP协议建立连接的过程为什么是三次握手而不是两次?【对于网上的两种说法我的思考】
网上关于这个问题吵得很凶,但是仔细看过之后我更偏向认为两种说的是一样的。首先我们来看看 TCP 协议的三次握手过程如上图所示:解释一下里面的英文:里面起到作用的一些标志位就是TCP报文首部里的内容,ACK确认标志位,SYN同步标志位,ack确认号; 两端的状态CLOSED 就是连接关闭状态,LISTEN状态就是监听状态,SYN-SENT就是同步已发送状态,SYN-RCVD就是同步已接受状态,ESTABLISHED就是连接已建立状态。三报文挥手的过程如下:客户端发送连接请求:头部S原创 2021-09-14 15:57:37 · 361 阅读 · 0 评论 -
Java并发之JUC的通关文牒
一、简介java5.0提供了 java.util.concurrent (简称juc)此包中增加了并发编程中很常用的实用工具类,用于定义类似于线程的自定义系统,包括线程池、异步io和轻量级任务框架。提供可调的、灵活的线程池。还提供了设计用于多线程上下文中的Colletion实现等。二、volatile关键字 内存的可见性 内存可见性(Memory Visibility):是指在多个线程操作共享数据时,一个线程在使用共享数据时,而另一个线程修改了共享数据的状态,这时候需要确保该线程修改完共享数原创 2021-09-13 19:53:54 · 146 阅读 · 0 评论 -
深挖技术栈(第四期) 之 JUC学习笔记(1)
线程的生命周期和状态?Java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种不同状态的其中一个状态(图源《Java 并发编程艺术》4.1.4 节)。线程在生命周期中并不是固定处于某一个状态而是随着代码的执行在不同状态之间切换。Java 线程状态变迁如下图所示(图源《Java 并发编程艺术》4.1.4 节):订正(来自issue736):原图中 wait 到 runnable 状态的转换中,join实际上是Thread类的方法,但这里写成了Object。由上图可以看出:线程创建之原创 2021-09-13 19:53:01 · 371 阅读 · 0 评论 -
深入理解Java虚拟机系列 --10 垃圾回收篇01 --垃圾回收相关算法
因为热爱所以坚持,因为热爱所以等待。熬过漫长无戏可演的日子,终于换来了人生的春天,共勉!!!垃圾回收篇之垃圾回收相关算法前言:(1). 判断对象存活的两种方式(引用计数算法、枚举根节点做可达性分析) (2). 标记阶段(引用计数法、枚举根节点做可达性分析) (3). 清除阶段(标记复制算法、标记清除算法、标记整理(压缩)算法、分代收集、增量收集算法、分区算法)1.引用计数算法①. 原理:假设有一个对象A,任何一个对象对A的引用,那么对象A的引用计数器+1,当引用失败时,对象A的引用计数器原创 2021-09-13 19:51:30 · 77 阅读 · 0 评论 -
Jdk动态代理与Cglib动态代理
前言在前面的spring中,提到了aop的原理就是使用了动态代理,这篇文章就写一下jdk代理和cglib代理。先在这里贴一下相关的需要代理的对象和接口。首先是接口:public interface TestDao { void test();}复制代码然后是实现类:public class TestDaoImpl implements TestDao { @Override public void test() { System.out.println("原创 2021-09-13 19:50:49 · 3506 阅读 · 1 评论 -
java 并发编程中的ConcurrentModificationException 异常问题
云渲染服务中的 java.util.ConcurrentModificationException 异常问题针对最近云渲染服务中的出现的一个问题进行反思与回顾回调视频渲染进度问题在修改过回调进度的 url 后,启用了之前的代码片段。导致之前的漏洞被爆出:在多线程编程中,直接使用 hashmap 来保存当前的渲染任务,而不进行一些必要的线程间的互斥与同步操作,导致在一个线程通过迭代器遍历 hashmap 时,另一个线程同时修改 hashmap,导致程序抛出java.util.Concurrent原创 2021-09-13 19:50:07 · 272 阅读 · 0 评论 -
ReentrantLock源码分析
功能介绍ReentrantLock可重入锁,Lock锁的具体实现类,具有与synchronized锁相同的基本行为和语义的可重入互斥锁,但具有扩展功能。ReentrantLock锁由最后成功锁定且未释放的线程拥有。当锁不属于任何线程时,调用锁的线程将返回并成功获取锁。如果当前线程已经拥有锁,该方法将立即返回。简单来说就是和synchronized关键字具有相同功能,可对共享资源进行锁定,以确保共享资源访问的安全性。如何使用class X { private final Reent原创 2021-09-13 19:46:57 · 79 阅读 · 0 评论 -
Java 多线程 : JUC 并发工具原理
一 . 前言趁着有空 , 赶紧把之前欠的债还上 . 这是多线程一阶段计划的最后一篇 , 后续多线程会转入修订和深入阶段 . 彻底吃透多线程.二. 工具介绍之前说 AQS 的时候曾经提到过这几个类 , 这几个类有一些各自的特点 , 很符合特定的场景 , 之前在生产上用的还挺舒服.我们一般使用的并发工具有四种 :CyclicBarrier : 放学一起走允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point) 让一组线程到达一个屏障时被阻塞,直到最原创 2021-09-13 19:45:24 · 169 阅读 · 0 评论 -
自己工作中一直接触不到高并发、分布式怎么办?
背景面试总会遇到一些关系高并发、分布式的问题,可是自己工作中不接触,自学又不深入,这可怎么办?分布式架构的知识太庞大了,小匠也是管中窥豹,结合自己的经验阐述一下自己的想法。结合我自己的一些面试经历,从分布式系统的构建体系说一下可能遇到的问题,涉及的技术和解决方案,这便是分布式系统的重点,也是面试的重点。现象我们从业务场景入手,用户越来越多,单个系统的内存、磁盘、CPU无法满足业务的需求的时候,需要把单机变成多机来解决问题,那么就需要引入分布式横向的扩充机器以增加吞吐量。针对不同的业务的需原创 2021-09-10 16:09:05 · 141 阅读 · 0 评论 -
线上服务CPU 100%, Java heap space一键定位,覆盖多个场景
案例分析1: 用户反馈系统严重卡顿,后台日志提示Broken Pipe,数据库CPU飙升至80%背景下午3点,用户反馈系统严重卡顿,后台日志提示Broken Pipe,数据库CPU达80%,重启服务之后,不到10分钟,还是会出现同样的情况,系统无法使用,阻塞用户日常工作,用户抱怨声音很大,要求立刻解决.过程下午3:30,我连上生产环境的DB,执行show full processlist语句,查看当前线程处理情况,定位到Command列,发现有一条SQL一直处理Query的状态,于是将该条记原创 2021-09-10 16:08:27 · 411 阅读 · 0 评论 -
聊一下 RocketMQ 的消息存储之 MMAP
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0) 本文作者: Nicksxs 创建时间: 2021-09-05 本文链接: 聊一下 RocketMQ 的消息存储之 MMAP这是个很大的话题了,可能会分成两部分说,第一部分就是所谓的零拷贝 ( zero-copy ),这一块其实也不新鲜,我对零拷贝的概念主要来自这篇文章,个人感觉写得非常好,在 rocketmq 中,最大的一块存储就是消息存储,也就是 Co原创 2021-09-10 16:07:46 · 288 阅读 · 0 评论 -
详细介绍java关键字static的使用
大家好,这里是可傥。继final关键字之后,今天介绍static关键字。 static关键字,意思为静态的。在java中,修饰变量(不可为局部变量,局部变量生命周期随着方法的结束而结束,而static修饰的是全局),方法,构造静态代码块,修饰类(为内部类),jdk1.5之后的静态导包(可读性较差)如何使用呢?咱们分别来介绍。一、修饰变量static修饰变量的时候,也可以叫做类变量或者静态变量。与非static修饰的实例变量不同的是,类变量属于类,为所有对象共有。而实例变量属于对象,为该对象私有。那如原创 2021-09-10 16:06:59 · 134 阅读 · 0 评论 -
并发编程之:Thread.join()和CountDownLatch
大家好,我是小黑,一个在互联网苟且偷生的农民工。先问大家一个问题,在主线程中创建多个线程,在这多个线程被启动之后,主线程需要等子线程执行完之后才能接着执行自己的代码,应该怎么实现呢?Thread.join()看过我 并发编程之:线程 的朋友应该知道怎么做,在Thread类中有一个方法join(),这个方法是一个阻塞方法,当前线程会等待调动join()方法的线程死亡之后再继续执行。我们通过代码来看看执行结果。public class JoinDemo { public sta原创 2021-09-10 16:06:01 · 243 阅读 · 0 评论