軟件開發中常見知識總結
最近在準備軟件開發的筆試面試,復(yu)習(xi)了一些在軟件開發中的常見知識。為了給自己攢點RP,故與大家分享一二。
長春軟件開發,軟件開發需要準備的比較多,主要分為編程語言,數據結構和算法,計算機網絡,計算機操作系統,數據庫,設計模式,軟件工程,軟件測試。作為一個軟件開發者(程序
猿)至少需要熟練一種語言,目前比較常見和普遍的有C/C++,,java ,python,C#(取2017年6月TIOBE編程語言排行榜前5),web端主要是javascript(js)和php,移動端
主要是java(android)和Objective-c(IOS),python熱度持續上升,與最近機器學習,應該人工智能比較火有關吧。當然,編程語言在精不在多,曾經LZ也糾結過學哪種語
言比較好,哪種語言比較厲害,結果最后才發現一點用都沒有。每種語言都有自己的擅長之處,根據自己的情況選擇一門努力加深即可。
-------------------------------------------------------------------------------------------------------------------------------------
一.編程語言(以C++為例)
基礎部分:
//基本類型,復合類型,表達式,關鍵字,函數,頭文件
基本類型:
bool, char, wchar_t, char16_t, char32_t
short , int ,long,long long ,float, double ,long double.
可能大家覺得簡單,沒什么問題。
1.上述基本類型在32/64位系統上求sizeof大小。
2.上述基本類型取值范圍,signed和unsigned溢出如何處理。
3.類型之間如何轉換,精度如何。
4.類型在計算機上的儲存方式。
復合類型:
引用& : 為對象起另外一個名字。 在C++11中增加了右值引用(rvalue reference)
指針* : 指向另一種類型的復合類型。 函數指針,指針函數,數組指針,指針數組
指針和引用區別
struct union enum的使用
表達式:
常量表達式,值不會改變 const constexpr 修飾
關系,賦值,比較,移位操作符的優先順序與結合順序
sizeof 與strlen的使用
sizeof()(基本類型,空結構體,空類,虛函數,static修飾的變量,字符串,指針,數組,作為參數的數組)
auto 和decltype C++11中增加
內存對齊原則
關鍵字:
const和static
const int *p; int const *p ; int * const p; const修飾函數,成員函數,形參
static 局部變量,全局變量,函數,成員函數等
violate和explcit
解釋作用
函數:
內聯函數與#define
遞歸理解
參數傳遞方式:值傳遞,引用傳遞,指針傳遞
頭文件:
#include<> ""
#define
#ifdef #ifndef #endif 作用
中級部分:
.內存管理:運行一個程序,所有變量和函數存放的內存地址在哪?
堆和棧的區別
new delete malloc free
c++四種強制類型轉換:dynamic_cast ,static_cast, const_cast,reinterpret_cast
類,空類的大小,空類有哪些默認類成員函數(構造,析構,拷貝,賦值,取址)
類初始化列表順序
友元函數
構造,析構函數重載
構造函數與析構函數調用順序,構造順序: 先調用基類構造函數,再調用成員類構造函數,最后調用 本身 的構造函數,析構順序相反
構造函數中可不可以拋出異常?析構函數呢?
構造函數和析構函數能不能是虛函數?能不能調用虛函數?
重載運算符,哪些不能重載?
高級部分:
淺拷貝和深拷貝
虛函數實現機制
C++對象內存模型分布
內存泄漏如何檢測
對內存池的理解
C++11新特性:auto/decltype 序列for循環 Lambda表達式 變長參數的模板 智能指針shared_ptr,unique_ptr,weak_ptr
STL 序列式容器(a-v-d-l-fl),關聯式容器(set/map,multi),無序容器(unordered_set,map,multi)
特殊容器(stack,queue,pq,bitset)迭代器,算法 仿函數(函數對象) 迭代適配器(adaptor) 空間適配器(allocator)
Windows下的內存管理
Windows消息機制的流程.
常見類庫的使用:STL,MFC,BOOST
參考書籍《C++ Primer Plus》《C++ Primer》《STL標準庫》《Effective C++》《深度探索c++對象模型》《STL源碼剖析》本本經典
-------------------------------------------------------------------------------------------------------------------------------------------------
二.數據結構和算法
鏈表(單向鏈表,雙向鏈表,循環鏈表),判斷鏈表是否有環,鏈表反轉,鏈表逆序輸出,兩個鏈表第一個公共結點
隊列和棧,兩個隊列實現一個棧,兩個棧實現一個隊列
字符串 常用字符串處理 字符串匹配 KMP算法
樹 二叉樹前序 ,中序, 后序, 層序 二叉樹鏡像 二叉樹 樹 森林之間的轉換 Huffman
圖 DFS BFS 最小生成樹 最短路徑 最大流 拓撲排序 關鍵路徑
van Emde Boas樹 斐波那契堆,Treap樹堆,線段樹 伸展樹 跳躍表 劃分樹 不相交集合,哈希表,并查集,字典樹,后綴樹/數組
排序算法(交換類,插入類,選擇類,歸并,基數)
查找算法(有序表,索引,搜索樹BST,平衡樹AVL,紅黑樹RBT,B樹B+B-B*)
分治法,動態規劃,貪心算法,攤還分析(聚合分析,核算法,勢能法,動態表)
參考書籍 《大話數據結構》《算法導論》《運籌學》《編程之美》《劍指offer》《編程珠璣》
刷題必備 leetcode , topcoder ,lintcode,??停鞔笮@OJ
-------------------------------------------------------------------------------------------------------------
三.計算機網絡
OSI7層模型(TCP4層)每層的作用和協議,URL到頁面過程
http/https,get/post以及冪等性,http協議頭,http網絡攻擊(CSRF、XSS)
TCP/UDP/IP報頭
ARP & RARP ICMP & IGMP
ping telnet traceroute
TCP最大連接數
tcp/udp 區別
tcp 如何保證可靠連接
三次握手和四次揮手詳細過程
擁塞控制(過//程、閾值)
流量控制與滑動窗口
time_wait的危害
參考書籍《計算機網絡》《TCP/IP詳解》(卷一就夠了)《Unix環境編程》《Unix網絡編程》《linux高性能服務器編程》
-------------------------------------------------------------------------------------------------------------------------------------
四.計算機操作系統
操作系統幾種分類
進程通信IPC(幾種方式)
進程與線程區別
OS幾種策略(頁面置換,進程調度)
互斥與死鎖相關
linux常用命令
linux內核相關
參考書籍《Linux鳥哥私房菜》《現代操作系統》《深入理解計算機系統(CSAPP)》《Linux內核設計與實現》
-----------------------------------------------------------------------------------------------------------------------------------
五.數據庫
//數據庫的范式,事務的ACID
//索引(包括分類及優化方式,失效條件,底層結構)
//SQL語法(join,union,子查詢,having,group by)
//引擎對比(InnoDB,MyISAM)
//數據庫的鎖(行鎖,表鎖,頁級鎖,意向鎖,讀鎖,寫鎖,悲觀鎖,樂觀鎖,以及加鎖的select sql方式)
//隔離級別,依次解決的問題(臟讀、不可重復讀、幻讀)
//優化(explain,慢查詢,show profile)
//分庫分表,主從復制,讀寫分離。
//Nosql相關(redis和memcached區別之類的,如redis,redis)
參考書籍《深入淺出MySQL》
------------------------------------------------------------------------------------------------------------------------------------
六.設計模式
框架是大智慧,用來對軟件設計進行分工;設計模式是小技巧,對具體問題提出解決方案,以提高代碼復用率,降低耦合度。
設計模式,單例,工廠,策略,裝飾,橋接等23種Gof
框架模式:MVC,MTV,MVP,CBD,ORM
C++的QT、MFC、gtk,ACE,wxwindows,Java的SSH 、SSI,php的 smarty(MVC模式),python的django(MTV模式)等等
庫 STL,BOOST,COM,MFC
參考書籍《大話設計模式》
---------------------------------------------------------------------------------------------------------------------------------------------------
七.軟件工程
需求,概要,詳細,編碼,測試,維護
版本控制工具 SVN,Git, VSS,CVS, ClearCase, StarTeam
自動化工具: 代碼生成、依賴管理、版本管理、環境分配、打包部署、線上監控等,Apollo
-------------------------------------------------------------------------------------------------------------------------------------------------------
八.軟件測試
單元測試,集成測試,系統測試,驗收測試
黑盒測試(等價類劃分,邊界值分析,因果圖和判定表,正交實驗法,狀態圖法)
白盒測試(邏輯驅動,基本路徑,循環覆蓋)
壓力測試、云測試、回歸測試、topsite測試
Bug管理工具JIRA,測試用例管理Testlink
自動化測試
功能自動化測試工具:Watir、Selenium、MaxQ、WebInject
性能自動化測試工具:Jmeter、OpenSTA、DBMonster、TPTEST、Web Application Load Simulator
上一篇:長春軟件開發人員需把握的三論
下一篇:供應鏈管理是三流集成