govzhz / govzhz.github.io Goto Github PK
View Code? Open in Web Editor NEWBlog
Home Page: https://zzcoder.cn
Blog
Home Page: https://zzcoder.cn
Welcome! I am Mr·Zh, is a JAVA developer, passionate about open source technology. And I’ m also very willing to share technical experience. Wish you all have a good harvest in my blog gar
”TCP 拆包粘包“网络上的争论挺大的,原因在于这一概念在 RFC 中并未提到过,(* ̄︶ ̄)有点民科的赶脚。但实际上它是挺常见的一个问题,比较准确的描述应该是应用层分包问题。那么为什么提到这一概念总是会带上 TCP 而不是 UDP 呢?因为应用层分包问题本质是接收方在某个时刻接收到的数据不构成一条完整的消息 对于 UDP 来说,它并未在 IP 协议外作出额外的可靠性特性,所以无论发送的数据荷载
http://zzcoder.cn/2019/01/14/ReentrantLock/
ReentrantLock 是基于 AQS 同步器实现的互斥锁,它支持设置公平锁/非公平锁模式,同时具有可重入性。在这里讨论 ReentrantLock 对这些特性的支持及应用。 标准模式12345678910111213141516171819class X { private final ReentrantLock lock = new Reen
http://zzcoder.cn/2020/05/31/HTTP%E5%8D%8F%E8%AE%AE%E4%B8%8E%E6%97%A0%E7%8A%B6%E6%80%81/#more
大家常提起 HTTP 协议是无状态的,其指代的“无状态”是什么?常见的观点有: 无状态代表相同的请求参数总是能返回相同的结果 HTTP 本身的设计是无状态的,增加了有状态协议头(Cookie/Session)后变成了有状态协议 对于第一个观点显而易见是错误的,它的表示更倾向于“幂等性”,这往往无法由协议本身保证,还需要服务器进行“有状态”的响应(若服务器不进行状态的持久化,当然无法做到幂等);
DNS 解析的作用就是将主机名转换为 IP 地址,那么 DNS 解析过程是怎么样的,DNS 服务器又是如何快速响应全球用户的请求的呢? DNS 解析原理在解释 DNS 解析原理前首先需要知道的是,DNS 服务器只是一种统称,实际上 DNS 服务器的不同类型负责完全不同的功能,这对于后续理解整个原理具有非常关键的作用。下面根据 DNS 服务器功能不同主要分为 4 种类型: 根域名服务器:根域名服务
http://zzcoder.cn/2019/12/06/%E6%B3%9B%E5%9E%8B%E8%BF%9B%E9%98%B6/
无限制通配符无限通配符即: <?>,主要在不确定或不关心实际参数类型时使用,如: 123public boolean removeAll(Collection<?> c){ ...} 由于它不确定具体类型,所以不能将任何元素(Null 除外)放入,即它是只读的,但在很多情况下需要放入对象,因此一种比较常见的方法是使用 类型参数 作为辅助函数 123
http://zzcoder.cn/2019/02/11/%E5%9F%BA%E7%A1%80%E5%90%8C%E6%AD%A5%E5%B7%A5%E5%85%B7%E7%B1%BB/
Semaphore,CountDownLatch,CyclicBarrier 均是 JDK1.5 提供的基础并发工具: Semaphore 是一个计数信号量,用于限制同时访问某个特定资源的数量 CountDownLatch 是一个闭锁,允许一个或多个线程等待一组其他线程执行完成后执行,但只能使用一次 CyclicBarrier 是一个循环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时
123456789101112131415161718192021222324public class NPESolution { public void withIf(Person person){ if(person != null){ // ... } // ... &
http://zzcoder.cn/2018/12/22/%E5%86%85%E5%AD%98%E5%B1%8F%E9%9A%9C/
现代计算机大多数采用多核处理器或多处理器以提高性能,同时每个处理器通常存在一层或多层高速缓存,这将会更进一步加快对数据的访问。但是这也带来了新的挑战,即同一数据在不同处理器之间并不保证一致。所以为了保证数据的可见性,内存屏障应运而生。它能够刷新或使本地处理器高速缓存失效,以便查看其他处理器进行的写入的最新值或使该处理器的写入对其他处理器可见。而 Java 内存模型用于屏蔽不
http://zzcoder.cn/2019/12/06/HSDB%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E5%AE%9E%E6%88%98/
HSDB(Hotspot Debugger),是一款内置于 SA 中的 GUI 调试工具,可用于调试 JVM 运行时数据,从而进行故障排除 启动HSDB检测不同 JDK 版本需要使用不同的 HSDB 版本,否则容易出现无法扫描到对象等莫名其妙的问题 Mac:JDK7 和 JDK8 均可以采用以下的方式 1$ sudo java -cp ,:/Library/Java/JavaVirtualMac
根据 JDK Tutorial 的描述,除非在执行 try 或 catch 代码时线程被中断或 JVM 退出,finally 中的逻辑始终会执行。因此 finally 关键字常被用于释放资源,防止程序出现异常时出现资源泄露。本文主要探讨其在 JVM 层面的实现原理,以及 synchronized 关键字在类似场景的处理手段。首先来看一段简单的 try-finally 代码 1234567publi
Mysql 的 SELECT ... FOR UPDATE 语句是日常使用较多的用于锁定资源,确保在多个事务读取数据时始终能够读取到最新版本的数据的有效语句。那么它是怎么实现呢?在经过官网文档以及大量实践的验证之后发现网上存在大量不严谨甚至错误的信息,因此通过本文对 SELECT FOR UPDATE 语句作出以下总结。在具体介绍之前,先对目前网上教程或博客中会提到的几个常
https://zzcoder.cn/2020/08/30/Tomcat-%E7%BA%BF%E7%A8%8B%E6%A8%A1%E5%9E%8B%E8%AF%A6%E8%A7%A3/
Tomcat 作为最常见的 Servlet 容器,在 6.x 版本就支持了 NIO 模式的 Connector 和 Reactor 模式相比有什么特殊之处吗?首先来看下面的表格: Java Nio Connector NIO Java Nio2 Connector NIO2 APR/native Connector APR Classname Http11NioProtocol H
根据 JDK Tutorial 的描述,除非在执行 try 或 catch 代码时线程被中断或 JVM 退出,finally 中的逻辑始终会执行。因此 finally 关键字常被用于释放资源,防止程序出现异常时出现资源泄露。本文主要探讨其在 JVM 层面的实现原理,以及 synchronized 关键字在类似场景的处理手段。首先来看一段简单的 try-finally 代码 1234567publi
http://zzcoder.cn/2019/12/06/Static-Nested-Or-Inner-Classes/
在 Java 中,在一个类中声明另一个类则称为嵌套类,被声明为 static 的嵌套类称为静态嵌套类(static nested classes ),与之相对的非静态嵌套类被称为内部类((inner classes ) 非静态嵌套类每个实例都包含一个额外指向外围对象的引用,换句话说,要实例化一个非静态嵌套类必须首先实例化外部类 静态嵌套类独立于外部类实例,可以看作嵌套在一个顶级类中的顶级类。因
http://zzcoder.cn/2019/01/10/AbstractQueuedSynchronizer%E5%90%8C%E6%AD%A5%E5%99%A8/
在 java.util.concurrent (JUC) 并发包中,如 ReentrantLock,Semaphore,CountDownLatch 等并发类的同步控制都是基于 AbstractQueuedSynchronizer (简称 AQS) 这个同步器抽象类来实现的。在这里较为深入的讨论同步器抽象类的实现原理与应用。 AQS简介AbstractQueuedSynch
https://zzcoder.cn/2020/08/23/Reactor%E6%A8%A1%E5%BC%8F/#more
标准 I/O 会存在两个阶段:(以 TCP Socket 举例) 数据在内核态和用户态的复制:TCP 协议栈维护着 Send Buffer(发送缓冲区)和 Recv Buffer(接收缓冲区),因此 read/write 都只是将用户态数据复制到内核态的 Socket Buffer(Send/Recv Buffer)。而 Socket Buffer 和网卡之间会通过 DMA 进行数据传输(不占用
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.