java_snippet
123456789101112131415161718192021222324252627282930313233public abstract class BaseHandlerFactory<T> { protected final Map<String, T> handlers = new HashMap<>(); public void register(String key, T handler) { handlers.put(key, handler); } public T get(String key) { return handlers.get(key); } public T exist(String key) { if (handlers.containsKey(key)) { return handlers.get(key); }...
Commander
开发文档 | Commander 中文网 安装 Installation 1npm install commander 快速入门 Quick Start 你编写代码来描述你的命令行接口。Commander 将参数解析为选项和命令参数,显示问题的使用错误,并实现帮助系统。 You write code to describe your command line interface. Commander looks after parsing the arguments into options and command-arguments, displays usage errors for problems, and implements a help system. Commander 很严格,对无法识别的选项显示错误。最常用的两种选项类型是布尔选项和从以下参数中获取其值的选项。 Commander is strict and displays an error for unrecognised options. The two most used option types a...
powershell环境重新加载环境变量
在 PowerShell 中刷新环境变量 重新加载 Path 环境变量 Path 是最常见需要修改的环境变量。当我们添加新的路径到 Path 后,通常需要让 PowerShell 立即识别这些新的路径,而不是依赖重新启动系统或 PowerShell 会话。 使用以下命令可以重新加载 Path 环境变量: 1$env:Path = [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine) + ";" + [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::User) 命令解释: $env:Path: 这是 PowerShell 中的环境变量 Path。 [System.Environment]::GetEnvironmentVariable(“Path”, [S...
WSL安装kali
WSL安装kali 安装 安装的非C盘位置 1wsl --install -d kali-linux --name kali --location E:\Hyper\kali\ 修改软件源 1sed -i "s@http://http.kali.org/kali@https://mirrors.tuna.tsinghua.edu.cn/kali@g" /etc/apt/sources.list 安装图形化功能 1sudo apt install -y kali-win-kex 从Windows终端中启动界面 1wsl -d kali kex --esm --wtstart -s
Netty Recycler
Recycler 转载 bin的技术小屋 本系列Netty源码解析文章基于 4.1.56.Final版本 1. 池化思想的应用 在我们日常开发工作中我们经常会遇到各种池化技术的设计思想,比如连接池,内存池,对象池,还有我们在业务开发过程中经常会缓存一些业务计算结果数据这也同样运用到了池化技术的设计思想,我们可以叫它为结果池。 池化技术的应用场景就是当一个对象的创建和销毁需要付出比较大的性能开销时,我们就需要将这些重量级对象放在一个池子里管理,当需要时直接从池子里获取避免重复创建和销毁的开销从而达到了复用的效果。 比如连接池里面保存管理的都是一些网络连接对象,这些对象创建和销毁的代价比较大。通过连接池将这些重量级的网络连接对象统一管理起来,业务线程可以直接复用,避免了重新创建,释放连接的性能开销以及等待时间。 还有我们在日常开发中遇到的一些计算逻辑复杂的业务,我们通常会先从数据库中查询数据,然后经过复杂的计算得到结果,为了避免下次在重复计算,我们会将计算结果放入缓存中,我们可以称做结果池。也是一种池化思想。 再比如我们在《Netty如何高效接收网络数据》一文...
Netty FastThreadLocal
FastThreadLocal 对别 JDK Netty Thread FastThreadLocalThread ThreadLocal FastThreadLocal ThreadLocalMap InternalThreadLocalMap 区别 区别 ThreadLocal FastThreadLocal 存储结构 Map<WeakReference<ThreadLocal<?>,Object>> Object[] 数组下标作为索引, Object 存储Value 内存占用 重复对象可以进行覆盖 每次创建会新建下标,不会利用被删除的位置,数组只会扩容,无法缩容 性能 可能产生hash碰撞,线性探测法在解决 Hash 冲突时需要不停地向下寻找,效率较低 定位数据的时候可以直接根据数组下标 index 获取,时间复杂度 O(1) 回收 手动调用Remove 进行回收 1. 自动,执行一个被FastThreadLocalRunnable wrap的Runnable任务,在任...
ByteBuddy
ByteBuddy 12345<dependency> <groupId>net.bytebuddy</groupId> <artifactId>byte-buddy</artifactId> <version>1.11.12</version> </dependency> Hello World 1234567891011Class<?> dynamicType = new ByteBuddy() .subclass(Object.class) .method(ElementMatchers.named("toString")) .intercept(FixedValue.value("Hello World")) .make() .load(Hello...
ThreadLocal
ThreadLocal ThreadLocal ThreadLocal 提供线程局部变量,即为使用相同变量的每一个线程维护一个该变量的副本。当某些数据是以线程为作用域并且不同线程具有不同的数据副本的时候,就可以考虑采用 ThreadLocal,比如数据库连接 Connection,每个请求处理线程都需要,但又不相互影响,就是用 ThreadLocal 实现。 为何要Entry使用用弱引用 如果使用强引用,情况会如下: ThreadLocalMap 作为 Thread 的成员变量,会随 Thread 一直保留。 ThreadLocalMap 的 key 是 ThreadLocal 对象,如果使用强引用,ThreadLocal 对象会被 ThreadLocalMap 强引用,无法被回收。 而 ThreadLocal 对象可能是唯一对某个对象的引用,这会导致这个对象也无法被回收,发生内存泄露。 使用弱引用可以避免这种情况: 当 ThreadLocal 对象没有其他强引用时,由于 ThreadLocalMap 中的引用是弱引用,ThreadLocal 对象仍然可以被垃圾回收。 垃圾...
thread
thread 概述 并发与并行 并行:指两个或多个事件在同一时刻发生(同时发生)。 并发:指两个或多个事件在同一个时间段内发生。 进程、线程 进程是正在运行的程序的实例。 进程是线程的容器,即一个进程中可以开启多个线程。 线程是进程内部的一个独立执行单元; 一个进程可以同时并发运行多个线程; 线程生命周期 1. 新建 new 关键字创建了一个线程之后,该线程就处于新建状态 JVM 为线程分配内存,初始化成员变量值 就绪 当线程对象调用了 start()方法之后,该线程处于就绪状态 JVM 为线程创建方法栈和程序计数器,等待线程调度器调度 运行 就绪状态的线程获得 CPU 资源,开始运行 run()方法,该线程进入运行状态 阻塞 线程在等待进入临界区 无限期等待 处于这种状态的线程不会被分配CPU执行时间,它们要等待被显式地唤醒,否则会处于无限期等待的状态。 限期等待 处于这种状态的线程不会被分配CPU执行时间,不过无须无限期等待被其他线程显示地唤醒,在达到一定时间后它们会自动唤醒。 死亡 线程会以如下 3 种方...