前言大家都知道運行 JS 的 runtime 有兩種: NodeJS、瀏覽器。以下 JS 底層運作學習記錄的視角是以瀏覽器為主,但其實說到如何解決 Single-threaded 單線程限制的背後核心運作流程概念都是雷同的就差在運行環境、實現方式不同。理解了瀏覽器後,就能理解 NodeJS 是如何做到的。
先留個伏筆給自己之後探究:NodeJS 無論是 Web APIs、Event loop..等等機制的實現方式都是透過 libuv 這一個library。
以下筆記用到的圖大部分是截自於 -> 超頂的可視化介紹
大家都知道 JS 是 Single-threaded,那到底什麼是 Single-threaded?簡單一句話:Single-threaded == signle callstack == 同一時間只能執行一段程式碼所謂的 thread 就是系統處理工作的基本單元,在很多系統中很常會運用多線程去達到同時執行很多事物、提升整個應用程式的性能,然而,JS 卻是基於 Single-thread 的一個語言,那是不是代表 JS 就是一...
前言(preface):這是一個以結合 Medium、Notion 各自優點為目標的部落格平台,其中核心技術在於編輯器的實作(離線同步恢復、及時保存機制等等)以及運用 Deep Learning 的方式實作文章推薦系統,系統開發流程遵循 Scrum的敏捷開發方式,是一個為期 3 sprints 的全端個人專案且有著高度的**分層架構 (Layered Architecture)**讓整體的系統更好維護及擴展。
This is a blogging platform aimed at combining the best features of Medium and Notion. Its core technology focuses on the implementation of the editor (offline sync recovery, real-time save mechanism, etc.) and the application of machine learning (ML) for recommendation algorithm develo...
前言(preface):本篇是記錄學習cache快取策略的筆記,以及一些實作經驗。
基本快取概念(Concepts):為了減輕Database的壓力以及提升系統效能,原理就是將可重複使用的資料存在記憶體中,這樣就能免去每次都需要跑去資料庫拿取又或是重新經過複雜計算的動作,類似殺雞焉用牛刀的概念。
快取的策略、模式Cache Aside最簡單又常見的一個,讀策略就是cache有就拿沒有就去資料庫拿拿完再放入cache,寫策略則是先更新完資料庫後刪除於快取的舊資料可以注意的點是,此策略下是由應用程式(Application Layer)負責與快取、資料庫做互動,快取系統只被作為一個暫存資料的容器。
應用情境: 不適合寫多的情形,假設a發出讀取請求且未命中緩存的當下近乎同時b發出寫入請求,儘管資料庫是最新的資料但a有極大的機率拿到髒資料(也因此導致快取與DB資料不一致),原因是因為寫策略並沒有更新到緩存,所以通常遇到寫多的情形時會選擇其他策略又或是將緩存過期時間設置極短
優點:
易實現、不容易產生快取併發問題
讀多的情況下有極高的效能(廢話XD)資料庫負擔小
快取serve...
前言(preface):這篇文會分享Soon Solve這個side project的開發技術、功能介紹以及學習心得!但因為本人負責後端開發所以開發技術的分享著重在後端的介紹!前端的學習紀錄可以參考我的夥伴筆記
Soon Solve 基本介紹:Soon Solve的開發夥伴總共5位是以前後端分離的方式進行開發,後端包含我是3人,前端為2人,開發時間為兩週,透過設計思考的概念我們在一開始就不花多少時間便定好了Soon Solve的Core Value:順路(便)經濟而主要理念是讓大學生在校園中可以透過此應用程式將自己瑣碎的時間轉變為對自己而言更有價值的寶物同時促進整體校園環境變得更加和諧
系統開發完整性在6,7成,目前主要限制在台大校園裡的建築為任務地點作為指標,來不及開發出完整的map系統
其中我覺得最為有趣的是在某些功能上我們似乎存在滿有料的隱藏性價值XD
開發語言、環境與框架(Programming Languages, Environment, and Frameworks):
後端 (Back-end): JavaScript、Node.js、Express、My...
前言(preface):本篇是記錄在學習RabbitMQ的過程與經驗,會介紹RabbitMQ的概念、實作方式、以及一些常見Bug解法。如果有錯請大哥指點QQ
概念(Concepts):RabbitMQ本質是一個 Queue,但專門用於訊息發送接收的一種訊息代理軟體,就像是Nginx 代理Http/Https請求的概念,他專門代理發送者傳出的訊息,也因此能做到傳送訊息雙方的「解耦」,因為發送方只需將訊息交給RabbitMQ而不需去知道哪個應用程式要使用到
RabbitMQ的競爭者有Kafaka、RocketMQ、ActiveMQ而他比較獨特的點就是支援AMQP這樣的訊息傳遞協議 在NodeJS中就有提供amqplib這樣的library
amqplib 是 RabbitMQ 的官方 Node.js 客戶端庫,它提供了兩種不同的API風格:Promise-based API 和 Callback-based API。12const amqp = require('amqplib');const amqp = require('amqplib...
前言(preface):這篇文會分享在實作Canchu這個social media 的心路歷程、相關技術,順便(喔不 是必須要)推一波AppWorks School XD
This article will share the journey of implementing the social media platform “Canchu,” the relevant technologies involved, and also give a shout-out to AppWorks School.
開發語言、環境與框架(Programming Languages, Environment, and Frameworks):
後端 (Back-end): JavaScript、Node.js 、Express、MySQL
雲端服務 (Cloud Service):Linux(AWS EC2)、AWS RDS、AWS Load Balancer
容器化工具(Containerization):Docker
前端(Front-end):HTML/CSS...