Blog

reflect基本用法

按名字访问结构的成员 #

reflect.ValueOf(*e).FieldByName("Name")

按名字访问结构的方法 #

reflect.ValueOf(e).MethodByName("UpdateAge").Call(
  []reflect.Value{reflect.ValueOf(1)}
)

Struct Tag #

type Employee struct {
    EmployeeID string
    Name string `format:"normal"`
    Age int
}
func TestInvokeByName(t *testing.T) {
    e := &Employee{"1", "Mike", 30}
    //按名字获取成员
    t.Logf("Name: value(%[1]v), Type(%[1]T) ", reflect.ValueOf(*e).FieldByName("Name"))
    if nameField, ok := reflect.TypeOf(*e).FieldByName("Name"); !ok {
            t.Error("Failed to get 'Name' field.")
    } else {
            t.Log("Tag:format", nameField.Tag.Get("format"))
    }
    reflect.ValueOf(e).MethodByName("UpdateAge").
            Call([]reflect.Value{reflect.ValueOf(1)})
    t.Log("Updated Age:", e)
}

总线与南桥

Content #

两个麻烦的问题。

①不可能将所有的I/O 接口直接和处理器相连,设备那么多,还有些设备现在没有发明出来,将来一定会有。你怎么办?

②每个设备的I/O 接口都抢着和处理器说话,不发生冲突都难。你怎么办?

对第1 个问题的解答是采用总线技术。总线可以认为是一排电线,所有的外围设备,包括处理器,都连接到这排电线上。但是,每个连接到这排电线上的器件都必须有拥有电子开关,以使它们随时能够同这排电线连接,或者从这排电线上断开(脱离)。这就好比是公共车道,当路面上有车时,你就必须退避一下,不能硬冲上去。因此,这排公共电线就称为总线(Bus)。

对第2 个问题的解答是使用输入输出控制设备集中器(I/O Controller Hub, ICH)芯片,该芯片的作用是连接不同的总线,并协调各个I/O 接口对处理器的访问。在个人计算机上,这块芯片就是所谓的南桥。

From #

ror指令

Content #

循环右移(ROtate Right)。循环右移指令执行时,每右移一次,移出的比特既送到标志寄存器的CF 位,也送进左边空出的位。ror 的配对指令是循环左移指令rol(ROtate Left)。ror、rol、shl、shr 的指令格式都是相同的。

From #

shr指令

Content #

逻辑右移指令执行时,会将操作数连续地向右移动指定的次数,每移动一次,“挤”出来的比特被移到标志寄存器的CF 位,左边空出来的位置用比特“0”填充。

From #

应对黑天鹅事件的5个基本原则

Content #

应对黑天鹅事件的5个基本原则是什么?

  1. 不要预测。黑天鹅何时发生根本无法预测,能够预测出来的意外就不是意外。对于不可预测的事情作出错误的预测而采取错误的行动,只会犯下更大的错误。
  2. 谨慎预防。我们不能预测灾难,却可以预防灾难。必须最谨慎地分析最极端黑天鹅事件发生的破坏性,并作最充分的预防,这是决定生死成败的大事。
  3. 危中取机。老子5000年前早已说过:祸兮福之所倚,福兮祸之所伏。黑天鹅事件是危机,但危中有机,危后出机。最大的危机会出现最大的暴跌,也就会形成最好的投资良机。你应该像巴菲特在金融危机中一样,别人死了,我还活着,而且枪里装满了子弹!
  4. 保持充足冗余。通俗地说,就是凡事留有非常充分的余地,目的只有一个,以防万一,就是预防百年一遇甚至万年一遇的黑天鹅灾难性事件发生。如果中国铁道部早一点读到《黑天鹅》,“7·23”高铁追尾事故可能就不会发生。现在铁道部把高铁速度降下来,目的只有一个:保留足够的安全性冗余,以防万一。对于投资者来说,塔勒布说的冗余特指现金:“冗余(特指床垫下藏着的储蓄和现金)与债务是相对的。心理学家们告诉我们,致富并不能带来幸福——如果你花掉自己的积蓄的话。然而,如果你将金钱藏在床垫下面,那么你便拥有了针对黑天鹅更有利的抵御能力。”金融危机爆发前的2008年初,巴菲特公司账上拥有443亿美元的现金资产,加上留存的2007年度营业利润170亿美元,累计现金冗余超过600亿美元,占公司净资产的一半。
  5. 不要负债。塔勒布说:“有一条是对于个人和机构非常重要的戒律:我们可以降低经济生活中90%的黑天鹅风险……我们所做的只是取消投机性的债务。”巴菲特极度厌恶风险,负债率很低,2010年他在致股东的信中特别强调了债务的风险:“任何一系列有利的数据,不管这些数据多么令人心动,只要乘以零,都会灰飞烟灭。历史告诉我们,即使是非常聪明的人,运用财务杠杆产生的结果经常是零。”

