兩道筆試題的感觸

2021-09-08 04:19:00 字數 1742 閱讀 8797

今天做了兩道筆試題,收益良多。

有些題,你會發現,雖然並不難,但是卻很容易沒有思路或者出錯,這都是源自平時的不求甚解。

很多知識點,自以為已經掌握,其實只是管中窺豹,可見一斑。不要一味墨守成規,也要用於思考,很多東西既要知其然,

也要知其所以然。我一直覺得了解和精通中間差著十萬八千里,看來還有很長一段路要走。

只有比別人更早、更勤奮地努力,才能嚐到更加成功的滋味。哈哈,跑題了。

下面看一下兩道筆試題。

一、大概簡單地說一下,求下面這段**的結果。

new thread(new

runnable()

})}.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.

public

class

demo2

catch

(interruptedexception e) }}

}class mytimertask extends

timertask

}

2.

public

class

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 ...