面試總結之MISC(操做系統,網絡,數學,軟件開發,測試,工具,系統設計)

操做系統

解釋堆和棧的區別。php

分配在堆的內存與分配在堆棧的內存有什麼不一樣html

  • 分配在堆的內存要手動去釋放

線程與進程的區別前端

多線程中棧與堆是公有的仍是私有的java

  • 在多線程環境下,每一個線程擁有一個棧和一個程序計數器。棧和程序計數器用來保存線程的執行歷史和線程的執行狀態,是線程私有的資源。
  • 其餘的資源(好比堆、地址空間、全局變量)是由同一個進程內的多個線程共享

mutexgit

  • mutex - C++ Reference
    • http://www.cplusplus.com/reference/mutex/mutex/?kw=mutex

condition variable程序員

  • condition_variable - C++ Reference
    • http://www.cplusplus.com/reference/condition_variable/condition_variable/

semophoregithub

deadlockweb

  • 在引入鎖的同時,咱們遇到了一個新的問題:死鎖(Deadlock)。死鎖是指兩個或多個線程/進程之間相互阻塞,以致於任何一個都不能繼續運行,所以也不能解鎖其餘線程/進程。例如,線程A佔有lock A,而且嘗試獲取lock B;而線程2佔有lock B,嘗試獲取lock A。此時,二者相互阻塞,都沒法繼續運行。
  • 總結產生死鎖的四個條件(只有當四個條件同時知足時纔會產生死鎖):
    • Mutual Exclusion – Only one process may use a resource at a time
    • Hold-and-Wait – Process holds resource while waiting for another
    • No Preemption – Can’t take a resource away from a process
    • Circular Wait – The waiting processes form a cycle
  • 如何處理死鎖問題:
    • 忽略該問題。例如鴕鳥算法,該算法能夠應用在極少發生死鎖的的狀況下。爲何叫鴕鳥算法呢,由於傳說中鴕鳥看到危險就把頭埋在地底下,可能鴕鳥以爲看不到危險也就沒危險了吧。跟掩耳盜鈴有點像。
    • 檢測死鎖而且恢復。
    • 仔細地對資源進行動態分配,以免死鎖。
    • 經過破除死鎖四個必要條件之一,來防止死鎖產生。

記一次面試:進程之間究竟有哪些通訊方式?面試

4 個場景詳解大廠面試中的死鎖問題正則表達式


網絡 

網絡協議_百度百科

  • https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/328636?fr=aladdin

網絡協議常見面試題集錦

TCP/IP

是否瞭解應用層通訊,通訊協議HTTP

你必定要知道,關於https的五大誤區

UDP/IP

socket

  • socket(計算機專業術語)_百度百科
    • https://baike.baidu.com/item/socket/281150?fr=aladdin

TCP/IP、Http、Socket的區別_百度經驗

  • http://jingyan.baidu.com/article/08b6a591e07ecc14a80922f1.html

面試環節:在瀏覽器輸入 URL 回車以後發生了什麼?

面試官問我:一個 TCP 鏈接能夠發多少個 HTTP 請求?

面試官問我:三次握手與四次揮手是怎麼完成的?

面試 | 你真的瞭解 HTTP 頭部麼?

Cookie、Session、Token那點事兒

一文完全搞懂cookie和session


數學 

估算2^24

  • 2^10 = 1024 ~ 10^3
  • 2^24 ~ 2^4 * 10^3 * 10^3 ~ 16 * 10^6

移動1位數字使等式成立3013=10

  • 0^3013=1

估算悉尼有多少輛Taxi


軟件開發

C# v.s. C++

Scripting language v.s. Compiling language

動態/靜態連接庫區別

  • 動態連接庫:在運行時加載
  • 靜態連接庫:在編譯時直接聯到可執行文件中
  • 動態連接庫和靜態連接庫的區別
    • http://blog.csdn.net/gamecreating/article/details/5504152
    • http://blog.sina.com.cn/s/blog_61ba4898010153zu.html

敏捷軟件開發 - 維基百科,自由的百科全書

Scrum

