考前的准备
考点包含软件工程概论、计算机编程与算法、操作系统、网络等知识。
软件项目活动图
软件活动图是一种用于描述软件系统中业务流程和工作流的 UML(统一建模语言)图形化工具。它以图形方式展示了系统中各个活动的执行顺序、并发关系以及决策点,帮助开发人员和相关利益者理解系统的动态行为。
关键路径为从开始节点到结束节点耗时最长的路径,决定了整个软件项目完成需要的最短时间。里程碑是项目过程中执行特定行为的活动,例如需求分析、软件设计等。

以上活动图关键路径:A →C → G →J →K
AD活动在AC活动开始后3天才开始,也就是延期三天,DG活动需要15天才完成,也就是延期5天,原来G节点结束日期取决于ACG路径,耗时25天,现在由于ADG路径耗时28天了,所以G节点实际要延期3天(28-25)结束。
计算磁盘存储位示图的字

题目会给出系统的字长、磁盘物理块的大小和磁盘的容量,则磁盘分物理块
1000*1024(M)/ 4M = 256000 个,按字长32位,也就是一个字32个物理块,则字的个数为256000/32=8000。
段页式存储计算

根据图示,容易得到每一页地址用12位来存储,页号和段号都用10位来存储,由此可以得出页大小2^12=4096,段和页号范围长度是2^10=1024。
最小生成树

能连接所有点的最小路径树。方法为,从一个顶点开始,选取可达的权值最小的边,将另一个顶点加入已到达顶点集合,之后从接下来可达的点集合中选取路径最小的、未遍历过的边加入,直到所有的顶点都被遍历。以下是最小生成树的解。

信号量
信号量作为进程之间通信的一种机制,可以唤醒进程或阻塞进程。进程和进程之间的一个依赖关系需要一个信号量,一个进程获取信号量之后才能进行,这个时候另一个进程就等待,也就是执行前先获取信号量,用P(S)表示,执行完释放信号量,用V(S)表示。

如上,假设进程跟进程之间共享的信号量如下:

当P1执行完,释放信号量S1,所以a是V(S1),P2执行完,释放信号量S2,所以b是V(S2),P3执行需要前面两个信号量,所以c是P(S1)和P(S2)。
哈夫曼树
将每个带有权值的节点组成一个二叉树,在编码场景中权值就是字符出现的概率。特点是除了根节点,其他节点都能两两向上合成新节点。之后编码的时候,每个节点为一个字符,从根节点到叶子节点的每一条路径都是一个编码后值。


