2024-05-23
藏龙卧虎
00

简介

UML图是一种统一建模语言(Unified Modeling Language)的图形表示,用于描述软件系统的结构和行为。它是一种标准化的图形化语言,被广泛应用于软件开发领域,用于可视化、规划和构建软件系统。UML图提供了一种可视化的方法来描述系统的各个方面,包括静态结构、动态行为、交互和用例等。常见的UML图包括类图、用例图、时序图、活动图、状态图等。

下面是几个常见的分类:

  1. 类图(Class Diagram):描述系统中的类、属性和方法之间的关系,是静态结构的表示。
  2. 用例图(Use Case Diagram):描述系统中的功能需求和用户之间的交互,以及系统对外部实体的行为。
  3. 时序图(Sequence Diagram):描述系统中对象之间的交互顺序,特别适用于描述系统的动态行为。
  4. 活动图(Activity Diagram):描述系统中的活动流程和控制流程,用于展示系统中的业务流程或算法流程。
  5. 状态图(State Diagram):描述系统中对象的状态以及状态之间的转换,用于表示对象在不同状态下的行为变化。

关注公众号“月上老狗”,发送“软件设计师”,获取历年软件设计师软考真题。

image

常见考点

  1. 活动图的关键路径:活动图的关键路径是指开始到结束,距离(耗时)最长的路径。
2024-05-23
温故知新
00

提示:本地新建 html 文件,拷贝代码填入文件后,浏览器查看即可查看效果。

