原创 【龍書筆記】編譯器前端之語法分析涉及的基本概念

前一篇龍書筆記主要介紹了編譯器內部實現的幾個主要步驟,本篇筆記主要說明編譯器前端涉及到的重要基礎概念。編譯器前端主要包括詞法分析、語法分析、語義分析及中間碼生成4個階段,一個典型的編譯器前端處理模型如下圖所示: 下面出現的術語或基礎概念均

原创 【GoLang筆記】A Tour of Go - Exercise: Equivalent Binary Trees

本文是GoLang學習教程中的一道習題,具體題目要求及代碼實現如下。 備註:由於天朝GFW屏蔽了GAE,所以GoLang官網及學習教程需要翻牆才能訪問。 Exercise: Equivalent Binary Trees1. Implem

原创 【Python筆記】從一段Bug代碼來理解Python的Naming Rule

從Python文檔關於Naming and binding的說明可知,變量名是綁定到具體對象的,從這點來看,可以把它理解爲C++中的引用。考慮下面兩行語句:a = 'test' a = 'test_ext'第1行執行後,Python解釋器

原创 【Python筆記】從一個“古怪”的case探究CPython對Int對象的實現細節

1. Python的對象模型我們知道,在Python的世界裏,萬物皆對象(Object)。根據Python官方文檔對Data Model的說明,每個Python對象均擁有3個特性:身份、類型和值。官方文檔關於對象模型的這段概括說明對於我們

原创 【龍書筆記】編譯器內部實現流程初探

上篇龍書筆記對編譯器在程序構建中的作用做了整體的黑盒介紹,本篇筆記的目的是拆開這個盒子,對編譯器內部實現流程做說明。 1. Phases of a compiler從整體來看,編譯器內部流程可以分爲2大類:分析(analysis)和綜合(

原创 【Python筆記】裝飾器語法糖(@staticmethod/@classmethod/@property)原理剖析及使用場景說明

在閱讀一些開源Python庫的源碼時,經常會看到在某個類的成員函數前,有類似於@staticmethod或@classmethod或@property的語法糖。本質上,它們都是函數裝飾器,只不過通常被用來修飾類成員函數而已。 本筆記旨在說

原创 【GoLang筆記】A Tour of Go - Exercise: Images

本筆記是GoLang學習教程的一道習題,題目要求及一種參考實現如下所示。 備註:由於天朝GFW屏蔽了GAE,所以GoLang官網及學習教程需要翻牆才能訪問。 Exercise: Images Remember the picture ge

原创 【Python筆記】Python多線程進程如何正確響應Ctrl-C以實現優雅退出

相信用C/C++寫過服務的同學對通過響應Ctrl-C(信號量SIG_TERM)實現多線程C進程的優雅退出都不會陌生,典型的實現僞碼如下: #include <signal.h> int main(int argc, char *

原创 Python Web框架Tornado的異步處理代碼示例

1. What is Tornado Tornado是一個輕量級但高性能的Python web框架,與另一個流行的Python web框架Django相比,tornado不提供操作數據庫的ORM接口及嚴格的MVC開發模式,但可以提

原创 supervisorctl報錯"error: , [Errno -2] Name or service not known"的解決方法

如果用Python寫過線上的後端服務,相信對Supervisor不會陌生,它包含兩個主要工具: 1)supervisord: 用來實現進程守護 2)supervisorctl: 用來實現supervisord對其守護進程的控制

原创 基於Java的開源日誌庫log4j調研筆記

由於Hadoop生態鏈基本都是java開發的,所以在很多有關大數據處理的開源項目中,經常會看到log4j這個jar包。本文旨在對它的用法做基本說明。 1. log4j是什麼 從log4j的命名(log for java)不難看出,它是爲j

原创 Spark調研筆記第2篇 - 如何通過Spark客戶端向Spark提交任務

在上篇筆記的基礎上,本文介紹Spark客戶端的基本配置及Spark任務提交方式。 1. Spark客戶端及基本配置 從Spark官網下載的pre-built包中集成了Spark客戶端,如與hadoop ver1.x兼容的Spark客戶端位

原创 自動化部署工具Fabric簡介

在持續集成/灰度發佈越來越流行的今天,模塊在預覽或生產環境的部署流程自動化顯得越來越重要。本文要介紹的Fabric就是一個幫助我們在上線時減少重複/繁瑣操作的自動化部署利器,對於缺乏成熟運維平臺的衆多小公司的運維或開發人員來說,掌

原创 Spark調研筆記第5篇 - Spark API簡介

由於Spark是用Scala實現的,所以Spark天生支持Scala API,此外,還支持Java和Python API。以Spark 1.3版本的Python API爲例,其模塊層級關係如下圖所示: 從上圖可知,pyspark是Pyth

原创 Spark調研筆記第3篇 - Spark集羣對應用的調度策略簡介

Spark集羣的調度分應用間調度和應用內調度兩種情況,下文分別進行說明。 1. 應用間調度 1) 調度策略1: 資源靜態分區資源靜態分區是指整個集羣的資源被預先劃分爲多個partitions,資源分配時的最小粒度是一個靜態的partiti