在新项目使用到了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 中移除
默认会使用当前 compose.yaml 所处文件夹的名称作为 project name 。使用 project name 来隔离各个环境。
对 官网 Docker Compose Quick Start 的一些简单记录
比如:使用 docker 来构建 redis 哨兵模式来学习,构建 ELK ,或者提供一个当前系统的最小可用版本提供其他组测试对接用
当数据库中的键过期时,会如何删除?
Redis 使用的是 惰性删除 和 定期删除,在一段时间内对数据库进行抽样检查,如果检查时间上限一到就停止。之后再次触发时,接着上一次的数据库继续进行。
反射可以提高程序的灵活性,使得 interface() 有更大的发挥余地,反射使用 TypeOf 和 ValueOf 函数从接口中获取目标对象信息,将匿名字段作为独立字段。
修改对象状态的前提是 interface.data 是 settable , 即 pointer-interface
通过反射可以动态调用方法
gorountine
切换时间来实现“同时”运行,在并行则是利用多核实现多线程的运行,通过通信共享内存
1 | func Go(){ |
Go 中虽然没有class,但依旧有method,通过显示说明receiver来实现与某个类型的组合,只能为同一个包中的类型定义方法,receiver可以是类型的值或指针。
method不存在方法重载,可以是使用值或指针来调节方法,编译器会自动完成转换,从某种意义上来说,方法是函数的语法糖,因为receiver其实就是方法所接收的第一个参数(Method Value vs Method Expression)
如果外部结构和嵌入结构存在同名方法,则优先调用外部结构的方法,类型别名不会拥有底层类型所附带的方法。
方法可以待用结构中的非公开字段
接口是一个或多个方法签名的集合,只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显示声明了实现了哪个接口,这称为 Structural Typing
接口只有方法声明,没有实现,没有数据类型
接口可以匿名嵌入其他接口,或嵌入结构中
将对象赋值给接口时,会发生拷贝,而接口内部存储的是指向这个复制品的指针,即无法修改复制品的状态 ,也无法获取指针
只有当接口存储的类型和对象都为 nil 时,接口才等于 nil
接口调用不会做 receiver 的自动转换
接口同样支持匿名字段方法
接口可实现类型 OOP 中的多态
空接口可以作为任何类型数据的容器