From #

寻求建议的微妙之处

Content #

半个世纪之前,心理学家乔恩·杰克尔(Jon Jecker)和戴维·兰迪(David Landy)让人们参加一项几何任务,并为成功者支付报酬。在对照组,参加者可以留下报酬,并到系里秘书处完成最终的问卷。但是,当另一组受试者离开时,研究者会向他们寻求帮助。“我在想你能不能帮我一个忙。这项实验的经费用完了,我需要自己垫钱完成实验。为了帮助我,你能不能把赢的钱还给我?”几乎所有的参加者都把钱还了回来。当他们被问起有多喜欢研究者时,那些帮助过他的人与没帮过的人相比,明显更喜欢他。为什么会这样?

当我们付出自己的时间、精力、知识或资源帮助别人的时候,我们会努力维持一种信念,相信他们值得和应该得到我们的帮助。寻求建议是邀请别人对我们做出承诺的一种微妙的方式。一旦部门领导花时间为安妮提出建议,他就增加了对她的投入。帮助安妮找到解决办法强化了部门领导对她的承诺:她肯定值得部门领导为其花费时间。如果她对他不重要,为什么他要帮她呢?正如本杰明·富兰克林在自传中写到的:“帮助过你的人,比起那些你帮助过的人,更愿意继续帮你。”

当我们向别人寻求建议时,我们赋予了他们声望,显示出我们尊敬和欣赏他们的洞察力和专业技能。大多数人是互利者,他们倾向于积极地做出回应,感到有动力通过支持我们的方式,给我们回报。当安妮向人力资源经理寻求建议时,经理站了出来帮她说话。据传记作家沃尔特·艾萨克森(Walter Isaacson)说,本杰明·富兰克林将寻求建议视为一种奉承。富兰克林“有一条赢得朋友的基本原则”,艾萨克森写道,诉诸“他们的自尊心和虚荣心,持续地向他们寻求建议,他们就会因为你的判断力和智慧而欣赏你”。

From #

正念

Content #

佛教中的”正念“指的是什么?正念:最初源于佛教禅修,是从坐禅、冥想、参悟等发展而来。有目的地有意识的,关注觉察当下的一切,而对当下的一切又都不作任何判断、任何分析,任何反应,只是单纯地觉察它、注意它。

From #

为什么主引导记录的内存地址是0x7C00

Content #

0x7C00这个地址来自Intel的第一代个人电脑芯片8088,以后的CPU为了保持兼容,一直使用这个地址。

1981年8月,IBM公司最早的个人电脑IBM PC 5150上市,就用了这个芯片。

当时,搭配的操作系统是86-DOS。这个操作系统需要的内存最少是32KB。我们知道,内存地址从0x0000开始编号,32KB的内存就是0x0000~0x7FFF。

8088芯片本身需要占用0x0000~0x03FF,用来保存各种中断处理程序的储存位置。(主引导记录本身就是中断信号INT 19h的处理程序。)所以,内存只剩下 0x0400~0x7FFF可以使用。

为了把尽量多的连续内存留给操作系统,主引导记录就被放到了内存地址的尾部。由于一个扇区是512字节,主引导记录本身也会产生数据,需要另外留出512字节保存。所以,它的预留位置就变成了:

0x7FFF - 512 - 512 + 1 = 0x7C00 0x7C00就是这样来的。

计算机启动后,32KB内存的使用情况如下。 +——————— 0x0

Interrupts vectors

+——————— 0x400

BIOS data area

+——————— 0x5??

OS load area

+——————— 0x7C00

Boot sector

+——————— 0x7E00

Boot data/stack

+——————— 0x7FFF

(not used)

+——————— (…)

From #

https://www.ruanyifeng.com/blog/2015/09/0x7c00.html

景德镇的来历

Content #

景德镇这个名字的来历是什么?到了公元1004年,已经有了长足发展的宋朝进行了改元,年号“景德”。此时,已经初具规模的江西南昌镇,上贡给朝廷一批质地优良的青白瓷,宋真宗颇为喜欢,爱不释手,赞赏不绝。随即,宋真宗给南昌镇赐了一个国家年号的名字:景德镇。从此,南昌镇正式改名为景德镇,一直沿用至今。

From #

用户画像的RFM值

Content #

RFM(Recency、Frequency、Monetary ):

  1. R 是新进度,代表自用户上次消费以来的天数。这个指标其实也就是用户的热乎度,比如说你上次使用 App 是一个月前,你的系统里 R 值就是 30。如果你今天又用了一次 App,那 R 值就会立刻被更新为 1;
  2. F 是消费频率,代表用户是否频繁使用服务。这也是用户黏性的风向标;
  3. M 是消费金额,代表用户在一段时间内消费的总金额。

From #