http2是什么 Aug 23, 2020

HTTP/2标准于2015年5月以RFC 7540正式发表,到今天已经有五年多了,已经不能称之为新东西了。今天来学习一下。

...
如何正确地urlEncode?空格被urlEncode成+ Aug 18, 2020 Java里面进行urlEncode很简单: public static void main(String[] args) { String string = "+ +"; try { string = URLEncoder.encode(string, "UTF-8"); System.out.println(string); String res = URLDecoder.decode(string,"UTF-8"); System.out.println(res); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } 就是这一段简单的代码藏了一个坑:URLEncoder.encode适用于application/x-www-form-urlencoded。在POST请求时,x-www-form-urlencoded在请求体中;GE ...
Clickhouse使用学习 Aug 14, 2020 ...
Jackson Util Aug 6, 2020

Jackson Util:

...
在springboot之外使用thymeleaf渲染text Aug 6, 2020

thymeleaf是springboot默认的模版引擎,最近需要“渲染模版”这个功能,想到了thymeleaf,记一下怎么用。

...
MacOS和windows开机自启动 Jul 17, 2020

linux上的开机自启动很简单,通过systemd就能搞定。对于macos和windows的开机自启动则没有记录过,这里记录下。

...
Jaeger学习 Jul 16, 2020

Jaeger是一个链路追踪系统,适合用于分布式的调用链路分析,服务依赖分析,性能和延迟优化。使用OpenTracing标准的语意和与其兼容的类库,使用灵活的抽样策略,支持多种后端存储(Cassandra, Elasticsearch, memory)

...
Http Utils的一段代码 Jun 11, 2020

简单的备忘,httpclient的代码

...
wait/notify和condition Jun 11, 2020

以下全部来自jdk8的javaDoc。

...
从register和accept的锁竞争问题到netty的nioEventLoop设计 Jun 5, 2020

今天在v2ex看到一个问题,NIO 如下代码怎么绕过死锁?还是说我写的不对?如下代码,里面贴了代码。

简单说明:创建了两个selector A和B,线程1使用A来accept连接,并且register到B上。同时,线程2使用B来select,处理读写事件。

问题:select和register都要获取Selector publicKeys 的锁->虽然创建了线程1和2,但是还是要等待对方释放锁,所以这两个线程就没啥用,在以往的NIO实践中我也遇到过。解决这个问题很简单,生产者消费者模式就可以,线程1生产register请求,线程2消费register事件,真正执行在B上的register。反正一句话,同一个selector的register和select需要串行,并行不了(因为需要获取同一个锁)。

上面只是引子,我想看看netty是如何处理这个细节的。关于netty的架构和设计,什么EventLoopGroup、EventLoop、Pipepline、ChannelHandler网上说的很多了。今天要做的是看netty如何封装java NIO的accept、register,如何进行select,下面开始。

...