软件工程形式化方法初学体会

最近在上一门叫做新技术讲座的课,我估计好多同学是看到讲座这两个字感觉这课会很水才选的,但实际上这门课讲的内容是非常硬核的软件工程形式化方法,而且授课老师也是国内第一批研究软件工程形式化方法的教授,现任日本埼玉大学教授,且上课非常认真负责,每节课都有课堂练习。不过了解了软件工程形式化的概念后,发现这个研究方向真的了不得,简直可以颠覆整个软件行业。 在早期的软件开发过程中,开发者们往往拿到问题后就直接开始编码,软件往往会出现各种各样的问题,大部分软件的质量十分低下,被称为“软件危机”。为了解决软件质量低下的问题,人们提出了软件工程化的思想,也就是目前主流的软件开发方式,引入了从需求分析到最后编码实现这一系列的过程,以及需要遵守的一系列规范,并定义了如CMMI这样的规范性等级。然而软件工程里面有很多内容的规范是非常主观的,没有一个确定的评定标准,另外很多步骤只能尽量争取正确,但根本无法确保正确,比如对于软件的测试,在软件测试这门课中就了解到全覆盖基本上是不可能完成的,并提出了语句覆盖、判定覆盖、条件覆盖等一系列只能尽量争取正确的测试覆盖。而且在执行的过程中,就算是CMMI 5级的开发单位也往....

阅读全文 »

三种实现 AJAX 的方法以及 Vue 和 axios 结合使用的坑

前言 之前曾经想自己写一个天气的App,并找到了一个免费的天气数据接口的服务商——和风天气,当时也不懂怎么发HTTP请求,而且也只会用Java语言,看到官方文档里面有一个Java代码示例,就复制了一下在自己电脑上调通。一开始是在控制台输出天气数据的,后来用Swing写了一个图形化界面并放置数据,但也就到此为止了,并没有什么实用价值。 最近学习了一下前端的相关知识,发现像和风天气这样的数据接口,根本不需要用到像Java这样的大型语言,只需在网页端用Javascript发HTTP请求就能获得JSON数据,之后再渲染到HTML网页,大大节省了资源利用和开发时间,并了解到开发这样的网页最适合的方式就是使用AJAX,因为它可以实现网页的局部更新。这样我就可以实现如下的业务场景:输入想要搜索的城市,点击搜索,下面显示出该城市的天气信息,而不影响页面的其他内容。有时候JS调用AJAX请求会有跨域问题,但和风天气的数据接口并没有这个问题。 具体场景 界面如图: 在输入框输入城市名,点击搜索按钮,可以在下面显示出各项数据(从接口获得)。 大致的HTML代码如下: <div class="cont....

阅读全文 »

使用 docsify 并定制以使它更强大

背景 经常在网上看到一些排版非常漂亮的技术手册,左边有目录栏,右边是Markdown格式的文档,整个配色都十分舒服,就像一本书一样,一看就很让人喜欢。就比如Markdown Preview Enhanced的文档.目前网上我了解的有两种工具可以实现这样的效果,一种叫做docsify,另一种叫做Gitbook。因为MPE文档用的是docsify,而且据docsify自己的宣传,说是 不同于 GitBook、Hexo 的地方是它不会生成将 .md 转成 .html 文件,所有转换工作都是在运行时进行。 这将非常实用,如果只是需要快速的搭建一个小型的文档网站,或者不想因为生成的一堆 .html 文件“污染” commit 记录,只需要创建一个 index.html 就可以开始写文档而且直接部署在 GitHub Pages。 所以我也就用它来做吧。这里先放上我的成品:https://aopstudio.github.io/docs 入门基础 具体的一些基本操作它的官方文档上面都已经写得很明白了,我就不再赘述了,官方文档地址:https://docsify.js.org/#/zh-cn/ 。....

阅读全文 »

在 Markdown 中使用数学公式

背景 $\TeX$是一款经典的文本排版软件,由计算机科学界的巨匠高德纳(Donald E. Knuth)开发。高德纳有一套著名的书籍叫做《计算机程序设计的艺术》,他在写这本书的时候觉得当时其他的排版工具的效果都不能让自己满意,于是就自己开发了一套排版工具。这让我想到Ken Thompson和Dennis Ritchie为了玩一个游戏而开发出了Unix操作系统,然后为了继续完善Unix操作系统而开发出了C语言的故事,简直如出一辙。大神们总能做出一些平常人想都不敢想的事情。 $\TeX$可以为一整篇文献排版出非常漂亮整洁的效果,尤其对于数学公式的支持特别好,因此在学术界,特别是理工学界非常通用,IEEE等著名学会都要求以$\TeX$格式提交论文。我曾经尝试使用了一下,感觉排版出来的效果真的是非常专业,但是如果只是写短篇笔记的话和Markdown比起来速度慢很多,于是我还是选择了Markdown作为写笔记的工具。但是原生的Markdown是不支持数学公式的,而我作为理工科的学生经常需要记下数学公式,不过Markdown可以通过扩展语法的方式来使用$\TeX$语法的数学公式,很多Markdow....

阅读全文 »

本博客启用 https 的过程 有更新!

