最近在准备软件开发的笔试面试,复(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
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以后就是复习列表,皆是基础。部分参考来源于CSDN,博客园,知乎,牛客,百度百科。
欢迎补充~