发布了文章2018-01-18
在使用TCP长连接(复用已建立TCP连接)的场景下,需要对TCP连接进行保活,避免被网关干掉连接。在应用层,可以通过定时发送心跳包的方式实现。而Linux已提供的TCP KEEPALIVE,在应用层可不关心心跳包何时发送、发送什么内容,由OS管理:OS会在该TCP连接上定时发送探...
发布了文章2017-12-27
基本概念 轻量级、跨语言的RPC框架 功能特点: 基于IDL(接口描述语言)生成跨语言的RPC clients and servers,支持超过20种语言 支持二进制的高性能的编解码框架 支持NIO的底层通信 相对简单的服务调用模型 Thrift架构 在介绍Thrift架构前,先了解下一般RPC框架的组...
赞了文章2017-12-22
目录 源码之下无秘密 ── 做最好的 Netty 源码分析教程 Netty 源码分析之 番外篇 Java NIO 的前生今世 Java NIO 的前生今世 之一 简介 Java NIO 的前生今世 之二 NIO Channel 小结 Java NIO 的前生今世 之三 NIO Buffer 详解 Java NIO 的前生今世 之四 NIO Selector ...
发布了文章2017-12-09
以Java软件系统为例,重点讲解了应用架构中的物理设计问题,即如何将软件系统拆分为模块化系统。所以内容组织包括为什么需要模块化,围绕如何实现模块化讲述了模块化模式,最后在模块化基础上使用OSGi技术实现动态模块化。
发布了文章2017-12-03
在RPC接口调用场景或者使用动态代理的场景中,偶尔会出现UndeclaredThrowableException,又或者在使用反射的场景中,出现InvocationTargetException,这都与我们所期望的异常不一致,且将真实的异常信息隐藏在更深一层的堆栈中。本文将重点分析下UndeclaredThrowable...
发布了文章2017-11-26
可以看到,由我方发起3次握手建立连接,然后发送http请求,对方响应数据,我方ACK后直接发RST包(图中蓝色阴影部分),将连接异常关闭,不仅没有复用连接,且不是通过4次挥手来关闭连接。
回答了问题2017-11-07
先看看这篇文章能解决问题吗 [链接]
赞了文章2017-11-03
记一次 JAVA 的内存泄露分析 摘要:本文属于原创,欢迎转载,转载请保留出处:[链接] 当前环境 jdk == 1.8 httpasyncclient == 4.1.3 代码地址 git 地址:[链接] 背景 前不久,上线了一个新项目,这个项目是一个压测系统,可以简单的看做通过回放词表(http请求数据...
发布了文章2017-10-14
在开发新功能时,可能因为排期比较紧导致代码写的仓促,或开发功能需求时未考虑全整体的设计,这导致代码结构的流失。重构就像是在整理代码,对之前代码的修缮与整改,保持该有的形态,改善设计。
发布了文章2017-10-07
在《重构》一书中,列举了一些代码的坏味道,同时以举例方式讲解了重构代码的一些手法,本文是读书后的关于如何写好代码的笔记,主要包括可读性、代码职责、面向对象思维方面。
回答了问题2017-10-07
你这里年老代采用并行垃圾收集,那么这个参数是-XX:CMSInitiatingOccupancyFraction=80不管用的,只有当你用CMS收集器的时候才会生效。另外不知道你的应用程序是否需要关心gc的stop the world的时间,如果care的话可以采用CMS收集器。
赞了回答2017-09-20
程序员都很希望别人能写技术文档,而自己却很不希望要写文档。因为写文档需要花大量的时间去处理格式排版,想着新建的word文档放在哪个目录等各种非技术细节。
回答了问题2017-09-01
order_this_year可以使用Elasticsearch存储,es的处理性能与数据量可解决查询效率问题。那如何保证数据及时问题呢,话题转为“mysql数据同步到es”;这个可以做到200ms内的延时,具体方法自行google调研吧,可参考[链接]
回答了问题2017-08-30
Innodb行锁的模式:共享锁(又叫读锁,S锁)、排他锁(又叫写锁、X锁)Innodb行锁的类型:Record Lock(行记录锁)、Gap Lock、Next-key Lock(Next-key Lock=Record Lock+Gap Lock,可以参考[链接] lock)意向锁:属于表锁。意向共享锁(IS):事务打算给数据行加行...
回答了问题2017-08-26
执行完allocate()方法后不断CMS GC,即使添加了-XX:+CMSScavengeBeforeRemark参数,仍然无法有效回收。是因为存在young区到old区的引用,且CMSScavengeBeforeRemark参数触发的YGC并没有真正执行,只是打印了gc日志。针对该问题请教了大牛”占小狼“,具体参见 [链接]
回答了问题2017-04-22
即可看到,s1,s2的name仍然是"==", 在未set p.name时其name也为"==", 所以说都没有实现深拷贝。当你set s2.p.name时,s2.p.name指向了另一个字符串常量的地址,所以(s1.p.name == s2.p.name); //false
提出了问题2017-04-22