1. 程式人生 > >面試題:談談對程序的理解?談談你對執行緒的理解?2.程序死鎖的原因?如何解決程序死鎖?

面試題:談談對程序的理解?談談你對執行緒的理解?2.程序死鎖的原因?如何解決程序死鎖?

2.談談對程序的理解?

答:首先程序是指在系統中正在執行的一個應用程式;程式一旦執行就是程序,或者更專業化來說:程序是指程式執行時的一個例項,即它是程式已經執行到課中程度的資料結構的彙集。從核心的觀點看,程序的目的就是擔當分配系統資源(CPU時間、記憶體等)的基本單位,程序有五方面的特點:第一:動態性:程序的實質是程式的一次執行過程,程序是動態產生,動態消亡的。第二: 併發性:任何程序都可以同其他程序一起併發執行第三:獨立性:程序是一個能獨立執行的基本單位,同時也是系統分配資源和排程的獨立單位;第四:非同步性:由於程序間的相互制約,使程序具有執行的間斷性,即程序按各自獨立的、不可預知的速度向前推進

第五:結構特徵:程序由程式、資料和程序控制塊三部分組成。程序可以使用fork()函式來建立子程序也可以使用vfork()來實現程序,使用的時候注意不要產生殭屍程序和孤兒程序。

3.談談對執行緒的理解?

答:執行緒是系統分配處理器時間資源的基本單元,或者說程序之內獨立執行的一個單元執行流,執行緒有四方面特點:第一,執行緒有獨立的堆疊段,共享地址空間,開銷較小,切換速度較快。第二,執行緒間的通訊機制比較方便。第三,因為作業系統會保證當執行緒數不大於CPU數目時,不同的執行緒運行於不同的CPU上。執行緒使CPU系統更加有效。第四,執行緒改善了程式結構,避免了一些巢狀迴圈。使用pthread_create()函式來建立執行緒,使用執行緒的時候有兩點注意事項:第一,當多執行緒訪問同一全域性變數的時候,一定要加互斥量,也就是上鎖。當然最後不要忘記了解鎖。第二:正確處理執行緒結束的問題:因為一個執行緒的終止,執行緒的資源不會隨執行緒的終止釋放,我們需要呼叫pthread_join()

來獲得另一個執行緒的終止狀態並且釋放該執行緒所佔的資源。

2.程序死鎖的原因?如何解決程序死鎖?

答:首先呢程序有三態:執行狀態,就緒狀態,等待狀態。。程序因等待資源的時候而睡眠進入等待狀態,只有資源到來的時候才會喚醒進入就緒狀態,程序死鎖就會發生在這個階段,如果多個程序同時佔有對方需要的資源而同時請求對方的資源,而它們在得到請求之前不會釋放所佔有的資源,就會發生程序死鎖,也就是程序不同步。

原因有兩方面:1.系統能夠提供的資源個數比要求該資源的程序少,即系統資源不足

2.程序推進順序非法。

解決方案:因為程序死鎖的發生有四個條件:

1.互斥條件:資源不能被共享,只能由一個程序使用。

2.請求與保持條件:已經得到資源的程序可以再次申請新的資源。

3.非剝奪條件:已經分配的資源不能從相應的程序中被強制地剝奪。

4.迴圈等待條件:系統中若干程序組成環路,該環路中每個程序都在等待相鄰程序正佔用的資源。

所以我們可以從這幾個方面著手去解決:

第一:根據互斥條件和請求和保持條件,我們可以採用資源靜態分配策略,破壞"部分分配"條件;

第二:允許程序剝奪使用其他程序佔有的資源,從而破壞"不可剝奪"條件;

第三:採用資源有序分配法,破壞"環路"條件。當然我們也不是必須嚴格遵循這幾個必要條件去使用相對的側列,我們也可以使用死鎖檢測方法,對資源的分配不加限制,即允許死鎖的發生。但系統定時地執行一個"死鎖檢測"程式,判斷系統是否已發生死鎖,若檢測到死鎖發生則設法加以解除,可以使用資源剝奪法和撤銷程序法來解除死鎖。

