原创 深入理解原子操作的本質

原文地址:https://blog.fanscore.cn/p/34/ 引言 本文以go1.14 darwin/amd64中的原子操作爲例,探究原子操作的彙編實現,引出LOCK指令前綴、可見性、MESI協議、Store Buffer、Inv

原创 golang unsafe.Pointer與uintptr

原文地址:https://blog.fanscore.cn/p/33/ 先說結論 uintptr 是一個地址數值,它不是指針,與地址上的對象沒有引用關係,垃圾回收器不會因爲有一個uintptr類型的值指向某對象而不回收該對象。 unsaf

原创 x64架構下Linux系統函數調用

原文鏈接:https://blog.fanscore.cn/p/27/ 一、 函數調用相關指令 關於棧可以看下我之前的這篇文章x86 CPU與IA-32架構 在開始函數調用約定之前我們需要先了解一下幾個相關的指令 1.1 push pu

原创 IEEE754標準浮點數表示與舍入

原文地址:https://blog.fanscore.cn/p/26/ 友情提示:本文排版不太好,但內容簡單,請耐心觀看,總會搞懂的。 1. 定點數 對於一個無符號二進制小數,例如101.111,如果我們要用2個字節即16位來存儲它,我

原创 理解內存對齊

原文地址: https://blog.fanscore.cn/p/24/ 相信大家都聽說過內存對齊的概念,不過這裏還是通過一個現象來引出本篇話題。 一、求一個結構體的size 猜下下面這個結構體會佔用多少字節 type S struct {

原创 PHP實現Bitmap的探索 - GMP擴展使用

原文地址:https://blog.fanscore.cn/p/22/ 一、背景 公司當前有一個用戶羣的系統,核心功能是根據不同的條件組去不同的業務線中get符合條件的uid列表,然後存到redis中的bitmap中。 舉個🌰,如果一個用

原创 基於EBNF語法的描述

基於JavaCC的語法描述 使用JavaCC從token序列中識別出"語句" “表達式” “函數調用” 等語法單位的方法。 只要爲JavaCC描述“語句” “表達式” “函數調用” 這樣的語法單位各自是由怎樣的token序列構成的,就能夠對

原创 Golang 筆記 5 go語句

   Go語句和通道類型是Go語言的併發編程理念的最終體現。與defer語句相同,go語句也可以攜帶一個表達式語句。Go語句的執行會很快結束,並不會對當前流程的進行造成阻塞或明顯的延遲。一個簡單的示例: go fmt.Println("Go

原创 JavaCC從入門到出門

一、JavaCC   JavaCC是java的compiler compiler。JavaCC是LL解析器生成器,可處理的語法範圍比較狹窄,但支持無限長的token超前掃描。   安裝過程:   我是從github上down下來的zip壓縮

原创 Golang 筆記 4 defer、error、panic

一、defer語句   defer語句僅能被放置在函數或方法中。它由關鍵字defer和一個調用表達式組成。這裏的表達式所表示的既不能是對Go語言內建函數的調用也不能是對Go語言標準庫代碼包unsafe中的那些函數的調用。實際上,滿足上述條件

原创 Webpack前端打包工具

一、安裝   安裝Webpack之前需要安裝nodejs,然後用npm安裝: $ npm install webpack -g  &nsbp;運行以上命令就將Webpack安裝到了全局環境中。  但是通常我們會將Webpack只安裝到項目的

原创 語法的二義性和token的超前掃描

語法的二義性 JavaCC不能分析所有EBNF描述的語法,因爲EBNF描述的語法本質上具有二義性的情況。C語言中if語句用JavaCC的EBNF可以是如下描述: "if" "(" expr() ")" stmt() ["else" stmt

原创 Golang 微信機器人包

一、     最近用在學習golang,寫了個小工具練練手。通過golang模擬微信網頁端,接收微信服務器的消息並定製。可接入圖靈機器人的api實現一個微信機器人的小玩具,當然了,可以有更多更好玩的玩法。 二、      地址: https

原创 Golang 筆記 2 函數、結構體、接口、指針

一、函數   Go中函數是一等(first-class)類型。我們可以把函數當作值來傳遞和使用。Go中的函數可以返回多個結果。  函數類型字面量由關鍵字func、由圓括號包裹聲明列表、空格以及可以由圓括號包裹的結果聲明列表組成。其中參數聲明

原创 Golang 筆記 3 if、switch、for、select語句

一、if語句   Go的流程控制主要包括條件分支、循環和併發。  if語句一般由if關鍵字、條件表達式和由花括號包裹的代碼塊組成。在Go中,代碼塊必須由花括號包裹。這裏的條件表達式是結果類型爲bool的表達式。例: if number >