導航:首頁 > 面試求職 > c多線程面試題

c多線程面試題

發布時間:2021-01-28 04:18:40

面試題 linux 多線程開發注意什麼

注意共享數據的保護
包括動態數據,全局變數,靜態局部變數等。

㈡ 哪裡有關於多線程的 c#面試題

來表示
2.同步因子,在某段代碼上增加同步因子,那麼整個JVM內部只能最多有一個線程執行這段,其餘的線程按FIFO方式等待執行.

㈢ 請教一道 Python 多線程爬蟲的面試題

def saveToFile(FileName,srcList):
a=0
srcTuple = (srcList)
FileName = 'os'+FileName.strip()
res = mkdir(FileName)
if res == False:
return False
#os.mkdir(FileName)
os.chdir(FileName)
que = Queue.Queue()
for sl in srcList:
que.put(sl)
for a in range(0,srcList.__len__()):
threadD = threadDownload(que,a)
threadD.start()
#print threading.enumerate()
while threading.active_count() != 0:
if threading.active_count() == 1:
print FileName+" is Done"
return True

㈣ 一道筆試題,關於程序的調優

使用排除法應該是D,迭代和遞歸到底是誰效率高,看具體情況了,不能用這個做調優。回
A,屬於改進緩存演算法,能答提高
B,多線程並行操作可以提高速度
C,連接池減少了連接的創建和關閉對資源的損耗
E ,多次調用一次搞定,相當於減少了和外部溝通的資源損耗
F,數據共享有點緩存的味道,實際就是減少了計算和數據提取

㈤ C面試題:單線程與多線程的問題

我的天,真是啥答案都有。例子嘛……

請參見《Windows程序設計》——Charles Petzold著
北京大學回出版社,第五版
P1125

如若手頭沒有答書,那……我只說4個字:文件載入。自己領悟吧~~~

PS:這涉及到輸入輸出中斷相關問題,若是不太了解底層,還是別想太深……

/////////////

另外,3樓朋友,你說的是單核,若是存在多個處理器,它們可以並發處理線程,實現真正的「並行處理」,此時線程的執行並無嚴格的一致順序,因此你的解釋在多個CPU共存時肯定不成立。

如果只有一個CPU,你的解釋……這個跟死循環……怎麼說呢,有一定關系——但我認為,這更應該屬於「線程安全」的討論范疇,與單線程/多線程的效率關系很牽強。

㈥ socket 和多線程這兩部分選擇面試題,哪些知識點比較能看出對方的水平

我的項目是通過Wifi和大約50台左右的設備進行通信,原先用的是多線程中使用版同步Socket的方式進行通信權,每個設備對應一個線程,線程內進行Socket收發操作,但設備一多就會出現通信阻塞的情況,導致部分設備無法及時發送數據。然後同事告訴我用非同步Socket會改善很多,所以我去了解了下非同步Socket,也知道該如何實現非同步Socket通信,但是在了解的過程中也看到有說使用多線程同步Socket比非同步Socket好

㈦ java多線程runnable和thread的區別 面試題

runnable和thread的區別(多線程必須用Runable)
Java中有兩種實現多線程的方式以及兩種方式之間的區別
看到一個面試題.問兩種實現多線程的方法.沒事去網上找了找答案.
網上流傳很廣的是一個網上售票系統講解.轉發過來.已經不知道原文到底是出自哪裡了.

Java中有兩種實現多線程的方式。一是直接繼承Thread類,二是實現Runnable介面。那麼這兩種實現多線程的方式在應用上有什麼區別呢?
為了回答這個問題,我們可以通過編寫一段代碼來進行分析。我們用代碼來模擬鐵路售票系統,實現通過四個售票點發售某日某次列車的100張車票,一個售票點用一個線程表示。
首先這樣編寫這個程序:

Java代碼
class ThreadTest extends Thread{
private int ticket = 100;
public void run(){
while(true){
if(ticket > 0){
System.out.println(Thread.currentThread().getName() +
"is saling ticket" + ticket--);
}else{
break;
}
}
}
}
源碼列印?
class ThreadTest extends Thread{
private int ticket = 100;
public void run(){
while(true){
if(ticket > 0){
System.out.println(Thread.currentThread().getName() +
"is saling ticket" + ticket--);
}else{
break;
}
}
}
}

