知识总结 nio
BIO,NIO
BIO
阻塞的,效率低下,线程和fd一对一
NIO 第一版
用户线程不断轮询,线程和fd一对多,但是用户线程需要轮询非常多次,多次调用内核,成本大
NIO 第二版 select
用户线程调用select,内核做轮询。但是需要传参拷贝fd list
NIO 第三版 epoll
用户线程和内核共享内存(mmap),解决了传递fd list 的问题
零拷贝
数据不经过内核态,直接指定 in 和 out (sendfile方法)
epoll + 零拷贝 = kafka
生产者写入通过mmap将数据从网卡存储到磁盘
消费者通过零拷贝直接将数据从磁盘发送到网卡
知识总结 jvm
类加载过程
加载->验证->准备->解析->初始化
加载:通过一个类的完全限定查找此类字节码文件,并利用字节码文件创建一个Class对象。
验证:文件格式验证,元数据验证,字节码验证,符号引用验证。
准备:为类变量(即static修饰的字段变量)分配内存并且设置该类变量的初始值即0(如static int i=5;这里只将i初始化为0,至于5的值将在初始化时赋值),这里不包含用final修饰的static,因为final在编译的时候就会分配了,注意这里不会为实例变量分配初始化,类变量会分配在方法区中,而实例变量是会随着对象一起分配到Java堆中。
解析:主要将常量池中的符号引用替换为直接引用的过程。符号引用就是一组符号来描述目标,可以...
zgc
一、背景&简介
Java11 推出的最新垃圾收集器,ZGC,主要为了减少JVM停顿时间。
ZGC 收集器是一款基于Region内存布局的,(暂时)不设分代的,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法的,以低延迟为首要目标的一款垃圾收集器。
ZGC 全称是Z Garbage Collector,是一款可伸缩的、低延迟、并发垃圾回收器,旨在实现以下几个目标:
停顿时间不超过10ms
停顿时间不随heap大小或存活对象大小增大而增大
可以处理从几百兆到几T的内存大小(最大4T)
如何减少JVM停顿时间?
GC可以在压缩时使用多个线程。(并行压缩)
压缩工作也可以分解为多个阶段。(增量压缩)
将堆压缩,却不停止正在...
定位 cpu 飙升问题实操(java 程序)
核心步骤
定位吃 cpu 的进程。
找到该进程下吃 cpu 的线程。
jstack 工具进行线程分析。
jmap 工具进行内存分析。
使用代码
class Test {
public static void main(String[] args) {
int i = 1;
while (true) {
i = i * i * i;
}
}
}
mac 操作
定位进程
输入 top 命令后会默认按使用率进行排序,很明显可以找到我们的 pid:83133。
如果排序不是按照 cpu 来的,可以在此界面按下输入 “?” 弹出帮助,帮助上明确提示了可以使用 o+cpu 来选择主排序。
定位线程
由于 macOS 内核...
【分层实验框架】Google 重叠实验框架:更多,更好,更快地实验
摘要
辛苦优化的模型与策略线上效果到底如何? 这就需要一个能够支持线上 A/B test 的一高效的线上实验平台。实验流量就是资源, 如果有一千个人同时在线上做对照实验, 资源如何分配呢? Google 重叠实验框架:更多,更好,更快地做好线上对照实验。
1. Introduction
Google是一个数据驱动型公司,这意味着所有对用户的改动的发布,都要决策者以相应的经验数据作为依据。这些数据大部分是由在线流量上的实验产生的。在web的语境下,一个实验是由一股流量(比如,用户的请求)和在这股流量上进行的相对对比实验的修改组成的。修改包括用户可见的修改(比如,修改顶部广告的背景色),以及不可见的修改,比如测试一个新的广告点击率(CTR)预测算法,都可以通过实验的方式进行的。
要支持...
推荐系统 E&E 问题和几种 Bandit 算法
名词解释
多臂老虎机 multi-arm-bandit
bandit 是强盗的意思,老虎机就是从你口袋里面抢钱的强盗。
老虎机是一种赌博机器,每台老虎机都有一个臂,多臂老虎机指的就是多台老虎机。
多臂老虎机问题就是你如何在多台老虎机中找到中奖概率最高的一台。
E&E 问题
E&E 全称是 Exploitation & Exploration(开发与探索),代表的含义就是开发现有的还是探索未知的。
应用在多臂老虎机上面的场景就是:
游乐(du)场一共有 10 台老虎机;
其中已经玩过 4 台,并且以以往的经验你知道每台的中奖率大概是多少;
是一直玩这 4 台中中奖率最高的一台(Exploitation) 还是去尝试...
springboot 配置扫描 jar 包中的 repository
场景
a 模块中有使用自动导入
@Autowired
private SageConfigRepository sageConfigRepository;
但是 SageConfigRepository 这个接口是在一个 jar 包中,由 maven 依赖引入的。直接启动项目会报错。
解决方法
在启动类加入注解
@EnableJpaRepositories(basePackages = { "com.XXX" })
@EntityScan(basePackages = { "com.XXX" })
mac 使用 socks5 连接远程服务器
使用 Proxifier 软件进行连接
可以让任意程序访问服务器上的服务及端口,实现如下操作:
使用客户端(如Navicat)访问服务上的数据库(如没有对公网暴露的MySQL);
让本地运行的代码访问服务器内网服务,比如HDFS,Hive,Hbase,ES等等。(对于大数据开发非常实用,可以愉快的打断点调试Spark应用)
配置方法
1 配置代理服务器
2 配置规则
3 使用说明
这样配置后就能直接连接服务器了
下载地址
官网发布多个版本,其中便携版不需要安装,直接双击运行,安装版则直接安装即可
Windows便携版:https://www.proxifier.com/distr/ProxifierPE.zip
Windows安装版:https://www.pr...
19 post articles, 3 pages.