React Component 是個 function 所以當然也可以用 Recursion,如果不知道 Recursion(遞迴) 的朋友這邊簡單的介紹一下

Recursion (遞迴) 一個 function 呼叫自己,每個 recursive function 都需要有

  • base case: 一但此狀態達成,就不再呼叫遞迴函式
  • recursive case: 在此狀態下,持續呼叫遞迴函式

$n!$ (factorial function):在數學裡的意思是將到 n 數值乘再一起, ex: $$4! = 4 \times 3 \times 2 \times 1$$ ,在程式裡面我們習慣將其稱作 $fact(n)$

閱讀更多......

使用 React Native 開發 APP 的一大好處就是可以與 React Web 共用程式,除了 UI, Routing 等無法共用以外,商業邏輯、hooks、utils、api 層處理,通通可以共用,要達到此目的我們可以使用 Monorepo,如果不知道 Monorepo 是什麼的可以參考 Fireship 的影片,概念上就是將所有的專案都放在同一個 repo 下達到方便共用的目的

Monorepos - How the Pros Scale Huge Software Projects // Turborepo vs Nx

閱讀更多......

1. 想想看如何在 EC2 上部署 Container

如果我們想要使用 AWS EC2 來部署 Container 的話,我們可行的做法大概如下

  • 創建一個 VPC
  • 在 VPC 裡創建兩個以上的 public subnet,分別放到 2 個 Availability Zone
  • 創建 EC2 instance template 並在 user data 裡為 EC2 instance 安裝 Docker 以後拉下程式的 Docker Image,然後運行 Container,一個 EC2 instance 會運行多個 Container
  • 創建 EC2 Auto Scaling Group 和 Load Balancer 將流量導到這些 EC2 Instance

但是我們該如何在每個 EC2 Instance 裡放入這些 Container,我們會需要 container orchestration 來進行管理,也就是容器編排,這就談到我們今天的主角了 “AWS ECS”,以上流程建立出來的架構大概會是這樣

Untitled.png

閱讀更多......

VPC 可以想成是一道牆,沒有你的同意外面的東西不能進牆內,同理裡面的東西不能出牆外,主要的設定有兩個

  • Region
  • IP range: 用 CIDR 表示的的 IP 範圍

閱讀更多......

以下會以 PostgreSQL 為例

PostgreSQL 將 table 資料都存成一個一個的檔案,我們稱為 Heap 或 Heap files,Heap file 由多個 Block 組成,每個 Block 為 8KB,Block 裡面的 Item 或叫 Tuple ,就是一行一行的 Row

關係:Heap File > Block > Item

假設我們跑這個 Query

SELECT * FROM users WHERE username = 'Rianna';

PostgreSQL 會從硬碟裡讀取整個 Head File 載入到記憶體,然後執行 Query ,一個一個找,直到最終找到 username 等於 Rianna,我們稱這樣的的查詢方式為 Full Table Scan,通常這樣會導致不好的效能

閱讀更多......

有時候檔案太大,沒有辦法一次整個上傳,比如說影片、圖片等,這時候我們就需要將檔案拆成一小塊一小塊的 bytes 上傳

實作流程:

  • 使用者上傳檔案
  • FileReader 讀取檔案內容
  • 將檔案拆成一小塊一小塊後上傳
  • 後端收到每一小塊資料後 append 到該檔案裡

閱讀更多......

在什麼樣的情況下需要效能提升?

如果我們的程式需要進行重度的計算,而且這個任務無法像 timer, http request 等,可以非同步運行時,我們的 Request 就會被卡住

ex:

const express = require('express');

const app = express();

function doWork(duration) {
const start = Date.now();
while(Date.now() - start < duration) {}
}

app.get('/', (req, res) => {
doWork(5000)
res.send('<h1>Hi There!</h1>');
});

app.listen(3000, () => {});

閱讀更多......

不廢話先上題,請問以下程式 conosole.log 的順序?

const https = require('https');
const crypto = require('crypto');
const fs = require('fs');

const start = Date.now();

function doRequest() {
https
.request('https://www.google.com', res => {
res.on('data', () => {})
res.on('end', () => {
console.log('Request:', Date.now() - start);
})
})
.end();
}

function doHash() {
crypto.pbkdf2('a', 'b', 100000, 512, 'sha512', () => {
console.log('Hash:', Date.now() - start);
})
}


doRequest();

fs.readFile('text.txt', 'utf8', () => {
console.log('FS:', Date.now() - start);
})

doHash();
doHash();
doHash();
doHash();

閱讀更多......

Apollo Server 3 後,將 graphql-playground 改為自家的 apollo-studio, 當你一開啟

http://localhost:{YOUR_DEV_PORT} 時,它會主動導頁到 https://studio.apollographql.com

一開始用的時候,覺得特別好用,apollo-studio 的 auto-complete 的功能比 graphql-playground 好用許多,但是做到登入的功能時遇到這個問題困擾我超久,明明就有給 set-cookie 的 header,但是怎麼樣都拿不到 cookie

閱讀更多......

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×