main測試類:

Java代碼
public class ThreadDome1{
public static void main(String[] args){
ThreadTest t = new ThreadTest();
t.start();
t.start();
t.start();
t.start();
}
}
源碼列印?
public class ThreadDome1{
public static void main(String[] args){
ThreadTest t = new ThreadTest();
t.start();
t.start();
t.start();
t.start();
}
}

上面的代碼中,我們用ThreadTest類模擬售票處的售票過程,run方法中的每一次循環都將總票數減1,模擬賣出一張車票,同時該車票號列印出來,直接剩餘的票數到零為止。在ThreadDemo1類的main方法中,我們創建了一個線程對象,並重復啟動四次,希望通過這種方式產生四個線程。從運行的結果來看我們發現其實只有一個線程在運行,這個結果 告訴我們:一個線程對象只能啟動一個線程,無論你調用多少遍start()方法,結果只有一個線程。

我們接著修改ThreadDemo1,在main方法中創建四個Thread對象:

Java代碼
public class ThreadDemo1{
public static void main(String[] args){
new ThreadTest().start();
new ThreadTest().start();
new ThreadTest().start();
new ThreadTest().start();
}
}
源碼列印?
public class ThreadDemo1{
public static void main(String[] args){
new ThreadTest().start();
new ThreadTest().start();
new ThreadTest().start();
new ThreadTest().start();
}
}

Java代碼
class ThreadTest extends Thread{
private int ticket = 100;
public void run(){
while(true){
if(ticket > 0){
System.out.println(Thread.currentThread().getName() +
" is saling ticket" + ticket--);
}else{
break;
}
}
}
}
源碼列印?
class ThreadTest extends Thread{
private int ticket = 100;
public void run(){
while(true){
if(ticket > 0){
System.out.println(Thread.currentThread().getName() +
" is saling ticket" + ticket--);
}else{
break;
}
}
}
}

這下達到目的了嗎?

從結果上看每個票號都被列印了四次,即 四個線程各自賣各自的100張票,而不去賣共同的100張票。這種情況是怎麼造成的呢?我們需要的是,多個線程去處理同一個資源,一個資源只能對應一個對象,在上面的程序中,我們創建了四個ThreadTest對象,就等於創建了四個資源,每個資源都有100張票,每個線程都在獨自處理各自的資源。

經過這些實驗和分析,可以總結出,要實現這個鐵路售票程序,我們只能創建一個資源對象,但要創建多個線程去處理同一個資源對象,並且每個線程上所運行的是相同的程序代碼。在回顧一下使用介面編寫多線程的過程。

