導航:首頁 > 編程語言 > 多線程編程面試題

多線程編程面試題

發布時間:2022-08-31 04:42:32

A. 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介面的類的實例。

B. 多線程面試題,沒有思路。還請達人指點。

這樣吧,我是根據前面同學的思路以生產者-消費者方式完成的一個java小demo。

第一個類:
共享值類。
public class ShareValue {
private int count;
public ShareValue(int count) {
this.count = count;
}
public synchronized void plus() throws InterruptedException {
if (count <= 100) {
++count;
System.out.println("Procer:" + count);
this.notifyAll();
} else {
System.out.println("值超過100,停止增加!");
this.wait();
}
}
public synchronized void minus() throws InterruptedException {
if (count > 0) {
--count;
System.err.println("Consumer:" + count);
this.notifyAll();
} else {
System.out.println("值小或等於0,停止減少!");
this.wait();
}
}
}

第二個類:
生產者類
public class Procer implements Runnable {
private ShareValue value;
public Procer(ShareValue value) {
this.value = value;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
try {
value.plus();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

第三個類:
消費者類
public class Consumer implements Runnable {
private ShareValue value;
public Consumer(ShareValue value) {
this.value = value;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
try {
value.minus();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

第四個:
測試類
public class TestPC {
public static void main(String[] args) {
ShareValue value = new ShareValue(0);
Runnable pr = new Procer(value);
Runnable cr = new Consumer(value);
new Thread(pr).start();
new Thread(cr).start();
}
}

希望對你有所幫助,這只是能初步跑起來,可以觀察運行,後面可以逐步調整。

C. 2021面試網路工程師的題目

面試 的目的是確定面試者如何處理他們所選擇的研究領域的問題,以及他們如何批判性地思考問題。下面我給大家帶來2021面試網路工程師的題目參考,希望能幫助到大家!

Java多線程 面試題 目

1、什麼是線程?

線程是 操作系統 能夠進行運算調度的最小單位,它被包含在進程之中,是進程中的實際運作單位。程序員可以通過它進行多處理器編程,你可以使用多線程對運算密集型任務提速。比如,如果一個線程完成一個任務要100毫秒,那麼用十個線程完成改任務只需10毫秒。

2、線程和進程有什麼區別?

線程是進程的子集,一個進程可以有很多線程,每條線程並行執行不同的任務。不同的進程使用不同的內存空間,而所有的線程共享一片相同的內存空間。每個線程都擁有單獨的棧內存用來存儲本地數據。

3、如何在Java中實現線程?

兩種方式:java.lang.Thread 類的實例就是一個線程但是它需要調用java.lang.Runnable介面來執行,由於線程類本身就是調用的Runnable介面所以你可以繼承java.lang.Thread 類或者直接調用Runnable介面來重寫run() 方法 實現線程。

4、Java 關鍵字volatile 與 synchronized 作用與區別?

Volatile:

它所修飾的變數不保留拷貝,直接訪問主內存中的。

在Java內存模型中,有main memory,每個線程也有自己的memory (例如寄存器)。為了性能,一個線程會在自己的memory中保持要訪問的變數的副本。這樣就會出現同一個變數在某個瞬間,在一個線程的memory中的值可能與另外一個線程memory中的值,或者main memory中的值不一致的情況。 一個變數聲明為volatile,就意味著這個變數是隨時會被其他線程修改的,因此不能將它cache在線程memory中。

synchronized:

當它用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多隻有一個線程執行該段代碼。

一、當兩個並發線程訪問同一個對象object中的這個synchronized(this)同步代碼塊時,一個時間內只能有一個線程得到執行。另一個線程必須等待當前線程執行完這個代碼塊以後才能執行該代碼塊。

二、然而,當一個線程訪問object的一個synchronized(this)同步代碼塊時,另一個線程仍然可以訪問該object中的非synchronized(this)同步代碼塊。

三、尤其關鍵的是,當一個線程訪問object的一個synchronized(this)同步代碼塊時,其他線程對object中所有 其它 synchronized(this)同步代碼塊的訪問將被阻塞。

四、當一個線程訪問object的一個synchronized(this)同步代碼塊時,它就獲得了這個object的對象鎖。結果,其它線程對該object對象所有同步代碼部分的訪問都被暫時阻塞。

五、以上規則對其它對象鎖同樣適用。

5、有哪些不同的線程生命周期?

當我們在Java程序中新建一個線程時,它的狀態是New。當我們調用線程的start()方法時,狀態被改變為Runnable。線程調度器會為Runnable線程池中的線程分配CPU時間並且講它們的狀態改變為Running。其他的線程狀態還有Waiting,Blocked 和Dead。

6、你對線程優先順序的理解是什麼?

每一個線程都是有優先順序的,一般來說,高優先順序的線程在運行時會具有優先權,但這依賴於線程調度的實現,這個實現是和操作系統相關的(OS dependent)。

我們可以定義線程的優先順序,但是這並不能保證高優先順序的線程會在低優先順序的線程前執行。線程優先順序是一個int變數(從1-10),1代表最低優先順序,10代表最高優先順序。

7、什麼是死鎖(Deadlock)?如何分析和避免死鎖?

死鎖是指兩個以上的線程永遠阻塞的情況,這種情況產生至少需要兩個以上的線程和兩個以上的資源。

分析死鎖,我們需要查看Java應用程序的線程轉儲。我們需要找出那些狀態為BLOCKED的線程和他們等待的資源。每個資源都有一個唯一的id,用這個id我們可以找出哪些線程已經擁有了它的對象鎖。

避免嵌套鎖,只在需要的地方使用鎖和避免無限期等待是避免死鎖的通常辦法。

8、什麼是線程安全?Vector是一個線程安全類嗎?

如果你的代碼所在的進程中有多個線程在同時運行,而這些線程可能會同時運行這段代碼。如果每次運行結果和單線程運行的結果是一樣的,而且其他的變數的值也和預期的是一樣的,就是線程安全的。

一個線程安全的計數器類的同一個實例對象在被多個線程使用的情況下也不會出現計算失誤。很顯然你可以將集合類分成兩組,線程安全和非線程安全的。Vector 是用同步方法來實現線程安全的, 而和它相似的ArrayList不是線程安全的。

9、Java中如何停止一個線程?

Java提供了很豐富的API但沒有為停止線程提供API。JDK 1.0本來有一些像stop(), suspend()和resume()的控制方法但是由於潛在的死鎖威脅因此在後續的JDK版本中他們被棄用了,之後Java API的設計者就沒有提供一個兼容且線程安全的方法來停止一個線程。

當run()或者 call()方法執行完的時候線程會自動結束,如果要手動結束一個線程,你可以用volatile 布爾變數來退出run()方法的循環或者是取消任務來中斷線程。

10、什麼是ThreadLocal?

ThreadLocal用於創建線程的本地變數,我們知道一個對象的所有線程會共享它的全局變數,所以這些變數不是線程安全的,我們可以使用同步技術。但是當我們不想使用同步的時候,我們可以選擇ThreadLocal變數。

每個線程都會擁有他們自己的Thread變數,它們可以使用get()set()方法去獲取他們的默認值或者在線程內部改變他們的值。ThreadLocal實例通常是希望它們同線程狀態關聯起來是private static屬性。

Kubernetes面試題匯總

1、什麼是Kubernetes?

Kubernetes是一個開源容器管理工具,負責容器部署,容器擴縮容以及負載平衡。作為Google的創意之作,它提供了出色的社區,並與所有雲提供商合作。因此,我們可以說Kubernetes不是一個容器化平台,而是一個多容器管理解決方案。

2、Kubernetes與Docker有什麼關系?

眾所周知,Docker提供容器的生命周期管理,Docker鏡像構建運行時容器。但是,由於這些單獨的容器必須通信,因此使用Kubernetes。因此,我們說Docker構建容器,這些容器通過Kubernetes相互通信。因此,可以使用Kubernetes手動關聯和編排在多個主機上運行的容器。

3、什麼是Container Orchestration?

考慮一個應用程序有5-6個微服務的場景。現在,這些微服務被放在單獨的容器中,但如果沒有容器編排就無法進行通信。因此,由於編排意味著所有樂器在音樂中和諧共處,所以類似的容器編排意味著各個容器中的所有服務協同工作以滿足單個伺服器的需求。

4、Kubernetes如何簡化容器化部署?

由於典型應用程序將具有跨多個主機運行的容器集群,因此所有這些容器都需要相互通信。因此,要做到這一點,你需要一些能夠負載平衡,擴展和監控容器的東西。由於Kubernetes與雲無關並且可以在任何公共/私有提供商上運行,因此必須是您簡化容器化部署的選擇。

5、您對Kubernetes的集群了解多少?

Kubernetes背後的基礎是我們可以實施所需的狀態管理,我的意思是我們可以提供特定配置的集群服務,並且集群服務將在基礎架構中運行並運行該配置。

因此,正如您所看到的,部署文件將具有提供給集群服務所需的所有配置。現在,部署文件將被提供給API,然後由集群服務決定如何在環境中安排這些pod,並確保正確運行的pod數量。

因此,位於服務前面的API,工作節點和節點運行的Kubelet進程,共同構成了Kubernetes集群。

6、Kubernetes Architecture的不同組件有哪些?

Kubernetes Architecture主要有兩個組件 - 主節點和工作節點。如下圖所示,master和worker節點中包含許多內置組件。主節點具有kube-controller-manager,kube-apiserver,kube-scheler等。而工作節點具有在每個節點上運行的kubelet和kube-proxy。

7、您能否介紹一下Kubernetes中主節點的工作情況?

Kubernetes master控制容器存在的節點和節點內部。現在,這些單獨的容器包含在容器內部和每個容器內部,您可以根據配置和要求擁有不同數量的容器。

因此,如果必須部署pod,則可以使用用戶界面或命令行界面部署它們。然後,在節點上調度這些pod,並根據資源需求,將pod分配給這些節點。kube-apiserver確保在Kubernetes節點和主組件之間建立通信。

8、kube-apiserver和kube-scheler的作用是什麼?

kube -apiserver遵循橫向擴展架構,是主節點控制面板的前端。這將公開Kubernetes主節點組件的所有API,並負責在Kubernetes節點和Kubernetes主組件之間建立通信。

kube-scheler負責工作節點上工作負載的分配和管理。因此,它根據資源需求選擇最合適的節點來運行未調度的pod,並跟蹤資源利用率。它確保不在已滿的節點上調度工作負載。

9、你對Kubernetes的負載均衡器有什麼了解?

負載均衡器是暴露服務的最常見和標准方式之一。根據工作環境使用兩種類型的負載均衡器,即內部負載均衡器或外部負載均衡器。內部負載均衡器自動平衡負載並使用所需配置分配容器,而外部負載均衡器將流量從外部負載引導至後端容器。

10、Replica Set 和 Replication Controller之間有什麼區別?

Replica Set 和 Replication Controller幾乎完全相同。它們都確保在任何給定時間運行指定數量的pod副本。不同之處在於復制pod使用的選擇器。Replica Set使用基於集合的選擇器,而Replication Controller使用基於許可權的選擇器。

Equity-Based選擇器:這種類型的選擇器允許按標簽鍵和值進行過濾。因此,在外行術語中,基於Equity的選擇器將僅查找與標簽具有完全相同 短語 的pod。

示例:假設您的標簽鍵表示app = nginx,那麼,使用此選擇器,您只能查找標簽應用程序等於nginx的那些pod。

Selector-Based選擇器:此類型的選擇器允許根據一組值過濾鍵。因此,換句話說,基於Selector的選擇器將查找已在集合中提及其標簽的pod。

示例:假設您的標簽鍵在(nginx,NPS,Apache)中顯示應用程序。然後,使用此選擇器,如果您的應用程序等於任何nginx,NPS或Apache,則選擇器將其視為真實結果。

滲透攻擊的測試步驟

1.如果原始值為2,我們使用(1+1)或(3-1),程序作出相同回應,表明易受攻擊

2.如果單引號被過濾掉,我們可以用ASCII命令,使它返回字元的數字化代碼,如51-ASCII(1)

3.在URL編碼中,&和=用於鏈接名稱/值對,建立查詢字元串應當分別使用%26和%3d進行編碼

4.如查詢字元串不允許使用空格,使用+或%20編碼

5.分號被用於分割cookie自讀,使用%3d編碼


2021面試網路工程師的題目相關 文章 :

★ 關於網路工程師的面試題有哪些

★ 網路管理員面試題及答案大全

★ 最新的運維工程師面試題目整理

★ 網路測試工程師面試題及答案

★ 計算機網路面試題及參考答案

★ 網路工程師面試自我介紹範文五篇

★ 面試網路技術工程師的有哪些提問

★ 最新的it運維工程師面試題整理

D. 進入IT企業必讀的200個 .NET面試題的目 錄

第1章 應聘開發職位的技巧和禁忌 1
程序員在准備面試的過程中,有時會過分注重技術上的准備工作,事實上,一些非技術的准備工作也相當重要。掌握好應聘技術職位過程中的軟技巧、准備一份出色的簡歷、提高警惕避免在應聘中觸犯一些禁忌,可以大大地提高面試的成功率。在開始面試時,還要把握一些強勢的招聘網站,給自己一個展現自我的平台。本章從了解、准備、開始,層層漸進,讓讀者對整個程序員面試的過程有個全局性的掌握。
1.1 技術職位需要怎樣的人才——了解大環境 1
1.1.1 對技術的執著和熱情 1
1.1.2 對編程始終抱有認真的態度 1
1.1.3 實事求是的態度和謙遜的品質 1
1.1.4 適合應聘公司的文化 1
1.2 一份出色的個人簡歷——面試准備 2
1.2.1 一份簡歷不宜超過一頁 2
1.2.2 永遠准備中文簡歷 2
1.2.3 不要在個人簡歷上註明希望薪水 2
1.2.4 簡歷模板 2
1.3 展現自我——開始發簡歷 3
1.3.1 應聘渠道 3
1.3.2 應聘流程 7
1.4 真正的面試——開始面試 8
1.4.1 筆試 8
1.4.2 面試 10
1.4.3 電話面試 10
1.4.4 網路考試 10
1.5 面試中的一些禁忌 11
1.6 小結 12
第2章 .NET框架基礎 13
本章覆蓋了.NET面試筆試中常見的.NET框架技術題。此類題目側重於考查應聘者對於.NET機制的深入了解,徹底理解.NET的運行機制,並且熟悉一個.NET系統常用的管理部署方法。
2.1 .NET基礎概念 13
2.1.1 什麼是CTS、CLS和CLR 13
2.1.2 開發和運行.NET程序需要的
最基本環境是什麼 15
2.1.3 .NET是否支持多編程語言開發 15
2.1.4 CLR技術和COM技術的比較 17
2.1.5 什麼是程序集和應用程序域 18
2.2 .NET運行機制 20
2.2.1 .NET程序被編譯成什麼形式的代碼 20
2.2.2 JIT是如何工作的 22
2.2.3 簡述程序集的載入機制 23
2.2.4 如何配置程序集的版本策略 25
2.3 生成、部署和管理 27
2.3.1 如何生成強簽名的程序集 27
2.3.2 如何把程序集放入GAC中 29
2.3.3 延遲簽名及其作用 30
2.3.4 程序集的版本分哪幾部分 32
2.4 名企面試真題 32
2.5 小結 33
第3章 .NET類型語法基礎 34
本章覆蓋了.NET面試筆試中最基礎的語法和類型題。縱觀.NET的面試題,此類題目涉及了最基礎的知識點,其難度也相對最小。但是應聘者如果對此類的面試題回答得不正確或者不完整,將會給面試官留下技術水平較差的印象,建議讀者對本章的題目做到深刻理解和掌握。
3.1 基礎類型和語法 34
3.1.1 .NET中所有內建類型的基類是什麼 34
3.1.2 System.Object中包含哪些方法,哪些是虛方法 35
3.1.3 值類型和引用類型的區別 37
3.1.4 簡述裝箱和拆箱原理 40
3.1.5 C#中是否有全局變數 43
3.1.6 struct和class的區別,
struct適用哪些場合 43
3.1.7 類型的初始化器何時被調用 44
3.1.8 C#中方法的參數可以有哪幾種傳遞方式 47
3.1.9 C#中string和String有什麼區別 50
3.1.10 .NET支持哪幾種可訪問性級別,C#實現了其中的哪幾種 50
3.1.11 簡述屬性的特點及屬性和方法的異同 51
3.1.12 簡述C#中的淺復制和深復制 54
3.1.13 簡述C#中的循環語法和各自的特點 57
3.1.14 C#中的using語句有什麼作用 60
3.2 內存管理和垃圾回收 62
3.2.1 簡述.NET中堆棧和堆的特點和差異 62
3.2.2 執行string abc=aaa+bbb+ccc共分配了多少內存 64
3.2.3 .NET中GC的運行機制 66
3.2.4 Dispose方法和Finalize方法在何時被調用 67
3.2.5 GC中代(Generation)是什麼,一共分幾代 70
3.2.6 GC機制中如何判斷一個對象是否仍在被使用 71
3.2.7 .NET的託管堆中是否可能出現內存泄漏現象 72
3.3 面向對象的實現 75
3.3.1 C#中類可以有多個父類、可以實現多個介面嗎 75
3.3.2 簡述C#中重寫、重載和隱藏的概念 76
3.3.3 為什麼在構造方法中調用虛方法會導致問題 78
3.3.4 在C#中如何聲明一個類不能被繼承 82
3.4 異常的處理 82
3.4.1 如何針對不同的異常進行捕捉 82
3.4.2 如何使用Conditional特性 84
3.4.3 如何避免類型轉換時的異常 86
3.5 名企面試真題 88
3.6 小結 89
第4章 字元串、集合和流的使用 90
字元串、集合和流在程序中處理數據時經常被用到,這些代碼的編寫將直接影響到系統的正確性和效率。本章將包含關於字元串、集合和流的常見面試題,並且通過分析這些題目和知識點,幫助讀者梳理這些方面的知識。
4.1 字元串處理 90
4.1.1 System.String是值類型還是引用類型 90
4.1.2 StringBuilder類型有何作用 91
4.1.3 如何在String和Byte[]對象之間進行轉換 92
4.1.4 簡述BASE64編碼的作用以及C#中對其的支持 94
4.1.5 SecureString的實例如何被分配和釋放 96
4.1.6 什麼是字元串池機制 98
4.2 常用集合和泛型 99
4.2.1 Int[]是引用類型還是值類型 99
4.2.2 數組之間如何進行轉換 100
4.2.3 解釋泛型的基本原理 102
4.2.4 什麼是泛型的主要約束和次要約束 104
4.2.5 .NET中是否可用標准模板庫(STL) 105
4.3 流和序列化 106
4.3.1 什麼是流,.NET中有哪些常見的流 106
4.3.2 如何使用壓縮流 109
4.3.3 Serializable特性有何作用 111
4.3.4 .NET提供了哪幾種可進行序列化操作的類型 113
4.3.5 如何自定義序列化和反序
列化的過程 116
4.4 名企面試真題 119
4.5 小結 119
第5章 常用類和介面 120
.NET除了提供運行引擎之外,還提供了豐富的內建類型。理解這些類型的作用和機制,能夠幫助程序員減少代碼工作,編寫高效簡潔的代碼。而有時候誤用類型,則會導致性能的降低,更嚴重時則會為系統帶了潛伏的bug。本章將介紹一些經常出現在.NET面試中的類型和介面。
5.1 類型的基類System.Object 120
5.1.1 是否存在不繼承自System.Object類型的類 120
5.1.2 在System.Object中定義的三個比較方法有何異同 122
5.1.3 如何重寫GetHashCode方法 125
5.2 時間的操作System.DateTime 127
5.2.1 DateTime如何存儲時間 127
5.2.2 如何在DateTime對象和
字元串對象之間進行轉換 127
5.2.3 什麼是UTC時間,如何轉換到UTC時間 130
5.3 IFormattable和IformatProvider的使用 131
5.3.1 如何使用IFormattable介面實現格式化輸出 131
5.3.2 如何告訴類型格式化輸出的方式 133
5.4 管理文件和文件夾的類型 135
5.4.1 如何操作文件和文件夾 135
5.4.2 如何實現文件和文件夾的監控功能 139
5.5 .NET中的定時器 141
5.5.1 .NET提供了哪幾個定時器類型 141
5.5.2 .NET的內建定時器類型
是否會發生回調方法重入 146
5.6 名企面試真題 151
5.7 小結 151
第6章 .NET中的高級特性 152
本章的內容覆蓋了諸如委託、事件、反射和特性等.NET框架中的高級特性。對這些特性的掌握和成熟運用,往往成為.NET程序員從入門級進階到中級的判斷標准。也正因為如此,此類題目在.NET技術筆試、面試中被大量採用。讀者在閱讀本章時,應力求做到知其然更知其所以然,充分理解各種特性在.NET框架下是如何實現的,這樣的設計如何提高了程序的靈活性和可擴展性。
6.1 委託 152
6.1.1 請解釋委託的基本原理 152
6.1.2 委託回調靜態方法和實例方法有何區別 154
6.1.3 什麼是鏈式委託 154
6.1.4 鏈式委託的執行順序是怎麼樣的 156
6.1.5 可否定義擁有返回值的方法的委託鏈 157
6.1.6 委託通常可以應用在哪些場合 159
6.2 事件 165
6.2.1 請解釋事件的基本使用方法 165
6.2.2 事件和委託有何聯系 167
6.2.3 如何設計一個帶有很多事件的類型 169
6.2.4 用代碼表示如下情景:貓叫、老鼠逃跑、主人驚醒 173
6.3 反射 175
6.3.1 請解釋反射的基本原理和其實現的基石 176
6.3.2 .NET提供了哪些類型來實現反射 179
6.3.3 如何實現動態地發射程序集 184
6.3.4 如何利用反射來實現工廠模式 188
6.3.5 如何以較小的內存代價保存
Type、Field和Method信息 194
6.4 特性 196
6.4.1 什麼是特性,如何自定義一個特性 196
6.4.2 .NET中特性可以在哪些元素上使用 198
6.4.3 有哪幾種方法可以獲知一個元素是否申明某個特性 200
6.4.4 一個元素是否可以重復申明同一個特性 202
6.5 名企面試真題 204
6.6 小結 204
第7章 .NET多線程編程 205
多線程編程是每個技術框架下都需要面對的問題,在多CPU、多核的硬體架構逐漸普及的今天,多線程編程也漸漸變得更加重要。本章將集中覆蓋關於.NET中多線程編程的面試題。
7.1 多線程編程的基本概念 205
7.1.1 請解釋操作系統層面上的線程和進程 205
7.1.2 多線程程序在操作系統里是並行執行的嗎 206
7.1.3 什麼是纖程 207
7.2 .NET中的多線程編程 208
7.2.1 如何在.NET程序中手動控制多個線程 208
7.2.2 如何使用.NET的線程池 212
7.2.3 如何查看和設置線程池的上下限 215
7.2.4 如何定義線程獨享的全局數據 217
7.2.5 如何使用非同步模式讀取一個文件 221
7.2.6 如何阻止線程執行上下文的傳遞 223
7.3 多線程程序的線程同步 227
7.3.1 什麼是同步塊和同步塊索引 227
7.3.2 C#中的lock關鍵字有何作用 229
7.3.3 可否使用值類型對象來
實現線程同步 232
7.3.4 可否對引用類型對象自身進行同步 233
7.3.5 什麼是互斥體,Mutex類型和Monitor類型的功能有何區別 235
7.4 名企面試真題 238
7.5 小結 238
第8章 ASP NET應用開發 239
ASP NET是微軟公司提供的編寫動態網站的技術框架,其特點是基於.NET框架基礎,所有ASP NET程序都可以使用針對.NET的語言編寫。在微軟公司的Visual Studio開發平台中,實現了拖放控制項等便捷的功能,使得ASP NET應用程序的開發效率得到了較大的提高,近些年來ASP NET技術逐漸成為網站開發的主流技術之一,本章將覆蓋一些常見的關於ASP NET開發的面試題。
8.1 ASP NET應用開發基礎 239
8.1.1 請解釋ASP NET以什麼形式運行 239
8.1.2 常見的HTTP Code有哪些 242
8.1.3 GET請求和POST請求有何區別 245
8.1.4 介紹ASP NET的頁面生存周期 247
8.2 控制項和頁面 249
8.2.1 什麼是靜態頁面,什麼是動態頁面 250
8.2.2 請簡述ViewState的功能和實現機制 251
8.2.3 Session有哪幾種存儲方式,之間有何區別,如何進行設置 255
8.2.4 如何嵌套使用GridView控制項 259
8.2.5 列舉幾種實現頁面跳轉的方法,並說明其實現機制 263
8.2.6 請解釋<%# Eval(source)%>的功能和實現機制 270
8.2.7 ObjectDataSource控制項有何作用 273
8.3 驗證和安全 277
8.3.1 如何使用正則表達式來驗證一個
上海市電話號碼 277
8.3.2 介紹ASP NET驗證控制項的功能和
使用方法 280
8.3.3 如何防止SQL注入式攻擊 287
8.4 名企面試真題 289
8.5 小結 289
第9章 .NET中的資料庫開發 290
大部分系統都會包含資料庫應用。資料庫應用設計往往成為系統設計中最重要的組成之一,這其中不止包括資料庫的架構、庫結構的設計,也包括了程序訪問資料庫策略的設計。在.NET的程序開發中,ADO NET已經成為訪問資料庫最主要的組件框架。本章將覆蓋和資料庫訪問及ADO NET有關的常見面試題,具體會覆蓋ADO NET基本概念、資料庫的鏈接、資料庫讀寫等主題。
9.1 ADO NET和資料庫程序基礎 290
9.1.1 什麼是關系型資料庫 290
9.1.2 如何通過SQL語句來實現行列轉換 291
9.1.3 ADO NET支持哪幾種數據源 293
9.2 ADO NET和資料庫的連接 295
9.2.1 請簡要敘述資料庫連接池的機制 295
9.2.2 如何提高連接池內連接的重用率 298
9.2.3 一個連接字元串可以包含哪些屬性 300
9.2.4 CommandBehavior.CloseConnection有何作用 302
9.3 使用ADO NET讀寫資料庫 305
9.3.1 ADO NET支持哪兩種方式來訪問關系資料庫 305
9.3.2 什麼是強類型的DataSet 309
9.3.3 請解釋SqlDataAdapter的
基本工作機制 312
9.3.4 如何自動生成SqlDataAdapter的
更新命令 316
9.3.5 如何實現批量更新的功能 319
9.4 名企面試真題 321
9.5 小結 321
第10章 XML的應用和處理 322
XML可算是近10年來最炙手可熱的技術之一,由於其跨平台的特性,很多技術應用都選擇基於XML來進行發展。在.NET中,對XML的支持和應用隨處可見。例如配置文件的格式、數據結構的表示、Web Service應用等,都是以XML語法為基礎的。本章將詳細覆蓋常見的關於XML本身及其在.NET中應用的面試題。
10.1 XML的基本特性 322
10.1.1 什麼是XML 322
10.1.2 簡述XML的常用領域及其優勢 323
10.1.3 XML中<![CDATA[ ]]>標簽的作用 324
10.1.4 XML規范是否允許空的屬性值 325
10.1.5 XML中如何處理諸如「<」的字元 326
10.1.6 XML中的命名空間如何使用 328
10.2 使用.NET組件讀寫XML 330
10.2.1 .NET中操作XML的基本類型有哪些 330
10.2.2 如何使用XmlDocument類型操作XML文檔的節點和屬性 334
10.2.3 如何使用XPath來指向帶有屬性的節點 337
10.2.4 .NET中如何驗證一個XML文檔的格式 338
10.2.5 .NET中XML文檔和關系模式如何轉換 340
10.3 利用XSLT處理XML文檔 344
10.3.1 什麼是XSLT,XSLT有何作用 344
10.3.2 如何使用XSLT中的模板 346
10.3.3 如何在XSLT文檔中調用
其他XSLT文檔 349
10.3.4 如何在代碼中使用XSLT文檔 351
10.4 名企面試真題 353
10.5 小結 353
第11章 Web Service的開發與應用 354
Web Service是一種網路服務,形式非常類似於當前智能手機上的應用。通過通用的規范,Web Service技術允許使用者訪問網路上每一個Web Service所提供的服務。在網路快速發展的今天,這種基於網路的分布式服務已經被廣泛地應用。本章將討論關於.NET中如何應用Web Service的面試題。
11.1 SOAP和Web Service的基礎概念 354
11.1.1 請簡述SOAP協議 354
11.1.2 什麼是WSDL,它有何作用 356
11.1.3 Web Service中如何處理附件 357
11.2 使用.NET開發Web Service 360
11.2.1 如何在.NET中創建Web Service 360
11.2.2 WebMethod特性包含哪些屬性,各有何用處 363
11.2.3 如何生成Web Service代理類型 367
11.2.4 請簡述.NET中Web Service的異常機制 368
11.3 Web Service的安全機制 371
11.3.1 請簡要介紹WS-Security的簽名機制 371
11.3.2 WS-Security規范申明了哪幾種身份驗證的方法 373
11.4 名企面試真題 375
11.5 小結 375
第12章 .NET Remoting分布式應用開發 376
在企業級應用開發中,分布式開發占據了越來越重要的地位。.NET Remoting是一種可擴展性很高的分布式開發技術,相對於DCOM、CORBA、RMI等分布式開發技術而言,.NET Remoting擁有著眾多獨特的優勢。.NET Remoting是一個龐大的技術話題,如果詳細展開的話可能要佔據一本書的篇幅。本章主要針對那些經常出現在.NET面試中的、與Remoting基礎相關的面試題。
12.1 .NET Remoting框架基礎 376
12.1.1 請簡要介紹.NET Remoting的運行機制 376
12.1.2 請列舉.NET Remoting機制中有哪些組件可以擴展替換 379
12.1.3 請簡述.NET Remoting生存周期機制 384
12.2 使用.NET Remoting進行分布式應用開發 387
12.2.1 請介紹服務端激活模式和客戶端激活模式的區別 387
12.2.2 請簡述Remoting中有哪幾種遠程調用方式 390
12.2.3 Remoting機制中如何處理以ObjRef為參數的方法調用 393
12.2.4 請簡述Remoting中配置文件的使用 397
12.2.5 如何在客戶端和伺服器端共享遠程對象類型 400
12.3 名企面試真題 404
12.4 小結 404
第13章 代碼和演算法 405
無論是面試還是筆試,演算法和代碼的問題都是必不可少的,其區別僅在於筆試中更側重於應聘者書寫代碼的能力,而面試中則更注重於應聘者的設計能力和演算法思路。本章著重覆蓋了一些在.NET面試中經常出現的和代碼、演算法有關的面試題,並且給出了解答思路和實現示例。
13.1 基礎演算法題 405
13.1.1 請實現一個快速排序演算法 405
13.1.2 請實現一個二分查找演算法 406
13.1.3 請實現一棵二叉樹的中序、後序遍歷 408
13.1.4 請寫出一個奇偶分割演算法 413
13.1.5 請實現一個簡單的最短路徑演算法 414
13.2 程序設計題 423
13.2.1 請編程實現斐波拉契數列問題 423
13.2.2 請設計窗口程序演示八皇後問題 425
13.3 名企面試真題 432
13.4 小結 432
第14章 .NET中的單元測試 433
單元測試是軟體開發中必不可少的一個環節,單元測試的優劣直接影響到集成測試、系統測試的效果,甚至會影響到最終產品的質量。大多數開發團隊對單元測試非常重視,並且要求程序員掌握相應的知識。本章將覆蓋在.NET面試中經常出現的關於單元測試的面試題。
14.1 單元測試基礎概念 433
14.1.1 請簡述單元測試的作用和其優點 433
14.1.2 請舉例說明TDD開發方式的流程 434
14.1.3 請編寫實現階乘功能模塊的測試用例 437
14.2 使用NUNIT進行單元測試 439
14.2.1 如何使用NUNIT來進行單元測試 439
14.2.2 如何對NUNIT的測試用例進行分類 442
14.2.3 請解釋SetUp、TearDown、TestFixtureSetUp和
TestFixtureTearDown 446
14.3 名企面試真題 448
14.4 小結 448

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

多線程的單例問題非常類似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;
}
}

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

F. 有兩道Java多線程的面試題能不能幫我看看

還有一道題,多線程共同掃描DNA,主線程在多線程中啟動scanDNA方法,每個線程都有一個私有的dnaList,每個線程共享一個「results」對象來向主線程報告進度,成功掃描次數必須精確。請改正和修改scanDNA方法以提高任務性能。

private interface DNA {
public boolean scan();
}
public void scanDNA(List<DNA> dnaList, Properties results)
synchronized (results) {
Iterator<DNA> i = dnaList.iterator();
Object lock = new Object();
while (i.hasNext()) {
if (i.next().scan()) {
String key = "Successful Scans Performed";
synchronized (lock) {
results.setProperty(key,
String.valueOf(Integer.valueOf(results.getProperty(key)) + 1));
}
}
}
}
}

G. PHP面試題:什麼是多線程編程

https://..com/question/687818673298479564.html

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

不是,前提是你又足夠的空間或者速度。比如說一條路,很多車要過,要是路很寬的話,當時是很多車一起過才效率高了,但是要是路很窄的話,那肯定是不能很多車一起過的了。就好想現在還在研究超級電腦,大型的那種數據系統,普通的電腦就是單線程來處理也不夠用啊!

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

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

J. java面試題:請用多線程顯示,每三個數字為一組,直到30.


publicclassTest{
publicstaticObjectobj=newObject();
publicstaticvoidmain(String[]args){
newA().start();
newB().start();

}
}

classAextendsThread{
publicvoidrun(){
try{
synchronized(Test.obj){
for(inti=1;i<31;i+=6){
Test.obj.notify();
System.out.println("線程A:"+i);
System.out.println("線程A:"+(i+1));
System.out.println("線程A:"+(i+2));
Test.obj.wait();
}
}
}catch(Exceptione){
e.printStackTrace();
}
}
}

classBextendsThread{
publicvoidrun(){
try{
synchronized(Test.obj){
for(inti=4;i<31;i+=6){
Test.obj.notify();
System.out.println("線程B:"+i);
System.out.println("線程B:"+(i+1));
System.out.println("線程B:"+(i+2));
Test.obj.wait();
}
}
}catch(Exceptione){
e.printStackTrace();
}
}
}

閱讀全文

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

熱點內容
用紙做解壓玩具不用澆水 瀏覽:582
谷輪壓縮機序列號 瀏覽:734
牛頓插值法編程 瀏覽:364
php多用戶留言系統 瀏覽:727
安卓和蘋果如何切換流量 瀏覽:703
怎麼知道dns伺服器是多少 瀏覽:976
5995用什麼簡便演算法脫式計算 瀏覽:918
電腦上如何上小米雲伺服器地址 瀏覽:921
手機資料解壓密碼 瀏覽:444
44引腳貼片單片機有哪些 瀏覽:692
阿里程序員腦圖 瀏覽:189
廣東編程貓學習班 瀏覽:708
上海數控編程培訓學校 瀏覽:313
怎麼下載我的解壓神器 瀏覽:634
lib文件無用代碼會編譯嗎 瀏覽:28
我的世界嗨皮咳嗽伺服器怎麼下 瀏覽:1002
mvn命令順序 瀏覽:978
車貸還完多少時間解壓 瀏覽:965
java頁面開發 瀏覽:820
學編程的小發明 瀏覽:25