0_1面向對象

基本套路

  1. 題目描述
    • 往往非常簡單,如:設計一個XX系統。或者:你有沒有用過XXX,給你看一下它的界面和功能,你來設計一個。
  2. 闡述題意
    • 面試者需向面試官詢問系統的具體要求。如,需要什么功能,需要承受的流量大小,是否需要考慮可靠性,容錯性等等。
  3. 面試者提供一個初步的系統設計
  4. 面試官這對初步的系統中提出一些后續的問題:如果要加某個功能怎么辦,如果流量大了怎么辦,如何考慮一致性,如果機器掛了怎么辦。
  5. 面試者根據面試官的后續問題逐步完善系統設計
  6. 完成面試

總體特點是以交流為主,畫圖和代碼為輔。

根據我們面試別人和參與面試的經驗,先從面試官的角度給出一些考量標準:

  • 適應變化的需求(Adapt to the changing requirements )
  • 設計干凈,優美,考慮周到的系統(Produce a system that is clean, elegant, well thought )
  • 解釋為何這么實現(Explain why you choose this implementation )
  • 對自己的能力水平很熟練(Be familiar with your experience level to make decisions )
  • 在一些高層結構和復雜性方面有設計(Answer in high level of scale and complexity )

按照評分體系的化,分成下面4個等級

 

其實大家大可不必追求完美,在真正的面試中,沒有人能對答如流,往往面試官也會給出善意的提示,就算你沒回答某個子問題,在面試后的評價中也會綜合衡量,跟其他的面試者比較,最終打出一個分數

解題策略

Abstractions, Object and Decoupling

通常,關于OOP,面試官會讓面試者設計一個程序框架,該程序能夠實現一些特定的功能。比如,如何實現一個音樂播放器,如何設計一個車庫管理程序等等。對于此類問題,設計的關鍵過程一般包括抽象(abstraction),設計對象(object)和設計合理的層次/接口(decoupling)。這里,我們舉一個例子簡單說明這些過程分別需要做些什么,在“模式識別”給出更為具體和完整的實例。

繼承/組合/參數化類型

在面向對象中最常用的兩種代碼復用技術就是繼承和組合。在設計對象的時候,“Is-A”表示一種繼承關系。比如,班長“Is-A”學生,那么,學生就是基類,班長就是派生類。在確定了派生關系之后,我們需要分析什么是基類變量(base class variables)什么是子類變量(sub class variables),并由此確定基類和派生類之間的聯系。而“Has-A”表示一種從屬關系,這就是組合。比如,班長“Has-A”眼鏡,那就可以解釋為班長實例中擁有一個眼鏡實例變量(instance variable)。在具體實現的時候,班長類中定義一個眼鏡的基類指針。“在生成班長實例的時候,同時生成一個眼鏡實例,利用眼鏡的基類指針指向這個實例。任何關于眼鏡的操作函數都可以利用這個基類指針實現多態(polymorphism)。注意,多態是OOP相關的一個重要概念,也是面試常考的概念之一。關于多態的解釋請見“工具箱”。

在通常情況下,我們更偏向于“Has-A”的設計模式。因為該模式減少了兩個實例之間的相關性。對于繼承的使用,通常情況下我們會定義一個虛基類,由此派生出多個不同的實例類。在業界的程序開發中,多重繼承并不常見,Java甚至不允許從多個父類同時繼承,產生一個子類。

此外,我們還要提及參數化類型。參數化類型,或者說模版類也是一種有效的代碼復用技術。在C++的標準模版庫中大量應用了這種方式。例如,在定義一個List的變量時,List被另一個類型String所參數化。

設計模式著重于代碼的復用,所以在選擇復用技術上,有必要看看上述三種復用技術優劣。

繼承

  • 通過繼承方式,子類能夠非常方便地改寫父類方法,同時
  • 保留部分父類方法,可以說是能夠最快速地達到代碼復用。
  • 繼承是在靜態編譯時候就定義了,所以無法再運行時刻改寫父類方法。
  • 因為子類沒有改寫父類方法的話,就相當于依賴了父類這個方法的實現細節,被認為破壞封裝性。<

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/910115.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/910115.shtml
英文地址,請注明出處:http://en.pswp.cn/news/910115.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mumu模擬器鼠標側鍵返回

