面試整理 一)

2021-06-09 13:26:11 字數 1698 閱讀 5383

1.如何理解物件導向的思想?

物件導向是為了解決系統的可維護性,可擴充套件性,可重用性,我們再進一步思考,物件導向為什麼能解決系統的可維護性,可擴充套件性,可重用性? 

物件導向產生的歷史原因有下面兩點: 

1、 計算機是幫助人們解決問題的,然而計算機終究是個機器,他只會按照人所寫的**,一步一步的執行下去,最終得到了結果,因此無論程式多麼的複雜,計算機總是能輕鬆應付,結構化程式設計,就是按照計算機的思維寫出的**,但是人看到這麼複雜的邏輯,就無法維護和擴充套件了。

2、 結構化設計是以功能為目標來設計構造應用系統,這種做法導致我們設計程式時,不得不將客體所構成的現實世界對映到由功能模組組成的解空間中,這種轉換過程,背離了人們觀察和解決問題的基本思路。 

可見結構化設計在設計系統的時候,無法解決重用、維護、擴充套件的問題,而且會導致邏輯過於複雜,**晦澀難懂。於是人們就想,能不能讓計算機直接模擬現實的環境,用人類解決問題的思路,習慣,步驟來設計相應的應用程式?這樣的程式,人們在讀它的時候,會更容易理解,也不需要再把現實世界和程式世界之間來回做轉換。 

與此同時,人們發現,在現實世界中存在的客體是問題域中的主角,所謂客體是指客觀存在的物件實體和主觀抽象的概念,這種客體具有屬性和行為,而客體是穩定的,行為不穩定的,同時客體之間具有各種聯絡,因此面向客體程式設計,比面向行為程式設計,系統會更穩定,在面對頻繁的需求更改時,改變的往往是行為,而客體一般不需要改變,所以我們就把行為封裝起來,這樣改變時候只需要改變行為即可,主架構則保持了穩定。 

於是物件導向就產生了。 

然而人們追求的系統可維護性,可擴充套件性,可重用性又是怎麼在物件導向中體現出來的呢? 

首先看看物件導向的三大特徵: 

封裝:找到變化並且把它封裝起來,你就可以在不影響其它部分的情況下修改或擴充套件被封裝的變化部分,這是所有設計模式的基礎,就是封裝變化,因此封裝的作用,就解決了程式的可擴充套件性。 

繼承:子類繼承父類,可以繼承父類的方法及屬性,實現了多型以及**的重用,因此也解決了系統的重用性和擴充套件性,但是繼承破壞了封裝,因為他是對子類開放的,修改父類會導致所有子類的改變,因此繼承一定程度上又破壞了系統的可擴充套件性,所以繼承需要慎用,只有明確的is-a關係才能使用,同時繼承在在程式開發過程中重構得到的,而不是程式設計之初就使用繼承,很多物件導向開發者濫用繼承,結果造成後期的**解決不了需求的變化了。因此優先使用組合,而不是繼承,是物件導向開發中乙個重要的經驗。 

多型:介面的多種不同的實現方式即為多型。介面是對行為的抽象,剛才在封裝提到,找到變化部分並封裝起來,但是封裝起來後,怎麼適應接下來的變化?這正是介面的作用,介面的主要目的是為不相關的類提供通用的處理服務,我們可以想象一下。比如鳥會飛,但是超人也會飛,通過飛這個介面,我們可以讓鳥和超人,都實現這個介面,這就實現了系統的可維護性,可擴充套件性。 

製造汽車的過程是面向過程,完成的汽車是個物件,它封裝了很多的功能

2.malloc與new的區別?

1,malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。 

2,對於非內部資料型別的物件而言,光用maloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任務強加於malloc/free。 

3,malloc 返回void *,需要顯示的進行型別轉換

4,c++程式經常要呼叫c函式,而c程式只能用malloc/free管理動態記憶體

面試趣味題整理(一)

題目 房間裡有三盞燈,屋外有三個開關,分別控制這三盞燈,只有進入房間,才能看到哪乙個電燈是亮的。請問如何只進入房間一次,就能指明哪乙個開關控制哪乙個燈。程式設計之美 解答 開兩個燈 一段時間後關掉乙個 進去後乙個亮的 兩個不亮的 不亮的裡面有乙個發熱的 亮過的會熱 題目 每個飛機只有乙個油箱,飛機之...

面試題整理一

1說一下route!2 html5新特性 3 git和 svn 的區別 4 git獲取分支屬性是什麼?5談一下你對vuex的理解?你理解的大型應用是什麼?在vuex裡面同步和非同步執行是什麼?6 html頁面渲染過程!7 webpack的底層原理是什麼!8說一下sass 和less的語法?第一題 路...

hadoop面試題整理 一

一.問答 1.簡單描述如何安裝配置乙個apache開源版hadoop,只描述即可,無需列出完整步驟,能列出步驟更好。1 安裝jdk並配置環境變數 etc profile 2 關閉防火牆 3 配置hosts檔案,方便hadoop通過主機名訪問 etc hosts 4 設定ssh免密碼登入 5 解壓縮h...