Posts
LeetCode - Move Zeroes
LeetCode 的 Move Zeroes 題目如下:
Given an array nums, write a function to move all 0’s to the end of it while maintaining the relative order of the non-zero elements.
For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].
Note:
You must do this in-place without making a copy of the array.
Minimize the total number of operations.
read morePosts
LeetCode - Number of 1 Bits
LeetCode 的 Number of 1 Bits 題目如下:
Write a function that takes an unsigned integer and returns the number of ’1’ bits it has (also known as the Hamming weight).
For example, the 32-bit integer ’11’ has binary representation 00000000000000000000000000001011, so the function should return 3.
簡單的說就是給予一個整數,回傳該數值用二進制表示時有多少個 1。
這邊我們可以用 while 迴圈持續的用 n-1 去做 and 運算,並計算運行次數,直至 n 變為 0。
public class Solution { public int HammingWeight(uint n) { int count = 0; while(n > 0) { n &= (n-1); ++count; } return count; } } {% img /images/posts/NumberOf1Bits/1.
read morePosts
log4net - RollingFileAppender's CountDirection Property
log4net 在使用 RollingFileAppender 去做 Log 的紀錄時,我們需要注意 CountDirection 的設定。設定值大於 0,表示以遞增的方式 Rolling。反之,表示以遞減的方式 Rolling。
{% img /images/posts/Log4NetCountDirection/1.png %}
該設定預設值為 -1,所以當新的檔案要產生時,他需要先用 Rename 將檔案往後擠才行,可以想見這樣會有不必要的效能耗費。透過 Process Monitor 可以很清楚的看到背後的運作。
{% img /images/posts/Log4NetCountDirection/2.png %}
所以可以的話,我們可以將設定值改為 1,用以取得較好的效能。
這邊筆者簡單的做個試驗,寫了一個簡單的程式讓它持續的寫 log,而 log4net 設定每 1 KB 產生一個檔案,用以監測效能上的影響。
using log4net; using log4net.Config; using System; using System.Diagnostics; namespace ConsoleApplication6 { class Program { static void Main(string[] args) { XmlConfigurator.Configure(); var count = 500; var logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); Console.WriteLine("{0} ms", DoTest(count, () => { logger.Debug("test"); })); } static long DoTest(int count, Action action) { var sw = Stopwatch.
read morePosts
LeetCode - Power of Three
LeetCode 的 Power of Three 題目如下:
Given an integer, write a function to determine if it is a power of three.
簡單說他要的是要一個功能,給予一個整數,能判別是否為 3 的冪次。
這邊我們只要判斷數值是否大於零,且是否可整除 1162261467 即可。1162261467 是來自 3^19,為最大的 3 冪次整數,如果某數值可以將之整除,即代表該數值為 3 的冪次。
public class Solution { public bool IsPowerOfThree(int n) { return n > 0 && 1162261467 % n == 0; } } {% img /images/posts/PowerOfThree/1.png %}
Link Power of Three | LeetCode OJ
read morePosts
Bootstrap - Use Glyphicons with bower
當我們透過 Bower 來使用 Bootstrap Glyphicons。
{% img /images/posts/GlyphiconsWithBower/1.png %}
下載下來的 Glyphicons CSS 內會用相對路徑指定所要使用的 Font 位置,但這樣在載入 CSS 時會指不到正確的 Font。
... @font-face { font-family: 'Glyphicons Halflings'; src: url('../fonts/glyphicons-halflings-regular.eot'); src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype') , url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff') , url('../fonts/glyphicons-halflings-regular.ttf') format('truetype') , url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); } ... {% img /images/posts/GlyphiconsWithBower/2.png %}
當然我們可以透過 Grunt、Gupl 之類的自動化工具將路徑改掉,但這樣的做法感覺並不是很好,因此這邊筆者是使用自己的 CSS 將 Font 的位置改掉。
... @font-face { font-family: 'Glyphicons Halflings'; src: url('/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot'); src: url('/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype') , url('/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.woff') format('woff'), url('/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('/wwwroot/lib/bootstrap/dist/fonts/glyphicons-halflings-regular.
read morePosts
FontAwesome - Use FontAwesome with bower
當我們透過 Bower 來使用 FontAwesome。
{% img /images/posts/FontAwesomeWithBower/1.png %}
下載下來的 FontAwesome CSS 內會用相對路徑指定所要使用的 Font 位置,但這樣在載入 CSS 時會指不到正確的 Font。
... @font-face { font-family: 'FontAwesome'; src: url('../fonts/fontawesome-webfont.eot?v=4.5.0'); src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype') , url('../fonts/fontawesome-webfont.woff2?v=4.5.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.5.0') format('woff') , url('../fonts/fontawesome-webfont.ttf?v=4.5.0') format('truetype') , url('../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular') format('svg') ; font-weight: normal; font-style: normal; } ... {% img /images/posts/FontAwesomeWithBower/2.png %}
當然我們可以透過 Grunt、Gupl 之類的自動化工具將路徑改掉,但這樣的做法感覺並不是很好,因此這邊筆者是使用自己的 CSS 將 Font 的位置改掉。
... @font-face { font-family: 'FontAwesome'; src: url('/wwwroot/lib/fontawesome/fonts/fontawesome-webfont.eot?v=4.5.0'); src: url('/wwwroot/lib/fontawesome/fonts/fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype') , url('/wwwroot/lib/fontawesome/fonts/fontawesome-webfont.woff2?v=4.5.0') format('woff2'), url('/wwwroot/lib/fontawesome/fonts/fontawesome-webfont.woff?v=4.5.0') format('woff'), url('/wwwroot/lib/fontawesome/fonts/fontawesome-webfont.
read morePosts
LeetCode - Add Digits
LeetCode 的 Add Digits 題目如下:
Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.
For example:
Given num = 38, the process is like: 3 + 8 = 11, 1 + 1 = 2. Since 2 has only one digit, return it.
簡單的說就是給予一個整數,反覆的將每個位數值加總,直至數值只有一個位數為止。
最直覺得解法就是用迴圈下去處理,判斷數值是否大於等於 10,如果大於等於 10,則將每個位數的數值加總取代本來的數值。如果數值小於 10,則直接將數值回傳。
public class Solution { public int AddDigits(int num) { var value = num; while(value >= 10) { var originalValue = value; var newValue = 0; do { newValue += originalValue / 10; originalValue = originalValue % 10; }while(originalValue >= 10); newValue += originalValue; value = newValue; } return value; } } {% img /images/posts/AddDigits/1.
read morePosts
Bower - Using Bower in Visual Studio 2015
Visual Studio 2015 開始支援 Bower,使用時需先為專案加入 Bower Configuration File。
{% img /images/posts/BowerInVS2015/1.png %}
Bower Configuration File 加入後,也會順帶加入 .bowerrc 檔,這邊會指定 Bower 套件放置的位置。
{% img /images/posts/BowerInVS2015/2.png %}
這邊我們可以開啟 bower.json 檔案設定所要使用的 Bower 套件。
{% img /images/posts/BowerInVS2015/3.png %}
或是使用 Manage Bower Packages... 加入 Bower 套件。
{% img /images/posts/BowerInVS2015/4.png %}
{% img /images/posts/BowerInVS2015/5.png %}
在設定 Bower 套件時,我們可能會需要調用 Bower 指令查閱一些資訊,像是 Bower 套件的版本等,這邊可透過 Package Manager Console 視窗調用。
{% img /images/posts/BowerInVS2015/6.png %}
設定完按下編譯或是滑鼠右鍵快顯選單中的 Restore Packages 選單選項,即可透過 Bower 下載 Bower 套件。
read morePosts
Grunt - Using Grunt in Visual Studio 2015
Visual Studio 2015 開始支援 Grunt,使用時需先為專案加入 NPM Configuration File。
{% img /images/posts/GruntInVS2015/1.png %}
還有 Grunt Configuration File。
{% img /images/posts/GruntInVS2015/2.png %}
接著在 package.json 中加入要使用的 Grunt plugin。
{% img /images/posts/GruntInVS2015/3.png %}
{% img /images/posts/GruntInVS2015/4.png %}
設定完按下編譯或是滑鼠右鍵快顯選單中的 Restore Packages 選單選項,即可透過 NPM 下載 Grunt plugin。
{% img /images/posts/GruntInVS2015/5.png %}
我們可以透過 Visual Studio 的狀態列觀察到套件下載的狀態。
{% img /images/posts/GruntInVS2015/6.png %}
{% img /images/posts/GruntInVS2015/7.png %}
若有需要也可以透過 Output 視窗查看細部處理資訊。
{% img /images/posts/GruntInVS2015/8.png %}
下載完畢,設定完 gruntfile.js,我們就可以在 Task Runner Explorer 點選對應的 Task 進行運行。
read morePosts
T4MVC - VS2015 Update 1 causes an error - Identifier Expected
T4MVC 在 Visual Studio 2015 安裝完 Update 1 後,產生的程式碼會像這樣。
public override void ExecuteResult(System.Web.Mvc.ControllerContext ) { } 可以看到 ExecuteResult 方法的參數消失了,所以編譯時會報 Identifier Expected 的錯誤。
{% img /images/posts/T4MVCIdentifierExpected/1.png %}
若要解決這問題,可到 Update for Microsoft Visual Studio 2015 (KB3110221) 這邊下載更新套件,安裝後即可解決此問題。
Link VS2015 Update 1 causes an error - Identifier Expected · Issue #54 · T4MVC/T4MVC Update for Microsoft Visual Studio 2015 (KB3110221)
read more