目录
前言
上午题
计算机组成原理
信息安全
计算机相关法律
软件设计
语言处理
操作系统
软件工程
软件测试
面向对象编程
程序设计语言
数据库
数据结构与算法
计算机网络
计算机专业英语
下午题
数据流图
数据库
UML
算法与C语言
面向对象程序设计
前言
2023年上半年软设是2018年改版后的一次考试,以下内容根据考完回忆结合网上流传的真题进行整理,主要侧重相关知识点整理,主要给自己的计算机基础查漏补缺,同时也希望对大家有帮助。
因为现在网上的各平台的软设暂时都没有原版试题,而且大部分答案都是培训机构老师自己做的,所以相当一部分题目都存在争议,所以不贴出原题。想要试题可以自己上网找,这里只对题目的原理做分析。
因为是自己写的总结,有错误的地方烦请留言指出。软考交流群,207553340,请标明来意。
上午题
上午题总体难度中等,按自己的做题经验来看,相当一部分试题与2019年上半年的题目有关联。部分题目是历年真题的原题稍微修改就重新出题了。还有一部分是直接考教材的原话和概念。
最近chatGPT比较火,出题人也顺势连出了三道python题(其实近几年确实加强了python的考察)。虽然平时工作主要也是用python,无奈基本功不扎实,3分只拿了1分,送分题变成了送分题TnT。
分值分布表
机组 | 6 | 测试 | 3 | |
安全 | 5 | 面向对象 | 11 | |
法律 | 3 | 程序语言 | 3 | |
软设 | 5 | DB | 6 | |
语言处理 | 3 | DS | 9 | |
OS | 6 | 网络 | 5 | |
软工 | 5 | 英语 | 5 |
易错题和重点题型(按知识点模块划分)
CPU发出的数据地址属性、海明码信息位、指令流水线计算时间
七层网络模型对应的作用、HTTPS通信加密方式、入侵防御系统
布尔表达式的短路计算、正规式、call by reference和call by value
磁盘管理-移臂调度、线程的共享、PV操作
敏捷开发方法、内聚和耦合、管道-过滤器软件体系结构
白盒测试的路径覆盖和McCabe复杂度、面向对象测试
面向对象七大原则、UML各个图、设计模式
Python基础语法
Armstrong公理系统、关系模式与主属性判断、SQL语句
逆波兰式、Huffman编码、邻接矩阵\邻接表\深度优先\广度优先的时间复杂度、二分查找法、八大排序算法
Linux基础、Web服务器部署
英语完形填空
计算机组成原理
第1题,系统总线。实际上总线结构多种多样,不过一般考的是单总线和三总线结构,直接看笔记。
计算机组成原理学习笔记(二):系统总线 - 知乎
内部总线、系统总线、外部总线_内部总线和系统总线_world_hello_100的博客-CSDN博客
第2题,CPU、数据地址。CPU发出的数据地址是什么地址,当时在主存物理地址和虚拟地址之间纠结。主要是知识点掌握不够牢固,虚拟地址是对应操作系统的,硬件一般是直接操作具体的地址。
彻底搞懂虚拟内存,虚拟地址,虚拟地址空间_虚拟内存和虚拟地址_一口Linux的博客-CSDN博客
第3题,海明码。信息校验位好像也有不少人答错,要注意题干是“信息位是8位”,不是"校验位"或者“海明码是8位”。
海明校验码(计算机组成原理11)_阿芒Aris的博客-CSDN博客
第4题,中断向量。我是不知道这个概念的,只能按照自己现场的理解,选了中断服务程序的入口。
第5题,补码的定义。不知道是当时没审清题目还是网上的题目有问题存在一些偏差,因为有争议,所以答案我也不知道是多少。这里只讲结论:
1.补码的0是唯一的,如1表示为0000 0001,-1表示为1111 1111,1+(-1)=0=0000 0000。
2.与真值的对应关系不是简单且直观,比如-1的表示就与真值的表示完全不直观。
第6题,指令流水线。这道题属于老熟人题。2ns,2ns,1ns,求1000条指令的时间。计算公式是2*1000+2+1=2003。不理解的可以看图。
信息安全
原文链接:https://blog.csdn.net/qq_33562122/article/details/130921688,未经同意,不提供转载。
第7题,应用层消息的压缩、加密的层次。我的理解是具体点就是问ssl对应的是哪一层协议,但是ssl归属的协议层向来都是有不同的说法,至于教材怎么写我也不知道,因为这次复习没看过教材=_=。
更正:想了一晚,可能出题人只是在考七层模型中每一层协议的作用。。。
SSL/TSL到底是属于哪一层的协议? - 简书
https://www.cnblogs.com/zx125/p/11295985.html
第8题,https,服务器与浏览器的通讯加密方式。第一空我选错了。
注意
1.会话密钥是客户端创建的,所以客户端本身就是拥有会话密钥,这是对称加密。
2.公钥是服务器的,作用仅仅用于把会话密钥加密,让客户端传给服务器,保证会话密钥即使被第三方截获也不能解密,因为只有服务器有自己的私钥。
3.服务器的公钥则是存放在证书当中,证书需要CA机构认证,用来确认服务器的身份。
浏览器和与服务器的交互过程&HTTPS工作流程_浏览器与系统交互什么时候_Code Life的博客-CSDN博客
第9题,和上面是同一道题,考察证书的其中一个作用——确认对方的身份。当然用浏览器的时候,如果证书过期或者无法获取证书身份,也会提示,也可以推断出答案。
第10题,入侵防御系统、入侵检测系统。这两个的概念我还真不知道,算是知识盲区。入侵防御(IPS)技术_入侵防御功能_曹世宏的博客的博客-CSDN博客
第11题,web应用防火墙,考试前一天刚好看到,直接贴笔记。web防火墙是部署在web服务器上的,和平时我们使用的用户级防火墙在防御方向上不一样,web服务器不会主动安装流氓软件。
计算机相关法律
原文链接:https://blog.csdn.net/qq_33562122/article/details/130921688,作者:秋不溜啾。
第12题,考察软件著作权。其中人身权是无限期保护的,而且不能继承。比如李白的诗词,其他人,包括继承人都不能把李白的诗词名字写成自己的名字,不能修改和歪曲。人身权包括了发表权(2022年下半年软件评测师考过,这也是一个特殊的权利)、署名权、修改权、保护作品完整权。
中华人民共和国著作权法_中国人大网
第13题,知识产权。排除法,跟知识产权联系最大的是版权了。
第14题,也是考著作权的,不过和继承相关,第11题解释过了。
软件设计
第15题,数据流图。每层DFD都有对系统不同的颗粒度描述,加工规格说明只对当前层次进行描述,不会描述下一层的具体实现细节。
第16题,软件设计原则。集中化设计违反了高内聚低耦合的原则。
第17题,第18题,软件项目活动图。关键路径和关键路径长度是历年试题的老熟人了。大概就是遍历所有的从start到end的边,sum(所有边的权),max(sum)。
第19题,求N个成员的沟通路径,我不记得沟通路径的公式了,现场用等差数列求和公式算的。
语言处理
第20题,布尔表达式,短路计算。认知和网上的试题也是有出入。短路计算的原理就or运算只要有一个true则为true,and运算只要有一个false则为false,以最外层的or或者and为准。然后选出题干中的or前面的判断式就是答案。
第21题,正规式。s=(0|10)*,列出大概存在的可能性,有0,10,010,1000,0001010...,可得1是不能连续出现。
第22题,call by reference和call by value。这也是老熟人了。下面这是2019年上半年的真题。
究竟什么是"call by value" 和"call by reference_百度知道
操作系统
第23题,文件管理-位示图。2019年上半年的原题,就改了磁盘容量,考前两天才做的题目,上半年这位出题老师不会和19年这份卷是一个人吧o-o
第24题,磁盘管理-移臂调度。也是复习盲区,完全不知道概念。然后只记得FIFO是跟CPU有关,然后看电梯好像可以上上下下随意动的,然后就选错了-_-
磁盘移臂调度算法 简介_THISISPAN的博客-CSDN博客
第25题,线程的共享。也是掌握不牢固的知识点,只是觉得栈要是共享不就乱套了吗。
线程间到底共享了哪些进程资源 - 知乎
第26-28题,PV操作。历年试题老熟人,不解释。参考2018年下半年的这道题的解析。
软件工程
第29题,增量模型。2018年上半年原题-改。下面把依据也贴出来。
增量模型_百度百科
第30题,敏捷开发方法。也是做过的题目稍微改了一下,不过自己没记清楚,选了自适应软件开发。下面这是2015年上半年的原题解析。
第31题,内聚和耦合。也是历年老熟人,刚好考前一天记下了。下面是笔记内容和相关链接
常见的耦合类型和内聚类型_内聚和耦合类型_彩虹国操盘长的博客-CSDN博客
第32题,可移植性设计。为获得较高的可移植性,在设计过程中常采用通用的程序设计语言和运行支撑环境。尽量不用与系统的底层相关性强的语言。
【软件构造】可移植性、可复用性、可维护性、可读性、可测试性、健壮性_冷冰鱼的博客-CSDN博客
第33题,管道-过滤器软件体系结构。根本就不知道这是什么东西。
管道-过滤器模式学习总结
软件测试
原文链接:https://blog.csdn.net/qq_33562122/article/details/130921688,原创作品,未经同意,不得转载。未授予其他网站转载,若未标明原作者和原文来源,均为抄袭。
第34题,第35题,白盒测试,McCabe复杂度。老熟人一枚。主要路径覆盖遇到走过的结点是不能再走的,要终止执行另开测试用例。下面是笔记和2018年上半年的原题,和这题的原理是一样的。
强连通分量个数的求法(图解)_强连通分量个数怎么求_daria1的博客-CSDN博客
第36题,软件维护。送分题,贴笔记。
面向对象编程
第37题,第38题,面向对象的基本概念。封装、多态、继承的定义和消息通信的定义。比较简单,直接贴笔记。
第39题, 面向对象测试。在去年备考软测的时候看过,后来又忘了,属于知识盲区
面向对象的测试 - 简书
面向对象测试_Cactus仙人掌的博客-CSDN博客
第40题,面向对象设计的原则。我学的是七大原则,不知道有共同重用和共同封闭原则,后来是按题意推断出来的。
面向对象设计的四大原则
第41题,UML-序列图。重点内容,因为下午题也会考。注意用例图有时候会被定义为动态图,有时候会被定义为静态图。时序图又叫序列图又叫顺序图,是动态图,描述了以时间顺序组织的对象之间的交互活动。
浅谈UML中常用的9种图 - 知乎
软考——软件设计师:第八章:面向对象技术考点总结(完整篇)_软考面向对象知识点_宋子浩的博客-CSDN博客
第42题,UML-序列图。和上一题是一道题,注意序列图中Loop(1...2)[...]
UML 序列图详解-UML
第43题,UML-包图。个人记忆与网上的试题存在偏差。
UML图详解(九)包图_包图怎么画_FXBStudy的博客-CSDN博客
第44题,第45题,设计模式。重点内容,因为下午题会考。这里只考简单的概念,背了就能拿分。直接贴笔记。
第46题,第47题,设计模式。重点内容,也是送分题。因为2021年下半年有原题,仅仅更换了语境。直接贴笔记。
程序设计语言
第48题,python-获取对象类型。英语翻译题,没用过python的都知道,只有你会type是类型的意思。
第49题,python-元组。因为python的语法比较灵活,对python的元组定义不了解的很容易就丢坑里,我就是其中之一。
python中元组的定义与如何创建元组_ly_qiu的博客-CSDN博客
第50题,python-循环、迭代器、分支。和上一题一样,其实我这个月做项目才用过match...case。但是万万想不到,for后原来可以接else,然后用如果都有错就选最错的原理成功选错了。
Python 的 For/Else 语句 - 知乎
Python 3.10里面的Match-Case语法详解 - 知乎
最近发布的 Python 3.10 中的 Match-Case 其实没有那么简单_python match n: case baocuo_我爱Python数据挖掘的博客-CSDN博客
数据库
第51题,数据库的三层模型。送分题。
【数据库系统】数据库系统三层结构_数据库三层体系结构_Lord_Bao的博客-CSDN博客
第52题,Armstrong公理系统-自反律。个人认知与网上的试题信息有偏差,我记得的是问自反律。直接贴笔记。
Armstrong公理系统
第53题,第54题,关系模式。也是老熟人,画图分析就好了,只是考试的时候不知道脑子干嘛了,第二空选了3,1。
第55题,第56题,SQL语句。刚好前一天也看到同类的题目。这里仅仅换了几个词语。下面是2019年上半年原题。
MySQL用户授权(GRANT)语法介绍和示例_mysql grant_Data_IT_Farmer的博客-CSDN博客
数据结构与算法
链接:https://blog.csdn.net/qq_33562122/article/details/130921688,原创作品,未经同意,不得转载。若转载网站未标明原作者和原文来源,均属于侵权。
第57题,逆波兰式,栈。之前软测复习过,这里没记牢概念就错了。列出栈的存放过程后,得到最高的层数如下。
1、这里考的是操作数的栈容量,不是运算符,对应图中的num,只是这里操作数栈和符号栈最小容量刚好相等。
2、右括号不入栈,而是把运算符弹出符号栈,与操作数进行运算。
3、这里要考察求值过程,不是将波兰表达式转逆波兰表达式。
逆波兰算法(后缀表达式)_逆波兰式_我叫RT的博客-CSDN博客
你知道波兰表达式和逆波兰表达式吗 - 知乎
第58题,哈夫曼(Huffman)编码。记得哈夫曼树,不记得哈夫曼编码,概念掌握不清晰。然后按照网上的选项画出的哈夫曼树是这样的,D选项的左子树第1个叶子结点没有兄弟结点,所以错误。
干货!程序员必备——哈夫曼编码 - 知乎
第59题,邻接矩阵、邻接表、深度优先、广度优先的时间复杂度。2018上半年的原题改编,当时做了没顺手把拓展复习,这题丢分了。
第60题,有序序列的二分查找法。这也是考过的内容,跟2019年上半年的第61题是类似的,这是改了个问法。不能构成二分查找的序列。
解题思路:自己画图分析就好了,跟无敌掌门人玩的猜数字游戏差不多,就是给定一个区间,然后不断收窄数的范围,后面报的数是不可以超出这个区间的范围的。
第61题,树转二叉树。考得比较少,还好看了教学视频有点印象。树转二叉树,右兄弟结点都变右子结点,贴笔记。
第62题,第63题,排序算法。重点内容,要求记忆。
第64题,第65题, 最小生成树及其算法。Krusal算法,记得不牢,忘记了哪个对应哪个了,还好两个算法的算法策略都是一样的,然后算出来的结果也是一样的。注意不管是Prim还是Kruskal,路径都不能形成环路。
普里姆算法(Prim算法)_皮卡皮卡~的博客-CSDN博客
kruskal算法(克鲁斯卡尔算法)详解
计算机网络
第66题,应用层协议-HTTP的应用。送分题。HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
第67题,第68题,web部署和Linux。没有部署经验和Linux使用经验的一般都不会。Linux和Windows命令也是必考内容,都是日常用得比较多的一些命令。
浅谈Tomcat 、Apache、 Nginx的区别及优缺点
Apache的主要目录和配置文件详解
Linux目录中~ / home各代表什么意思_home目录_多写文章能生发的博客-CSDN博客
第69题,七层网络模型及其协议。这也是道英语翻译题,SNMP=Simple Network Management Protocol,有不少人记成了其他协议去了。
基于TCP或UDP的应用层协议有哪些?——Linux网络编程_博雅勇士的博客-CSDN博客
第70题,网络故障判断。聊天软件通讯正常但是不能打开网页,访问网页用的是域名,要做域名解析,所以可能是DNS坏了。
计算机专业英语
第71-75题,英语题-完形填空。联系上下文,感觉不少空都有对应关系。讲的是低代码和无代码的软件开发解决方案,英语比较菜,就不多讲解了。
原文出处应该是IBM,做了一些修改
Low-Code vs. No-Code: What’s the Difference? | IBM
下午题
下午题难度中等,感觉也是和2019年上半年的题有不少相似的地方,比如数据流图的第四问的加工组成,面向对象程序设计也是考了Strategy模式。
易错点和难点:
具体加工组成、补充新增关系模式的ER图和关系模式、UML类图的关键属性、C语言完形填空、设计模式的理解
自己写的答案,我也记得不是很清,错了烦请指出。
数据流图
背景:农户作物管理系统,平台管理员、租户、农户
第一问,填入实体。做语法分析,找0层图的加工前后的主语和宾语的名词。其中租户和农户是有点难判断的,要多代入几个加工处理做判断。
E1平台管理员,E2农户,E3租户,E4第三方平台。
第二问,填入数据存储。也是找加工,然后沿着数据流找,这道题里面没有具体的存储名称,要结合0层图的数据流做分析才能写出存储名称。
D1用户信息,D2基地信息,D3农事过程,D4农事活动
第三问,补缺少的数据流。写了第三方平台那里的农业过程和农业活动,另外两个写了啥也忘了。
第四问,具体加工的组成。按照以往试题的格式,要按照“加工=A+B+C”这样的格式写出,题干中有两个查询数据流,主要是对象不同,一个是针对内部用户的,一个是针对第三方平台的。同时,查询条件是可有可无的。至于内部用户要不要填账号和密码,这个我也不是很确定,但是我感觉没有这些信息系统怎么辨别身份呢,所以我是默认内部用户也有这两项信息的。然后把两个数据流合并为一个写
自己写的答案记不清了,大概是 “农事信息请求=账号+密码+0{密码}*”(好像我把后面的*漏掉了,T_T)
可以参考2019年上半年的这个格式
数据库
原文链接:https://blog.csdn.net/qq_33562122/article/details/130921688,作者:秋不溜啾。
背景:车库组装系统,有三个实体:车型、零件供应商、零件,联系是“采购”(不知道有没有记错),属性叫什么忘了,暂时用车型ID,供应商ID,零件ID来指代三个实体的主键吧,反正是一个意思。
第一问,补充ER图关系模式,把三个实体都连上中间的联系,分析题干有下图,都标上*。
网上的答案显示要加上采购的属性,不过我参考2019年那份题目的官方答案来看,是可以不加的,因为下面第二问要填入采购的属性,所以采购的属性还是待定的状态。
第二问,补充逻辑结构设计的属性,题干明确要标明完整性约束关系。标识方式看笔记,其实2019年上半年的题目也有。
待填入的两个空a、b都划在采购这个表下,而且车型ID和供应商ID来着,都被标为主键和外键,那零件ID也是并列关系,照葫芦画瓢就好了,因为没有零件ID的话是没办法确定采购的。
另外一个空,题干有写,缺了个采购数量
至于有些争议点在于零件ID能不能改成采购ID。我认为,少了零件ID不能关联零件表,采购数量是题干要求必须有。而且按照题意应该是要把车型ID、供应商ID、零件ID一齐作为联合主键来唯一标识采购表。所以这里应该是不能将零件ID改成采购ID。而且只有两个空,一个空只能填一个。
第三问,增加关系。增加门店销售情况信息。先分析题干得出与销售关联的实体,是门店和车型(提干没说门店卖零件),然后分析如下图
由于是多对多关系,多对多要把联系单独拿出来做表,所以销售表除了题干要求的属性之外,还应该有车型ID和门店ID,然后得出下面的草图。因为记不清了,没写完整,大概明白是什么意思就好。我做题是把完整性约束都标了,不标应该也可以,因为下面那个小问要单独写出来而且标明完整性。
属性的规范画法参考下图
最后那小问写逻辑设计关系模式的,参考题干的逻辑设计,也就是第2问的格式写出即可。因为题目要求,所以这里必须标明完整性约束关系,也就是主键实线,外键虚线。
UML
背景:图书馆系统,实体:校内用户User,学生Student,教师Teacher,其他在职人员 Staff,学术资源Resource,会议论文ConferencePaper,期刊论文JournalArticle,学位论文Thesis。
第一问,补充UML。C1-C8类名,C1与C2\C3\C4,C5与C6\C7\C8都是泛化关系,然后根据C2和C3对应下面一个聚合关系,按照题意Proceeding对应ConferencePaper,Edition对应JournalArticle,可以推出C1:Resoure,C2:ConferencePaper,C3:JournalArticle,C4:Thesis。然后C5与Search有联系,则C5:User,C6-C8:Student\Teacher\Staff,三者可以互换。
第二问,关键属性。这题有争议,因为不知道关键属性是怎么定义的,而且Search要允许按题名、作者、来源进行检索,这三项可能都是关键属性,然后就是主键,还有子类需要把父类的部分属性进行覆盖。
下面的是第三方提供的答案,仅供参考
C1:题名、作者、发表时间、来源、题名
C2:题名、作者、发表时间、会议名称,召开时间、来源、题名
C3:题名、作者、发表时间、期刊名称、期号、来源、题名
C4:题名、作者、发表时间、毕业学校,专业、来源、题名
第三问,设计模式。关键词,他引次数发生变化要及时通知其他用户,可推出是Observer模式。问原因就直接写意图就可以了(估计没人记得具体的几大使用场景吧),我把前面的“一系列对象的一对多的依赖关系”给漏了,不知道会不会给发分。。
参考答案
Observer(观测者)模式
定义一系列对象的一对多的依赖关系。当一个对象发生改变时,所有依赖于它的对象都将得到通知并自动更新。
算法与C语言
背景:图的深度遍历。
第一问,完形填空。不会而且记不清了,大概就是先审题,看懂题目再做,不过对于C语言不是很精通。P++,赋初值,count++,随便写了几个。等官方答案。
第二问,无向图的邻接表。基础知识了,画法参考这张图
注意1.下标,2.箭头要从右侧方框引出指向下一个方框,3.结尾要有结束符。结束符分开写也可以。
参考答案
面向对象程序设计
背景:inverval类,下界、上界
注意答题卡不要涂错题号,试题五是Java,试题六是C++,我就差点涂错了。然后我不会C++,下面是以Java来进行说明,但是题目是一样的,除了语法之外,原理是一样的。
解题原则看下面的笔记,这对于没有接触过代码或者少敲代码的学生党很重要。此外,读懂程序很重要。
和2019年上半年一样,也是考了Strategy模式
第一空是接口声明,把子类的实现方法doPrint搬到上面。
第二空突破口是最后的main方法,调用了getStrategy这个静态方法,而这个方法返回了PrintIntervals这个类。然后第二空是PrintIntervals类里调用了方法,传参就是它本身,this。
第三空到第五空都是并列关系,所以结构是一样的。而且都是在main方法中,外层被switch case包裹,这里是具体实例化具体的实现类来达到使用特定算法的目的,然后实例化对象要用st来接收进行下一步处理。所以结构都是st = new 具体的子类()
参考答案
1. void doPrint (interval val)
2. pr.doPrint(this)
3. st= new printIntervalsComma()
4. st = new prinIntervalsDots()
5. st = new printIntervalsLine()
2019年上半年的原题,可以做参考