参加“软考”的软件设计师应该看哪些书?
《软件设计师教程》《教程》建议购买教育部指定教材。
软件设计师历年考题分析。分析不重要。张友生老师的分析似乎更加全面和有针对性。
另外还有软件设计师大纲,可以在复习过程中定期检查,梳理知识结构体系,从而发现缺失,填补空白。
1,每门课程的具体学习方法
(1)软件工程。软件工程是审查的重点。不仅上午的题占了10左右,下午的题还有两个软件设计与分析的题。你必须掌握书中提到的各种软件分析设计方法和相关的分析图,它们的功能和制作方法(尤其是各种图的组成部分)以及各种图之间的转换和联系(如果有的话)。对UML面向对象软件设计方法和图像过程软件设计方法有充分了解,软件测试要达到了解的程度。其他的内容都要背,因为基本都是早上的题,每年的题都不确定,但是一定有CMM相关的题。
(2)数据库。数据库部分也很重要。上午有5分钟左右,下午至少有一个数据库专题,而且必须也是关系数据库。我们还应该理解E-R模型,从中我们可以推导出关系。我们必须了解关系数据库的几种范式和建立关系的方法。
因此,有必要非常清楚关系数据库的基本概念,如键的定义、函数依赖、范式的定义、作用和转换。数据并发控制,要掌握几种常用的SQL语句,每个语句最好用笔写几遍,加深对各种形式语句的记忆,学数据库也不是太难。因为考试不会考数据的物理存储和数据安全,所以感觉这个知识难度比较大,交叉学科比较多。
(3)学习数据结构和算法。数据结构和算法是考试的重点内容,其复习主要以普通教材为主。你要对数组、链表、队列、栈、树、堆等基本的数据组织方式非常熟悉(看到算法就知道哪种数据组织方式效率更高),对排序、索引、绘图的各种算法要有很好的理解(算法的分析过程和代码要非常清晰),算法的分析方法要达到理解和应用的水平。
你要非常精通C语言(要会应用C语言语句的一些技巧,比如用函数的返回值作为判断条件,用a[i++]在循环中处理数组,提高编码的效率,这需要大量阅读代码才能提高)。如果你是高级面向对象语言的初学者,建议先学C++,c++更像是一种语言规范。Java是一个编程工具,由于其跨平台的特性,它有很多独特的功能和特点。有时间一定要看一本C++语言的数据结构,能让你更全面深刻的理解类和对象的编程方法。
算法的学习不是一朝一夕可以提高的,一定要静下心来学习一些经典的算法,比如:穷举法、贪心法、分治法、迭代法、递归法、回溯法;找一些比较知名的算法来分析一下,比如:背包问题,组合问题,斐波那契数列,走马棋盘问题,旅行商问题,八皇后问题,迷宫问题,汉诺塔问题,乔切夫环问题等。
这些算法根植在你的脑海里,当你看到问题的时候,你自然会想到用什么方法去寻找最优解。
(4)编程语言。编程语言包括C语言、编译原理、面向对象编程语言(通常以C++为例)。编译原理必须经过词法分析的检验,词法分析是后期编译过程的基础。测试的主要内容有NFA与DFA的转换、范式与有限自动机的转换等。
语法分析有一年通过了下午的考试。这门课对初学者来说比较难,抽象,理论性强。反正我花了四个月学了一点。这门课复习没什么技巧。听听塞西尔的《编译原理视频教程》,学起来更快。
c语言要掌握三个基本结构,数组,链表,结构,* * *对象,参数传递,指针和指针数组,指针函数等等。面向对象编程语言需要了解基本概念和初步应用,考查不深。
(5)面向对象的方法。面向对象方法论不仅是上午考试的重点,也是下午考试的重点。平均上午12分左右,下午30分,一个UML图形相关的题目,一个面向对象编程的可选题目。所以要把这一块掌握好。UML中的类图、用例图、状态图、协作图要掌握好,考试中会经常出现。老师一再强调这个知识点要学。我觉得老师做题很准。)
(6)操作系统。操作系统没什么好说的。把处理器管理、存储管理、设备管理、文件管理、系统安全等几个功能模块和相关算法搞清楚就好。其中我觉得理解PV操作(它在并发进程中的应用非常灵活)和中断(反正对我来说很难)。我们必须理解相关内容中提到的算法和分析过程。当然也要注意进程死锁和段页存储的问题。
其他课程的复习会根据考试大纲进行,里面的概念会搞清楚,因为大部分都是晨间题。
2.阅读与实践相结合。
“读书要有目的,要随着任务走。看完之后,做题巩固,所以看完书后,找一两道相关的题做。