Test-driven development (TDD)

  • 測試驅動開發 - 維基百科,自由的百科全書
    • https://zh.wikipedia.org/wiki/%E6%B5%8B%E8%AF%95%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91
    • 測試驅動開發英語:Test-driven development,縮寫爲TDD)是一種軟件開發過程中的應用方法,由極限編程中倡導,以其倡導先寫測試程序,而後編碼實現其功能得名。測試驅動開發始於20世紀90年代。測試驅動開發的目的是取得快速反饋並使用「illustrate the main line」方法來構建程序。
    • 測試驅動開發是戴兩頂帽子思考的開發方式:先戴上實現功能的帽子,在測試的輔助下,快速實現其功能;再戴上重構的帽子,在測試的保護下,經過去除冗餘的代碼,提升代碼質量。測試驅動着整個開發過程:首先,驅動代碼的設計和功能的實現;其後,驅動代碼的再設計和重構。

Behavior-driven development(BDD)

BDD是第二代的、由外及內的、基於拉(pull)的、多方利益相關者的(stakeholder)、多種可擴展的、高自動化的敏捷方法。它描述了一個交互循環,能夠具備帶有良好定義的輸出(即工做中交付的結果):已測試過的軟件。

    • BDD的重點是經過與利益相關者的討論取得對預期的軟件行爲的清醒認識。它經過用天然語言書寫非程序員可讀的測試用例擴展了測試驅動開發方法。行爲驅動開發人員使用混合了領域中統一的語言的母語語言來描述他們的代碼的目的。這讓開發者得以把精力集中在代碼應該怎麼寫,而不是技術細節上,並且也最大程度的減小了將代碼編寫者的技術語言與商業客戶、用戶、利益相關者、項目管理者等的領域語言之間來回翻譯的代價。

Continuous integration(CI)

  • Continuous integration - Wikipedia
    • https://en.wikipedia.org/wiki/Continuous_integration
  • 持續集成 - 維基百科,自由的百科全書
  • 持續集成_百度百科
    • https://baike.baidu.com/item/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90
    • 持續集成是一種軟件開發實踐,即團隊開發成員常常集成他們的工做,經過每一個成員天天至少集成一次,也就意味着天天可能會發生屢次集成。每次集成都經過自動化的構建(包括編譯,發佈,自動化測試)來驗證,從而儘早地發現集成錯誤。

Continuous delivery / Continuous deployment(CD)

DevOps(Development和Operations的組合詞)

  • DevOps - 維基百科,自由的百科全書
    • https://zh.wikipedia.org/wiki/DevOps
    • DevOps(Development和Operations的組合詞)是一種重視「軟件開發人員(Dev)」和「IT運維技術人員(Ops)」之間溝通合做的文化、運動或慣例。透過自動化「軟件交付」和「架構變動」的流程,來使得構建、測試、發佈軟件可以更加地快捷、頻繁和可靠。

系統發展生命週期(SDLC)

軟件即服務(Software as a Service,i.e. SaaS)

奇異遞歸模板模式(curiously recurring template pattern,CRTP)

MEAN Stack

  • MongoDB, Angularjs, Nodejs, React, Golang

LAMP Stack

  • Linux, Apache, MySQL, PHP/Python, Javascript, Angularjs

Full Stack Java

  • Java, J2EE, Spring MVC Framework, Bootstrap, Javascript, Angularjs

測試 

如何測試一個水杯,記得考慮異常測試

經常使用的測試工具,測試方法 

程序crash如何定位檢測

內存泄露定位 / 監測/防止

  • 內存泄漏_百度百科
    • https://baike.baidu.com/item/%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F/6181425?fr=aladdin
  • 內存泄漏以及常見的解決方法 - na_he的專欄 - CSDN博客
    • http://blog.csdn.net/na_he/article/details/7429171
  • C/C++內存泄漏及檢測 - 吳秦 - 博客園
    • http://www.cnblogs.com/skynet/archive/2011/02/20/1959162.html
  • Memory debugger - Wikipedia
    • https://en.wikipedia.org/wiki/Memory_debugger
    • A memory debugger also known as a runtime debugger[1] is a debugger for finding software memory problems such as memory leaks and buffer overflows. These are due to bugs related to the allocation and deallocation of dynamic memory. Programs written in languages that have garbage collection, such as managed code, might also need memory debuggers, e.g. for memory leaks due to "living" references in collections.
  • Valgrind - Wikipedia

