瀏覽分類:

心得筆記

[Linux] NETCore 在 Linux 中如何取得時區?

最近想部屬應用程式到 Linux 上玩玩,碰到了時區轉換的問題,在 Window 中可以使用

取得台灣時區,放到 Linux 卻噴了錯誤給我看

Linux 認不得 Taipei Standard Time 那該怎麼辦呢?

閱讀更多

       

[Linux] 新增虛擬記憶體(Swap)

今天把 GCP 的記憶體調整縮小,立馬發生 MySQL 崩潰的問題,大膽判斷此問題與記憶體有關,檢查了一下 LOG 果真如此

檢查發現 GCP 建立的時候沒有幫我開啟 Swap,然後我又把規格調整到最低的 f1-micro 才引發此問題。

閱讀更多

       

[MSSQL] SQL Server 的一些眉眉角角 part.2

小知識

    1. 交易中資料表會持續鎖定至交易結束或是連線結束
    2. 最外層的交易 ROLLBACK,內層就算 COMMIT 依然會復原變更
    3. 巢狀交易過程中的資料表都會鎖定直到交易結束,外層交易 COMMIT 內層交易卻沒有 COMMIT 資料表會被鎖定不會釋放
    4. 交易前加上 SET XACT_ABORT ON 可防止過程中發生錯誤沒有 ROLLBACK 造成鎖表的問題

閱讀更多

       

[MSSQL] SQL Server 的一些眉眉角角 part.1

目前工作 Database 方面主要都在使用 SQL Server,寫了近兩年的 Stored Procedure 也遇到了許多的問題,在這裡簡單筆記一下。

  1. 暫存資料表小知識
    * ### 建立的暫存資料表,可從 tempdb.暫存資料表 找到。
    * # 建立的暫存資料表只有該連線可以取用;## 則是全部連線均可使用。
    * 連線結束時皆會自動刪除,若程式中有 Connection Pool 來管理連線則不會立刻刪除。
    * 父層 Stored Procedure 建立的暫存資料表子層也可以使用;子層 Stored Procedure 建立的暫存資料表父層也可以使用
  2. 若開啟交易 (Transaction) 但無提交異動 (Commit) 會發生資料表鎖死 (Table Lock) 的問題,切記要提交異動 (Commit)。
  3. 使用主鍵來 UPDATE 為資料鎖 (Row Lock),若使用其他條件則有可能會升級成資料頁鎖(Page Lock) 或資料表鎖 (Table Lock)。
  4. 交易 (Transaction) 具有復原機制 (RollBack),但實際上資料表中的資料已經被異動且鎖定的關係所以無法取得,可利用 WITH(NOLOCK) 來取得被鎖定的髒資料。
  5. 未開啟交易時使用 CURSORUPDATE FROM 若超過五千筆時可能會造成鎖定與死結,可使用 ROW_NUMBER() 排序資料塞入暫存資料表並使用 WHILE 來一筆一筆更新資料避開鎖定,速度雖慢但能減少鎖死。
  6. 高負載情況下使用 UPDATE OUTPUT 的方法來取得資料更新前後的狀態,可減少 SELECT 次數提高效率。
  7. 高負載情況下可能會將隔離層級拉高到 Serializable,這時使用交易會發生相同資料表 SELECT UPDATE 中的 Shared Lock 與 Exclusive Lock 撞車造成 DeadLock,可在 SELECT 加上 WITH(UPDLOCK) 來減少此問題。
       

[C#][LeetCode] 479. Largest Palindrome Product

題目

Find the largest palindrome made from the product of two n-digit numbers.
Since the result could be very large, you should return the largest palindrome mod 1337.

Example:

Input: 2
Output: 987
Explanation: 99 x 91 = 9009, 9009 % 1337 = 987

Note:
The range of n is [1,8].

解題過程

這題要找出 N 位數相乘後且結果是迴文的數字
例如:N = 2 最大數字等於 99,那就要找出最大 99 最小 10 的兩位數相乘後且結果是迴文的數字。

最初我用一個很笨的方法迴圈慢慢跑,最後當然是直接逾時,後來改成先取最大數字相乘後的前半段數字,再用迴圈去產生迴文並篩選資料,這樣比前面的笨方法快非常多。
閱讀更多

       

[C#][LeetCode] 494. Target Sum

題目

You are given a list of non-negative integers, a1, a2, …, an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and – as its new symbol.

Find out how many ways to assign symbols to make sum of integers equal to target S.

題目會傳入兩個參數 nums (數字陣列)S (整數),限制只能使用兩個運算符號 +- 改變數字陣列 nums 的數字讓總和等於 S

解題過程

我自己比較少接觸演算法的東西(大學沒學好),就算去翻解答也看不懂別人在寫什麼東西,後來看了 演算法筆記- Backtracking 的圖解後終於理解解答再寫什麼東西

閱讀更多

       

[C#][LeetCode] 515. Find Largest Value in Each Tree Row

題目

You need to find the largest value in each row of a binary tree.

Example:

解題過程

這題要找出二元樹中同階層最大的數字,我的作法是先將每層的數字收集起來,最後再一起比較。

答案