2012/2/4

Google宣佈開始加入自動化掃描程序「Bouncer」用來過濾Android Market上的惡意軟體

2011年8月,知名手機防護軟體公司表示 Android Market 上的惡意程式數量狂飆,再
加上出現帶有病毒的假 Google+ App,弄得 Android使用者人心惶惶,不過根據
Google 的官方統計,2011下半年的惡意程式下載數比上半年減少了40%,可見這其中大
有來頭。

今天 Google 正式揭示一項名為「Bouncer」的新服務,這項服務會在 Android Market
上背景運作,掃描 Android Market 上的惡意程式,同時這項服務也被應用在開發者帳
號中,未來當新的App被上傳時,「Bouncer」會立即對App進行分析,避免惡意程式、
間諜程式或木馬入侵 Android Market 。

Google宣佈開始加入自動化掃描程序,用來過濾Android Market上的惡意軟體。新的服
務名為「Bouncer」,會掃描已知的惡意軟體、間諜軟體及木馬,並偵查可疑的行為及
比較以前被分析的應用程式,Google Android的工程副總Hiroshi Lockheimer在CNET的
訪問中表示。

每個App會接下來會上傳到Google雲端平台上測試,模擬軟體如何在Android裝置上呈
現。現存的App則會持續性的分析。

如果偵測到惡意程式碼或行為,該應用程式會被標記,並由人工進一步確認是否為惡意
程式。該應用程式會被禁止上傳,或讓應用程式被掃描程序標記為惡意時立即移除。
「任何已知的惡意程式一開始上傳就無法成功」,Lockheimer說。

不像Apple對每個App在進入iTunes Marketplace上前就過濾,Google並不需預先審核,
而是開發者在上傳Android Market的同時同步進行過濾。

Google同時會分析新開發者帳戶,以防止惡意或累犯的開發者。

Google已經私下測試Bouncer數個月了,在2011年上半年和下半年比較,潛在惡意程式
的下載數量少掉了40%,意味著有多少惡意軟體被阻擋或移除了。

透過Bouncer,不只是技術被視為惡意的應用程式會被標記,還有用來詐騙消費者的應
用程式也會被抓出來,例如去年12月,Android Market有30款詐騙軟體被撤下,這些軟
體會在不經使用者同意的情況下,對歐洲行動電話收取加值簡訊費用。

2012/2/2

「多」、「穩」、「省」、「硬」、「強」之Windows XP為作業系統的萬里長城,歷萬世而不衰。

Windows XP為戰場老將,老馬識途,老當亦壯。XP為eXtra Performance的縮寫,言下
之意為超強效能。推薦其為最優秀之作業系統之原因為「多」、「穩」、「省」、
「硬」、「強」五大特點:
1. 多:累積最多的使用人口,使用界面為大眾所熟悉。
2. 穩:挾NT之優越架構,對於行程與記憶體管理有優越表現。
3. 強:經過十年的補強,經歷多年的病毒洗禮,嚴然為一最為穩定運作的作業系統。
4. 省:最重要是不必在增加支出費用,還能與大部份視窗軟體與遊戲穩定運作。
5. 硬:對硬體相容性佳,對記憶體需求亦較低。
結語:「多」、「穩」、「省」、「硬」、「強」之Windows XP為作業系統的萬里長
城,歷萬世而不衰。

call-by-name 源自於 Algol60,很像C的巨集macro。

其實 call-by-name 並不等於 call-by-reference。call-by-name 源自於 Algol60 這

古早的程式語言,它定義了兩種參數傳遞方式,call-by-value 與 call-by-name,其

call-by-name 被定義為 Name Replacement:「參數列中的每個參數,如果未指定以
傳值的方式來傳遞,就必須以實際傳入的參數來取代。」在 Compilers - Principles,

Techniques, and Tools 這本書的 7.5 節中,它被解釋為 inline-expansion。其原因
是,以 call-by-name 的方式呼叫函式時,如果在某個參數位置上指定了一個運算式
(expression) 當作參數,那麼這個 expression 會被直接傳入函式裡面進行展開,所
以,
這個 expression 是在函式裡面才進行運算的,而不是在參數列中預先計算好它的值再

進去。這就產生了 delayed evaluation (延遲計算) 的效果。delayed evaluation 的
好處
是,只有當函式需要某個 expression 參數的值,該 expression 才會被計算,否則就

用了。call-by-name 比較顯著的例子是 swap 函式,swap 通常是這樣寫的:

proc swap(A, B) {
tmp = A;
A = B;
B = tmp;
}

proc main() {
i = 2;
a[3] = {5, 6, 7};
swap(i, a[i]);
}

swap 的實際工作情形是:

swap(i, a[i]) { // i is 2
tmp = i; // tmp becomes 2, since i is 2
i = a[i]; // i becomes 7, since a[2] is 7
a[i] = i; // inline expansion of B, delayed evaluation ==> a[7] = 7
}

在 P(X, Y, Z) 這個例子中:

proc P(X, Y, Z) {
Y = Y + 1;
Z = Z + X;
}

P(a+b, a, a) { // a = 2, b = 3
a = a + 1; // a becomes 3
a = a + (a+b); // inline expansion of X, a becomes 9
}

Google工程師面試必會的7道程式考題

1. 撰寫一個整數演算法
挑戰:這是一個比較隨意的問題,設計來讓工程師定義參數(parameter)。
如果是Assembly組合語言,則必須建立基本的算式,如果是其他語言就很容易,大多數
語言都有支援算式,只要把數字帶入即可。
這題滿容易的!!!!

2. 將兩個排序好的Linked List合併
挑戰:這是一般Google面試問題的基本設計,讓你找出有效率的方式解決問題。
如果你要合併兩個「linked list」,遇到的問題是兩個list間的順序是衝突的,你必
須找到一個好演算法快速重新排序。

3. 給一組區間(一定秒數),讓你找出哪組區間重疊了
挑戰:Google同時會要求你解決一組數學問題,用來挑戰工程師很有效率的思考問題,
不只是考撰寫程式。

4. 如果有一組N node,該有向無環圖(directed acyclic graph)的邊最大值為何?
挑戰:這是知名數學題目「旅行者問題」的變形
你必須畫出每個node之間的線,但是不能有一個明顯的路徑是回到出發的原點。

5. 在Java語言中,finally、final和finalize的有何不同?
挑戰:上述詞彙都有特定的意義,無法混淆。.
Google考你懂不懂Java。舉例來說,Finalize是處理「垃圾回收」機制,而Finally是
只特定錯誤訊息。

6. 移除一組text文本中的重複句子
挑戰:這個問題主要是考你是否能夠估算該試題能在一定時間內解決。
雖然你可以暴力法試著窮盡所有可能,但是也有可能永遠無法解決。

7. 給予一組字串(String),找出可以包含給定字母組合的最小視窗(minimum
window)

2012/2/1

leftist heaps

The difference between binary heaps and leftist heaps is that leftist heaps
is not perfectly balanced.
Null path length of any node X is the length of the shortest path from X to
a node without 2 children.
Npl(NULL) = -1;