架構師考題

出題者:netkiller面試

出處:http://www.netkiller.cn/ajax

下面的面試題不分語言,適用於全部編程語言,更多偏向設計。數據庫

設計一個分類功能

該功用於行政區域劃分,商品分類,等等 例如中國->廣東-深圳 .....編程

要求:windows

  • 無限極分類,層次深度不限瀏覽器

  • 快速檢索,不能使用遞歸緩存

  • 只能使用一個數據庫表實現安全

  • 能夠生成樹形目錄服務器

商品以及屬性功能的設計

一個商品有不少屬性,例如尺寸,顏色這些屬性有固定的值,而另外一些屬性如重量,體積是須要填寫具體數值的,而且還有對應的單位。網絡

要求:

  • 商品分類(上一個問題中已經實現)

  • 商品屬性,有多個屬性,且數目不肯定,因此須要設計成能夠無限添加

  • 商品屬性便可下拉選擇,也能夠填寫具體數值

問題:

  • 商品搜索怎麼解決,包含商品名稱,屬性,屬性值,描述的搜索

  • 商品的庫存怎麼設計

  • 分類搜索,怎樣列出全部子分類以及子分類下的全部分類(無限深度)

用戶註冊的功能需求

場景模擬:
用戶開戶註冊時經常填寫了一部分資料,就離開了,有幾種狀況

  • 用戶放棄註冊

  • 網絡鏈接失敗

  • 提交出錯

  • 其餘連接吸引了用戶點擊

  • 等等緣由......

需求:

  • 要求記錄用戶填寫資料,再次回來(很多天/數月後)點擊註冊的時候,用戶不用從新填寫全部資料,只需完成未完成的部分便可。

  • 重要資料例如手機,電郵,即時通信號碼等等須要記錄到數據庫,已被公司回訪客戶。

  • 在用戶成功註冊後應該刪除以前保留在數據庫中的手機,電郵,即時通信等等。

請問如何實現?資料怎樣保存?

事務處理相關

簡述什麼是事務處理?

在不能使用數據庫的事務處理以及鎖(表鎖/行級鎖)時,怎麼保持數據一致性?怎麼解決數據庫併發操做?

  • 怎樣解決避免多個用戶讀讀取同一條數據記錄?

  • 怎樣避免多個用戶更新同一條數據

模擬題一

例若有一個電商網站每一個小時有100個用戶下單,公司須要有10個客服處理用戶的訂單。

問題:

  • 當10位員工進入admin後臺,查看訂單會出現什麼問題?

  • 怎樣防止一個訂單被一個以上的人看到?

  • 若是兩個員工同事看到同一個個訂單,怎樣避免員工,重複審批同一張訂單?

  • 若是訂單X最早被員工A點開,這是員工A去忙其餘事情,X定點就會一直掛起,怎樣將訂單從新分配?

開發框架

  • 簡述 MVC 原理以及實現

  • 怎樣實現 URL 路由

  • 怎樣實現類,方法訪問權限控制

ORM

用你最熟悉的語言來實現DB、Field類。

DB db = new DB();
db.select(new Field("name","age"...)).from("user").where(new And("xxx=xx", "xxx=xxx")).limit(10).offset(10).orderby("id",DESC);

進程與多線程

  • 什麼是阻塞,什麼是非阻塞?

  • 什麼是同步,什麼是異步?

  • 什麼狀況下使用線程鎖?

  • 進程與線程的區別?

  • 進程間通訊有那幾種,線程通訊有那幾種,以及各自的優點?

消息隊列

消息有哪些瓶頸?

序列化

  • 什麼是序列化

  • 經常使用序列化方式都有哪些

CDN應用

  • CDN 緩存的原理?

  • CDN 均可能緩存那些內容?

  • 網站首頁90%的內容是靜態的,可是用戶登陸狀態,消息狀態是動態的怎麼解決?

  • JSON 可能緩存嗎?

  • 瀏覽器緩存與CDN緩存的關係,怎樣實現用戶瀏覽器與CDN同時緩存?

面向對象試題

編寫一個求和程序

s = new Sum();
s.add(10).add(5).add(6)

s.add(10).add(5).add(6)......add(3) 能夠無限的寫下去

obj = new Object()
obj.a()
obj.b()
obj.c()
...
...
obj.z()

obj.a().b().c() ... z()

這是 一個簡單的 OOP 面試題,在作多年的面試經驗中,發現不少人不知道怎樣實現上面的問題

Restfull 試題

Restfull 是基於HTTP協議的RPC系統,對於公共服務不存在安全上面的考慮,調用方法也可能是ajax,因此公共系統是開放的。

