「技术的本质」读书笔记

原书地址:技术的本质

在读这本书之前,我先设定了几个问题

技术是什么?

技术如何产生?

技术如何发展?

作为技术人员何以处之?

技术是什么

作者认为技术最深的本质是:

技术是对现象有目的的编程。 技术的「基因」就是「现象」。

原理就是做某件事情的操作方法,使某事动作的基本方式。

技术是建立在「原理」之上的. 而原理是对某一个(或几个)现象的利用。

技术是如何产生

新技术的产生来源于:

组合

关于技术组合,在第二章有详细的阐述。组合是在已有技术的基础上,进行高秩序的过程。

每个新技术和新的解决方案都是一个组......

二进制补码

为便于表达,在这里假定是在8位机器表示

二进制补码表示

无符号十进制整数x的二进制表示是之间将x不断整除2,然后将余数反向排列得到。比如8的二进制表示为:0001000,7的二进制表示为00000111。二进制补码(two's-complement),是将字(word)的最高位解释为负权(negative weight),最高位为1时,表示值为负;最高位为0时,表示非负。

二进制补码的表示方式可以基于无符号整数的二进制来表示,需要经过两步:

1.取十进制数值的绝对值,转变为二进制表示方法,之后将每位取反;

2.增加符号位,如果为负数则加1

例如 8的......

JVM 堆外内存

1. 何谓堆外内存

在之前的文章里面讲了JVM结构,着重讲了JVM堆结构,这里的堆外内存就是相对于JVM堆而言的,主要包含jvm本身在运行过程中分配的内存,codecache,jni里分配的内存,DirectByteBuffer分配的内存等等。

堆内内存相对应,堆外内存就是把内存对象分配在Java虚拟机的堆以外的内存,这些内存直接受操作系统管理(而不是虚拟机),这样做的结果就是能够在一定程度上减少垃圾回收对应用程序造成的影响。

日常开发中主要接触到的是java.nio.DirectByteBuffer在创建的时候分配内存,这篇文章也主要讲述DirectByteBuffer。......

ThreadLocal 导致Full GC 分析

难得出现了一次Full GC,抓住机会分析了一次。

事件回顾

之前服务线上总共有6台机器,其中2台机器为4核CPU+4G内存,另外4台机器为4核CPU+8G内存。

2017-08-01 早上11:00 开始FullGC报警,同时有两台,均为4G内存机器,其他8G内存机器未发现报警。监控无业务报警及Exception。

接到报警之后,马上摘除了一台机器留作jvm分析,另外一台重启。

dump 机器的堆栈信息

观察重启之后的机器情况,以及其他机器的运行情况,均未发现异常迹象。

事件背景

这个服务已经有超过一周的时间未发布也未重启过,之前一直没有出现过问题。

......

服务流量控制及限流

工作上在开发类似淘宝开放平台的点评到综的开放平台,需要针对不同的API做流量控制,后期还需要针对不同属性的服务商(上线状态,部分api的购买状态)做不同的流量控制策略,如 淘宝开放平台应用API流量规则。流量控制的维度主要有QPS流量控制以及一定时间区间(如/天、/小时)的调用次数。

网络流量控制(Network traffic control)是一种利用软件或硬件方式来实现对电脑网络流量的控制。它的最主要方法,是引入QoS的概念,从通过为不同类型的网络数据包标记,从而决定数据包通行的优先次序(from wiki)。

一般开发高并发系统常见的限流有:限制总并发数(比如数据库......