原创 給對象添加功能

通過修改代碼給已有的類型增加功能是最直接的方式。 但往往有很多原因讓這種方式被重新考慮: JDK或者第三方類庫,無論如何你都要考慮其他方式,而不是直接修改。新增的職責不適合被添加到現有的任何一個類型中。 通過繼承在很多情況下是個容易想到

原创 Javascript實現Lisp列表(list)及操作

Lisp中列表(list)是一個值對,通過操作cons來創建值對,例如(cons 1 2), 1和2分別是值對的兩個值。 cons操作具有閉包性,因此構成列表的元素可以是原子類型,也可以是列表類型本身,如(cons 1 (cons 2 3

原创 JavaScript提前聲明

今天看到一個面試題是這樣的: var a = 10; function test() { a = 5; alert(a); alert(this.a); var a; alert(this.a); alert(a); }

原创 一個快速移動開發的模板

大概兩週前,我們BI團隊開始做移動應用,我自己也是剛剛接觸移動開發,過去兩週在同事們的幫助下,雖然學到的知識和經驗非常有限,我想仍然有一些東西是可以總結和分享。假如這對大家有一丁點的幫助,那就很好了!  有一點我最深刻的感受,就是移動開

原创 牛頓法求平方根

求平方根是一個很常用的數學運算,例如求一元二次方程解。求平方根的方法有很多,其中一個方法叫做牛頓法,牛頓法的基本的思路是根據一個猜測y,通過一定的操作得到一個更好的猜測。對於正實數X的平方根y,(y+x/

原创 Android手機控制樹莓派製作的四驅小車

-------更新 完整的代碼放在Github上了: 服務端:https://github.com/darlinglele/raspberry-server 手機客戶端: https://github.com/darlinglele/r

原创 聲音採集

現實中的聲音是一段連續的信號, 現在大部分的聲音是以離散的數字信號保存下來,例如CD、MP3音頻格式。 在保存這些信息時,考慮到對聲音質量和存儲的效率, 需要對聲音的幾個重要的基本屬性進行研究。 對於人類而言,聲音是通過物體震動而產生的聲

原创 Javascript構造函數和prototype實現封裝繼承

像Java、c++那樣的強類型語言,類型是一切對象的模板,通過類型定義,可以描述(封裝)數據和操作。根據需求,類型可以擴展繼承、多態變化,使得代碼的重用性和可讀性相比過程化編程語法大大提高。 Javascript也是一門面向對象的語言,在

原创 Key/Value存儲引擎——Bitcask的Java實現

在關係數據庫存儲上,Btree一直是主角,但在讀寫性能要求更高的場景下,log(n)的讀寫操作並不是總是讓人滿意。 Bitcask是一種連續寫入很快速的Key/Value數據存儲結構,讀寫操作的時間複雜度均爲常量。它是怎麼做到的呢? Bi

原创 豆瓣FM電臺Chrome擴展——單曲循環

在前面的一篇博客《豆瓣FM電臺Chrome擴展——下載》中, 介紹了一個下載當前音頻的擴展功能。 有網友指出,是否可以考慮添加單曲循環的功能? 我覺得這個功能很不錯,之前如果遇到一首非常喜歡的歌曲,只能聽一遍,感覺確實不太過癮。 於是晚

原创 豆瓣FM電臺Chrome擴展——下載

作爲一個豆瓣fm的忠實用戶,被豆瓣fm與音樂不期而遇的理念深深吸引。 最近豆瓣推出升級到PRO享受更高品質音樂的服務,升級後確實質量提升明顯。但是有個功能仍然沒有提供,那就是無法下載喜歡的歌曲。 在對豆瓣fm網頁經過一番研究之後,決定做

原创 編程之美——CPU正弦曲線

Windows中有一項功能,是可以在任務管理器中查看CPU的使用率,管理器以圖形使用率在不同的時間點的 點上的使用情況。 通常情況下你只能看到一條不規律的曲線: 那怎麼樣讓CPU使用率變得有規律點呢?能不能“畫出”一條優雅的正弦曲線呢?

原创 遞歸、尾遞歸和函數式編程

最近看到好多人用手機拍遞歸照,於是我跟着俗氣了一把。這張照片不僅滿足我的自拍慾望, 也讓我對遞歸充滿了敬意!如果用語言來描述拍照時發生的情景的話,那就是: 現實中的我,在拍照片照片中的我,在拍照照片中的我拍的照片中我,在拍照。。。第N重

原创 Guava Optional 和 Java 8 optional

java.lang.NullPointerException 可以說是最臭名昭著的異常了,但造成它的根源卻是來自Null。在Java中Null被用來表示一個不存在或者值爲空的對象。理論上在使用任何一個引用的對象前應該 instance =

原创 迴文字符串

在龐果網上的一個挑戰題目:http://hero.pongo.cn/ 迴文字符串是指從左到右和從右到左相同的字符串,現給定一個僅由小寫字母組成的字符串,你可以把它的字母重新排列,以形成不同的迴文字符串。 輸入:非空僅由小寫字母組成的字符串