Java代碼
public class ThreadDemo1{
public static void main(String[] args){
ThreadTest t = new ThreadTest();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}
源碼列印?
public class ThreadDemo1{
public static void main(String[] args){
ThreadTest t = new ThreadTest();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}

Java代碼
class ThreadTest implements Runnable{
private int tickets = 100;
public void run(){
while(true){
if(tickets > 0){
System.out.println(Thread.currentThread().getName() +
" is saling ticket " + tickets--);
}
}
}
}
源碼列印?
class ThreadTest implements Runnable{
private int tickets = 100;
public void run(){
while(true){
if(tickets > 0){
System.out.println(Thread.currentThread().getName() +
" is saling ticket " + tickets--);
}
}
}
}

上面的程序中,創建了四個線程, 每個線程調用的是同一個ThreadTest對象中的run()方法,訪問的是同一個對象中的變數(tickets)的實例,這個程序滿足了我們的需求。在Windows上可以啟動多個記事本程序一樣,也就是多個進程使用同一個記事本程序代碼。

可見, 實現Runnable介面相對於繼承Thread類來說,有如下顯著的好處:

(1)適合多個相同程序代碼的線程去處理同一資源的情況,把虛擬CPU(線程)同程序的代碼,數據有效的分離,較好地體現了面向對象的設計思想。

(2)可以避免由於Java的單繼承特性帶來的局限。我們經常碰到這樣一種情況,即當我們要將已經繼承了某一個類的子類放入多線程中,由於一個類不能同時有兩個父類,所以不能用繼承Thread類的方式,那麼,這個類就只能採用實現Runnable介面的方式了。

(3)有利於程序的健壯性,代碼能夠被多個線程共享,代碼與數據是獨立的。當多個線程的執行代碼來自同一個類的實例時,即稱它們共享相同的代碼。多個線程操作相同的數據,與它們的代碼無關。當共享訪問相同的對象是,即它們共享相同的數據。當線程被構造時,需要的代碼和數據通過一個對象作為構造函數實參傳遞進去,這個對象就是一個實現了Runnable介面的類的實例。

㈧ 一個面試題:用SSH框架做的項目是如何管理多線程的

ssh,通過action觸發一個多線程任務,每個任務調用一個繼承HibernateDaoSupport的service的方法,現在要每個線程都綁定一個新的hibernate session

㈨ 求教一個百度的面試題,關於多線程單例模式的

多線程的單例問題非常類似consensus問題:一堆進程進入,退出時的狀態必須是第一個進內入之後的初始化容過的狀態。那麼用原子操作應當很容易實現。隨便想了一下,用兩個原子計數,一個表示對象是不是ready,另一個表示是不是正在初始化:

if (fetch(obj_ready))
{
return obj;
}
else
{
// 如果沒有人在構建,就去構建
if (fetch_and_set(obj_under_build,true) == false)
{
obj = new obj();
set(obj_ready, true);
return obj;
}
// 否則退出
else
{
return nullptr;
}
}

即使不用鎖,也必然有某種排它機制,因為對象正在初始化的時候是不可用的。這時候如果又有人來訪問它,要麼讓訪問者等待,要麼把訪問者踹出去。

㈩ 某公司面試題java11使用並發多線程加速下載文件,如何寫

先建一個用於下載文件的多線程類,通常要指明下載文件的位置(URL)和文件名以及保存到本地的路徑
public class FileDownloader implements Runnable
{
private static File file;//要下載的文件
private static String url;//文件所在URL
private static File storagePath;//保存路徑
public static void initialize(File file, String url, File storagePath)//初始化靜態欄位,初始化的代碼不用我寫吧
}
然後,指明同步塊,目的是讓各個線程共享一個文件資源,那樣它們可以知道同一個文件的下載狀況(即獲取其他線程下載文件到哪個位置,以防重復下載)
public synchronized void fileDownload()//此方法用於下載文件,一般的Java程序員都會寫,實在不會我可以幫你補上
或者
public void fileDownload(){
synchronized(file){
synchronized(url){
synchronized(storagePath){
}}}}//給每個欄位加上同步塊
run()方法的實現就以自己的喜好去寫吧,只要裡面調用了fileDownload()方法就行。
public void run(){

fileDownload();//下載文件

}
然後,在主類的main方法中創建一個多線程數組:
Runnable[] fds=new FileDownloader[線程數量];//fds為file_downloaders縮寫
Thread[] threads=new Thread[線程數量];
最後使用循環把所有的線程逐一啟動。
for(int i=0;i<線程數量;i++){
threads[i]=new Thread(fds[i]);
threads[i].start();
}

閱讀全文

與c多線程面試題相關的資料

熱點內容
晉升考核自我評價 瀏覽:480
職場新人自我介紹日語 瀏覽:700
職攜求職公寓 瀏覽:354
醉駕人找工作 瀏覽:973
百度廈門六中藝術特長報名表 瀏覽:868
勁霸經編面試 瀏覽:364
小孩綜合素質自我評價 瀏覽:470
玉環學校洗碗招聘信息 瀏覽:15
教師教育自我評價 瀏覽:192
2014合肥168中學特長生音樂錄取名單 瀏覽:478
應屆生面試自我介紹範文3分鍾 瀏覽:800
丹陽人才招聘網 瀏覽:72
生物學科特長怎麼寫 瀏覽:250
昌碩面試後多久通知 瀏覽:925
陝西省鐵餅特長生 瀏覽:751
碩展科技有限公司招聘 瀏覽:346
2019年南陽卷煙廠招聘信息 瀏覽:461
時尚招聘信息 瀏覽:341
安吉潔美電子招聘信息 瀏覽:106
個人簡歷問候語 瀏覽:924