Tonny's Blog

莫等闲, 白了少年头, 空悲切


  • 首页

  • 标签

  • 分类

  • 归档

jdk8时间日期

发表于 2018-12-24 | 更新于 2021-02-25 | 分类于 JDK , Date
JDK8之前的日期api有很多不便的地方, 如: java.util.Date 和 java.util.Calendar类易用性差, 不支持时区, 而且他们都不是线程安全的 用于格式化日期的类DateFormat被放在java.text包中, 它是一个抽象类, 在处理日期格式化时我们会实例化一个SimpleDateFormat对象, 但DateFormat也是非线程安全 对日期的计算方式繁琐, 而且容易出错, 因为月份是从0开始的, 从Calendar中获取的月份需要加一才能表示当前月份 由于以上这些问题, 出现了一些三方的日期处理框架, 例如Joda-Time, date4j等开源项目. 其中Joda-Time框架的作者正是JSR-310的规范的倡导者, 而Java 8中引入了新的日期API是JSR-310规范的实现, 所以能从Java 8的日期API中看到很多Joda-Time的特性.java.time包下有5个包组成, 大部分情况下只用基础包和format就够了 java.time: 包含值对象的基础包 java.time.chrono: 提供对不同的日历系统的访问 ja ...
阅读全文 »

使用perf和火焰图分析系统性能

发表于 2018-12-17 | 更新于 2021-02-25 | 分类于 linux , performance
安装perf1yum install -y perf 数据采样1perf record -F 99 -p PID -g -- sleep 60 -F 99: 每秒采样99次-p PID: 指定进程id-g: 记录调用栈sleep 60: 持续60秒, 如果不加则一直采样到手动中断(CRTL+C)为止上面的命令会生成一个perf.data的文件. 执行perf report -n可以生成报告的预览 执行perf report -n --stdio可以生成一个详细的报告 执行perf script > out.perf可以 dump 出 perf.data 的内容 生成火焰图通常的做法是将 out.perf 拷贝到本地机器在本地生成火焰图12345678# 下载火焰图生成工程git clone --depth 1 https://github.com/brendangregg/FlameGraph.git# 折叠调用栈FlameGraph/stackcollapse-perf.pl out.perf > out.folded# 生成火焰图FlameGraph/flam ...
阅读全文 »

spring1 hierarchy

发表于 2018-06-28 | 更新于 2021-02-25 | 分类于 Spring , Hierarchy
基于spring1.0 继承结构
阅读全文 »

build blog

发表于 2018-06-22 | 更新于 2021-02-25

hexo安装与配置

切换阿里npm源

为加快访问速度, 使用阿里的npm源. 文档: https://npm.taobao.org/, 可以使用阿里定制的cnpm替换默认的npm命令

1
$ npm install -g cnpm --registry=https://registry.npm.taobao.org

或者配置一个alias

阅读全文 »

AQS

发表于 2018-05-21 | 更新于 2021-02-25 | 分类于 Java , Concurrent

总体流程:
ReentrantLock.lock -> FairSync.lock() -> AbstractQueuedSynchronizer.acquire() -> FairSync.tryAcquire() 如果失败-> AQS.acquireQueued(AQS.addWaiter()) + thread.interrupt()

1
2
3
4
5
6
// AbstractQueuedSynchronizer
public final void acquire(int arg) {
if (!tryAcquire(arg) &&
acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
selfInterrupt();
}
阅读全文 »

my public ip

发表于 2018-04-30 | 更新于 2021-02-25 | 分类于 fun

服务端

远程vps
开启端口

1
2
iptables -I INPUT -p udp --dport 1234 -j ACCEPT
iptables -I INPUT -p tcp --dport 1234 -j ACCEPT

阅读全文 »

shadowsocks

发表于 2018-04-30 | 更新于 2021-02-25 | 分类于 shadowsocks

安装系统依赖

1
2
yum install -y openssl-devel gcc swig python-devel autoconf libtool
yum groupinstall "Development Tools"

安装谷歌BBR

网络拥塞算法, 该脚本会自动升级内核

1
2
3
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh
chmod +x bbr.sh
./bbr.sh

阅读全文 »

python

发表于 2018-04-20 | 更新于 2021-02-25 | 分类于 python

基础

数据类型

6种标准数据类型:

阅读全文 »

JVM知识整理

发表于 2018-04-17 | 更新于 2021-02-25 | 分类于 JVM , JAVA

内存

内存区域划分

运行时数据区域

  • 程序计数器: 可以看做当前线程锁执行的字节码的行号指示器, 每个线程有一个. 如果执行的是Native方法, 则为空
  • 虚拟机栈: 描述java方法运行时的内存模型. 线程私有, 生命周期与线程相同. 方法执行时会创建栈帧(Stack Frame)用于存储局部变量表, 操作数栈, 动态链接, 方法出口等信息. 该部分可能会抛出StackOverflowError(当栈深度超过JVM允许的深度时) 或 OutOfMemoryError(虚拟机栈动态扩展时无法申请到足够内存时)
    • 局部变量表: 存放编译器可知的各种基本数据类型, 对象引用和returnAddress. long和double占用2个局部变量空间(slot), 其他的占用1个. 这段空间在编译期间完成了分配.
      阅读全文 »

maven

发表于 2018-03-30 | 更新于 2021-02-25 | 分类于 maven , tools

依赖示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.4.6</version>
<type>jar</type>
<scope>compile</scope>
<optional>true</optional>
<classifier>jdk15</classifier>
<systemPath>${project.basedir}/lib/my-jar.jar</systemPath>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
阅读全文 »
1234
Tonny Yi

Tonny Yi

Coding, Life, Zen

40 日志
39 分类
51 标签
GitHub E-Mail
Creative Commons
© 2021 Tonny Yi
由 Hexo 强力驱动
|
主题 — NexT.Mist