html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Collapsible Tree with D3.js</title> <script src="https://d3js.org/d3.v7.min.js"></script> <style> /* 定义节点样式 */ .node { cursor: pointer; } .node circle { fill: #fff; stroke: steelblue; stroke-width: 3px; } .node text { font: 12px sans-serif; } .link { fill: none; stroke: #ccc; stroke-width: 2px; } </style> </head> <body> <script> // 定义树数据结构 var treeData = { name: "Root", children: [ { name: "Child 1", children: [ { name: "Grandchild 1.1" }, { name: "Grandchild 1.2" } ] }, { name: "Child 2" } ] }; // 定义树图的边距和尺寸 var margin = { top: 20, right: 120, bottom: 20, left: 120 }, width = 960 - margin.right - margin.left, height = 500 - margin.top - margin.bottom; var i = 0, duration = 750, // 动画持续时间 root; // 创建树布局 var tree = d3.tree().size([height, width]); // 创建对角线生成器 var diagonal = d3.linkHorizontal().x(d => d.y).y(d => d.x); // 创建SVG容器 var svg = d3.select("body").append("svg") .attr("width", width + margin.right + margin.left) .attr("height", height + margin.top + margin.bottom) .append("g") .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); // 将数据转换为树节点 root = d3.hierarchy(treeData, d => d.children); root.x0 = height / 2; root.y0 = 0; // 初始折叠函数,递归折叠所有子节点 function collapse(d) { if (d.children) { d._children = d.children; // 将子节点保存到隐藏节点中 d._children.forEach(collapse); d.children = null; // 清空子节点,实现折叠 } } // 初始化时折叠所有子节点 root.children.forEach(collapse); update(root); // 更新树图 function update(source) { // 将数据映射为树布局 var treeData = tree(root); // 获取所有节点和链接 var nodes = treeData.descendants(), links = treeData.links(); // 标准化节点深度 nodes.forEach(d => { d.y = d.depth * 180 }); // ****************** 节点部分 ****************** // 使用唯一ID绑定数据 var node = svg.selectAll('g.node') .data(nodes, d => d.id || (d.id = ++i)); // 为新节点添加g元素 var nodeEnter = node.enter().append('g') .attr('class', 'node') .attr('transform', d => 'translate(' + source.y0 + ',' + source.x0 + ')') .on('click', click); // 绑定点击事件 // 添加圆形元素表示节点 nodeEnter.append('circle') .attr('r', 1e-6) .style('fill', d => d._children ? "lightsteelblue" : "#fff"); // 添加文本标签 nodeEnter.append('text') .attr('dy', '.35em') .attr('x', d => d.children || d._children ? -13 : 13) .attr('text-anchor', d => d.children || d._children ? "end" : "start") .text(d => d.data.name); // 过渡更新节点 var nodeUpdate = nodeEnter.merge(node); // 将节点过渡到新位置 nodeUpdate.transition() .duration(duration) .attr('transform', d => 'translate(' + d.y + ',' + d.x + ')'); // 更新节点样式 nodeUpdate.select('circle') .attr('r', 10) .style('fill', d => d._children ? "lightsteelblue" : "#fff"); // 过渡移除旧节点 var nodeExit = node.exit().transition() .duration(duration) .attr('transform', d => 'translate(' + source.y + ',' + source.x + ')') .remove(); // 在退出时缩小节点 nodeExit.select('circle') .attr('r', 1e-6); nodeExit.select('text') .style('fill-opacity', 1e-6); // ****************** 链接部分 ****************** // 使用唯一ID绑定数据 var link = svg.selectAll('path.link') .data(links, d => d.target.id); // 为新链接添加path元素 var linkEnter = link.enter().insert('path', 'g') .attr('class', 'link') .attr('d', d => { var o = { x: source.x0, y: source.y0 }; return diagonal({ source: o, target: o }); }); // 过渡更新链接 var linkUpdate = linkEnter.merge(link); // 将链接过渡到新位置 linkUpdate.transition() .duration(duration) .attr('d', diagonal); // 过渡移除旧链接 var linkExit = link.exit().transition() .duration(duration) .attr('d', d => { var o = { x: source.x, y: source.y }; return diagonal({ source: o, target: o }); }) .remove(); // 将旧位置存储以便过渡 nodes.forEach(d => { d.x0 = d.x; d.y0 = d.y; }); // 点击事件处理函数 function click(event, d) { if (d.children) { d._children = d.children; d.children = null; // 折叠子节点 } else { d.children = d._children; d._children = null; // 展开子节点 } update(d); // 更新树图 } } </script> </body> </html>
2024-05-23
温故知新
00

记录一下这个脚本,以后有需要可以来参考。

python
import os import sys def rename_files(folder_path): # 遍历指定文件夹下的所有文件 for filename in os.listdir(folder_path): # 检查文件是否是文件而不是文件夹 if os.path.isfile(os.path.join(folder_path, filename)): # 检查文件名是否以'.mp4'结尾 if filename.endswith('.mp4'): # 提取新文件名(删除原名称中‘ 中文字幕’开始到‘.mp4’之前的全部内容) new_filename = filename.split(' 中文字幕')[0].split('.mp4')[0] + '.mp4' # 重命名文件 os.rename(os.path.join(folder_path, filename), os.path.join(folder_path, new_filename)) print(f'Renamed {filename} to {new_filename}') if __name__ == "__main__": # 检查命令行参数是否提供了文件夹路径 if len(sys.argv) != 2: print("Usage: python rename_files.py <folder_path>") else: folder_path = sys.argv[1] # 检查文件夹路径是否存在 if not os.path.isdir(folder_path): print(f"Error: Folder '{folder_path}' does not exist.") else: # 调用函数处理文件夹中的文件 rename_files(folder_path)
2024-05-22
温故知新
00

简介

本文用于记录软考中,关于系统设计、架构设计、编程思想相关的题目。 包括但不限于:

  1. 面向对象
  2. 编程行为
  3. 编译语言、脚本语言
  4. 系统需求、行为分析

这部分知识点大多需要有一定的工作经验才好理解。如有想要记录的题目,欢迎评论补充!

关注公众号“月上老狗”,发送“软件设计师”,获取历年软件设计师软考真题。

image

2024-05-22
温故知新
00

简介

本文用于记录软考中,关于计算机基础和操作系统相关的考试题目,因为这两部分的知识点很零散,每次考试不一定考到哪些知识点,所以可能会记录很多题目。

包括但不限于:

  • 海明校验码
  • 内存、缓存
  • 计算机系统架构

如有想要记录的题目,欢迎评论补充!

关注公众号“月上老狗”,发送“软件设计师”,获取历年软件设计师软考真题。

image