一. 背景

四年前,我通过培训机构学习了 PMP,系统的学习了项目管理知识体系,说实话,学完感觉确实是有用的,尤其在项目管理方面,一些管理思维确实能够帮助到自己。

如果说 PMP 是国外的项目管理知识体系认证,那么国内也有相关的项目管理认证,叫做【信息系统项目管理师】,简称软考高项。由于它和 PMP 知识点重合度比较高,因此在通过 PMP 考试后,我也备考了这一项考试!但是由于当时市面上存在着各种题库,杂乱无章,有些还需要收费,看广告。因此我决定自己做一款适合自己考试的小程序,帮助自己顺利通过考试。

为了帮助广大的软考PMP 考试的朋友们,我特地的将我多年前做的这款小程序分享出来,不管是在 PMP 领域还是在软考的领域,希望给大家在考试的道路上助力成功。正巧最近我也优化了一些 UI,以及更新了一些题库,希望能够帮助到大家。

二. 有题记小程序

1. 已完成功能

  • 软考试题列表
  • PMP 试题列表
  • 考试模式(选择题、案例题、论文题)
  • 背题模式(选择题、案例题、论文题)
  • 基础知识学习

接下来我们看一下已完成功能的应用快照吧!

2. 首页-试题列表

经历了 PMP 和软考高项,我独立开发了一款做题小程序

3. 考试模式

经历了 PMP 和软考高项,我独立开发了一款做题小程序

4. 背题模式

经历了 PMP 和软考高项,我独立开发了一款做题小程序

5. 考试解析、答题卡

经历了 PMP 和软考高项,我独立开发了一款做题小程序

6. 重要知识点总结

经历了 PMP 和软考高项,我独立开发了一款做题小程序

三. 架构

总结一下我在开发这款小程序时所用到的一些技术栈,主要是基于 uni-app uniCloud 来开发的,不得不说,uni-app 用来开发小程序太便捷了!

1. 前端技术栈

经历了 PMP 和软考高项,我独立开发了一款做题小程序

(1)uni-app:基于 Vue 2.x

目前 uni-app 也已经有了支持 Vue 3.x 的版本,同时也有了 uni-app x 的问世,号称是下一代 uni-app,是一个跨平台应用开发引擎。然而我目前还没有精力去研究。

关于 uni-app,我写过了很多的文章,相关知识可以通过我的专栏进行了解,我会继续更新更多的有关 uni-app 的最佳实践解决方案,点击 专栏:uni-app 前端开发了解,免费订阅获取更新。

经历了 PMP 和软考高项,我独立开发了一款做题小程序

(2)UI 框架:uView UI 1.0

关于 UI 框架,其实就是各种封装的轮子,如果用的顺手,能够大幅度提升你的开发效率。因为当时 uni-app 刚起步不就,用的人不太多,比较好的 UI 框架也不多,所以我简单对比了以下几款:

  • ColorUI:一款高颜值 css 库,已经停止更新了好长时间。

  • 官方组件库: dcloudio/uni-ui,当时还不支持 npm 安装,坑巨多,现在可能好多了。

  • uView UI:提供了各种组件和工具库,挺好用。

对比这三款,它们各有优缺点。ColorUI 颜值高,但是内部的 css 样式修改了小程序的原生组件样式,我认为太粗暴了,就放弃了。官方组件库 uni-ui 太丑了,bug 也很多,也没选用。

最终选用的是 uView UI,也有一些问题,当时只有 1.0,并且还在不断完善中,现在也已经不断更新,也有了 uView 2.0,并且也兼容了 nvue

(3)个人开源框架 anyup/uni-ui

我崇尚简洁至上,仅需要简单的代码,就可以完成优秀的功能,能一行代码实现的功能,绝不两行代码。

因此,基于 uView UI,我又开发了一款适合自己项目的 uni-app 开源框架,与其说框架,不如说是为自己项目开发量身打造的工具库更为合适。

同时,这套工具库也是我在做 uni-app 项目中总结的一些最佳实践,公司内部使用良好。不过这也是多年前做的了,一直在断断续续维护中,最近也有计划,打算对它进行重构。

详细文档查看请点击:anyup/uni-ui 官方文档

经历了 PMP 和软考高项,我独立开发了一款做题小程序

2. 技术架构

可能通过 uni-app,你完全可以从 0 到 1 开发一款产品交付给用户了,不再需要复杂的后端开发、服务器运维了。当然还是仅限于简单项目,有多简单,可以自行体会。有题记小程序是我通过 uniCloud 云开发平台完成的前后端交互,数据存储、下载等功能,接下来简单介绍一下:了解 uniCloud,独立自主的开发一款应用。

我总结整理了一下技术架构图,如下所示:

经历了 PMP 和软考高项,我独立开发了一款做题小程序

(1)云开发