CISC和RISC
CISC是复杂指令集,试图用少量指令完成复杂功能。使用于X86场景。兼容性好`,编程简单。效率低,功耗大。
RISC是精简指令集,包含指令数比较少,试图通过基本的指令组合完成复杂的功能,指令长度固定,适合流水线,寄存器数量多。优势执行效率高,低功耗,编译优化空间大。
选择题(综合题)
确定得分的
1、Linux外设目录是什么
/dev。存储磁盘的目录
2、Linux外设sdc类型设备属于什么
scsi hard disk。根据第一个字母s盲猜的
3、计算机中让程序计数器PC不能指向当前运行程序的技术是
流水线。根据流水线的原理
4、Python程序[a**2 for a in range(12345) if a % 2 == 0]的结果
[4,16]。取为偶数的
5、数据库的第三范式目的是?
消除传递依赖。数据库范式原理。
6、数据库()操作不会激活触发器
Select。查询语句不对数据库表结构做改动,不会激活触发器
7、数据库分组后筛选条件用?
having。group by having的用法。
8、进程间同步于互斥
信号量。通过信号量控制
9、有6个进程,每个进程需要3个资源R,最少需要几个资源不发生死锁?
13。设想发生了死锁的场景,也就是每个进程都要等待,那么最少每个进程已经拥有了两个资源R,此时每个进程都还需要1个R形成了循环等待,这个时候只要再来一个资源R,就能打破这种循环等待。所以12+1=13
10、下面哪项属于适应性维护?
改进系统使其可以在新的操作系统上运行。为适应新的环境(操作系统)
11、分布式存储系统中地址结构,系统字长32位,31~12位分页,11~0位页内地址
页大小4K,页数1M。
12、哪个不在关键路径上
c
13 最大延期天数
3
14 时间戳可以防止什么攻击
重放攻击
15 团队成员水平差异大
重分配
16 二分查找 不可能是什么序列
17 开源软件
18 哈弗曼编码
19 栈操作数
20 时钟周期
21传值传参
22违背单一原则
23数据流分层越多越不清晰
24适合瀑布模型
25无向图遍历
26软件配置管理不包括 项目计划
27 频繁调用的临时变量存储在寄存器效率最高
28产品裂变细化目的:明确任务优先级
29二叉树表达式
30模块划分明细是微服务
31测试用例分组是等价类划分
32计算所有点的欧氏距离
33天气变化手机更新,观察者模式
34事务不互相干扰,是隔离性
35模块间接口问题发现,通过集成测试
36从阻塞进入ready,是阻塞事件完成了
37对象之间是怎么通信的?消息
38采用策略模式
39策略模式是对象行为型
40该算法使用于算法的不同变体
41该模式是将算法封装使其可以相互替换
专业英语
independent、how、migrating、issues、optimize/suit
不太确定得分
状态图两个题、矩阵上三角、A类地址
应用题
智慧农业
1、用例补充。实时监控、自定义配置
2、实体补充。Ai、农业技术员、农业专家、
3、需要在不同场景使用不同的算法。使用策略模式。以及原因是包装了不同算法以便可以相互替换。
智慧医疗
1、腕表、Ai、医生
2、血糖记录、个性建议、提醒
3、缺失数据流。只找出个性化建议那个
4、可视化信息、干预信息组成
拍卖
艺术家、艺术品、拍卖行、拍卖。
1、艺术家id(外键)
艺术品id(外键)
2、加入创作关系,关联到艺术家和艺术品,加*表示多的关系。
回溯代码题
算法题:子数组和
#include <stdio.h>
#include <stdlib.h>
// 全局变量
int *A; // 输入数组
int M; // 目标和
int *remaining_sum; // 剩余和数组
int n; // 数组长度
int found = 0; // 是否找到解
// 打印数组函数
void printArray(int path[], int path_len) {
printf("[");
for(int i = 0; i < path_len; i++) {
printf("%d", path[i]);
if(i < path_len - 1) printf(",");
}
printf("]");
}
// 回溯函数
void backtracking(int index, int current_sum, int path[], int path_len) {
// 找到一个解
if(current_sum == M) {//空1,填写找到解的条件
found = 1;
printArray(path, path_len);
return;
}
// 剪枝条件1:如果当前和加上剩余所有元素和小于M,返回
if(current_sum + remaining_sum[index] < M) return; // 空(2)剪枝就是return
// 边界检查
if(index >= n) return;
// 单层if判断,满足条件则选择当前元素
if(current_sum + A[index] <= M) { //空3,说明累加还不到M,可以加入当前元素尝试搜素
path[path_len] = A[index];
backtracking(index + 1, current_sum + A[index], path, path_len + 1);
}
// 尝试下一个元素 if(current_sum + remaining_sum[index+1] >= M) {
backtracking(index + 1, current_sum, path, path_len);}
}
int main() {
printf("请输入数组长度: ");
scanf("%d", &n);
// 动态分配内存
A = (int*)malloc(n * sizeof(int));
remaining_sum = (int*)malloc(n * sizeof(int));
printf("请输入数组元素:\n");
for(int i = 0; i < n; i++) {
scanf("%d", &A[i]);
}
// 计算remaining_sum数组
remaining_sum[n-1] = A[n-1];
for(int i = n-2; i >= 0; i--) {
remaining_sum[i] = remaining_sum[i+1] + A[i]; // 空(4)剩下元素的和,上个计算值加上当前元素
}
printf("请输入目标和M: ");
scanf("%d", &M);
int *path = (int*)malloc(n * sizeof(int));
printf("\n查找和为 %d 的所有子序列:\n", M);
backtracking(0, 0, path, 0); // 空(5)整行代码
if(!found) {
printf("没有找到符合条件的子序列\n");
}
// 释放内存
free(A);
free(remaining_sum);
free(path);
return 0;
}
输入数组A={1,2,3,4,5},M=5,结果为([1, 4][2, 3][5])
最坏时间复杂度为:()
适配器题
public interface MediaPlayer {
public ___(1)__void play(String audioType, String fileName) _;
}
public interface AdvancedMediaPlayer {
public __(2)___void playVlc(String fileName);
public __(3)___void playMp4(String fileName);
}
public class VlcPlayer implements AdvancedMediaPlayer{
public void playVlc(String fileName) {
System.out.println("Playing vlc file. Name: "+ fileName);
}
public void playMp4(String fileName) {
//
}
}
public class Mp4Player implements AdvancedMediaPlayer{
public void playVlc(String fileName) {
//
}
public void playMp4(String fileName) {
System.out.println("Playing mp4 file. Name: "+ fileName);
}
}
public class MediaAdapter implements MediaPlayer {
private AdvancedMediaPlayer___(4)____advancedMusicPlayer;
public MediaAdapter(String audioType){
//
}
public void play(String audioType, String fileName) {
//
}
}
public class AudioPlayer implements MediaPlayer {
_private MediaAdapter__(5)____ mediaAdapter;
public void play(String audioType, String fileName) {
/
}
}
4万+

被折叠的 条评论
为什么被折叠?



