1hr37mins30secs de SpringBoot

SpringBoot 2023 SpringBoot initializr Dependencies: SpringBoot DevTools Spring Web Spring Data JPA and Hibernate PostgreSQL Driver Starting the server src - main - java - com.example.demo.DemoApplication - resources - static - templates - application.properties - test - java - resources Create a simple API 1 2 3 4 5 6 7 @RestController //To Make the class to serve restful endpoint public class DemoController {} @GetMapping //To set Restful endpoint on method public List<String> hello() { return List.

Redis 筆記

資料分群 三種依照服務類型儲存資料的方法: namespace:在key的前面加上如user:的prefix,所有資料放在一個Redis內 建議用:區分。 可以用 redis-audit,它會用自動分群,也可以加入部分規則,減少自動分群花的時間。 使用 database:用指令 select 切換用不同的 “database” Redis Cluster只能用database 0,因此長遠 scalability 考量,database並不適用。 用不同的 Redis servers 管理成本較高。設成LRU mode存cache資料,作為第一個Redis Cluster:存persistent data,作為第二個Redis Cluster。如此,可以個別設定適合的 shards、replicas 以及 各別設定適合的shards、replicas 以及 OOM 時的處理方式。 使用Expiration – 標上有效期限 避免無限量的丟東西到記憶體裡面,以降低太多資料的管理成本 須注意,Redis只有支援在第一層keys加上expiration。如果需要用到hash,可是hash部分內容需要加expiration的話,比較善用expiration的方法是「將一個大hash攤成多個小hash或者string,才能善用expiration。另外,使用多個小hash會比一個大hash更省時間,因為Redis有針對小hash的最佳化儲存方式。 分析占空間的keys 除了分析工具 (redis-audit等其他記憶體分析工具),也可以用redis-cli查找問題 找出常見的keys,看數量分佈是否合理:redis-cli scan 0 count 100 取樣找出各個資料類型最大的keys:redis-cli --bigkeys 查看 KEY serialized 後的大小:DEBUG OBJECT key 看某個 KEY 多久沒有被存取:OBJECT IDLETIME key [注意] default setting下,不會回傳正確的值 Latency 常用指令: 了解自己機器合理的 operation per second:benchmark 找出 ≥ 10ms的操作:slowlog 因為 Redis 單線程(只有main thread),可以用這指令找出比較花時間的操作

Think in REACT

0. 建立 React 靜態頁面的入門方法 \index.html 在 head 加入 react 以及 react-dom 的 script 連結 referred doc 在 head 加入 babel.min.js 的 script 連結 referred doc ✏️ script 除了加上 index.js 的檔案來源,也要記得加上 type 屬性 text/babel,不然無法順利 ReactDOM.render() 喔! 1 2 3 4 5 6 7 8 9 10 11 12 <html> <head> <link rel="stylesheet" href="index.css"> <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script> <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> </head> <body> <div id="root"></div> <script src="index.js" type="text/babel"></script> </body> </html> \index.js ReactDOM.

跟著黑哥學 Kubernetes

0-1 應用部署方式演變 0-2 kubernetes 介紹 本質是一組服務器集群,每個服務器都稱為一個節點,可以在每個節點中的容器安裝程序 0-3 kubernetes 組件 一個 k8s 集群分為控制節點master_node,工作節點worker_node構成,每個節點上都安裝不同的組件 Master: 集群的控制平面,負責集群的決策(管理) API Server:資源操作的唯一入口,接收用戶輸入的命令,提供認證、授權、API註冊和發現等機制 K8S 的整個訪問入口 Scheduler:負責集群資源調度,按照預訂的調度策略將Pod調度到相應的node節點上 根據算法決定安裝nginx的請球要分配給哪一個node節點(負責算) ControllerManager:負責維護集群的狀態,比如程序部署安排、故障檢測、自動擴展、滾動更新等 如何將 nginx 安裝請求交給 node1節點(負責安排幹活) Etcd:負責存儲集群中各種資源對象的信息 用來紀錄請求信息儲存在資料庫中(也可以改用mysql) Node: 集群的數據平面,負責為容器提供運行環境 [worker_node] Kubelet:負責維護容器的生命週期,即通過控制docker,來創建、更新、銷毀容器 接收控制節點發來的訊息,並傳送命令給 worker node 裡面其他的組件_docker KubeProxy:負責提供集群內部的服務發現和負載均衡 訪問程序的入口 Docker:負責節點上容器的各種操作 以部署一個 nginx 服務來說明 kubernetes 系統各個組件調用關係 首先要明確,一旦 kubernetes 環境啟動之後,master 和 node 都會將自身的信息存儲到 etcd 數據庫中 一個 nginx 服務的安裝請求會首先被發送到 master 節點的 apiServer 組件 apiServer 組件會調用 scheduler 組件來決定到底應該把這個服務安裝到哪一個 node 節點上 此時,它會從 etcd 中讀取各個 node 節點的信息,然後按照一定的算法進行選擇,並將結果告知 apiServer apiServer 調用 controller_manager 去調度 Node 節點安裝 nginx 服務 Kubelet 接收到指定之後,會通知 docker,然後由 docker 來啟動一個 nginx 的 pod pod 是 kubernetes 的最小操作單元,容器必須跑在 pod 中至此 一個 nginx 服務就運行了,如果需要訪問 nginx,就需要通過 kube-proxy 來對 pod 產生訪問的代理 這樣,外界用戶就可以訪問集群中的 nginx 服務了 0-4 kubernetes 概念 Master:集群控制節點,每個集群需要至少一個 master 節點負責集群的管控 安排工作的

1Z0-819 題目KO

這裡放比較tricky的題目們 #62 1 2 3 4 5 6 7 8 9 10 class Employee { private String name; public void setName(String name) { String title = "Dr. "; name = title + name; } public String toString() { return name; } } And 1 2 3 4 5 public static void main(String[] args) { Employee p = new Employee(); p.setName("Who"); System.out.println(p); } What’s the resuld? A. Dr. Who B. Dr.

1Z0-819 曾師筆記 (2/duology)

# 01 泛型和集合物件 泛型 Java 5 之後加入泛型,使型別使用多了另一種彈性。 集合物件(用來裝填物件)+泛型,可以限制裝填物件的型別。 使用泛型的效益 提供更彈性的「型別安全 type safety」檢查機制,原本在執行時才能發現的型別錯誤,現在在編譯時期就可以預發現 在集合物件 Collections 裡大量使用,限制內涵物件之型別 減少轉型 casting 需要,使程式碼更簡潔 使用泛型設計類別 可以將程式碼裡的符號 T換成 String( 即 UseString()),或換成 Shirt (即 UseShirt()) 常見的符號及表示方式如下: T -「型別(type)」 E -「成員(element)」 K -「鍵 - 值對裡的鍵(key)」 V -「鍵 - 值對裡的值(value)」 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 class UseAny<T> { private T t; public void add(T t) { this.