申请SSL证书 我的博客部署在阿里云服务器上,因此我就先搜索阿里云启用https的方法,网上有比较详细的讲解,在此提供一个参考网址: https://blog.csdn.net/cslucifer/article/details/79077831 修改nginx配置文件 我的博客设置了nginx作为前置服务器反向代理Tomcat的内容,因此需要配置的是nginx的证书而不是Tomcat的。我看了一下阿里云官方文档中证书下载页的详情文档,nginx的配置方法比Tomcat简单很多,哈哈,看来真是一个明智的选择。 这个时候出现了一个问题,我找不到nginx的配置文件nginx.conf了。按照网上说的nginx安装目录死活找不到。没办法,只能动用Linux的查找文件的功能了。Linux有若干个不同的查找文件的方法。其中find是最简单粗暴的命令,就是在指定目录中一个个地找,速度比较慢。另一个命令是locate,它的执行速度很快,因为是在建立了文件索引的数据库中查找。我之前并没有使用过locate命令,只是在书上看到过,这次是第一次实际操作。当我输入locate nginx.conf时,意想....

阅读全文 »

数据库多表联合查询——笛卡尔积、自然连接、左外连接、右外连接、全外连接等介绍

前言 面试的时候被面试官问到关于数据库多表查询的方式,其实以前都是学过的,但我当时只记得笛卡尔积(也没记起来这个术语,只知道是逗号分隔表名)和自然连接,有点惭愧。现在再重新整理并记录下来。 使用的表例子 来源于Abraham Silberschatz等著的《数据库系统概念(第6版)》中大学数据库的例子,可以参考这个链接:https://blog.csdn.net/m0_37961948/article/details/88426110 笛卡尔积 如果不限定任何条件,则表1中的每个元组和表2中的每个元组都会进行组合。这样的组合通常是没有意义的,一般会用where子句来限定查询的条件。比如我们想要查询每个教师的姓名和他教授的所有课程ID,我们就可以这样写 select name,course_id from instructor,teaches where instructor.ID=teaches.ID 如果不加where子句进行限定,那么查询出来就会有老师对应到其他老师教授的课程的结果。 自然连接 自然连接只考虑在两个表中都出现的属性上取值相同的元组对。回到instructor和te....

阅读全文 »

关于封装、继承、多态的学习心得

前言 封装、继承、多态是面向对象语言的三大特性。笔者主修的是 Java 语言,在刚学 Java 的时候老师就反复告诉我们这三个词。不过之前一直也只是知道个大概。最近又仔细看了一下网上的一些解析,决定记录一下自己的学习心得。 开门见山——三者的关系 我认为这三者并不是三个平行的概念,而是一个层层递进的关系,即封装是最基本的,有了封装以后才能实现继承,在封装和继承的基础上才能实现多态。 一切的基石——封装 封装就是把一类数据和与这类数据的相关操作封装起来,数据不能随意被访问和改动,只能通过公开的接口来进行增删改查。Java 里面为了实现封装,设置了四个访问修饰符,分别是: public:public 修饰的成员变量或方法,项目中的任何类都可以访问 protected:只有同个包内的类和自己的子类能访问 friendly(不写):只有同个包内的类能访问,也就是说就算有个子类,但它在其他的包中,也不能进行访问 private:只有自己这个类能访问 一般在实践中,对于所有成员变量都会有用 private 进行修饰,同时设置公开的 get 和 set 方法来访问和修改成员变量的值。除此之外,再....

阅读全文 »

neo4j 数据库简介

neo4j 数据库是一个高性能的 NoSQL 图形数据库。它的存储结构非常类似于数学中的图,以结点和结点之间的关系为存储的基本内容。neo4j 中的图指的是有向图,所有的关系都必须是有方向的,如果试图创建没有方向的关系会失败。它非常适合存储关系错综复杂的数据,如知识图谱、人脉网等。neo4j 中没有分库分表的概念,所有结点和关系都存在一个库中。由于没有表结构,因此它非常适合存储半结构化数据,扩展性极好。 neo4j 名字的来源应该是《黑客帝国》中的尼奥(neo),因为在它的管理界面有个教程演示就是创建《黑客帝国》的图谱。4j 则是指为 Java 而生,和 log4j 等一众 4j 结尾的软件一样。 安装 neo4j 的官网地址为:https://neo4j.com/,但访问十分缓慢。neo4j 数据库不需要进行安装,直接运行软件包中的 bin/neo4j.bat 文件即可使用。但是官网的下载速度过于缓慢,下载一个压缩包需要好几个小时,就算是迅雷加速也没用,而且最新版的 neo4j 只支持 Java11 以上的版本,所以不推荐使用这种方式运行。本人推荐在 docker 中安装运行 neo....

阅读全文 »

《钢铁洪流进行曲》钢琴谱

国庆放假的时候抽空编配了这首曲子的钢琴谱,分享在此。水平有限,谱子里有不少问题,请多多包涵 PDF文件和PNG图片的压缩包链接如下: 钢铁洪流进行曲.zip PNG图片展示如下:

阅读全文 »

我在 GitHub 上的开源项目

  1. aopstudio.github.io HTML 🤩0  ⭐️13  🖖9  🏠https://aopstudio.github.io 使用Github Pages生成的静态页面 2. Notes Java 🤩0  ⭐️5  🖖4 课堂笔记 3. Graph Java 🤩0  ⭐️4  🖖0 将邻接矩阵和邻接表转换为可视化的图 4. PAT-Practice C++ 🤩1  ⭐️1  🖖0 PAT甲级刷题代码和解析 5. VBlearning Visual Basic 🤩1  ⭐️1  🖖0 A project for learning VB.NET 6. vue-cli Vue 🤩1  ⭐️0  🖖0 前端工程学习 7. InterviewPrepare 🤩2 &nbsp....
阅读全文 »