GDB

  • gdb_百度百科
    • http://baike.baidu.com/link?url=qzDVNAB5igtON9p7hw4Ybwu5hELcvElenqb9X-hINKukyB-6lG0Al-VJ2Vxjm7PwFBJmiZVwZCYJ2V-alB_WLa

工具

Confluence

Cucumber

git

JIRA

JMeter

  • Apache JMeter - Wikipedia
    • https://en.wikipedia.org/wiki/Apache_JMeter
    • Apache JMeter is an Apacheproject that can be used as a load testing tool for analyzing and measuring the performance of a variety of services, with a focus on web applications.
    • JMeter can be used as a unit-test tool for JDBC database connections,[1] FTP,[2] LDAP,[3] Webservices,[4] JMS,[5] HTTP,[6] generic TCP connections and OS native processes.[citation needed] One can also configure JMeter as a monitor,[7] although this is typically considered[by whom?]ad hoc rather than advanced monitoring. It can be used for some functional testing as well.[8]
    • JMeter supports variable parameterization, assertions (response validation), per-thread cookies, configuration variables and a variety of reports.
    • JMeter architecture is based on plugins. Most of its "out of the box" features are implemented with plugins. Off-site developers can easily extend JMeter with custom plugins.
  • Jmeter_百度百科
    • https://baike.baidu.com/item/Jmeter
    • Apache JMeter是Apache組織開發的基於Java的壓力測試工具。用於對軟件作壓力測試,它最初被設計用於Web應用測試,但後來擴展到其餘測試領域。 它能夠用於測試靜態和動態資源,例如靜態文件、Java 小服務程序、CGI 腳本、Java 對象、數據庫、FTP 服務器, 等等。JMeter 能夠用於對服務器、網絡或對象模擬巨大的負載,來自不一樣壓力類別下測試它們的強度和分析總體性能。另外,JMeter可以對應用程序作功能/迴歸測試,經過建立帶有斷言的腳原本驗證你的程序返回了你指望的結果。爲了最大限度的靈活性,JMeter容許使用正則表達式建立斷言。
    • Apache jmeter 能夠用於對靜態的和動態的資源(文件,Servlet,Perl腳本,java 對象,數據庫和查詢,FTP服務器等等)的性能進行測試。它能夠用於對服務器、網絡或對象模擬繁重的負載來測試它們的強度或分析不一樣壓力類型下的總體性能。你可使用它作性能的圖形分析或在大併發負載測試你的服務器/腳本/對象。

LoadUI

OpenGL

Selenium

SoapUI

Swing

  • Swing (Java) - 維基百科,自由的百科全書
    • https://zh.wikipedia.org/wiki/Swing_(Java)
    • Swing是一個爲Java設計的GUI工具包。Swing是Java基礎類的一部分。Swing包括了圖形用戶界面(GUI)組件如:文本框,文本域,按鈕,分隔窗格和表。
    • Swing提供許多比AWT更好的屏幕顯示元素。它們用純Java寫成,因此同Java自己同樣能夠跨平臺運行,這一點不像AWT。它們是JFC的一部分。它們支持可更換的面板和主題(各類操做系統默認的特有主題),然而不是真的使用原平生臺提供的設備,而是僅僅在表面上模仿它們。這意味着你能夠在任意平臺上使用Java支持的任意麪板。輕量級組件的缺點則是執行速度較慢,優勢就是能夠在全部平臺上採用統一的行爲。

程序員必備的工具軟件有哪些?


系統設計

我的吐血整理的系統設計資料大全 - 九章算法

  • https://mp.weixin.qq.com/s/4kv57_rBVWemkh5t33WGMw 

設計模式

  • 設計模式(即便代碼編制真正工程化)_百度百科
    • http://baike.baidu.com/link?url=QoxZgqaX0LcWjUC9bYsOC8jLwWf3HpljeCuDoqxL4MYIWnWqzdtWlIhyVhe6npPk8zL-pcoQP5oq4HImZKspt9Da3R7d3cEkrsVgwqVmAKu

單體如何避免多個instance?

  • 構造時指向一塊內存保證唯一性。static

如何設計爬蟲系統 | 系統設計高頻題解題思路分析

系統設計資料大全

面試官絕殺:系統是如何支撐高併發的?

每秒千萬級實時數據處理系統是如何設計的?

面試官:說說 Spring Cloud 的底層架構原理吧

相關文章
相關標籤/搜索