若是是私有服務,就須要考慮安全問題了,試題以下:

CQRS 問題

  • 什麼是 CQRS

  • 能夠在那些地方處理 CQRS

請爲 Restful 增長 HTTP Auth

  • 怎樣爲 Restful 增長 HTTP 認證

  • 增長 http 認證有哪些方式

  • 用戶與密碼安全嗎?

使用 SSL 加密 Restful

  • 購買的證書與本身生成的證書有什麼區別

  • SSL 怎樣配置,在哪裏配置

  • 訪問 SSL 的 Restful 須要注意什麼

數據庫應用

數據庫分割問題

  • 什麼是水平分割,什麼是垂直分割

  • 分表,分庫有須要主要那些事項

  • 分表,分庫後怎麼解決誇庫查詢

  • 分表,分庫後怎麼建立索引

數據庫複製問題

  • 數據庫複製有哪幾種?

  • 簡述主從複製,主主複製,環形複製

  • 當選擇主從複製是軟件開發上有哪些注意事項

  • 主主如何應用

軟件彈性設計

編譯語言的彈性設計問題

背景模擬:
有一個電商平臺已經開發完畢,編譯打包,上線,運營。 因爲市場瞬息萬變,原有的打折系統設計已經不能知足如今的需求,若是不修改可會會給公司帶來經濟隨時。 如今須要從新修改程序邏輯,但問題來了。目前正在作推廣促銷活動,系統訪問量大不能中斷現有服務,哪怕30都會給公司帶來不可挽回的損失。

個人問題:

  • 怎樣在這個系統的設計之初解決後面遇到的問題

  • 如何設計一個彈性打折系統

  • 在不重啓的狀況下怎樣改編編譯語言的內部運行邏輯

問題延伸:
這個問題能夠延伸到蘋果IOS,例如發佈app到蘋果appstore至少須要半個月,半個月可能存在不少變數,極可能應用被審批經過,程序已經不在適合當前的狀況了。

高可用設計

  • 什麼是高可用

  • 什麼是雙機熱備,雙機熱備有那些缺陷

  • 什麼是雙活

  • 請簡述實現軟件高可用要考慮那些因素

軟件設計中的災備問題

  • 數據庫怎樣實現災備

  • 緩存怎樣實現災備

  • 應用服務器怎樣實現災備

  • Web 服務器怎樣實現災備

  • 計劃任務、定時週期運行的程序怎樣災備

  • 消息隊列怎樣實現災備

  • 雙活的軟件怎樣實現同一時刻只能一個運行,或者交替運行

軟件部署問題

  • 怎樣實現軟件自動化部署,實現自動化部署的關鍵幾點是什麼?

  • 怎樣處理配置文件

  • 怎樣排除沒必要要或者不但願部署的文件

  • 怎樣實現增量部署

  • 怎樣實現差別部署

  • 怎樣部署大文件,例如視頻等。問題:有一個文件有500M,內容隨時有修改,也會不按期追加,怎樣實現差別部署,而不是再次發佈一個500M的文件。

  • 怎樣部署編譯軟件

  • 怎樣備份

  • 怎樣部署windows程序

  • 怎樣快速回撤,切換時間點或者指定的版本。
    以上不容許使用GIT/SVN實現自動部署。要求自動化不是在30秒內完成。

軟件開發框架

插件的實現原理

  • 插件有幾部分組成

  • 如何實現插件安裝,卸載,啓用,禁用?

  • 安裝,卸載,啓用,禁用怎樣實現不停機,不關閉服務的狀況進行?

口述如何設計一個MVC框架

  • 怎樣實現 URL 路由

  • 怎樣實現控制器

  • 怎樣實現視圖

  • 怎樣實現模型

口述如何設計一個SOA框架

  • 框架分爲幾個部分?

  • 採用什麼協議與框架通訊?

  • 若是考慮到性能使用二進制協議你怎樣實現?

  • 如何解決併發衝突?

  • 如何支持事務?

  • 你怎樣與消息隊列集成或者通訊?

口述設計一個分佈式計劃任務系統

背景:
計劃任務即週期或定時運行的程序,咱們要解決單點故障問題與負載均衡的問題,在一個分佈式系統中單節點是不容許的。

設計要求:
可以實現高可用,負載均衡,橫向擴展

  • 怎樣處理同時運行產生的衝突問題?

  • 怎樣排隊運行?

  • 任務如何持久化?

  • 一個節點宕機,另外一個節點怎麼接管沒有完成的任務?

  • 如何橫向擴展?

  • 擴展,收縮,維護若是能作到不停機,不影響業務?

相關文章
相關標籤/搜索