1. 程式人生 > 其它 >高階軟體工程師(面試題)

高階軟體工程師(面試題)

高階軟體工程師(面試題)

出題者:netkiller

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

高階軟體工程師

下面的面試題不分語言,適用於所有程式語言,更多偏向設計。

設計一個分類功能

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

要求:

  1. 無限極分類,層次深度不限
  2. 快速檢索,不能使用遞迴
  3. 只能使用一個數據庫表實現
  4. 可以生成樹形目錄

商品以及屬性功能的設計

一個商品有很多屬性,例如尺寸,顏色這些屬性有固定的值,而另一些屬性如重量,體積是需要填寫具體數值的,並且還有對應的單位。

要求:

  1. 商品分類(上一個問題中已經實現)
  2. 商品屬性,有多個屬性,且數目不確定,所以需要設計成可以無限新增
  3. 商品屬性即可下拉選擇,也可以填寫具體數值

問題:

  1. 商品搜尋怎麼解決,包含商品名稱,屬性,屬性值,描述的搜尋
  2. 商品的庫存怎麼設計
  3. 分類搜尋,怎樣列出所有子分類以及子分類下的所有分類(無限深度)

使用者註冊的功能需求

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

  1. 使用者放棄註冊
  2. 網路連線失敗
  3. 提交出錯
  4. 其他連結吸引了使用者點選

等等原因......

需求:

  1. 要求記錄使用者填寫資料,再次回來(數日/數月後)點選註冊的時候,使用者不用重新填寫所有資料,只需完成未完成的部分即可。
  2. 重要資料例如手機,電郵,即時通訊號碼等等需要記錄到資料庫,已被公司回訪客戶。
  3. 在使用者成功註冊後應該刪除之前保留在資料庫中的手機,電郵,即時通訊等等。

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

事務處理相關

簡述什麼是事務處理?

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

  1. 怎樣解決避免多個使用者讀讀取同一條資料記錄?
  2. 怎樣避免多個使用者更新同一條資料

模擬題一

例如有一個電商網站每個小時有100個使用者下單,公司需要有10個客服處理使用者的訂單。

問題:

  1. 當10位員工進入admin後臺,檢視訂單會出現什麼問題?
  2. 怎樣防止一個訂單被一個以上的人看到?
  3. 如果兩個員工同事看到同一個個訂單,怎樣避免員工,重複審批同一張訂單?
  4. 如果訂單X最先被員工A點開,這是員工A去忙其他事情,X定點就會一直掛起,怎樣將訂單重新分配?

開發框架

  1. 簡述 MVC 原理以及實現
  2. 怎樣實現 URL 路由
  3. 怎樣實現類,方法訪問許可權控制

請問下面程式碼怎麼實現?

用你最熟悉的語言實現。

{% highlight java %}

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)

{% endhighlight %}

程序與多執行緒

  1. 什麼是阻塞,什麼是非阻塞?
  2. 什麼是同步,什麼是非同步?
  3. 什麼情況下使用執行緒鎖?
  4. 程序與執行緒的區別?
  5. 程序間通訊有那幾種,執行緒通訊有那幾種,以及各自的優勢?

訊息佇列

訊息有哪些瓶頸?

序列化

  1. 什麼是序列化
  2. 常用序列化方式都有哪些

CDN應用

  1. CDN 快取的原理?
  2. CDN 都可能快取那些內容?
  3. 網站首頁90%的內容是靜態的,但是使用者登入狀態,訊息狀態是動態的怎麼解決?
  4. JSON 可能快取嗎?
  5. 瀏覽器快取與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 問題

  1. 什麼是 CQRS
  2. 可以在那些地方處理 CQRS

請為 Restful 增加 HTTP Auth

  1. 怎樣為 Restful 增加 HTTP 認證
  2. 增加 http 認證有哪些方式
  3. 使用者與密碼安全嗎?

