面试总结之MISC(操作系统,网络,数学,软件开发,测试,工具,系统设计,算法)...
操作系統
解釋堆和棧的區別。
分配在堆的內存與分配在堆棧的內存有什么不同
- 分配在堆的內存要手動去釋放
線程與進程的區別
多線程中棧與堆是公有的還是私有的
- 在多線程環境下,每個線程擁有一個棧和一個程序計數器。棧和程序計數器用來保存線程的執行歷史和線程的執行狀態,是線程私有的資源。
- 其他的資源(比如堆、地址空間、全局變量)是由同一個進程內的多個線程共享
mutex
- 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/
semophore
deadlock
- 在引入鎖的同時,我們遇到了一個新的問題:死鎖(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
- 如何處理死鎖問題:
- 忽略該問題。例如鴕鳥算法,該算法可以應用在極少發生死鎖的的情況下。為什么叫鴕鳥算法呢,因為傳說中鴕鳥看到危險就把頭埋在地底下,可能鴕鳥覺得看不到危險也就沒危險了吧。跟掩耳盜鈴有點像。
- 檢測死鎖并且恢復。
- 仔細地對資源進行動態分配,以避免死鎖。
- 通過破除死鎖四個必要條件之一,來防止死鎖產生。
網絡?
網絡協議_百度百科
- https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/328636?fr=aladdin
TCP/IP
是否了解應用層通信,通信協議HTTP
UDP/IP
socket
- socket(計算機專業術語)_百度百科
- https://baike.baidu.com/item/socket/281150?fr=aladdin
TCP/IP、Http、Socket的區別_百度經驗
- http://jingyan.baidu.com/article/08b6a591e07ecc14a80922f1.html
數學?
估算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
敏捷軟件開發 - 維基百科,自由的百科全書
- https://zh.wikipedia.org/wiki/%E6%95%8F%E6%8D%B7%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91
Scrum
- Scrum - 維基百科,自由的百科全書
- https://zh.wikipedia.org/wiki/Scrum
- Scrum是一種敏捷軟件開發的方法學,用于迭代式增量軟件開發過程。Scrum在英語是橄欖球運動中列陣爭球的意思。
- 雖然Scrum是為管理軟件開發項目而開發的,它同樣可以用于運行軟件維護團隊,或者作為計劃管理方法。Scrum之間的合作稱為“Scrum of Scrums”。
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)
- 行為驅動開發 - 維基百科,自由的百科全書
- https://zh.wikipedia.org/wiki/%E8%A1%8C%E4%B8%BA%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91
- 行為驅動開發(英語:Behavior-driven development,縮寫BDD)是一種敏捷軟件開發的技術,它鼓勵軟件項目中的開發者、QA和非技術人員或商業參與者之間的協作。BDD最初是由Dan North在2003年命名[1],它包括驗收測試和客戶測試驅動等的極限編程的實踐,作為對測試驅動開發的回應。在過去數年里,它得到了很大的發展[2]。
- 2009年,在倫敦發表的“敏捷規格,BDD和極限測試交流”[3]中,Dan North對BDD給出了如下定義:
BDD是第二代的、由外及內的、基于拉(pull)的、多方利益相關者的(stakeholder)、多種可擴展的、高自動化的敏捷方法。它描述了一個交互循環,可以具有帶有良好定義的輸出(即工作中交付的結果):已測試過的軟件。
-
- BDD的重點是通過與利益相關者的討論取得對預期的軟件行為的清醒認識。它通過用自然語言書寫非程序員可讀的測試用例擴展了測試驅動開發方法。行為驅動開發人員使用混合了領域中統一的語言的母語語言來描述他們的代碼的目的。這讓開發者得以把精力集中在代碼應該怎么寫,而不是技術細節上,而且也最大程度的減少了將代碼編寫者的技術語言與商業客戶、用戶、利益相關者、項目管理者等的領域語言之間來回翻譯的代價。
Continuous integration(CI)
- Continuous integration - Wikipedia
- https://en.wikipedia.org/wiki/Continuous_integration
- 持續集成 - 維基百科,自由的百科全書
- https://zh.wikipedia.org/wiki/%E6%8C%81%E7%BA%8C%E6%95%B4%E5%90%88
- 持續集成(英語:Continuous integration,縮寫CI)是一種軟件工程流程,是將所有軟件工程師對于軟件的工作副本持續集成到共用主線(mainline)的一種舉措。該名稱最早由[1]葛來迪·布區(Grady Booch)在他的布區方法[2]中提出,不過他并沒有提到要每天集成數次。之后該舉措成為極限編程(extreme programming)的一部分時,其中建議每天應集成超過一次,甚至達到數十次。[3]在測試驅動開發(TDD)的作法中,通常還會搭配自動單元測試。持續集成的提出主要是為解決軟件進行系統集成時面臨的各項問題,極限編程稱這些問題為集成地獄(integration hell)。
- 持續集成_百度百科
- https://baike.baidu.com/item/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90
- 持續集成是一種軟件開發實踐,即團隊開發成員經常集成他們的工作,通過每個成員每天至少集成一次,也就意味著每天可能會發生多次集成。每次集成都通過自動化的構建(包括編譯,發布,自動化測試)來驗證,從而盡早地發現集成錯誤。
- https://baike.baidu.com/item/%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90
Continuous delivery /?Continuous deployment(CD)
- Continuous delivery - Wikipedia
- https://en.wikipedia.org/wiki/Continuous_delivery
- 持續交付 - 維基百科,自由的百科全書
- https://zh.wikipedia.org/wiki/%E6%8C%81%E7%BA%8C%E4%BA%A4%E4%BB%98
- 持續交付(英語:Continuous delivery,縮寫為 CD),是一種軟件工程手法,讓軟件產品的產出過程在一個短周期內完成,以保證軟件可以穩定、持續的保持在隨時可以釋出的狀況。它的目標在于讓軟件的建置、測試與釋出變得更快以及更頻繁。這種方式可以減少軟件開發的成本與時間,減少風險。
- 持續交付_百度百科
- https://baike.baidu.com/item/%E6%8C%81%E7%BB%AD%E4%BA%A4%E4%BB%98/9803571?fr=aladdin
DevOps(Development和Operations的組合詞)
- DevOps - 維基百科,自由的百科全書
- https://zh.wikipedia.org/wiki/DevOps
- DevOps(Development和Operations的組合詞)是一種重視“軟件開發人員(Dev)”和“IT運維技術人員(Ops)”之間溝通合作的文化、運動或慣例。透過自動化“軟件交付”和“架構變更”的流程,來使得構建、測試、發布軟件能夠更加地快捷、頻繁和可靠。
系統發展生命周期(SDLC)
- 系統發展生命周期 - 維基百科,自由的百科全書
- https://zh.wikipedia.org/wiki/%E7%B3%BB%E7%BB%9F%E5%8F%91%E5%B1%95%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F
- 系統發展生命周期(SDLC),也稱軟件生命周期,是系統工程、信息系統和軟件工程中的術語,用于描述一個信息系統從規劃、創建、測試到最終完成部署的全過程[1]。
軟件即服務(Software as a Service,i.e. SaaS)
- 軟件即服務 - 維基百科,自由的百科全書
- https://zh.wikipedia.org/wiki/%E8%BD%AF%E4%BB%B6%E5%8D%B3%E6%9C%8D%E5%8A%A1
奇異遞歸模板模式(curiously recurring template pattern,CRTP)
- 奇異遞歸模板模式 - 維基百科,自由的百科全書
- https://zh.wikipedia.org/wiki/%E5%A5%87%E5%BC%82%E9%80%92%E5%BD%92%E6%A8%A1%E6%9D%BF%E6%A8%A1%E5%BC%8F
- 奇異遞歸模板模式(curiously recurring template pattern,CRTP)是C++模板編程時的一種慣用法(idiom):把派生類作為基類的模板參數。[1]更一般地被稱作F-bound polymorphism,是一類F?界量化。
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
- https://en.wikipedia.org/wiki/Valgrind#Memcheck
- Valgrind?/?v?lɡr?nd/?is a?programming tool?for?memory debugging,?memory leak?detection, and?profiling.
- Valgrind was originally designed to be a?freememory debugging?tool for?Linux?on?x86, but has since evolved to become a generic framework for creating dynamic analysis tools such as checkers and profilers.
GDB
- gdb_百度百科
- http://baike.baidu.com/link?url=qzDVNAB5igtON9p7hw4Ybwu5hELcvElenqb9X-hINKukyB-6lG0Al-VJ2Vxjm7PwFBJmiZVwZCYJ2V-alB_WLa
工具
Confluence
- Confluence (software) - Wikipedia
- https://en.wikipedia.org/wiki/Confluence_(software)
- Confluence?is a team?collaboration software. Written in?Java?and mainly used in corporate environments,?it is developed and marketed by?Atlassian. Confluence is sold as either?on-premises software?or as?software as a service.
Cucumber
- Cucumber (software) - Wikipedia
- https://en.wikipedia.org/wiki/Cucumber_(software)
- Cucumber?is a?software?tool used by?computer programmers?for testing other software.?It runs automated?acceptance tests?written in a?behavior-driven development?(BDD) style.?Central to the Cucumber BDD approach is its plain language parser called?Gherkin. It allows expected software behaviors to be specified in a logical language that customers can understand. As such, Cucumber allows the execution of feature documentation written in business-facing text.?Capybara, which is a part of the Cucumber testing framework,?is an example of a web based?test automation?software.
- Cucumber is written in the?Ruby programming language.?and was originally used exclusively for Ruby testing as a complement to the?RSpec?BDD framework. Cucumber now supports a variety of different programming languages through various implementations. For example,?Cuke4php?and?Cuke4Lua?are software bridges that enable testing of?PHP?and?Lua?projects, respectively. Other implementations may simply leverage the?Gherkin?parser while implementing the rest of the testing framework in the target language.
- Introduction to Cucumber
- https://www.guru99.com/introduction-to-cucumber.html
- 從頭寫一個Cucumber測試(一) Selenium Test – Bu?log
- https://yaowenjie.github.io/%E7%BC%96%E7%A8%8B%E7%9B%B8%E5%85%B3/cucumber-test
- 從頭寫一個Cucumber測試(二) Cucumber Test – Bu?log
- https://yaowenjie.github.io/%E7%BC%96%E7%A8%8B%E7%9B%B8%E5%85%B3/cucumber-test-part-2
git
- git - 維基百科,自由的百科全書
- https://zh.wikipedia.org/wiki/Git
- git是一個分布式版本控制軟件,最初由林納斯·托瓦茲(Linus Torvalds)創作,于2005年以GPL發布。最初目的是為更好地管理Linux內核開發而設計。應注意的是,這與GNU Interactive Tools[6](一個類似Norton Commander界面的文件管理器)有所不同。
- git最初的開發動力來自于BitKeeper和Monotone[7][8]。git最初只是作為一個可以被其他前端(比如Cogito或Stgit[9])包裝的后端而開發的,但后來git內核已經成熟到可以獨立地用作版本控制[10]。很多著名的軟件都使用git進行版本控制[11],其中包括Linux內核、X.Org服務器和OLPC內核等項目的開發流程[12]。
JIRA
- JIRA - 維基百科,自由的百科全書
- https://zh.wikipedia.org/wiki/JIRA
- JIRA?是一個缺陷跟蹤管理系統,為針對缺陷管理、任務追蹤和項目管理的商業性應用軟件,開發者是澳大利亞的Atlassian。JIRA這個名字并不是一個縮寫,而是截取自“Gojira”,日文的哥斯拉發音。?
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
- LoadUI - Wikipedia
- https://en.wikipedia.org/wiki/LoadUI
- LoadUI?is a?load testing?software, targeted mainly at?web services.?LoadUI runs on?Windows,?Linux?and?Mac OS. LoadUI allows users to test the speed and scalability of?APIs, preview API performance behaviors before releasing to production environments and shift performance insights to the left.
OpenGL
- OpenGL - 維基百科,自由的百科全書
- https://zh.wikipedia.org/wiki/OpenGL
- OpenGL(英語:Open Graphics Library,譯名:開放圖形庫或者“開放式圖形庫”)是用于渲染2D、3D矢量圖形的跨語言、跨平臺的應用程序編程接口(API)。這個接口由近350個不同的函數調用組成,用來從簡單的圖形比特繪制復雜的三維景象。而另一種程序接口系統是僅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虛擬實境、科學可視化程序和電子游戲開發。
Selenium
- Selenium (software) - Wikipedia
- https://en.wikipedia.org/wiki/Selenium_(software)
- Selenium?is a portable?software-testingframework?for?web applications. Selenium provides a playback (formerly also recording) tool for authoring tests without the need to learn a test?scripting language?(Selenium IDE). It also provides a test?domain-specific language?(Selenese) to write tests in a number of popular programming languages, including?C#,?Groovy,?Java,?Perl,?PHP,?Python,?Ruby?and?Scala. The tests can then run against most modern?web browsers. Selenium deploys on?Windows,?Linux, and?macOS?platforms. It is?open-source software, released under the?Apache 2.0 license: web developers can download and use it without charge.
SoapUI
- SoapUI - Wikipedia
- https://en.wikipedia.org/wiki/SoapUI
- SoapUI?is an?open-source?web service testing application for?service-oriented architectures?(SOA) and?representational state transfers?(REST). Its functionality covers?web service?inspection, invoking, development, simulation and?mocking, functional testing, load and compliance testing. A commercial version,?SoapUI Pro, which mainly focuses on features designed to enhance productivity, was also developed by?Eviware software. In 2011,?SmartBear Software?acquired Eviware.
- SoapUI was initially released to?SourceForge?in September 2005. It is?free software, licensed under the terms of the?European Union Public License.?Since the initial release, SoapUI has been downloaded more than 2,000,000 times.?It is built entirely on the?Java platform, and uses?Swing?for the?user interface. This means that SoapUI is?cross-platform. Today, SoapUI also supports?IDEA,?Eclipse, and?NetBeans.
- SoapUI can test?SOAP?and REST web services,?JMS, AMF, as well as make any?HTTP(S) and?JDBC?calls.
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
如何設計爬蟲系統 | 系統設計高頻題解題思路分析
- https://mp.weixin.qq.com/s/X6e9zXRFDRN05RrD11XUGg
系統設計資料大全
- https://mp.weixin.qq.com/s/jl0lQlSv6tOtmI3EMvrZQw
面試官絕殺:系統是如何支撐高并發的?
- https://mp.weixin.qq.com/s/fHSKIgJVTdoPVu7hFAZXSw
算法
Book Review: Coding Interview Questions by Narasimha Karumanchi
- https://mp.weixin.qq.com/s/CbC7lpK1bgXNTYDSZjRUUQ
- https://whatpixel.com/coding-interview-questions-book-review/
程序員面試備考錦囊 - 程序員必修課
- https://mp.weixin.qq.com/s/RKd6YkYwwQ-IL--L0GJnIw
幾道 BAT 算法面試中經常問的「字符串」問題
- https://mp.weixin.qq.com/s/M8U9B7UA2AdfnJi5EpTv-g
幾道和「滑動窗口」有關的算法面試題
- https://mp.weixin.qq.com/s/laF7K_wS9F77cDTPzzzYRA
轉載于:https://www.cnblogs.com/pegasus923/p/7594332.html
總結
以上是生活随笔為你收集整理的面试总结之MISC(操作系统,网络,数学,软件开发,测试,工具,系统设计,算法)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【WinForm】创建自定义控件(转)
- 下一篇: NOKIA Update for Win