- 博客(561)
- 资源 (16)
- 收藏
- 关注
原创 【死磕Java并发】----- 死磕 Java 并发精品合集
【死磕 Java 并发】系列是 LZ 在 2017 年写的第一个死磕系列,一直没有做一个合集,这篇博客则是将整个系列做一个概览。先来一个总览图:【高清图,请关注“Java技术驿站”公众号,回复:脑图JUC】 【死磕Java并发】—–深入分析synchronized 的实现原理synchronized 可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同...
2018-07-22 15:12:29 16137 2
原创 Java 面试宝典:线程池的核心线程会被回收吗?
默认情况下,线程池的核心线程是不会被回收的,即使它们处于空闲状态。去创建线程的,它会直接返回,线程自然消亡。还是提供了一个参数来控制这个行为,通过。当任务队列中没有任务执行了就会执行。,则大概率情况下是不会调用。设置后,核心线程在空闲超过。我们直接看源码,直接看。
2024-08-13 21:41:52 268
原创 Java 面试宝典:你知道多少种解决 hash 冲突的方法?
大家好,我是大明哥,一个专注「」系列创作的硬核程序员。。有全网最优质的系列文章、Java 全栈技术文档以及大厂完整面经。
2024-04-14 22:58:38 903
原创 Java 面试宝典:你知道 Thread.sleep(0) 的作用是什么吗?
大家好,我是大明哥,一个专注「」系列创作的硬核程序员。。有全网最优质的系列文章、Java 全栈技术文档以及大厂完整面经。
2024-04-09 23:18:51 428
原创 Java 面试宝典:Redis 的线程模型是怎么样的?
大家好,我是大明哥,一个专注「」系列创作的硬核程序员。。有全网最优质的系列文章、Java 全栈技术文档以及大厂完整面经所以,你的回答要涉及这两个方面。
2024-04-07 22:04:44 1111
原创 Java 面试宝典:你是如何理解常量池的?
大家好,我是大明哥,一个专注「」系列创作的硬核程序员。。有全网最优质的系列文章、Java 全栈技术文档以及大厂完整面经。
2024-04-03 07:56:15 669
原创 Java 面试宝典:请说下你对 Netty 中Reactor 模式的理解
大家好,我是大明哥,一个专注「」系列创作的硬核程序员。。有全网最优质的系列文章、Java 全栈技术文档以及大厂完整面经。
2024-03-31 21:09:52 966
原创 Java 面试宝典:什么是可见性?volatile 是如何保证可见性的?
可见性是指一个线程对共享变量所作的修改能够被其他线程及时地看到。在单核时代,其实是不存在可见性问题的,因为所有的线程都是在一个CPU中工作的,一个线程的写操作对于其他的线程一定是可见的。但是,在多核时代,每个 CPU 都有自己的缓存。一个线程对共享变量的修改可能只是在它所在 CPU 的本地缓存中进行,而不是在主内存中进行。这就可能导致其他线程看不到这个修改,从而引发可见性问题。使用volatile修饰共享变量:一个变量被声明为volatile。
2024-03-26 22:07:10 1525 1
原创 Java 面试宝典:什么是大 key 问题?如何解决?
首先大 key 不是 key 很大,而是 key 所对应的 value 很大。如果 value 超过某个阈值,那么此时存储这个 value 所对应的 key 就是大 key。那 value 多大才算大 key 呢?这个阈值没有一个衡量的标准,需要根据具体场景来确定,比如有些场景及时 KB 是大 key,而有些场景需要几十 MB。对于列表、集合、有序集合、 哈希表,在超过 1 万个元素时被认为是大 key。对于字符串,当它的大小达到几百 KB 时可能被认为是大 key。字符串key数据量。
2024-03-24 20:48:19 1006
原创 Java 面试宝典:volatile 的使用场景有哪些?
大家好,我是大明哥,一个专注「」系列创作的硬核程序员。。有全网最优质的系列文章、Java 全栈技术文档以及大厂完整面经。
2024-03-21 22:48:45 1087
原创 一口气读完 Java 8 ~ Java 21 所有新特性
大家好,我是大明哥,一个专注「」系列创作的硬核程序员。。Java 现在发布的版本很快,每年两个,但是真正会被大规模使用的是 3 年一个的 LTS 版本。在 Java 版本中,一个特性的发布都会经历孵化阶段、预览阶段和正式版本。其中孵化和预览可能会跨越多个 Java 版本。
2023-12-26 10:35:32 3566
原创 关于 Java NIO 的 Selector 的事儿,这篇文章里面全都有
【死磕 NIO】— ServerSocketChannel 的应用实例,大明哥分析了 ServerSocketChannel 两种模式的缺点阻塞模式:所有阻塞方法都会引起线程的暂停,根本无法应用到业务中来非阻塞模式:CPU 一直在空转,浪费资源所以,如果是我们服务端单独使用 ServerSocketChannel 确实是很麻烦,典型的吃力不讨好。故而我们希望有一个组件能够统一管理我们的 Channel,这个组件就是选择器 Selector。
2023-11-14 21:00:36 354
原创 摊牌 了,我不藏了,上线了一年多的网站还是广而告之吧!
熟悉大明哥的小伙伴都知道,我在 14 年的时候搞了一个个人网站 cmsblogs.com,该网站主要用于发布自己写的原创文章,后面也采集了一些比较优质的系列文章,但是 20 年的时候由于工作太忙了,空间到期了也不知道,导致所有数据全部删除了,知道后,心痛了 N天,后面也尝试联系厂商恢复数据,但是时间太久了找不回来了。我只能苦涩地跟他说,没有维护了,对于原来那个网站,我也是很无奈。既然找不回来,而且我对那个域名也不是很满意(知道我姓名的就明白了啥意思,O(∩_∩)O哈哈~),所以我另外申请了一个域名(
2023-11-12 21:51:43 242
原创 Netty 是如何利用EventLoop实现千万级并发的
EventLoop 是 Netty 实现 Reactor 线程模型的核心处理引擎。Netty 推荐采用主从多线程模型,其中 BossEventLoopGroup 负责 ServerSocketChannel 的 Accept 事件,WorkerEventLoopGroup 负责 SocketChannel 的读写事件。
2023-11-09 22:31:23 455
原创 如何利用ChannelPipeline在Netty中搭建无懈可击的数据处理流水线?
pipeline 翻译为管道、流水线,在 Netty 这个大工厂中,ChannelPipeline 就像一条流水线,数据流过 ChannelPipeline,被一步一步地加工,最后得到一个成熟的工艺品。在 Netty 中,ChannelPipeline 是 Netty 的核心处理链,用于实现网络时间的动态编排和有序传播。它负责组织和编排各种 ChannelHandler,使他们能够有序地组织在一起,但实际的数据加工还是由 ChannelHandler 处理。最后,大明哥来做一个总结,加深各位小伙伴们的理解。
2023-11-08 09:18:29 288
原创 是时候放弃 Java 序列化了
有些时候我们并不需要将一个对象的所有属性全部序列化,这个时候我们可以使用 transient 关键字来选择不需要序列化的字段。transient** 的作用就是用来标识一个成员变量在序列化应该被忽略。**// 标识为 transient将 age 属性标识为 transient。// 先序列化Person_1 person = new Person_1("王五",32,180F);System.out.println("原对象:" + person);// 再反序列化。
2023-11-05 22:59:51 218
原创 不是我吹牛逼,这绝对是去掉 if...else 最佳的文章
大明哥在这里总结了 7 中方式用来解决 if…else 的问题,我相信里面总有一两种方案是你比较满意的,七种方案各有优劣,各自有各自的使用场景,我们需要在实践中不断领悟,在重构中不断进化,总结出适合自己最佳的重构方案。重构之路,任重而道远,各位其行且珍惜。
2023-11-02 22:29:52 224
原创 精密数据工匠:探索 Netty ChannelHandler 的奥秘
根据客户端提交的参数类型,自动流转到相对应的 ChannelHandler。这种方式是最优雅的,也是我们使用最多的方式。他的优点明显,1. 业务解耦,2. 不需要维护码表。ChannelHandler 是 Netty 中真正做事的组件,EventLoop 将监听到的 I/O 事件转发后,就由 ChannelHandler 来处理,它也是我们编写 Netty 代码最多的地方。
2023-10-31 22:11:13 295 1
原创 网络编程进化史:Netty Channel 的崭新篇章
在 Java NIO 中我们知道,Channel,即通道,是用来传输数据的一条“管道”,它与 Buffer 相辅相成,在 Java NIO 中,我们只能从 Channel 读取数据到 Buffer 中,或者从 Buffer 读取数据到 Channel 中,如下:在 Netty 中同样有一个 Channel,该Channel 是 Netty 的核心概念之一,它是 Netty 网络 IO 操作的抽象,即 Netty 网络通信的主体,由它来负责对端进行网络通信、注册、数据操作等一切 IO 相关的操作。
2023-10-25 20:31:58 305 1
原创 Netty 入门 — ByteBuf,Netty 数据传输的载体
到这里大明哥相信各位小伙伴对 ByteBuf 应该有了初步的认识,当然这篇文章只是入门篇而已,里面还有很多细节都没有涉及到,但是不要着急,因为后面还有进阶篇,源码篇,一定会将它讲的明明白白的。ByteBuf 是Netty 的数据传输的载体,它是为了解决 JDK NIO 原生 ByteBuffer 的设计缺陷和不易用而重新设计的,它具备如下几个特性:容量可以动态扩容读写索引(readerIndex、writerIndex)分开,读写模式可以随意切换,不需要调用flip()方法支持引用计数。
2023-10-24 20:47:35 265
原创 Netty 入门 — Bootstrap,一切从这里开始
..这个过程是不是非常想一个构造器模式?其实我们真的将其理解为一个构造器,它就是一个构造服务端、客户端的构造器。那我们是不是可以不使用 Bootstrap 来完成服务端和客户端的初始化呢?其实是可以的,只不过非常麻烦,既然 Netty 为我们提供一个这么好用的工厂类我们为什么不用呢?启动器有两个,一个是客户端,一个是服务端,如下:两个类的配置方式大致相同,我们以 ServerBootstrap 为介绍对象。
2023-10-23 11:24:16 343
原创 Netty 入门 — 要想掌握 Netty,你必须知道它的这些核心组件
这里对 Netty 服务端整个流程做一个说明,阐述 Netty 服务端的工作流程,这样我们就清楚知道各个组件在 Netty 中扮演的是什么角色。服务端在启动时,绑定本地端口,会初始化两个 EventLoopGroup,一个 BossEventLoopGroup 和 WorkEventLoopGroup ,其中 BossEventLoopGroup 专门负责接受客户端的连接(Accept 事件),WorkEventLoopGroup 专门负责网络读写。
2023-10-18 10:21:35 157
原创 Netty 入门 — 亘古不变的Hello World
为什么很多人都推崇 Java boy 去研究 Netty?Netty 这么高大上,它到底是何方神圣?Netty 是一款异步的、基于事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络 IO 程序。为什么要使用 Netty 呢?使用 Java NIO 需要了解很多概念,而且 API 非常繁琐。使用 Java NIO 编程复杂,一不小心就会 Bug 横飞。开发工作量和难度也很大,例如我们要处理断开重连、网络闪断、半包读写、网络拥塞、异常处理,等等异常情况,处理起来难度比较大。
2023-10-15 22:22:04 309
原创 【死磕 NIO】— ServerSocketChannel 的应用实例
大家好,我是大明哥,一个专注于【死磕 Java】的程序员。【死磕 Java 】系列为作者「chenssy」 倾情打造的 Java 系列文章,深入分析 Java 相关技术核心原理及源码。死磕 Java :https://www.cmsblogs.com/group/1420041599311810560上篇文章大明哥介绍了 SocketChannel 的核心原理及其源码,这篇文章就来介绍如何使用 ServerSocketChannel,分析单独使用 ServerSocketChannel 存在哪些问.
2022-05-25 23:27:12 936 2
原创 【死磕NIO】— 探索 SocketChannel 的核心原理
大家好,我是大明哥,一个专注于【死磕 Java】系列创作的程序员。【死磕 Java 】系列为作者「chenssy」 倾情打造的 Java 系列文章,深入分析 Java 相关技术核心原理及源码。死磕 Java :https://www.cmsblogs.com/group/1420041599311810560前两篇文章我们分析了 Channel 及 FileChannel,这篇文章我们探究 SocketChannel的核心原理,毕竟下一个系列就是 **【死磕 Netty】**了。聊聊Socke.
2022-03-28 22:38:59 2090 2
原创 【死磕NIO】— 跨进程文件锁:FileLock
大家好,我是大明哥,一个专注于【死磕 Java】系列创作的程序员。【死磕 Java 】系列为作者「chenssy」 倾情打造的 Java 系列文章,深入分析 Java 相关技术核心原理及源码死磕 Java :https://www.cmsblogs.com/group/1420041599311810560上篇文章(【死磕 NIO】— 深入分析Channel和FileChannel)已经详细介绍了 FileChannel的核心原理及相关API,了解了FileChannel是用来读写和映射一个系.
2022-03-21 07:48:02 1471 1
原创 【死磕 NIO】— 深入分析Channel和FileChannel
大家好,我是大明哥,这次我们来看看NIO的第二个组件:Channel。上篇文章[【死磕 NIO】— 深入分析Buffer]介绍了 NIO 中的 Buffer,Buffer 我们可以认为他是装载数据的容器,有了容器,还需要传输数据的通道才能完成数据的传输,这个通道就是今天要介绍的 Channel。Channel 我们可以认为它是本地 I/O 设备、网络 I/O 的通信桥梁,只有搭建了这座桥梁,数据才能被写入 Buffer 。Channel在 NIO 中,Channel 和 Buffer 是相辅相成的
2021-12-15 21:36:55 2044
原创 【死磕 NIO】— 深入分析Buffer
大家好,我是大明哥,今天我们来看看 Buffer。上面几篇文章详细介绍了 IO 相关的一些基本概念,如阻塞、非阻塞、同步、异步的区别,Reactor 模式、Proactor 模式。以下是这几篇文章的链接,有兴趣的同学可以阅读下:【死磕NIO】— 阻塞、非阻塞、同步、异步,傻傻分不清楚【死磕NIO】— 阻塞IO,非阻塞IO,IO复用,信号驱动IO,异步IO,这你真的分的清楚吗?【死磕 NIO】— Reactor 模式就一定意味着高性能吗?【死磕 NIO】— Proactor模式是什
2021-11-17 08:30:00 934 1
原创 【死磕 NIO】— Proactor模式是什么?很牛逼吗?
大家好,我是大明哥。上篇文章我们分析了高性能 IO模型Reactor模式,了解了什么是Reactor 模式以及它的三种常见的模式,这篇文章,大明再介绍另外一种高性能IO模型: Proactor。为什么是 Proactor 模式上篇文章 【死磕 NIO】— Reactor 模式就一定意味着高性能吗?大明哥分析了 Reactor模式,我们知道Reactor性能确实非常高,适合高并发场景,但是它依然存在一个问题,那就是它是 同步IO。同步IO会有一个什么问题呢?同步IO需要线程自己等待内核准备好数据,在内
2021-11-09 08:30:00 694 2
原创 【死磕 NIO】— Reactor 模式就一定意味着高性能吗?
大家好,我是大明哥,我又来了。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wnP3zhp5-1634901215489)(http://www.cmsblogs.com/images/group/sike-java/sike-nio/nio-2021101310001.png)]为什么是 Reactor一般所有的网络服务,一般分为如下几个步骤:读请求(read request)读解析(read decode)处理程序(process service)
2021-10-22 19:14:50 658
原创 【死磕NIO】— 阻塞IO,非阻塞IO,IO复用,信号驱动IO,异步IO,这你真的分的清楚吗?
通过上篇文章(【死磕NIO】— 阻塞、非阻塞、同步、异步,傻傻分不清楚),我想你应该能够区分了什么是阻塞、非阻塞、异步、非异步了,这篇文章我们来彻底弄清楚什么是阻塞IO,非阻塞IO,IO复用,信号驱动IO,异步IO。要想彻底弄清楚这五种IO模型,我们需要先弄清楚几个基本概念。基本概念什么是IO什么是IO?维基百科上面是这样解释的:I/O(英语:Input/Output),即输入/输出,通常指数据在存储器(内部和外部)或其他周边设备之间的输入和输出,是信息处理系统(例如计算机)与外部世界(可能是人
2021-10-08 12:00:00 784
原创 【死磕NIO】— 阻塞、非阻塞、同步、异步,傻傻分不清楚
万事从最基本的开始。要想完全掌握 NIO,并不是掌握上面文章(【死磕NIO】— NIO基础详解)中的三大组件就可以了,我们还需要掌握一些基本概念,如什么是 IO,5 种IO模型的区别,什么是阻塞&非阻塞等等,只有掌握了这些基本概念,我们对NIO才能理解得更加得心应手。这篇文章我们就从阻塞&非阻塞,同步&异步说起。同步与异步什么是同步与异步呢?百度百科是这样定义的:同步指两个或两个以上随时间变化的量在变化过程中保持一定的相对关系。异步与同步相对(这解释让我无言相对).
2021-09-21 22:35:08 632
原创 【死磕NIO】— NIO基础详解
Netty 是基于Java NIO 封装的网络通讯框架,只有充分理解了 Java NIO 才能理解好Netty的底层设计。Java NIO 由三个核心组件组件:BufferChannelSelector1缓冲区 BufferBuffer 是一个数据对象,我们可以把它理解为固定数量的数据的容器,它包含一些要写入或者读出的数据。在 Java NIO 中,任何时候访问 NIO 中的数据,都需要通过缓冲区(Buffer)进行操作。读取数据时,直接从缓冲区中读取,写入数据时,写入至缓冲区。NIO 最常
2021-09-08 23:08:02 1934 7
原创 【死磕 Java 基础】 — 你以为异常就是 try…catch ?那你天真了
大家好,我是大明哥。个人网站:https://www.cmsblogs.com/前言我敢说对于很多小伙伴来说,他们以为在 Java 中异常就是 try...catch,稍微有点儿意识的还会用下 throw new Exception,真的有这么简单吗?请宽恕小编直言,你对 Java 异常一知半解。以下是小编对 Java 异常的理解,如有错误之处,请原谅,资质有限。引出异常先问一个问题,在 Java 中,你是赞同使用返回码还是异常来规范错误呢?我先来说说使用返回码的情况,比如登录逻辑,我们分.
2021-08-08 21:17:49 4066 26
原创 【死磕 Java 基础】— 我同事一个 select 分页语句查出来了 3000W 条数据
大家好,我是大明哥某天我正在工位上听着 Vicotry,愉快地敲着 hello world ,这感觉就像我写的代码能征服世界。突然运维给我打了一个电话,说我们某台服务器 OOM 了,要我过去看下,这感觉就像 xxx,你懂的。去运维室、登录服务器、查看日志、…一顿操作猛如虎,看到一个 List 对象 600MB +(原谅我们服务器 low,运维比较小气,就给 1C2G 的服务器),检查当时的 SQL 语句,一看,我的乖乖,将近 4000w + 条数据。我的第一感觉就是,难道又是哪个业务在导出大批量数.
2021-07-18 19:55:57 6242 46
原创 【死磕 Java 基础】--- 我一口气自己就动手实现一个 LRU
大家好,我是大明哥个人网站:https://www.topjava.cn/LRU,即 Least Recently Use ,直译为 “最近最少使用”。它是根据数据的历史访问记录来进行数据淘汰的,淘汰掉最先访问的数据,其核心思想是 如果数据最近被访问过,那么将来被访问的几率也会更加高。要实现 LRU,需要做到两点:查询出最近最晚使用的项给最近使用的项做一个标记实现的方案有多种,这里小编主要介绍两种:LinkedHashMap双向链表 + HashMapLinkedHashMa.
2021-07-11 09:43:41 1043 15
原创 【死磕 Java 基础】 — 谈谈那个写时拷贝技术(copy-on-write)
大家好,我是大明哥。个人网站:https://www.topjava.cn/copy-on-write,即写时复制技术,这是小编在学习 Redis 持久化时看到的一个概念,当然在这个概念很早就碰到过(Java 容器并发有这个概念),但是一直都没有深入研究过,所以趁着这次机会对这个概念深究下。所以写篇文章记录下。COW(copy-on-write 的简称),是一种计算机设计领域的优化策略,其核心思想是:如果有多个调用者(callers)同时要求相同资源(如内存或磁盘上的数据存储),他们会共同获取.
2021-07-04 18:03:31 929 11
老干爹/Cloud-Admin
2018-08-26
Spring源码
2018-05-23
Edraw Max for mac 亿图图示 8.4 中文破解版
2018-04-23
基于J2EE购物网站的设计与实现--源码
2013-06-16
jspSmartUpload组件,文件上传、下载
2011-10-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人