0%

在 JVM 运行时数据区域中,程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收。垃圾回收主要是针对 Java 堆和方法区进行。

一、判断对象状态

JVM 在回收一个对象时,首先要判断这个对象的状态,如果判断对象为无效的(没有被任何对象或变量引用),则需要被 JVM 垃圾回收器回收。

1.1 引用计数算法

给对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数不为 0 的对象仍然存活。

一些零碎的知识点总是似懂非懂,用法老是模棱两可,每次都要去网络上查询,长时间不用又忘记了。比如 Java 中的位运算。今天抽空归纳总结一下,加强一下记忆。

一、原码、反码和补码

1.1 原码

一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为 0, 负数为 1。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如 8 位二进制:

[+1] 原 = 0000 0001
[-1] 原 = 1000 0001

第一位是符号位,因为第一位是符号位,所以 8 位二进制数的取值范围就是:[1111 1111 , 0111 1111],即:[-127 , 127]

SQL 标准定义了 4 类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。

一、SQL 事务隔离级别说明

1.1 Read Uncommitted(读取未提交内容)

在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。

Java 的内存区域划分绝不仅仅只是堆内存(heap)和栈内存(Stack),实际上 JVM 在执行 Java 程序的过程中会把它所管理的内存划分为以下几个数据区域:程序计数器、Java 虚拟机栈、本地方法栈、堆、方法区、运行时常量和直接内存。如下图所示:

Runtime DataArea

记录备忘一下 Mac 系统下一些实用的小工具

收费

  • Bartender : 菜单栏管理工具,可以将菜单放进 Bartender 的二级菜单
  • SizeUp : 实用分屏小工具
  • Proxifier : 配合 ss/ssr 可以实现真正的全局代理软件
  • iStat Menus : 能够在系统菜单栏实时监控 CPU、内存、硬盘、网络、温度、电池以及系统时间等
  • CleanMyMac : 系统清理工具,可以清除 mac 系统多余的语言包、系统缓存、应用程序等
  • KeyCue : 快捷键辅助工具,忘记一些快捷键的时候按住 Command 就会出现快捷键大全的菜单
  • Araxis Merge : 可视化文件合并以及数据同步工具
  • BetterZip : 功能非常强大的压缩解压缩软件
  • Parallels Desktop : 最佳 Mac 虚拟机解决方案
  • TinyCal : 小历 - 小而美的日历 (OS X)

北漂,是一种选择,但越来越多的会是无奈和彷徨, 踌躇满志而来,万念俱灰而归,也许就是大多数北漂的归属,结局也许有些夸张。 最终,我还是无法爱上这座城市,最起码我努力爱过…

Go 语言中反射的操作主要定义在标准库 reflect 中,在标准库中定义了两种类型来表现运行时的对象信息,分别是: reflect.Value (反射对象的类型)和 reflect.Type (反射对象的值),Go 语言中所有反射操作都是基于这两个类型进行的。

{% img https://cdn.jsdelivr.net/gh/0vo/oss/images/golang-reflect.jpg 350 %}

为了方便演示操作( 完整代码示例 ),首先定义以下结构体以及字段、方法:

Kubernetes 集群的搭建是有一定难度的,尤其是对于初学者来说,好多概念和原理不懂,即使有现成的教程也会出现很多不可预知的问题,很容易打击学习的积极性,就此弃坑。好在 Kubernetes 社区提供了可以在本地开发和体验的极简集群安装 MiniKube,对于入门学习来说很方便。

{% img https://cdn.jsdelivr.net/gh/0vo/oss/images/687148dbly1fo7n00rkl6j20b40b4goj.jpg 300 %}

MiniKube 官方安装介绍已经非常详细了,可以参考 installation 。但是在国内由于网络访问原因(懂的),即使有梯子也很折腾,所以记录一下阿里修改后的 MiniKube 安装。使用阿里修改后的 MiniKube 就可以从阿里云的镜像地址来获取所需 Docker 镜像和配置,其它的并没有差异,下文着重介绍。

2017 年最后一天了,北京的天气很好,阳光明媚,关键是没有雾霾。说起雾霾,今年北京可是"治理"的很有效果,截止目前雾霾天和去年的好天气一样多,买了个空气净化器还没怎么派上用场,哈哈。

步入了婚姻的殿堂,享受幸福的同是多了一份责任。进入人生下一个阶段,需要处理的关系更多,新的一年需要勉励自己不断前行…

奋斗在一线的程序猿,到了一定的阶段,就不得不审视一下自己的未来。作为碌碌无为低端程序猿的我,此刻对未来感到深深的迷茫。少了年少时的拼劲,多了肩膀上的重担,不知作为下一个低端人群的我在北京还能拼搏多久。

总结备忘一下常用的的 Go 代码片段

遍历目录下的文件

func getFilelist(r string) {
    err := filepath.Walk(r, func(p string, f os.FileInfo, err error) error {
        if f == nil {
            return nil
        }
        if p == r || f.IsDir() {
            return nil
        }
        fmt.Println(p)
        return nil
    })
    if err != nil {
        fmt.Printf("filepath.Walk() returned %v\n", err)
    }
}