高级软件工程总结 SA20225470 韦懿
在本学期的高软课程中,我一共完成了五个实验:
1.VSCode 主要是快捷键的使用
2.Git及其常用场景
3.正则表达式的使用
4.使用VSCode中的 draw.io 画UML用例图
5.实验验证软件中的一些特殊机制
1VSCode快捷键
- Ctrl/⌘+Shift+E 文件资源管理器
- Ctrl+Shift+G 源代码管理
- Ctrl/⌘+Shift+F 跨文件搜索
- Ctrl/⌘+Shift+D 启动和调试
- Ctrl/⌘+Shift+P 查找并运行所有命令
- Ctrl/⌘+Shift+M 查看错误和警告
- Ctrl/⌘+Shift+X 管理扩展插件
- Ctrl+` 切换集成终端
- Ctrl/⌘+O 打开文件夹
- Ctrl/⌘+N 新建文件
- Ctrl/⌘+S 保存文件
- Ctrl/⌘+F搜索
- Ctrl+1、2、3… 选中某个文件编辑器
2git
2.1Git 本地版本库用法参考
git init # 初始化一个本地版本库 git status # 查看当前工作区(workspace)的状态 git add [FILES] # 把文件添加到暂存区(Index) git commit -m "wrote a commit log infro” # 把暂存区里的文件提交到仓库 git log # 查看当前HEAD之前的提交记录,便于回到过去 git reset —hard HEAD^^/HEAD~100/commit-id/commit-id的头几个字符 # 回退 git reflog # 可以查看当前HEAD之后的提交记录,便于回到未来 git reset —hard commit-id/commit-id的头几个字符 # 回退
2.2Git 远程版本库用法参考
git remote管理本地版本库跟踪的远程存储库的命令 git fetch git push git clone git pull(拉取)是实际上是 git fetch + git merge
同步操作
git pull git push
合并分支原理
Git版本管理的基础,是按行对比(line diff)将差异的部分作为一个增量补丁,通过git add添加到暂存区里的每一个文件都会由line diff得到该文件的增量补丁,而git commit将暂存区里的所有文件的增量补丁合并起来存入仓库就是一个commit。
2.3团队项目中的分叉合并
git checkout -b mybranch 创建分支 git branch 查看分支列表 git merge mybranch 合并mybranch分支到当前的master分支 git merge --no-ff mybranch 合并后保留分支
团队项目工作流程参考
1、克隆或同步最新的代码到本地存储库;
git clone https://DOMAIN_NAME/YOUR_NAME/REPO_NAME.git git pull
2、为自己的工作创建一个分支,该分支应该只负责单一功能模块或代码模块的版本控制;
git checkout -b mybranch git branch
3、在该分支上完成某单一功能模块或代码模块的开发工作;多次进行如下操作:
git add FILES git commit -m "commit log"
4、最后,先切换回master分支,将远程origin/master同步最新到本地存储库,再合并mybranch到master分支,推送到远程origin/master之后即完成了一项开发工作。
git checkout master git pull git merge --no-ff mybranch git push
2.4Git Rebase
如果你想让"mywork"分支历史看起来像没有经过任何合并一样
$ git checkout mywork $ git rebase origin
http://gitbook.liuhui998.com/4_2.html
2.5Fork + Pull request
3正则表达式
匹配多个字符 |
区分大小写
VSCode 默认忽略大小写 Alt+C设置
vim 默认大小写敏感 set ignorecase 设置为忽略大小写;通过:set noignorecase 恢复到大小写敏感的状态。\c 表示大小写不敏感,\C 表示大小写敏感,比如/ignorecase\c
通配符的基本用法
通配符“.”将匹配任意一个字符。通配符也可称为 dot 和 period。你可以像正则表达式中的任何其他字符一样使用通配符。例如,如果你想匹配“hug”,“huh”,“hut”和“hum”,可以使用正则表达式hu.来匹配这所有四个字符串。 通配符“+”用来查找出现一次或多次的字符,例如hahhhhh,可以使用正则表达式hah+来匹配。 通配符“*”匹配零次或多次出现的字符,使用正则表达式hah*来匹配,还可以匹配ha字符串。 通配符“?”指定可能存在的元素,也就是检查前一个元素存在与否,如正则表达式colou?r、favou?rite中通配符“?”前面的u字符存在和不存在两种情况的字符串都会匹配。
{}的使用
要匹配字符串"aaah"中出现 3 到 5 次的 a,你的正则表达式将是a{3,5}h; 仅匹配字符串"haaah"与至少出现 3 次的字母 a,正则表达式将是/ha{3,}h; 为了仅匹配"hah"中出现 3 次的字母 a,你的正则表达式将是/ha{3}h。
匹配具有多种可能性的字符集
[] 你要匹配"bag","big"和"bug",而不是"bog"。你可以创建正则表达式/b[aiu]g 来执行此操作 - 字符集[0-5]匹配 0 和 5 之间的所有数字,包括 0 和 5。 ^ [^aeiou]排除元音的所有字符。
贪婪匹配 vs. 懒惰匹配
正则表达式默认贪婪匹配,即匹配最长字符串
?可以改为懒惰匹配 例如:t[a-z]*?i正则表达式会返回["ti"]
一些特殊位置和特殊字符
插入字符“^”用于表示字符串的开头。 美元字符“$”表示字符串的末尾。
如在"Ricky is first and can be found”查找开头的 Ricky 则为^Ricky,查找结尾的 found 则为/found$
可以使用\s 搜索空格,这是一个小写的 s 即 space 之意。此模式不仅匹配空格,还包括回车、制表符、换页和新行字符。你可以将其看作与字符集[\r\t\f\n\v]类似。 使用\S 搜索非空格,这是一个大写的 S。此模式将不匹配空格、回车符、制表符、换页和新行字符。你可以想象它类似于字符类[^\r\t\f\n\v]。
捕获组
匹配字符串中连续出现三次的数字,每个数字由空格分隔,如(\d+)\s\1\s\1。
Vim 中基本的字符串搜索替换方法
:n1,n2s/word1/word2/g,以:开头,n1 与 n2 为数字,即在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 字符串 其中 s 是 substitute 的简写,表示执行替换字符串操作;最后的/g 是 global 的简写,表示全局替换。另外与/g 的用法相似,/c 是 comfirm 的简写,表示操作时需要确认;/i 是 ignorecase 的简写,表示不区分大小写。
在 100 到 200 行之间搜寻 regex 并取代为 RegEx 则为:100,200s/regex/RegEx/g。
:1,$s/word1/word2/g 或 :%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 字符串
:1,$s/word1/word2/gc 或 :%s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 字符串,且在取代前显示提示信息给用户确认 (confirm) 是否需要取代。
复用捕获组的方式进行替换
如果想将项目中所有的HTML标题标签中h改为大写H,搜索正则表达式<h(\d)>可以查找出所有标题标签,如<h1>、<h2>、<h3>、<h4>等,其中还定义了捕获组(\d)。替换的正则表达式<H$1>使用$1复用了搜索正则表达式中定义的捕获组(\d)
在Vim中,复用捕获组的方式进行替换的用法为:1,$s/(capture groups)/$1/g
如果想在当前文件中将所有的HTML标题标签中h改为大写H则正则表达式为:1,$s/<h(\d)>/<H$1>/g
4.UML用例图
本实验时配置vscode,安装draw.io插件,并使用该插件绘制uml用例图,画起来十分方便而直观,以下是我与同学的工程实践的一个UML用例图,用draw.io画出来:
5.软件中的一些特殊机制
回调函数
/*
* Search a LinkTableNode from LinkTable
* int Conditon(tLinkTableNode * pNode,void * args);
*/
tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode, void * args), void * args);
多态
闭包
function makeFunc() { var name = "Mozilla"; function displayName() { alert(name); } return displayName; } var myFunc = makeFunc(); myFunc();
异步调用
var promise = new Promise(function(resolve, reject) { if (/* 异步操作成功 */){ resolve(value); } else { reject(error); } }); promise.then(function(value) { // resolve(value) // success }, function(value) { // reject(error) // failure });
原文地址:https://www.cnblogs.com/greatweiyiyi/p/15024214.html
- ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程
- 机器学习实战之决策树
- 初学ReactJS,写了一个RadioButtonList组件
- 今天,你有微信小游戏提交审核吗?
- 云计算,迷你版线程同步
- Kubernetes 年度关键进展回顾
- 比较一下以“反射”和“表达式”执行方法的性能差异
- 人工智能芯片是什么?有什么用?
- 柯洁食言“复出”再战AI:明年4月见分晓
- 深入探讨ASP.NET MVC的筛选器
- pytorch自然语言处理之Pooling层的句子分类
- su命令cannot set groups: Operation not permitted的解决方法
- 利用腾讯云 COS 云对象存储定时远程备份网站
- 腾讯云技术公开课:零基础入门高可用云端架构设计
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Rust日报】2020-08-08:用rust制作的一个Taskwarrior终端用户界面
- 【Rust日报】2020-08-09:1Paasword Linux版本
- 聊聊dubbo-go的failfastCluster
- Caused by: java.lang.ClassNotFoundException: Cannot find class: userMap
- 链路聚合实验
- 聊聊dubbo-go的failsafeCluster
- Phenotype : 大规模表型数据处理工具
- 聊聊dubbo-go的registryAwareCluster
- 老伙计,关于JDK并发包,这些不为人知的秘密你知道多少?
- 不能错过的分布式ID生成器(Leaf ),好用的一批
- 微信小程序开发实战(20):TabBar导航
- 饿了么备注输入框-不吃辣-少放辣-多放辣-不吃蒜-不吃香菜等
- From High Ceph Latency to Kernel Patch with eBPF/BCC
- JConsole、VisualVM 依赖的 JMX 技术到底是什么
- DHCP 中继实验