前言

在寫程式的時候,其實會滿常用到「搜尋」的功能,最簡單的搜尋就是在一串數字裡面找出你想要的數字,而這也是我們今天的主題。

這一篇大致上會分成三個部分,第一部分會先介紹線性搜尋法,第二部分介紹二分搜尋法,最後一部分談談二分搜尋法在不同條件底下的實作方式會有什麼不同。

閱讀更多

最近發生主機被大量 request 攻擊的事件,而且慘的是這台主機放的是論壇服務
假設攻擊的點是論壇首頁,每次 request 都會去 query DB,而且有一堆 join
其中還有些是 POST 的指令會讓 db update
就這樣一直瘋狂又 select 又 update 導致 DB lock,cpu 飆高掛掉

如果論壇是自己寫的,還可以在 DB 跟 application 之間加上 redis 之類的快取
但偏偏這個論壇系統是別人的,沒有辦法動

閱讀更多

CS50 的全名是 Introduction to Computer Science,是一堂哈佛大學的通識課程
edx 上面有開課,任何人都可以去修,甚至還有助教幫你改作業(只有程式作業,不包含其他像是紙本作業的那種題目)

我第一次聽到 CS50 這堂課,是經由這篇報導:CS50:一堂超過 800 個哈佛學生選修的「硬課」,魅力何在?
一直到最近把這門課修完之後,才了解這門課厲害在哪裡。

先來回答標題的意思:如海洋般的程式課程。為什麼是海洋,因為這門課:又深又廣
有多深多廣呢?我記下每一週的課程大綱跟作業,請你身邊有資工背景的朋友看看,就會知道我在說什麼了

閱讀更多

前言

對於 Android 工程師來說,了解如何反編譯可以增進自己對 Android 底層的理解,也可以思考如何保護自己的 apk 不被反編譯。
對於一般人來說,許多現成的工具可以幫助我們非常輕鬆的、只要打打幾個指令就可以反編譯 apk,看到 java source code,滿足自己的好奇心。
本篇文章只介紹一些工具的使用,適合初學者觀看。若是想了解更底層的知識,可以參考文末附上的延伸閱讀。

閱讀更多

儘管去年面試了大約二十家公司,但我也是一直到最近才明白,面試流程對一間公司來說有多麼重要
當然,HR 的重要程度也非同小可

若是這間公司的 HR 做的很好,面試流程也讓面試者覺得很用心
在這個網路開放的時代,很可能這個求職者之後就會跟朋友分享:欸欸,我今天去 XXX,他們面試流程超棒的欸!
反之亦然,一個差勁的面試流程,也可能會禍害千年,負評一個接著一個
底下有些實際例子,都是一些正面的例子,我會直接把公司名稱講出來
沒錯,去面試的公司對我好,我都是有記在心裡的!

今天想跟大家談談我心目中理想的面試流程
大致上可分為三步驟

  1. 面試前(安排面試)
  2. 面試中
  3. 面試後

以下就根據這三個步驟一一來討論

閱讀更多

平常有在寫 code 的,無論是寫哪一種程式語言、或是哪一種開發環境,都會有一定的時間需要執行一些命令
這時候就會開啟 terminal 開始鍵入指令,最常用的像是cd, ls, git, ssh, rsync之類的
可是系統內建的終端機其實滿難用的,今天要跟大家推薦一套比較好的選擇

閱讀更多

之前寫了一篇文章簡單的筆記一下自己在看redux的心得,在這邊還是要再次推薦官方文件,因為寫的超級清楚。

但是之前在看官方文件的時候,middleware的地方沒有完全看懂,看到後面就霧煞煞了
這次重看了一遍官方文件講middleware跟非同步操作的地方,邊看邊做筆記,總算是把middleware的實作原理弄懂了
依照慣例分享一下心得
官方文件(中譯版,但是還沒翻譯到這篇)

官方文件很棒的點就是這篇不只教你怎麼用,還從頭講起,讓你知道為什麼middleware會是現在這樣的形式。

閱讀更多

在Javascript裡面,有一個超級重要的概念就是非同步,這也是剛入門的時候最容易搞混、忘記的觀念
ES6原生支援了Promise,搭配Generator使用效果更佳,而ES7甚至支援了async的語法
我覺得這算是一個演進的過程,讓程式架構越來越好、可讀性越來越高
所以要講解這些新的東西,就先從最基本的callback開始吧

閱讀更多