学习让我快乐

争于世, 不争于势;简洁, 高效, 赏心悦目

编译器设计读书笔记

可能对你并没有什么用的

前言 这里记录了在学习编译器设计这本书时记录的读书笔记, 限于每篇文章篇幅, 读书笔记被拆分成了多个部分, 这里是第一部分. 编译器书籍选择。编译原理(龙书),编译器设计(engineering a complier)。其中编译器设计更容易上手一点,更适合实践。编译原理更偏向于理论一点,更为全面。以 dfa 最小化算法举例,编译器设计首先介绍状态等价的概念,然后介绍了算法,很直观,但是有...

C++er 的 java 入门指南

前言 本文章根据 Java Tutorials Learning Paths, java 1.8 结合 C++ 经验制作而成; 只会记录一些琐碎的概念与知识点; 大多数语法上禁忌没有记录在内, 比如 local class 不能定义 static method 这种, 毕竟编译器会时刻提示我们的嘛. 个人觉得比较适合 C++er 的 java 入门入作; 毕竟 java 与 C++ 大体...

folly, wangle, proxygen 库

wangle 关于 wangle 的学习使用, wangle 文档不是很齐全, 反正当时我是看完 wangle 下面所有的 md 文档之后仍有很多不得其解, 所以不得不直接上手看源码了; 而且由于没有一个全局认知, 刚开始看会很迷糊, 不过会越来越有种拨开云雾见光明的感觉. 下面会零零散散地介绍实际使用中遇到的一些点, 以及 wangle 中一些全局概念, 争取能对 wangle 全局认知...

异步编程模式

再说异步编程模式之前, 先了解一下, golang 是如何以同步的方式编写异步代码的; 按我理解, golang 是通过协程来实施这一操作. 协程是什么呢, 协程就是一个逻辑执行流, 具有自己的当前指令指针, 以及局部变量这些状态. 协程必须运行在一个真实的线程中. 当协程执行到可能会阻塞的操作时, 此时 golang 运行时会在协程提交操作请求之后, 将协程置为挂起状态并从当前线程中移除,...

PhxPaxos Group 多状态机另外一种实现思路

目前 PhxPaxos 中的 Group 支持挂载多个状态机. 并且除了用户显式挂载的状态机之外, PhxPaxos 也会根据配置往 Group 上挂载一些内部状态机, 比如负责 master 选举的 MasterStateMachine 等. 但目前由于 MasterStateMachine, SystemVSM 等内部状态机各自都会构建自己的 checkpoint 以及从 checkp...

Storm ShellBolt 死锁

Storm ShellBolt 存在死锁的风险. 在 storm 中, ShellBolt 与其子进程通过标准输入/标准输出, 即文件描述符 0, 1 来通信, 同时也会读取标准出错, 即文件描述符 2 中的内容, 并将读取到的内容通过 storm 的日志系统输出到日志中. 具体如下: public void writeBoltMsg(BoltMsg msg) throws IOExcep...

Storm UI 统计不准确

发现 Storm ui 上的统计不是很准确. 经过一番 beidu 之后, 在 setStatsSampleRate 这里找到原因. 按我理解, storm 上 topology 每一次 emit/ack/fail tuple, 或者其他任何动作时都会调用 storm 的一些 hook. config.setStatsSampleRate() 指定了调用频率, 默认是 0.05, 即 to...

Storm.py json decode exception

事故现场如图: 本来因为是 ShellBolt 出现 BUG 了. 感觉像 writeBoltMsg() 时遇到了 InterruptedException 导致只写入了 "comp: nu", 然后又一次调用 writeBoltMsg() 导致错乱了. 后来发现不对. 因为这个异常只出现在我们的一个组件 C 内. C 使用了多进程, 并且 C 的子进程中调用了 storm.em...

mysql SQL 优化案例 JOIN 顺序调整

线上 mysql slow log 显示有一条 sql 其执行时间几率性 2s+. sql 如下: SELECT tableA.col10 FROM tableB INNER JOIN tableA ON tableB.col6 >= :c1 AND tableB.col6 <= :c2 AND tableB.col9 < :col9 AND tableB.id = ta...

Golang C++11 中的原子操作对比

在学习 C++11 中新增的原子操作以及相应的 memory model 之后; 再看 golang 中的 sync/atomic, 可以发现 sync/atomic 提供的是纯粹的原子操作, 等同于 c++11 中的 std::memory_order_relaxed. 所以 The Go Memory Model 在介绍 golang memory model 并未提及到 atomic ...

The Go Memory Model

Introduction 略 Advice 当数据被多个 goroutines 同时 accesse(存取) 时, 这些 access must serialize. To serialize access, protect the data with synchronization primitives(同步原语), such as channel operations, thos...

The Go Programming Language Specification

参考: 1.6.3 Source code representation 源码文件使用 UTF-8 文件存放. Lexical elements Comments 与 C++ 一致. Tokens Token 分为四类:identifiers, keywords, operators and delimiters, and literals White...

Gcc 使用 init priority 控制全局变量初始化顺序

init_priority 在 C++ 标准中,对于全局变量的初始化顺序,只规定了若全局变量的定义在同一 translation unit (可以理解为:源文件) 中,则定义的顺序决定了初始化的顺序,并没有规定跨 translation unint 的情况下初始化顺序. gcc 中可以通过__attribute__((__init_priority__(PRIORITY)))在全局变量定...