相關推薦

一道試題通過wait和notify的兩個執行互動輸出thread1-1...thread1-5,thread2-6...thread2-10...

這是一道關於多執行緒的面試題,好久沒有做過這種多執行緒的題了,手有點生,那麼就來敲一敲 package threadDemo; /* * 多執行緒的交叉列印 */ public class

某團試題JVM 堆記憶體溢位後,其他執行是否可繼續工作?

轉載註明:http://dwz.win/gHc 最近網上出現一個美團面試題:“一個執行緒OOM後,其他執行緒還能執行嗎?”。我看網上出現了很多不靠譜的答案。這道題其實很有難度,涉及的知識點有jvm記憶體分配、作用域、gc等,不是簡單的是與否的問題。 由於題目中給出的OOM,java中OOM又分很多型別;比如:

mysql試題字段中@之前字符相同且大於等於2條的所有記錄

dex lec bst select wid from string sele 分享 公司發了一張面試題給我,題目如下: 在test數據庫中有個flow_user表,找出email字段中@之前字符相同且大於等於2條的所有記錄。最終效果如下: 答案: select

19. 中興試題輸入兩個整數n和m, 從數列1,2,...,n中任意選擇幾個數,使其和等於m, 要求編寫程式輸出所有的組合

2010年中興面試題程式設計求解:輸入兩個整數 n 和 m,從數列1,2,3.......n中隨意取幾個數, 使其和等於 m ,要求將其中所有的可能組合列出來. 分析: 可以使用遞迴思想, 從第n個數開始找其組合, 1)包括n的所有組合 2)不包括n的所有組合 把所有組

[七夕特供版]流年不利啊,才處理了執行死亡案件,這次更猛,程序連續了好幾個

# 前言 前兩天發了一篇,關於執行緒神祕死亡的,過程也諸多波折,也很有意思。 結果就在昨天,又遇到一起程序死亡案件,容我給大家細細道來。 我們有一臺專門定製的,供市場人員進行產品展示和推銷的pc(配置是挺不錯,英特爾i7 * 8核,32g記憶體);這是一臺pc,裝的win10系統,市場人員要展示的時候,

試題談談程序理解談談執行理解2.程序原因?如何解決程序

2.談談對程序的理解? 答:首先程序是指在系統中正在執行的一個應用程式;程式一旦執行就是程序,或者更專業化來說:程序是指程式執行時的一個例項,即它是程式已經執行到課中程度的資料結構的彙集。從核心的觀點看,程序的目的就是擔當分配系統資源(CPU時間、記憶體等)的基本單位,程序

試題談談vuex的理解

當面試官問我們對vuex的理解的時候,我們不能只說“vuex是一個專為vue.js應用程式開發的狀態管理模式”,儘量不要讓面試官連續追問(總會問到自己不會的然後說你實力還差那麼點來可以得降薪),應該從三個方面一次性去說清楚: 1.vuex是什麼? 2.為什麼要用vuex? 3.vuex的核心概念;

試題談談hibernate的理解

說說這類問題一般要和一個東西比較,說說他們的優點和缺點,hibernate就和JDBC比較唄,你就說說JDBC的優缺點,然後說說hibernate的優缺點,最後對比得出hibernate更好。 hibernate: 1、概念:ormapping    物件關係對映 1、操

【轉載】試題能不能談談,java GC是在什麼時候,什麼東西,做了什麼事情?”

面試題目:  地球人都知道,Java有個東西叫垃圾收集器,它讓建立的物件不需要像c/cpp那樣delete、free掉,你能不能談談: GC是在什麼時候,對什麼東西,做了什麼事情?   以上算是三個問題,下面逐一分析: 問題一回答:什麼時候? 1.系統空閒的時候。

