高级软件工程总结 SA20225470 韦懿

在本学期的高软课程中,我一共完成了五个实验:

1.VSCode 主要是快捷键的使用

2.Git及其常用场景

3.正则表达式的使用

4.使用VSCode中的 draw.io 画UML用例图

5.实验验证软件中的一些特殊机制

1VSCode快捷键

  1. Ctrl/⌘+Shift+E 文件资源管理器
  2. Ctrl+Shift+G 源代码管理
  1. Ctrl/⌘+Shift+F 跨文件搜索
  2. Ctrl/⌘+Shift+D 启动和调试
  1. Ctrl/⌘+Shift+P 查找并运行所有命令
  2. Ctrl/⌘+Shift+M 查看错误和警告
  1. Ctrl/⌘+Shift+X 管理扩展插件
  2. Ctrl+` 切换集成终端
  1. Ctrl/⌘+O 打开文件夹
  2. Ctrl/⌘+N 新建文件
  1. Ctrl/⌘+S 保存文件
  2. Ctrl/⌘+F搜索
  1. 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
});

 

 

posted @ 2021-07-17 16:57  韦懿  阅读(69)  评论(0编辑  收藏  举报