今天做了兩道筆試題,收益良多。
有些題,你會發現,雖然並不難,但是卻很容易沒有思路或者出錯,這都是源自平時的不求甚解。
很多知識點,自以為已經掌握,其實只是管中窺豹,可見一斑。不要一味墨守成規,也要用於思考,很多東西既要知其然,
也要知其所以然。我一直覺得了解和精通中間差著十萬八千里,看來還有很長一段路要走。
只有比別人更早、更勤奮地努力,才能嚐到更加成功的滋味。哈哈,跑題了。
下面看一下兩道筆試題。
一、大概簡單地說一下,求下面這段**的結果。
new thread(newrunnable()
})}.start();
這題並不難,但是卻易錯。有人覺得輸出runnable,有人覺得都應該輸出,但其實輸出的是thread。為什麼呢?
之前,我們都知道建立執行緒有兩種方式,1.繼承thread,重寫run()方法;2.實現runnable介面。但又沒有人想過,
為什麼有兩種方法,哪種更好呢?
其實,一直以來,我都是用第二種比較多,看別人的**也是第二種比較多。我個人覺得第二種更好一點,原因如下:
1.實現runnable介面,可以讓thread更具備靈活性。new thread(runn),runn可以換成別的runnable物件,這樣乙個thread就具有了
多個行為。而第一種方法呢?new thread()},這樣乙個thread物件就只有一種run行為了。
2.實現runnable介面,可以更加體現物件導向的思想。物件導向,繼承封裝多型,我們習慣將一類東西封裝成乙個類,而這裡thread是
乙個類,就是執行緒類,runnable介面就是實現run()的動作,彼此分開。
下面分析這道題,我們可以看一下thread原始碼:
/* what will be run. */
private runnable target;
@override
public void run()
}runnable是它的乙個屬性,run()是它的乙個方法,而這裡我們用匿名內部類,實質就是thread的子類物件重寫了run()方法,
根據物件導向多型的知識,不難發現結果了吧。
二、利用timer類,實現一種簡單效果,2秒列印一次「boom」,再4秒列印一次,再兩秒,再4秒……一直迴圈下去。(這道題可以擴充套件,
比如每天七點列印,每週的工作日八點列印等等,可以思考)
timer類的巢狀使用,直接給出兩種解決辦法吧。
1.
publicclass
demo2
catch
(interruptedexception e) }}
}class mytimertask extends
timertask
}
2.
publicclass
demo3
catch
(interruptedexception e)
system.out.println(
newdate().getseconds());}}
}class mytimertask1 extends
timertask
}class mytimertask2 extends
timertask
}
兩道筆試題
昨天一朋友找工作,碰到兩道演算法筆試題,都是當於鍊錶操作的.原題具體的還原不過來了,不過大致是 1.有一單鏈表,找出最後第m個節點.昨天看到問題時,想到了小學應用題 汽車過山洞,假如這個汽車開著開著,等到車頭剛要出山洞,車尾離山洞出口也有一段距離嘛.這樣,這個題方法出來了 cpp node find...
C 兩道筆試題
現給定乙個含有n個元素的陣列,請隨機獲取其中的m個元素 不能重複獲取 include include using namespace std void grial int a,int n,int x for i 0 i k i int main grial a,sizeof a sizeof int...
求教兩道演算法筆試題
最近在找工作,有把題目直接發到郵箱裡的,本人水平有限,貼出來大家幫忙看下!1 設計乙個遍歷演算法,按照方格的標號進行順序遍歷,要求一次遍歷完成所有標號方格的順序遍歷 114 2731 3539 6372 8186 9196 98100 102104 159168215 2832 3640 6473 ...