試題能不能談談,java GC是在什麼時候,什麼東西,做了什麼事情?”

地球人都知道,Java有個東西叫垃圾收集器,它讓建立的物件不需要像c/cpp那樣delete、free掉,你能不能談談,GC是在什麼時候,對什麼東西,做了什麼事情?一.回答:什麼時候?1.系統空閒的時候。    分析:這種回答大約佔30%,遇到的話一般我就會準備轉向別的話題,譬如演算法、譬如SSH看看能否發掘

試題1,程序執行的區別?什麼時候用程序?什麼時候用執行?為什麼的專案中用的是執行?為什麼不用程序?如果只有程序這個專案有沒有影響?

答:首先得知道什麼是程序什麼是執行緒,我的理解是程序是指在系統中正在執行的一個應用程式;程式一旦執行就是程序,或者更專業化來說:程序是指程式執行時的一個例項,即它是程式已經執行到課中程度的資料結構的彙集。從核心的觀點看,程序的目的就是擔當分配系統資源(CPU時間、記憶體等)的

Node.js試題側重後端應用與Node核心的理解

node-interview-questions Node是搞後端的,不應該被被歸為前端,更不應該用前端的觀點去理解,去面試node開發人員。所以這份面試題大全,更側重後端應用與對Node核心的理解。 node開發技能圖解 node 事件迴圈機制 起源

試題說說ZooKeeper集群與Leader選舉的理解

服務器 定義 浪費 新增 lead lean 介紹 調度 代碼片段 ZooKeeper是一個開源分布式協調服務、分布式數據一致性解決方案。可基於ZooKeeper實現命名服務、集群管理、Master選舉、分布式鎖等功能。 高可用 為了保證ZooKeeper的可用性,在生產環

試題談談Date、Datetime、Time、Timestamp、year的區別嗎?

#### 一、 推薦閱讀 首發地址:https://mp.weixin.qq.com/s/9zKX86P4kzlKla6-NyS3EA 使用推薦閱讀,有更好的閱讀體驗 #### 二、準備 如果面試官問你:瞭解 date、datetime、time、timestamp、year 有什麼區別嗎?

java算法試題設計一個快速排序。雙路快速排序,簡單易於理解

面試題 != ava 思路 add bubuko 比較器 繼續 array package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Com

那些總是會問到的試題Spring依賴註入和控制反轉的理解

關系 頻率 平時 依賴對象 接受 一起 男女 就是 inversion IoC是什麽Ioc—Inversion of Control,即“控制反轉”,不是什麽技術,而是一種設計思想。在Java開發中,Ioc意味著將你設計好的對象交給容器控制,而不是傳統的在你的對象內部直接控

試題 面向切面程式設計(AOP)的理解

AOP是什麼?     AOP的全稱是Aspect Orient Programming,即面向切面程式設計。是對OOP(Object Orient Programming)的一種補充,戰門用於處理一些具有橫切性質的服務。常常用於日誌輸出、安全控制等。

試題字串單詞換,字串排序

    //字串單詞對換 $str = "str_arr"; echo $str."\n"; $arr = explode("_",$str); print_r($arr); $st

2018年10月24日 JS中 【“邏輯運算”,“試題作用域問題”,“dom象”】這些問題的意見見解

dcb stc ima 事件 代碼 客戶端 document model 變量 1、邏輯運算 || && ! ||:遇到第一個為true的值就中止並返回 &&:遇到第一個為false的值就中止並返回,如果沒有false值,就返回最後一個

一道試題說說程序執行的區別

在理解這些概念之前首選要對併發有一定的感性認識,如果伺服器同一時間內只能服務於一個客戶端,其他客戶端都再那裡傻等的話,可見其效能的低下估計會被客戶罵出翔來,因此併發程式設計應運而生,併發是網路程式設計中必須考慮的問題。實現併發的方式有多種:比如多程序、多執行緒、IO多路複用。 在理解這些概念