使用 SSL 加密 Restful

  1. 購買的證書與自己生成的證書有什麼區別
  2. SSL 怎樣配置,在哪裡配置
  3. 訪問 SSL 的 Restful 需要注意什麼

資料庫應用

資料庫分割問題

  1. 什麼是順平分割,什麼是垂直分割
  2. 分表,分庫有需要主要那些事項
  3. 分表,分庫後怎麼解決誇庫查詢
  4. 分表,分庫後怎麼建立索引

資料庫複製問題

  1. 資料庫複製有哪幾種?
  2. 簡述主從複製,主主複製,環形複製
  3. 當選擇主從複製是軟體開發上有哪些注意事項
  4. 主主如何應用

軟體彈性設計

編譯語言的彈性設計問題

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

我的問題:

  1. 怎樣在這個系統的設計之初解決後面遇到的問題
  2. 如何設計一個彈性打折系統
  3. 在不重啟的情況下怎樣改編編譯語言的內部執行邏輯

問題延伸: 這個問題可以延伸到蘋果IOS,例如釋出app到蘋果appstore至少需要半個月,半個月可能存在很多變數,很可能應用被審批通過,程式已經不在適合當前的情況了。

高可用設計

  1. 什麼是高可用
  2. 什麼是雙機熱備,雙機熱備有那些缺陷
  3. 什麼是雙活
  4. 請簡述實現軟體高可用要考慮那些因素

軟體設計中的災備問題

請簡述設計一個遠端異地災備系統

  1. 兩個機房怎樣設計災備系統
  2. 三個機房怎樣設計災備系統
  3. 跨境情況需要考慮那些影響因素

軟體災備開發問題

  1. 資料庫怎樣實現災備
  2. 快取怎樣實現災備
  3. 應用伺服器怎樣實現災備
  4. Web 伺服器怎樣實現災備
  5. 計劃任務、定時週期執行的程式怎樣災備
  6. 訊息佇列怎樣實現災備
  7. 雙活的軟體怎樣實現同一時刻只能一個執行,或者交替執行

軟體部署問題

  1. 怎樣實現軟體自動化部署,實現自動化部署的關鍵幾點是什麼?
  2. 怎樣處理配置檔案
  3. 怎樣排除不必要或者不希望部署的檔案
  4. 怎樣實現增量部署
  5. 怎樣實現差異部署
  6. 怎樣部署大檔案,例如視訊等。問題:有一個檔案有500M,內容隨時有修改,也會不定期追加,怎樣實現差異部署,而不是再次釋出一個500M的檔案。
  7. 怎樣部署編譯軟體
  8. 怎樣備份
  9. 怎樣部署windows程式
  10. 怎樣快速回撤,切換時間點或者指定的版本。

以上不允許使用GIT/SVN實現自動部署。要求自動化不是在30秒內完成。

軟體開發框架

外掛的實現原理

  1. 外掛有幾部分組成
  2. 如何實現外掛安裝,解除安裝,啟用,禁用?
  3. 安裝,解除安裝,啟用,禁用怎樣實現不停機,不關閉服務的情況進行?

口述如何設計一個MVC框架

  1. 怎樣實現 URL 路由
  2. 怎樣實現控制器
  3. 怎樣實現檢視
  4. 怎樣實現模型

口述如何設計一個SOA框架

  1. 框架分為幾個部分?
  2. 採用什麼協議與框架通訊?
  3. 如果考慮到效能使用二進位制協議你怎樣實現?
  4. 如何解決併發衝突?
  5. 如何支援事務?
  6. 你怎樣與訊息佇列整合或者通訊?

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

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

設計要求:能夠實現高可用,負載均衡,橫向擴充套件

  1. 怎樣處理同時執行產生的衝突問題?
  2. 怎樣排隊執行?
  3. 任務如何持久化?
  4. 一個節點宕機,另一個節點怎麼接管沒有完成的任務?
  5. 如何橫向擴充套件?
  6. 擴充套件,收縮,維護如果能做到不停機,不影響業務?