把圖片中的“點擊鼠標右鍵“操作換成點側鍵 參考文章&#xff1a;你們要的鼠標右鍵返回來啦【mumu模擬器吧】_百度貼吧

軟件公司進軍無人機領域的戰略指南與生態合作全景-優雅草卓伊凡

軟件公司進軍無人機領域的戰略指南與生態合作全景-優雅草卓伊凡 那么找到細分領域我們應該如何開始真正加入無人機開發的梯隊呢&#xff0c;卓伊凡看了大疆創新加入成為認證開發者也是非常不錯的選擇。 引言&#xff1a;無人機產業的黃金機遇 根據德勤2023年全球無人機解決方…

鍵盤覺醒:Raycast 把 Mac 變成「AI 指令戰艦」

在 Mac 上追逐效率的腳步&#xff0c;從未停歇。從早期的 Alfred 到系統內置的 Spotlight&#xff0c;這些工具雖好用&#xff0c;卻總讓人覺得功能邊界清晰&#xff0c;變化有限。直到 Raycast 出現&#xff0c;徹底重塑了這個品類的想象空間。它集啟動應用、查找文件、單位換…

宇宙盡頭是WPS之——【Excel】一個自動重新排序的宏

1. 目的 你是否在做一個表格排序&#xff0c;但只能知道某幾個行之間的相對順序&#xff0c;而可能排著排著發現后面還有順序更靠前的項&#xff0c;而不得不將排好的序號重新11…… 所以你需要一個宏&#xff0c;它可以知道你輸入了一個已經存在的序號&#xff0c;并以那個序…

Sharding-jdbc使用(一:水平分表)

說明&#xff1a;Sharding-jdbc是常見的分庫分表工具&#xff0c;本文介紹Sharding-jdbc的基礎使用。 分庫分表 首先&#xff0c;介紹一下分庫分表&#xff1a; &#xff08;1&#xff09;分庫 水平分庫&#xff1a;以字段為依據&#xff0c;按照一定策略&#xff08;hash、…

處理器指令中的函數調用指令是什么?

處理器指令中的函數調用指令是什么? 函數調用指令是處理器指令集中用于實現函數(或子程序)調用和返回的專用指令。它們是支持結構化編程和代碼復用的硬件基礎。核心指令通常包括: 調用指令 (CALL / BL / BLX 等): 功能: 暫停當前函數的執行,跳轉到目標函數(被調用函數)…

CHASE、CoSQL、SPARC概念介紹

CHASE&#xff1a;一個跨領域多輪交互text2sql中文數據集&#xff0c;包含5459個多輪問題組成的列表&#xff0c;一共17,940個<query, SQL>二元組&#xff0c;涉及280個不同領域的數據庫。CoSQL&#xff1a;一個用于構建跨域對話文本到sql系統的語料庫。它是Spider和SPar…

設備巡檢系統小程序ThinkPHP+UniApp

基于ThinkPHP和Uniapp開發的設備巡檢系統&#xff0c;可應用于電力、水利、物業等巡檢場景&#xff0c;可編譯微信小程序。提供全部無加密源碼&#xff0c;可私有化部署。 ?功能特性 部門管理 后臺可以設置多部門&#xff0c;便于篩選員工 員工管理 后臺維護員工信…

Visual Studio Code 1.101下載

[軟件名稱]: Visual Studio Code 1.101 [軟件大小]: 147 MB [下載通道]: 夸克盤 | 迅雷盤 | 百度盤 &#x1f3af; 一、MCP&#xff08;Model Context Protocol&#xff09;全面升級 資源 Templates 支持 MCP 現在不僅能處理提示&#xff0c;還能識別和管理“資源模板”&…

linux的基本運維

grep 選項功能-r遞歸搜索子目錄-i忽略大小寫-n顯示行號-l只顯示文件名-v反轉匹配&#xff08;顯示不包含的行&#xff09;-w全詞匹配-E使用擴展正則表達式–include指定文件類型 --include*.{js,py}–exclude排除文件類型 --exclude*.log–exclude-dir排除目錄 --exclude-dir{…

