24. Swap Nodes in Pairs — JavaScript — dummyList

`var swapPairs = function(head) {    // Initialise a dummy list containing the provided one    let dummyList = new ListNode(null, head);     // Create a copy of the dummy list which we can traverse with    let current = dummyList;    // While there are 2 additional elements remaining    while (current.next && current.next.next) {        // Obtain the nodes to be swapped        const first = current.next;        const second = current.next.next;   // Swap the nodes        first.next = second.next;        second.next = first;        current.next = second;   // Move forward by 2 elements        current = current.next.next;    }   // Return the swapped LinkedList, removing the dummy head   return dummyList.next;};`

--

--

209. Minimum Size Subarray Sum — JavaScript — two pointer

`var minSubArrayLen = function(target, nums) {    let l = 0;    let r = 0;    let ans = Infinity;    const n = nums.length;    let total = 0;    while (l < n) {        while(r < n && total < target) {            total += nums[r];            r++;        }        if (total < target) break;        ans = Math.min(ans, r - l);        total -= nums[l];        l++;    }    return ans === Infinity ? 0 : ans;};`

--

--

LeetCode 133. Clone Graph JavaScript

`var cloneGraph = function(node) {    if (!node) return node    let map = {};        return traverse (node)         function traverse (node){       if(!map[node.val]) {           map[node.val] = new Node(node.val)           map[node.val].neighbors = node.neighbors.map(neighbor => traverse(neighbor))       }       return map[node.val]    }};`

--

--

LeetCode 92. Reverse Linked List II JavaScript

`var reverseBetween = function(head, left, right) {  let dummy = new ListNode();  let node = dummy;  node.next = head;    for(let i = 1; i < left; i++) {    node = node.next;  }    let curr = node.next;  let next = curr.next;for(let i = 0; i < right - left; i++) {    curr.next = next.next;    next.next = node.next;    node.next = next;next = curr.next;  }    return dummy.next;};`

--

--

建立 Proxy 保護 API url

Proxy 是一種設計模式，代表實際存在的網路實體，可以存在於 backend server 之間，也能存在於路由器之間，又或者是多台電腦之間。

Proxy 概念

1. 避免程式碼重複（ code duplication ）以外，
2. 針對 proxy 做額外的操作時，不用擔心更改到目標物件。

Http Proxy 配合 Node.js 實作

Http proxy 常見的應用情形：

1. 網路請求路由：架構完整的專案中，可能會提供 development 版本的 API 與 production 版本的 API，通常兩種版本的 API 也會部署在不同的 domain 上面。但我們不希望在 Client Side 處理決定呼叫哪個 API 的邏輯，可以由 proxy 決定呼叫哪個 API。
2. 認證（Authorization）： Client 發出 request 之後，會在 proxy 檢查是否擁有足夠的權限可以訪問該資源。如果檢查合格，proxy 再向目標發出請求，如果檢查結果為不符合權限，proxy 則可以執行如轉址(redirect)等相對應的動作。
3. 資料預處理：將發出去的請求統一處理格式，例如：語言、時區、客戶代碼、企業代碼等。同理，回傳的資料也可以預先處理，例如：回傳成功資料的處理，回傳失敗資料的處理。

--

--

Following