R·ex / Zeng


音遊狗、安全狗、攻城獅、業餘設計師、段子手、苦學日語的少年。

Go module 踩坑備忘

之前為了寫 Go,我特地搗鼓了一下 VSCode 的 Go 配置,具體的經歷可以看 這裡 。 最近由於業務需求,需要新開一個 Go 的專案。聽朋友說 Go 從 1.11 開始有了個叫 Modules 的新特性,於是打算看看能否用在我的新專案中。 為什麼我對 Modules 這麼感興趣呢?因為寫專案總是逃不開各種包管理,而之前 Go 不管是官方還是非官方的包管理器,都是基於 GOPATH ...

Redirect Attack - Shadowsocks 流密碼的不安全因素

Shadowsocks 是一款陪伴無數玩家多年的科學上網工具,但是近年來隨著牆的日益增高,一些 Shadowsocks 流量已經可以被很好的識別出來,然後就是——“同志,你梯子塌了”。 雖然“協議可以被識別”已經眾所周知,但我們依舊認為,Shadowsocks 的加密做的不錯,中間人應當破解不出明文資訊。 然而,晚上看到的一篇 文章 ,稍稍動搖了一下我對 Shadowsocks 資料安全的...

TypeScript 型別系統與函數語言程式設計

背景 接觸 TypeScript 已經有一段時間了,這期間寫過一些複雜的型別(例如 這篇文章 ),我開始意識到:TypeScript 的型別系統寫起來就像函數語言程式設計一樣。去年某天,一個同事給我發了個連結,裡面講的是“TypeScript 型別系統的圖靈完備”,裡面的一些內容我還在努力理解到可以分享的程度,但一些程式碼差不多可以說明 TypeScript 型別系統跟函數語言程式設計的思想非常接近了。 ...

從前端元件庫引出的計算幾何問題

是的,又是那個元件庫。由於腳手架搭的比較好,大家開發的效率超出了預期。然而總有些不順利的事情出現,於是就有了這次要說的事情。 一個容易解決的問題 我們的 <Icon> 元件跟 Ant design 比較類似,底層用的是 SVG,這樣可以透過按需引入以減小空間。由於 SVG 是設計師用 Illustrator 畫的,裡面必定會帶有各種無關緊要的資訊,因此同事在構建指令碼中用 s...

TypeScript+Vue 元件庫的細節問題

背景 為了 第四季度的 KPI(劃掉) 配合全組前端專案的 UI/UX 改版,我們需要自己寫一套元件庫。第一個吃螃蟹的專案是用 Vue 寫的,所以我們決定先寫一個 Vue 的元件庫。因為我剛好比較閒,於是搭腳手架的任務就交給了我。 技術選型 我個人的觀點是:TypeScript(或其它靜態型別的語言)是未來的趨勢,但 Vue 對 TypeScript 的支援並不是那麼好。 經過再三查...

immer.js - 實現不可變資料的新思路

immer.js 介紹 因為專案需要,我跟不可變資料打交道也有很長一段時間了。對於不可變資料來說,大家最熟悉的應該就是 immutable-js 了,然而它有這麼幾個劣勢: API 複雜,額外引入了 Map 和 List 型別 需要指定一個數組作為路徑來 get 或 set,失去了 ES6 的語法簡潔性 失去了 Flow 或 TypeScript 對資料的 Schema 校...

從 DFS 的角度看 NFA 正則與最佳化技巧

前言 今年七月初 CloudFlare 由於一條正則表示式宕機的事情大家應該都聽說過了,究其原因,是因為正則表示式匹配時產生了大量的回溯,從而耗盡了 CPU 資源。具體的技術分析網上都有,這兒就不贅述了。 從小到大我都被教育:正則表示式可以高效的匹配字串,正則會先被轉換成 NFA,再被確定化為 DFA(這演算法我現在還是能記住的),然後就可以用一個“與輸入長度相關的線性時間複雜度”的演算法來匹...

為 GORM Logger 新增 Trace ID 的過程和一點思考

起因 後端程式的執行時日誌,一直是出現線上問題時幫忙除錯的有利工具。我現在負責的運營平臺,由於是給內部人員用的,而且大多數功能都是資料庫的增刪改查,於是對於日誌就沒有打的那麼詳細。直到有一天出了一次線上事故,我們足足花了三天才找到原因(其中有兩天我甚至一直以為跟我們的平臺沒有關係)。經過那次之後,我徹底明白了日誌的重要性,於是開始豐富我們的執行時日誌。 在這個平臺剛搭起來沒多久的時候,另一個...

Webpack 打包體積最佳化:沒有銀彈

關於 Webpack 打包體積最佳化的問題,網上的文章已經有很多了,大概的方法有: webpack-bundle-analyzer ( source-map-explorer )、 CommonsChunkPlugin (v4.x 之後變成了 splitChunks 選項)、按需引入用到的庫、Tree Shaking、CDN 等。之前我用這些方法對自己負責的某個專案做了一次最佳化,使得總體積不到...

利用 Trie 樹的變種最佳化帶引數路由的匹配

背景 我目前負責的平臺需要做一個轉發功能,大概的需求如下: 把前端發過來的某些 URL 直接轉發到第三方系統; 需要在轉發過程中新增帶有使用者和國家資訊的 JWT header 以供第三方系統使用; 需要在我的平臺上為不同 URL 做鑑權,例如 URL a 需要 rule 的讀許可權,URL b 需要 rate 的寫許可權; 第三方系統的管理員可以在我的平臺上自由配置轉發規...

一次對 Chromium 原始碼分析的經歷

問題起因 前幾天,我們組的 Leader 在準備內部技術分享的 PPT,是關於 Chrome 底層的一些內容。然而在準備的過程中,發現了 Chrome 在某些情況下會重複請求伺服器資源。這是明顯不合理的設計,因為 Chrome 並不知道每個請求是否符合冪等性,代替開發者自動重新請求可能會導致不可預知的問題,於是 Leader 便開始尋找問題所在。剛好被我看到了,於是便過去幫一下忙(當了一個小時...

對於地址庫需求的最佳化

背景 作為一個電商平臺,我們需要有一個統一的地址庫,對這個庫的配置頁面,就落到了我負責的運營平臺中了。對於這個庫來說,大概的幾個需求如下: 以 Entity 維度來區分,例如 Malaysia 和 Taiwan 的資料是不互通的; 每個 Entity 中的資料都是一棵樹,一共有四層,分別代表 State、City、District、Street; 需要支援如下操作: 給定一個點,...

這是我們共同度過的

第 3847 天