c++11右值引用(rvalue reference)

右值引用&#xff08;rvalue reference&#xff09;是 C11 引入的一個新特性&#xff0c;主要用于支持移動語義&#xff0c;優化資源的管理&#xff0c;尤其是在進行資源轉移時避免不必要的拷貝操作。右值引用通過 && 符號進行表示。 1. 右值引用的基本概念 右值&…

【算力網絡】算網安全

一、算網安全概念 算力網絡與網絡空間安全的結合設計需構建“內生安全、智能調度、動態防護”的一體化體系&#xff0c;而SRv6安全服務鏈正是實現該目標的核心技術路徑。 1.1、算力網絡安全架構設計 1.1.1 體系化架構思路與方法體系 1. ?分層安全架構&#xff08;“三橫一…

傳輸層協議UDP/TCP

目錄 UDP協議 UDP協議段格式 UDP緩沖區 TCP協議 TCP協議段格式 確認應答機制 超時重傳機制 連接管理機制 連接建立&#xff08;三次握手&#xff09; 連接關閉&#xff08;四次揮手&#xff09; 滑動窗口 流量控制 擁塞控制 延遲應答 捎帶應答 UDP協議 UDP協議…

華為OD-2024年E卷-找終點[100分] -- python

問題描述&#xff1a; 給定一個正整數數組&#xff0c;設為nums&#xff0c;最大為100個成員&#xff0c;求從第一個成員開始&#xff0c;正好走到數組最后一個成員&#xff0c;所使用的最少步驟數。要求: 第一步必須從第一元素開始&#xff0c;且1<第一步的步長<len/2…

ARINC653分區調度算法的研究與改進

# ARINC653分區調度算法的研究與優化&#xff1a;從單核到多核的實時性保障 ## 1 研究背景與意義 航空電子系統經歷了從**聯合式架構**到**綜合模塊化航空電子**&#xff08;Integrated Modular Avionics, IMA&#xff09;架構的重大演變。在這一演變過程中&#xff0c;ARINC…

Vue-8-前端框架Vue之應用基礎響應式數據和計算屬性

文章目錄 1 響應式數據1.1 ref創建基本類型的響應式數據1.2 reactive創建對象類型的響應式數據1.2.1 汽車示例(對象{})1.2.2 游戲示例(數組[])1.2.3 深層示例1.3 ref創建對象類型的響應式數據1.4 ref對比reactive1.4.1 區別和使用原則1.4.2 reactive重新分配新對象1.4.3 ref重新…

Kotlin - 邊界控制 coerceIn、coerceAtLeast、coerceAtMost

一、概念 當需要對數值進行范圍限制時&#xff0c;通常會用 if() else if() else&#xff0c;這樣會寫很多判斷&#xff0c;使用 coerceXXX() 函數來簡化&#xff0c;適用于實現了 Comparable 接口的對象。 coerceIn() public fun <T : Comparable<T>> T.coerceIn(…

Day02_數據結構(手寫)

01.畫圖 02.按位置查找返回元素的值 //11.按位置查找后返回元素的值 int find_pos(node_p H,int pos) { if(HNULL){return -1;} if(pos<0){ …

1.2 人工智能的分類

人工智能的類型 ANI 無需明確設計即可構建或訓練&#xff0c;以執行特定任務或解決特定問題的智能系統。也被稱為弱人工智能&#xff0c;因為它不具備全面的通用智能能力。 典型應用&#xff1a; 語音助手&#xff0c;圖像識別系統、自動駕駛、機器人等。 大語言模型ChatGPT …

熱點Key拆分方案實現

熱點Key拆分方案實現 一、核心拆分策略 熱點Key拆分的核心思想是將單個高頻訪問Key分解為多個子Key&#xff0c;分散存儲到不同Redis節點&#xff0c;降低單節點壓力。以下是具體實現方案&#xff1a; 二、實現方式 1. 業務層哈希分片實現 創建Key分片工具類&#xff0c;通…