ZRoger's Blog


  • 首页

  • 自我介绍

  • 文章分类

  • 时间线

  • 搜索

JVM G1

发表于 2025-05-20
字数统计: 2k | 阅读时长 ≈ 8

在新项目使用到了G1

为什么使用 G1 , 在JDK8之后的版本中,G1 将会成为默认的 GC , 那么了解和使用 G1 是个不错的学习方向。在当前时间点:2025年5月20日时,JDK 版本已经来到了以下这个阶段

  • 25 in development
  • 24 GA 2025/03/18

那么在后续的版本中还有 ZGC / Shenandoah / Epsilon GC , 其中 CMS 在 JDK9 中弃用,在 14 中移除

阅读全文 »

JVM 堆内存回顾

发表于 2025-04-26
字数统计: 375 | 阅读时长 ≈ 1

有一天被负责 BI 的同事问道,为什么应用设置了 -Xms128m -Xmx128m 后,应用还是要占用 300 mb 左右的内存大小
想当然回答到:因为还有其他东西占用,这个只是用来约束栈堆的。
但是事后想了下,回答得不够好,就有以下这个文章重新梳理下这个答案

阅读全文 »

Docker How-tos

发表于 2025-04-13
字数统计: 1.4k | 阅读时长 ≈ 5

自定义项目名称

默认会使用当前 compose.yaml 所处文件夹的名称作为 project name 。使用 project name 来隔离各个环境。

  1. 在开发主机上:创建单个环境的多个副本,这对于为项目的每个功能分支运行稳定副本很有用
    • saas 化的场景
    • 私有定制化的场景
  2. 在 CI 服务器上:通过将项目名称设置为唯一的构建编号来防止构建之间的干扰
  3. 在共享或开发主机上:避免可能共享相同服务名称的不同项目之间的干扰
阅读全文 »

Docker Compose - Quick Start

发表于 2025-04-12
字数统计: 1.1k | 阅读时长 ≈ 5

Docker Compose Quick Start

对 官网 Docker Compose Quick Start 的一些简单记录

用 Docker Compose 来解决什么问题 ?

比如:使用 docker 来构建 redis 哨兵模式来学习,构建 ELK ,或者提供一个当前系统的最小可用版本提供其他组测试对接用

阅读全文 »

reids_删除策略

发表于 2022-05-09
字数统计: 245 | 阅读时长 ≈ 1

Redis 过期删除策略

当数据库中的键过期时,会如何删除?

  • 定时删除,当键的时间一到,立即执行删除,对内存友好,对CPU时间不友好
  • 惰性删除,当获取该键时,判断是否过期进行删除,对内存不友好,对CPU时间友好
  • 定期删除,隔一段时间进行检测过期键,然后删除。是前两种策略的结合,需要根据项目情况,把握好发生频率和时长。

Redis 使用的是 惰性删除 和 定期删除,在一段时间内对数据库进行抽样检查,如果检查时间上限一到就停止。之后再次触发时,接着上一次的数据库继续进行。

axios 小结

发表于 2022-01-15
字数统计: 2.3k | 阅读时长 ≈ 10

Axios 使用小结

工作的项目是前后端分离的,前端项目采用 Vue 相关的技术栈进行搭建,与此同时,前端请求的方式也发生了改变,由原来 Jquery 中 ajax 变为 axios ;

在使用的过程中当然存在一些疑问,在这里作下小小的汇总;

阅读全文 »

Go reflection

发表于 2021-05-09
字数统计: 535 | 阅读时长 ≈ 2

反射

反射可以提高程序的灵活性,使得 interface() 有更大的发挥余地,反射使用 TypeOf 和 ValueOf 函数从接口中获取目标对象信息,将匿名字段作为独立字段。

修改对象状态的前提是 interface.data 是 settable , 即 pointer-interface

通过反射可以动态调用方法

阅读全文 »

Go cibcyrrency

发表于 2021-05-09
字数统计: 513 | 阅读时长 ≈ 2

并发concurrency

gorountine

切换时间来实现“同时”运行,在并行则是利用多核实现多线程的运行,通过通信共享内存

1
2
3
4
5
6
7
8
9
func Go(){
fmt.Println("Go go!")
}


func main() {
go Go()
time.Sleep(2 * time.Second)
}
阅读全文 »

Go method

发表于 2021-04-25
字数统计: 719 | 阅读时长 ≈ 3

方法 Method

Go 中虽然没有class,但依旧有method,通过显示说明receiver来实现与某个类型的组合,只能为同一个包中的类型定义方法,receiver可以是类型的值或指针。

method不存在方法重载,可以是使用值或指针来调节方法,编译器会自动完成转换,从某种意义上来说,方法是函数的语法糖,因为receiver其实就是方法所接收的第一个参数(Method Value vs Method Expression)

如果外部结构和嵌入结构存在同名方法,则优先调用外部结构的方法,类型别名不会拥有底层类型所附带的方法。

方法可以待用结构中的非公开字段

阅读全文 »

Go interface

发表于 2021-04-25
字数统计: 681 | 阅读时长 ≈ 2

接口 interface

接口是一个或多个方法签名的集合,只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显示声明了实现了哪个接口,这称为 Structural Typing

接口只有方法声明,没有实现,没有数据类型

接口可以匿名嵌入其他接口,或嵌入结构中

将对象赋值给接口时,会发生拷贝,而接口内部存储的是指向这个复制品的指针,即无法修改复制品的状态 ,也无法获取指针

只有当接口存储的类型和对象都为 nil 时,接口才等于 nil

接口调用不会做 receiver 的自动转换

接口同样支持匿名字段方法

接口可实现类型 OOP 中的多态

空接口可以作为任何类型数据的容器

阅读全文 »
12…4
ZRoger

ZRoger

一分耕耘一分收获

37 日志
41 标签
RSS
神奇的链接
  • ArtStation
  • Dribbble
  • V2EX
© 2018 — 2025 ZRoger
|
主题 — NexT.Pisces v5.1.4
0%