All Posts

手写Socks5通信

Socks 协议本身是基于 TCP 的协议,位于应用层与传输层之间的会话层,将应用层的数据透明的传输到 TCP 层。更详细的介绍参见 SOCKS - 维基百科,自由的百科全书

拦截器模式

拦截器模式在 Web 应用的 Fitler 中有应用,对于流式的数据流处理很有用。比如对于 Shell 命令的管道可以采用拦截器模式,提供一个命令的接口,并使用一个 Chain 来进行管理。

Java 正则表达式的匹配模式

正则表达式是很强大的,今天先来总结一下Java正则表达式的几种匹配模式。

Java Instrumentation

最近在看公司的工具包的时候,发现有个很好用的功能 – TraceId 和 LogBack 的 MDC 的功能,可以通过一个 TraceId 来跟踪一个请求在不同系统中的执行情况,这可以很好的提高对线上业务排查的效率。但是这项功能的实现比较复杂,利用了一个 Instrumentation 的 JVM 底层代理的功能,Instrumentation是通过JVMTI与JVM进行交互,JVMIT是JVM对外提供的用户接口,JVMTI是基于事件驱动的,JVM每执行到一定的逻辑就会调用一些事件的回调接口,这些接口可以供开发者扩展自己的逻辑。

Idea中通过Maven创建 Archetypes

最近在做项目的时候发现Web项目中很多配置都是相对固定的,比如Spring,常用的配置都是那些,每次新建工程的时候很是麻烦,为了减少没必要的复制粘贴(提高效率),这里介绍一种自定义 Archetypes 的方法。Archetypes 是Maven中的一种模板,我们可以通过 Archetypes 将常用的配置放在模板里,每次新建项目的时候选择模板就可以了。

Java List 遍历方式比较

最近在做项目的时候,有点纠结使用是ArrayList还是LinkedList,这两种List实现方式不同,应用于不同场景下,不同的遍历方式对性能和代码的可读性也有很大的影响。

缓存算法--LRU && LFU

今天在熟悉公司业务的时候,看到LFU算法,十分困惑。觉得和LRU算法差不多,于是仔细研究了一番,发现其实他们的思想是类似的–通过一种机制来标记缓存中的元素,当缓存满时进行“末位”淘汰。

Intellij Idea 修改 Maven 项目默认JDK版本

在使用IDEA创建Maven项目的时候,默认使用JDK 1.5版本,这样很多新版本的特性就不能使用。为了使用新特性(比如:Lambda表达式),必须在创建项目后进行手动修改,这样很麻烦,下面我就来介绍一个一劳永逸的方法。

Java泛型--类型擦除

从Java1.5开始,Java引入泛型的概念。Java中的泛型和C语言中的模板类有些不同,主要是由于Java在最初版本并没有支持泛型,1.5之后为了实现泛型并且能与旧代码兼容,Java编译器使用了类型擦除机制。

Java Enum解析

最近在刷题的时候碰到一个Enum相关的题目,突然发现自己对Enum类的了解知之甚少,于是这篇文章就通过Java字节码来深入了解Enum类。