uniCloud 是 DCloud 联合阿里云、腾讯云、支付宝云等,为开发者提供的基于 serverless 模式和 js 编程的云开发平台。提供 2 个免费服务空间,可以让你也可以拥有自己的服务器。我目前创建的是阿里云的服务器空间,将有题记小程序的云函数、数据库、前端代码部署在上面

(2)云函数

云函数是指在云端(服务器端)运行的函数。无需购买、搭建服务器,编写代码并部署到云端即可在客户端(App/Web/小程序等)调用,同时云函数之间也可以互相调用。

一个云函数的写法与一个在本地定义的 JavaScript 方法一样,代码运行在云端 Node.js 中。当云函数被客户端调用时,定义的代码会被放在 Node.js 运行环境中执行。

之后,我们可以如在 Node.js 环境中使用 JavaScript 一样在云函数中进行网络请求等操作。

例如,一个最简单的云函数如下写法:

// 云函数入口文件 index.js
"use strict";
exports.main = async (event, context) => {
  // event为客户端上传的参数
  let c = event.a   event.b;
  // 通过return返回结果给客户端
  return {
    sum: c,
  };
};

(3)云数据库

uniCloud 提供了 2 个 nosql 数据库,如下:

  • JSON 文档型云数据库

阿里云版的云数据库是 MongoDB 的 serverless 版;数据库中的每条记录都是一个 JSON 格式的对象。对于我们 JavaScript 开发者而言,非常容易理解。

MongoDB 的传统操作方法还是比较复杂,uniCloud 提供了更多简单操作数据库的方案,包括类似 SQL 的 JQL 语法、clientDB 等技术,感兴趣的可以去官方网站了解。

  • redis 数据库

redis 是一种可以运行在内存中的键值对数据库,它的能力没有 MongoDB 强大,但由于可运行在内存中,它的性能远超常规数据库,同时它也使用 json 方式 key/value 键值对存储数据,目前我并没有使用到它,大家可以按需进行研究

关于操作数据库,在 uni-app 中,就如下述代码一样简单:

// 获取数据库对象的API
const db = uniCloud.database();
// 获取名为 `table1` 数据表的引用
const table1 = db.collection("table1");
// 调用 add 方法,给数据表新增数据记录
table1.add({ name: "anyup" });

(4)云存储

云存储提供稳定、安全、低成本、简单易用的云端存储服务,支持任意数量和形式的非结构化数据存储,例如图片、文档、音频、视频、文件等。

(5)前端网页托管

uniCloud 同时也提供了前端网页托管的功能,可以将网站打包成 Web 传入,为 html 网页提供快速、安全、省心,关键是便宜的网站发布。

总结:如果你想要独立自主的开发一款适合自己的小程序,uniCloud 是一个不错的选择,当然,如果你有服务器,还会写后端语言,uniCloud 云开发的方式玩玩也是可以的,文末加我,有机会我们共同探讨,玩转前端开发!

四. 功能规划

1. 短期规划

  • 微信登录
  • 题库更新
  • 题目收藏
  • 计时考试
  • 错题回顾
  • 论文鉴赏

2. 长期规划

虽然在目前,小程序仅仅做了软考高项和 PMP 的考试和知识点的学习,但是在我的规划中,是有将目前的软考相关考试整合到这款小程序中的,主要包括以下:

  • 高级:系统分析师、系统架构设计师、网络规划设计师、系统规划与管理师…
  • 中级:软件设计师、网络工程师…
  • 等等…

以上比较热门的考试,如果对这些考试的需求量大,我也可以考虑将题库引入。

五. 说明

1. 完全免费

在小程序中,所有题库免费查看,还有题目解析,而且没有任何广告。但是由于现在用的人少,就是担心将来用户增多,我那免费的服务器能否撑住?

2. 题库更新

目前仅仅上了做题系统,软考题库的的时间为 2018-2022,PMP 题库是基于第六版 PMBOK 指南教材的,后续有时间我会继续更新最新的题库。

因为我经历了 PMP 考试和软考高项。反向学习,通过题库汲取有用的知识,我觉得这是最能巩固自己记忆知识点的方式,当然肯定也需要你提前对基础知识的了解才可以,切勿盲做。

六. 获取

小程序名称:有题记

由于小程序未进行微信认证,当前在小程序市场搜索不到,同时在又不方便放二维码,所以通过以下方式获取。

  • 欢迎加我微信号:anyupxing,拉你进入考试技术交流群,大家共同学习,相互激励进步。

  • 欢迎关注公众号:前端梦工厂,通过公众号获取,技术分享并不局限于前端知识,可以是任何提升能力的分享。

结语

我当前是一名前端开发者,如果你愿意与我互相学习交流,欢迎来聊天;我们可以共同探讨前端技术,一同提升自我,查看沸点