软件开发中常见知识总结

最近在准备软件开发的笔试面试,复(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,红黑树RBTB树B+B-B*


               分治法,动态规划,贪心算法,摊还分析(聚合分析,核算法,势能法,动态表)


                    参考书籍  《大话数据结构》《算法导论》《运筹学》《编程之美》《剑指offer》《编程珠玑》

                     刷题必备   leetcode , topcoder  ,lintcode,牛客,各大校园OJ

   -------------------------------------------------------------------------------------------------------------      

         三.计算机网络

                OSI7层模型(TCP4层)每层的作用和协议,URL到页面过程

                http/https,get/post以及幂等性,http协议头,http网络攻击(CSRFXSS

     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,博客园,知乎,牛客,百度百科。

         欢迎补充~

      



你可能感兴趣的:(软件开发)