当前位置: 首页 > news >正文

基于ThinkPHP8 + Vue3 + element-ui-plus + 微信小程序(原生) + Vant2 的 BBS论坛系统设计【PHP课设】

一、BBS论坛功能描述

我做的是一个论坛类的网页项目,每个用户可以登录注册查看并发布文章,以及对文章的点赞和评论,还有文件上传和个人签名发布和基础信息修改,管理员对网站的数据进行统计,对文章和文件的上传以及评论进行审核,以及对普通的用户的权限提升账号封停等等,以及对应的crud。

然后做的是三端(PC端,小程序端)并且采用前后端分离以及JWT技术和RestFull风格API,后端使用ThinkPHP8,PC端使用vue3+element-ui-plus,Axios异步通信以及诸多扩展,微信小程序端使用原生的微信小程序技术+vant2 UI组件库,数据库使用mysql8.0.3.

功能分为以下几个模块

  1. 用户端
    (1) 用户的登录注册模块(均使用token鉴权的技术,后续的每个操作都是建立在token上面,密码使用md5加密)
    (2) 用户的个人基础信息修改保存,以及头像上传(采用的是上传到本地服务器中,然后返回对应的域名Url并且更新到数据库表中)
    (3) 用户的签名信息发布及历史签名查看
    (4) 不同用户的文章发布,文章发布大致包括标题,封面插图,摘要信息,以及内容(内容部分使用了markdown的渲染及保存
    (5) 文章的评论(可以一级评论和二级评论)
    (6) 文章的点赞和文章的访问量模块(访问量做的是每次点击进入对应的文章时,访问量加一)
    (7) 所有文章的概览,分页以及多条件查询
    (8) 文件上传(支持任意格式的文件,文件上传后需要管理员进行审核才能看到)
    (9) 文件下载及浏览
    (10) 天气组件(使用高德天气,实时的查询当天的天气并且进行渲染)
    (11) 看板娘扩展(使用Live2d)制作了一个看板娘,点击时会触发语音及文字通知
    (12) 鼠标点击特效(使用原生的js完成,原理就是一个大的canvas进行绘制)
    (13) 页面整体颜色的切换(使用vue操控dom元素完成)
    (14) 网易云音乐组件(使用网易云外链工具,然后添加了切换歌曲上下首)
    (15) 聊天机器人(基于青云客接口,并且自行封装了chat界面)
    (16) 友链

  2. 管理员端
    (1) 用户的增删改查,及用户账号的注销封停和启用
    (2) 评论的增删改查,及不当评论的过滤删除
    (3) 文章的审核,增删改查
    (4) 文件的审核,以及增删改查
    (5) 网站的统计信息部分(注册统计图表,不同模块的文章数统计图表,每天的top5文章访问量统计图表)
    (6) 天气组件(使用高德天气,实时的查询当天的天气并且进行渲染)
    (7) 看板娘扩展(使用Live2d)制作了一个看板娘,点击时会触发语音及文字通知
    (8) 鼠标点击特效(使用原生的js完成,原理就是一个大的canvas进行绘制)
    (9) 页面整体颜色的切换(使用vue操控dom元素完成)

  3. 小程序端
    (1) 文章模块的概览
    (2) 文章的查询和浏览
    (3) 文章的评论及点赞
    (4) 用户的登录和注册
    (5) 用户的头像上传
    (6) 用户的基本信息修改
    (7) 用户的签名信息发布

二、系统效果图

(一)PC端部分(展示一些部分图)

在这里插入图片描述

在这里插入图片描述在这里插入图片描述|
在这里插入图片描述| 在这里插入图片描述
在这里插入图片描述| 在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

(二)小程序端 (展示一些部分图)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三、技术说明

(一)后端部分

后端的技术使用了PHP语言的ThinkPHP8框架,并且采用了前后端分离的技术(前端负责处理页面的展示和用户交互,后端则负责提供数据和业务逻辑处理。前端通过发送请求获取数据,后端接收到请求后处理数据并返回JSON格式的响应)通过JSON接口的方式与前端进行交互,RestFull风格API以及JWT token鉴权和Cores跨域配置,多种类型文件的上传与处理

后端项目中,使用到了多模块设计,分为index和admin两个模块(但是尚未使用另一个模块)。前端发送的请求通过基础的mvc架构去处理,自定义了状态码枚举类和restfull API通用JSON返回格式。

(二)PC端前端部分

PC端使用了Vue3,和element-ui-plus UI 框架,通过手动封装的axios异步网络请求库进行请求的发送和响应处理,通过vite配置反向代理服务器,实现前端的跨域配置

自定义了一个基于element-ui-plus container布局容器的布局组件,可以实现页面布局的自适应。

使用了particles3 粒子背景插件,实现登录页面的粒子背景和交互点击特效。

集成了vue-md-editor markdown编辑器,实现了论坛中markdown格式文章的发布以及markdown格式文章的渲染

以及高德地图天气API接口和青云客聊天机器人接口,从而实现论坛中天气组件的天气的实时获取以及聊天机器人功能的实现。

最后还使用了基于live2d的看板娘插件,实现论坛中看板娘的交互点击特效。

(三)移动端-纯原生微信小程序

微信小程序端,使用了原生的微信小程序技术,UI 框架使用的是Vant Weapp2同时集成了iconfont中的图标组件,通过原生的wx.request去发送请求。自定义了页面中的tabbar组件,实现微信小程序点击tabbar进行页面的切换;集成了towxml第三方插件,实现微信小程序页面中去渲染markdown格式的文本(即将其转换为富文本格式再进行渲染)。

四、代码部分

代码很多,我直接放我的git仓库的地址了

(一)后端

在这里插入图片描述

PS :仓库地址 https://gitee.com/zhweb2022/bbs-course-thinkphp

(二)vue端

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

PS :仓库地址 https://gitee.com/zhweb2022/bbs-course-vue

(三)微信小程序部分

在这里插入图片描述

在这里插入图片描述

PS :仓库地址 https://gitee.com/zhweb2022/bbs-course-wechatapp

五、数据库部分

/*Navicat Premium Data TransferSource Server         : mysqlSource Server Type    : MySQLSource Server Version : 80031Source Host           : localhost:3306Source Schema         : bbsTarget Server Type    : MySQLTarget Server Version : 80031File Encoding         : 65001Date: 24/11/2023 10:35:34
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for articles
-- ----------------------------
DROP TABLE IF EXISTS `articles`;
CREATE TABLE `articles`  (`id` int(0) NOT NULL AUTO_INCREMENT COMMENT '文章id',`uid` int(0) NOT NULL COMMENT '用户id',`author` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '发布人',`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户头像',`blockid` int(0) NOT NULL COMMENT '文章属于哪个板块id',`blockpath` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '板块路径',`img` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '文章封面',`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文章内容',`like` int(0) NOT NULL COMMENT '点赞数',`ctime` datetime(0) NOT NULL COMMENT '文章发布时间',`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文章标题',`count` int(0) NULL DEFAULT NULL COMMENT '文章浏览量',`comment` int(0) NULL DEFAULT NULL COMMENT '文章评论数',`status` int(0) NOT NULL DEFAULT 0 COMMENT '状态码',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 27 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of articles
-- ----------------------------
INSERT INTO `articles` VALUES (1, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 5, '日常模块/天道酬勤', 'http://robin.com/storage/index/20230910/fd5c75163b09b766248fddd51f2caeb7.jpg', '# 嗯~ o(* ̄▽ ̄*)o,阿良不猛!\n>簪子上有八个字,便是仅算粗通文墨的少女,也觉得极为动人。 言念君子,温其如玉。\n\n白泽转头,伸手指向那座只说规模、不太起眼的雄镇楼,“屋舍就牢固了,世上家家相亲,孝如卯榫,在家中遮风避雨不难了,推开门去,读书越多,琢磨越多,忠义礼仪就自然而然跟上了。要我说啊,以后哪天门内世道变得亲情疏离,夫妻离散无负担,门外世道人人为己,傻子太少,聪明人太多,那个世道才是真正在往下走,因为世道这个屋舍的细微处,越来越失去黏性了。所以这也是老秀才当年不愿首徒崔瀺太早推出“事功学问”的原因所在,不是那头绣虎的学问不好,而是一个不慎,就会弊端太大,到时候至圣先师、礼圣亲自出手补救,都难有成效。父子之间,夫妻之间,若是都要斤斤计较利益得失,那就会比释道两家更早进入人心上的末法时代。\n\n\n\n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231002%2F1b8d89a73be34aade27dc2dc4242af8e.jpeg&pos_id=img-VLmszo8Q-1700793364904)\n\n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231005%2F15bcc97c4de2718e12e1cde9bdc4be7c.png&pos_id=img-OjyyrVN6-1700793364905)\n\n粒子特效ok拉!!!\n\n## QAQ  okoo 二级标题\n\n### ..... 三级标题\n#### @@@@@@ 四级标题', 1, '2023-09-08 15:36:28', '言念君子,温其如玉。', 82, 22, 1);
INSERT INTO `articles` VALUES (2, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 8, '技术模块/JAVA技术', 'http://robin.com/storage/index/20231002/bc509b0b5fc1a695ce08940957410a59.jpg', 'JVM作为Java运行的基础,很难相信对于JVM一点都不了解的人可以把Java语言吃得很透。我在面试有超过3年Java经验的开发者的时候, JVM几乎就是一个必问的问题了。当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证Java开发能力的高低。\r\n\r\n\r\n\r\n在JVM这个大类中,我认为需要掌握的知识有:\r\n\r\nJVM内存模型和结构\r\n\r\nGC原理,性能调优\r\n\r\n调优:Thread Dump, 分析内存结构\r\n\r\nclass 二进制字节码结构, class loader 体系 , class加载过程 , 实例创建过程\r\n\r\n方法执行过程\r\n\r\nJava各个大版本更新提供的新特性(需要简单了解)', 2, '2023-09-09 22:18:32', 'JVM', 24, 4, 1);
INSERT INTO `articles` VALUES (3, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 8, '技术模块/JAVA技术', 'http://robin.com/storage/index/20231002/cf3c770a1490c727d64b4c32de0979c6.jpg', '多线程是Java中普遍认为比较难的一块。多线程用好了可以有效提高cpu使用率, 提升整体系统效率, 特别是在有大量IO操作阻塞的情况下;但是它也是一柄双刃剑, 如果用不好,系统非但提升不大,或者没有提升,而且还会带来多线程之间的调试时等问题。\n\n在多线程中内容有很多,只是简单说明一下Java中初步使用多线程需要掌握的知识点,以后有机会单独再详细介绍一些高级特性的使用场景。\n\n# 多线程的实现和启动\n\n## callable 与 runable 区别\n\nsyncrhoized ,reentrantLock 各自特点和比对\n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231002%2F7047e31eab7f053618c710184834679c.png&pos_id=img-EmczkEzC-1700793364906)\n线程池\n\nfuture 异步方式获取执行结果\n\nconcurrent 包\n\nlock', 1, '2023-09-09 22:21:15', '多线程并发', 27, 0, 1);
INSERT INTO `articles` VALUES (4, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 8, '技术模块/JAVA技术', 'http://robin.com/storage/index/20230910/5ffc4c42c1e9059e060c640c661c41b7.jpg', '>其实这两块内容都不是J2SE里面的内容,但是在日常开发中,和其他程序交互,和配置文件交互,越来越离不开这两种格式的解析。\n\n>不过对于一个开发者来说,能够了解一些XML/JSON具体解析的原理和方法,有助于你在各个具体的场景中更好的选择合适你的方式来使得你的程序更有效率和更加健壮。\nXML: 需要了解 DOM解析和 SAX解析的基本原理和各自的适用场景\nJSON: 需要了解一些常用JSON框架的用法, 如 Jackson, FastJson, Gson 等。。\n\n\n# xml(Extensible Markup Language)可拓展标记语言\n1)XML的简单易于在任何应用程序中读/写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其他的数据交换格式,但不久之后它们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS、Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析它,并以XML格式输出结果。\n\n2)xml可用作数据的说明、储存、传输\n\n举个例子:假设一个微信群里面小明发了一条消息“你吃过没”。而这条消息发出后会被储存到服务器里,而当你进入微信的时候,这条消息就会从服务器里抓取过来显示到你的手机上。而这个抓取的过程中假设是以xml文件来传输(也有json,json和xml用途很相似,json、xml都有自己的格式,但其实都只是包装数据时格式不同而已,重要的是其中含有的数据,而不是包装的格式。这里只是举个例子)这时,我们用通俗易懂的文字来表示就是:\n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231002%2F3c5b66a81c460e58e4dd6cd47949446a.png&pos_id=img-Ajee4AQ8-1700793364906)', 0, '2023-09-10 07:44:33', 'XML解析/ JSON解析', 11, 2, 1);
INSERT INTO `articles` VALUES (5, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 8, '技术模块/JAVA技术', 'http://robin.com/storage/index/20230910/2736a1211aae97f7eef0573d6fa87740.jpg', 'Maven也不是Java里面的内容,但是maven是革命性的,给Java开发带来了巨大的便利。从依赖的引入和管理,开发流程的更新和发布产出,乃至版本的更新,使用maven可以大大简化开发过程中的复杂度,从而节省大量时间。可以说,maven已经成为Java开发者的标配了。所以我把maven也作为一个Java开发者对于基础必备的知识点。以后会再放上一些我的一些对于maven使用的经验和技巧等,这里就不再细说了。\r\n\r\nMaven也不是Java里面的内容,但是maven是革命性的,给Java开发带来了巨大的便利。从依赖的引入和管理,开发流程的更新和发布产出,乃至版本的更新,使用maven可以大大简化开发过程中的复杂度,从而节省大量时间。可以说,maven已经成为Java开发者的标配了。所以我把maven也作为一个Java开发者对于基础必备的知识点。以后会再放上一些我的一些对于maven使用的经验和技巧等,这里就不再细说了。\r\n\r\nMaven也不是Java里面的内容,但是maven是革命性的,给Java开发带来了巨大的便利。从依赖的引入和管理,开发流程的更新和发布产出,乃至版本的更新,使用maven可以大大简化开发过程中的复杂度,从而节省大量时间。可以说,maven已经成为Java开发者的标配了。所以我把maven也作为一个Java开发者对于基础必备的知识点。以后会再放上一些我的一些对于maven使用的经验和技巧等,这里就不再细说了。\r\n\r\n', 0, '2023-09-10 09:44:33', 'Maven的使用', 7, 0, 1);
INSERT INTO `articles` VALUES (6, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 8, '技术模块/JAVA技术', 'http://robin.com/storage/index/20230910/5ffc4c42c1e9059e060c640c661c41b7.jpg', '几乎对于每个应用来说,时间日期的处理也是绕不过去的,但是JDK8 之前的时间相关API用法并不友好。在那个时代,可以选择Joda等时间框架。到了JDK8 发布之后,全新的时间API基本融合了其他框架的优点,已经可以很好的直接使用了。\r\n\r\n对于Java开发者来说,需要熟练地使用API来对时间和日期做相关的处理。', 0, '2023-09-10 09:44:33', '时间日期处理', 1, 0, 1);
INSERT INTO `articles` VALUES (9, 10, 'ccc', 'http://robin.com/storage/index/20231004/3afab15bcd3cfa3074dc5f79b9584a13.jpeg', 4, '日常模块/聊天灌水', 'http://robin.com/storage/index/20230910/f21e49e6063bb951a0a2377a9a8635df.jpg', '今日台词:陆抬缓缓说道这人间不来也罢', 0, '2023-09-10 15:59:33', '可恶的剑来!!!', 5, 1, 1);
INSERT INTO `articles` VALUES (10, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', 4, '日常模块/聊天灌水', 'http://robin.com/storage/index/20230910/61ae8c6129e4f02a711427a3f96e158e.jpeg', '啦啦啦啦啦', 0, '2023-09-10 16:12:20', '向阳花木易为春2', 8, 0, 1);
INSERT INTO `articles` VALUES (11, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 4, '日常模块/聊天灌水', 'http://robin.com/storage/index/20230911/2d7b3a70c8eb95df57c43b3ffdd7fa64.jpeg', '胸中一点浩然气,天地千里快哉风。\n摘自《水调歌头·黄州快哉亭赠张偓佺》\n苏轼\n落日绣帘卷,亭下水连空。知君为我新作,窗户湿青红。长记平山堂上,欹枕江南烟雨,杳杳没孤鸿。认得醉翁语,山色有无中。\n一千顷,都镜净,倒碧峰。忽然浪起,掀舞一叶白头翁。堪笑兰台公子,未解庄生天籁,刚道有雌雄。 一点浩然气,千里快哉风。\n\n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231002%2F570a4eda950fc87b692b733b57a68bf6.png&pos_id=img-g8xvYNmm-1700793364906)', 1, '2023-09-11 18:48:14', '逆水寒测试', 11, 0, 1);
INSERT INTO `articles` VALUES (12, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', 4, '日常模块/聊天灌水', 'http://robin.com/storage/index/20231002/9d7b70dd3391ae5a223855f9a093f7f0.jpeg', '好家伙,就差echarts基本完事了\nづ♡ど\n\n◍\'ㅅ\'◍ つ♡⊂ Ծ‸Ծ\n\n(୨୧ᵕ̤ᴗᵕ̤)\n\n(///∇//)\n\n(♡˙︶˙♡)\n\n(づ◡ど)\n\n(๑ơ ₃ ơ)♥ ♡(˃͈ દ ˂͈ ༶ )\n\n❀(///▽///)❀\n\n(Д゚෴°д)\n\n略略略\n```text\n        /*\n                           _ooOoo_\n                          o8888888o\n                          88\" . \"88\n                          (| -_- |)\n                          O\\  =  /O\n                       ____/`---\'\\____\n                     .\'  \\\\|     |//  `.\n                    /  \\\\|||  :  |||//  \\\n                   /  _||||| -:- |||||-  \\\n                   |   | \\\\\\  -  /// |   |\n                   | \\_|  \'\'\\---/\'\'  |   |\n                   \\  .-\\__  `-`  ___/-. /\n                 ___`. .\'  /--.--\\  `. . __\n              .\"\" \'<  `.___\\_<|>_/___.\'  >\'\"\".\n             | | :  `- \\`.;`\\ _ /`;.`/ - ` : | |\n             \\  \\ `-.   \\_ __\\ /__ _/   .-` /  /\n        ======`-.____`-.___\\_____/___.-`____.-\'======\n                           `=---=\'\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n                 佛祖保佑       永无BUG\n        */\n```\n------------------------------------\n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231002%2F2534655ab95773333123ff3a5f0d25e1.jpeg&pos_id=img-noOgoENb-1700793364906)\n滚去写代码!', 0, '2023-09-29 09:14:08', '测bug的一天', 20, 0, 1);
INSERT INTO `articles` VALUES (16, 10, 'ccc', 'http://robin.com/storage/index/20231004/3afab15bcd3cfa3074dc5f79b9584a13.jpeg', 11, '技术模块/微信小程序', 'http://robin.com/storage/index/20231001/c9b2aff9ae4b34f03e0750ba25d02089.jpg', '模块启用测试\n\n------------------------------------\n\n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231002%2F87a0400e0b4940fb14dfcff26335b2ff.png&pos_id=img-UybG778g-1700793364907)', 0, '2023-10-01 15:40:30', '模块启用下线测试', 8, 0, 1);
INSERT INTO `articles` VALUES (17, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', 12, '技术模块/php', 'http://robin.com/storage/index/20231002/0c8f2701e5674242a5326d28de2cc2d3.png', '# 测试普通文本\n\nMarkdown 是一种轻量级标记语言,创始人为约翰·格鲁伯(John Gruber)。 它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者HTML)文档。这种语言吸收了很多在电子邮件中已有的纯文本标记的特性。\n由于 Markdown 的轻量化、易读易写特性,并且对于图片,图表、数学式都有支持,许多网站都广泛使用 Markdown 来撰写帮助文档或是用于论坛上发表消息。 如 GitHub、Reddit、Diaspora、Stack Exchange、OpenStreetMap 、SourceForge、简书等,甚至还能被使用来撰写电子书。\n\nJohn Gruber在2004年创造了Markdown语言,在语法上有很大一部分是跟亚伦·斯沃茨(Aaron Swartz)共同合作的。这个语言的目的是希望大家使用“易于阅读、易于撰写的纯文字格式,并选择性的转换成有效的XHTML(或是HTML)”。 其中最重要的设计是可读性,也就是说这个语言应该要能直接在字面上的被阅读,而不用被一些格式化指令标记(像是RTF与HTML)。 因此,它是现行电子邮件标记格式的惯例,虽然它也借鉴了很多早期的标记语言,如:Setext、Texile、reStructuredText。\n标准化\nMarkdown已经成为典型的转换为HTML的非正式规范 [1] 和参考实现。随着时间的推移,出现了许多Markdown实现。人们开发这些主要是由于在基本语法之上需要额外的功能 - 例如表格,脚注,定义列表(技术上的HTML描述列表)和HTML块内的Markdown。其中一些行为偏离了最开始的参考实现。与此同时,非正式规范中的一些含糊不清引起了人们的注意 [2] 。这些问题促使Markdown解析器的一些开发人员努力实现标准化。\n2016年3月发布了RFC 7763和RFC 7764。RFC 7763 从原始变体引入了MIME类型 text/markdown。RFC 7764讨论并注册了MultiMarkdown、GitHub Flavored Markdown (GFM)、Pandoc、CommonMark及Markdown等变体。 [3]\nCommonMark\n\n摘抄够啦   \n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231002%2F4fe9adf54695f92115667474207043ac.jpg&pos_id=img-4mFN8jSM-1700793364907)\n\n# 代码段测试\n\n```javascript\nlet a =10 ;let b =20;\n```\n\n# 图片测试\n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231002%2F940185a131ae7f9f882124fba03f0a8b.jpg&pos_id=img-cv504Mvj-1700793364907)\n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231002%2F573959548f2df34d6c2db87344dd5c85.jpg&pos_id=img-CaQz3dKe-1700793364907)', 2, '2023-10-02 02:30:07', '测试markdown文章', 16, 2, 1);
INSERT INTO `articles` VALUES (18, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', 10, '技术模块/vue技术2', 'http://robin.com/storage/index/20231002/c182ce55779bd5dc82a24219c3d65f58.jpg', '# v-md-editor\n推荐使用 v-md-editor\nv-md-editor 是基于 Vue 开发的 markdown 编辑器组件\n\n1. 轻量版编辑器\n轻量版编辑器左侧编辑区域使用 textarea 实现。\n\n优点:足够轻量\n缺点:不支持更为丰富的编辑区功能扩展。例如:无法根据不同的语法在输入框内显示不同的样式。\n\n2. 进阶版编辑器\n进阶版编辑器左侧编辑区域使用 CodeMirror (opens new window)实现。\n\n优点:可以根据 CodeMirror 提供的 Api 来自定义扩展编辑区域功能,提高编辑体验。\n缺点:文件体积远大于轻量版\n\n3. 预览组件\n当你只需要对 markdown 语法进行解析并预览的时候,可以使用该组件。\n\n4. html 预览组件\n当你只需要对保存后的 html 文本进行预览的时候,可以使用该组件。\n\n5. 特性\n高度可定制化,高度可扩展性,支持自定义主题包,提供开箱即用的主题包,提供多个组件。可按需使用。\n\n# 使用\n\n## 1.markdown编辑器\n这里只讲基于vue3的使用\n\n先去挂载,然后再使用\n```javascript\nimport { createApp } from \'vue\';\nimport VMdEditor from \'@kangc/v-md-editor\';\nimport \'@kangc/v-md-editor/lib/style/base-editor.css\';\nimport githubTheme from \'@kangc/v-md-editor/lib/theme/github.js\';\nimport \'@kangc/v-md-editor/lib/theme/style/github.css\';\n\n// highlightjs\nimport hljs from \'highlight.js\';\n\nVMdEditor.use(githubTheme, {\n  Hljs: hljs,\n});\n\nconst app = createApp(/*...*/);\n\napp.use(VMdEditor);\n```\n\n页面使用\n```html\n<template>\n  <v-md-editor v-model=\"text\" height=\"400px\"></v-md-editor>\n</template>\n\n<script>\nexport default {\n  data() {\n    return {\n      text: \'\',\n    };\n  },\n};\n</script>\n```\n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231002%2Ffe016ca7a567c07db8bf122b1249e4b9.png&pos_id=img-vYWWB0KP-1700793364908)\n\n## 2.markdown格式渲染\n```javascript\nimport VMdPreview from \'@kangc/v-md-editor/lib/preview\';\nimport \'@kangc/v-md-editor/lib/style/preview.css\'\n\n// markdown解析需要的配置项目\nimport githubTheme from \'@kangc/v-md-editor/lib/theme/github\';\nimport \'@kangc/v-md-editor/lib/theme/style/github.css\';\nimport hljs from \'highlight.js\';\n\nVMdPreview.use(githubTheme, {\n    Hljs: hljs,\n });\n```\n\n前端渲染html\n```html\n<template>\n <v-md-preview :text=\"content\"></v-md-preview>\n</template>\n<script setup>\n import {ref} from \'vue\'\n const content =ref(\"\") \n</script>\n```\n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231002%2F3d4e542a39202d21e05fb8de891b4b0c.png&pos_id=img-Nr1LoHSa-1700793364908)\n\n\n|列1|列2|列3|\n|-|-|-|\n|content1|content2|content3|\n***', 0, '2023-10-02 02:48:22', 'vue3中使用markdown插件的用法', 50, 1, 1);
INSERT INTO `articles` VALUES (19, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 8, '技术模块/JAVA技术', 'http://robin.com/storage/index/20231002/c7c31c5c0486a9760fce7974ae11250b.png', '# 设计模式--适配器模式 Adapter Pattern\n\n## 1.1 基本介绍\n\n(1)适配器模式将某个类的接口转换成为客户端期望的另一个接口表示,主要的目的是兼容性,让原本应接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper).\n\n(2)适配器模式属于结构型模式\n\n(3)主要分为三类:类适配器模式、对象适配器模式、接口适配器模式\n\n\n\n## 1.2 工作原理\n\n1. 适配器模式:将一个类的接口转换成为另一种接口,让原本接口不兼容的类可以兼容。\n2. 从用户的角度看不到被适配者,是解耦的。\n3. 用户调用适配器转换出来的目标接口方法,适配器再调用被适配者的相关接口方法。\n4. 用户收到反馈结果,感觉只是和目标接口交互。\n\n\n\n# 类适配器模式\n\n例子:电脑的电源适配器将(家庭用电)电压220伏特转换为5伏特,然后给电脑供电。\n\n\n\n\n\n被适配者类:\n\n```java\npackage com.robin.adapter.classAdapter;\n\n// 被适配者类\npublic class Voltage220V {\n\n    public int outPut220V(){\n        int srcV = 220;\n        System.out.println(\"[初始-家庭家用电压]电源电压:\"+srcV+\"伏特\");\n        return srcV;\n    }\n}\n\n```\n\n适配接口:\n\n```java\npackage com.robin.adapter.classAdapter;\n\n// 适配接口\npublic interface ICpVoltage5V {\n\n    public int outPut();\n}\n\n```\n\n电脑类:\n\n```java\npackage com.robin.adapter.classAdapter;\n\npublic class Computer {\n\n    public void charge(ICpVoltage5V iCpVoltage5V){\n        int i = iCpVoltage5V.outPut();\n        if (i==5){\n            System.out.println(\"[电源适配器]电压为5伏特,可以开始充电使用了!\");\n        }else{\n            System.out.println(\"[电源适配器]电压不正常,请检查或者更换电源适配器\");\n        }\n    }\n}\n\n```\n\n适配器类:\n\n```java\npackage com.robin.adapter.classAdapter;\n\n// 适配器类\npublic class CpVoltageAdapter extends Voltage220V implements ICpVoltage5V{\n\n    @Override\n    public int outPut() {\n        // 因为是继承关系,所以调用其父类的 电源电压输出\n        int src = outPut220V();\n        // 对220V电压进行简单转换\n        int dest = src/44;\n        return dest;\n    }\n}\n\n```\n\n测试客户端类:\n\n```java\npackage com.robin.adapter.classAdapter;\n\npublic class Client {\n\n    public static void main(String[] args) {\n        Computer computer = new Computer();\n        // 通过传入其适配器类的对象来进行充电\n        computer.charge(new CpVoltageAdapter());\n        // [电源适配器]电压为5伏特,可以开始充电使用了!\n    }\n}\n\n```\n\n\n\n类适配器模式的优点和缺点:\n\n1. 缺点:Java是单继承,但再类适配器模式中,**适配器类需要继承被适配的类**,失去了灵活性。并且**被适配者类的方法都会在适配器类中暴露出来**,增加了使用的成本。\n2. 优点:因为适配器类继承了被适配者类,所以适配器类可以根据需求,灵活的重写被适配者类。\n\n\n\n# 对象适配器模式\n\n对象适配器模式针对上面的类适配器模式进行了一些修改,**通过合成复用来代替原本的继承关系**。\n\ntip:对象适配器模式是适配器模式中常用的一种。\n\n\n\n例子:还是上面的电脑电源的适配器问题,进行修改,将其改为对象适配器模式的。\n\n我们只需要将适配器类中取消继承被适配的类,然后在适配器类中提供一个被适配类的成员变量及构造器即可。\n\n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=C%3A%5C%5CUsers%5C%5Crobin%5C%5CAppData%5C%5CRoaming%5C%5CTypora%5C%5Ctypora-user-images%5C%5Cimage-20230211173224059.png&pos_id=img-GXszZ5y5-1700793364908)\n\n\n\n被适配者类:\n\n```java\npackage com.robin.adapter.objectAdapter;\n\n// 被适配者类\npublic class Voltage220V {\n\n    public int outPut220V(){\n        int srcV = 220;\n        System.out.println(\"[初始-家庭家用电压]电源电压:\"+srcV+\"伏特\");\n        return srcV;\n    }\n}\n\n```\n\n\n\n适配接口:\n\n```java\npackage com.robin.adapter.objectAdapter;\n\n// 适配接口\npublic interface ICpVoltage5V {\n\n    public int outPut();\n}\n\n```\n\n\n\n电脑类:\n\n```java\npackage com.robin.adapter.objectAdapter;\n\n\npublic class Computer {\n\n    public void charge(ICpVoltage5V iCpVoltage5V){\n        int i = iCpVoltage5V.outPut();\n        if (i==5){\n            System.out.println(\"[电源适配器]电压为5伏特,可以开始充电使用了!\");\n        }else{\n            System.out.println(\"[电源适配器]电压不正常,请检查更换电源适配器\");\n        }\n    }\n}\n\n```\n\n\n\n适配器类:\n\n```java\npackage com.robin.adapter.objectAdapter;\n\n// 适配器类\npublic class CpVoltageAdapter implements ICpVoltage5V {\n\n    // 合成复用 将被适配类聚合到适配器类中\n    private Voltage220V  voltage220V = null;\n\n    // 提供被适配类的构造器\n    public CpVoltageAdapter(Voltage220V voltage220V) {\n        this.voltage220V = voltage220V;\n    }\n\n    // 重写适配接口中的方法\n    @Override\n    public int outPut() {\n        if (null != voltage220V){\n            int srcV = voltage220V.outPut220V();\n            int dstV = srcV/44;\n            System.out.println(\"电源电压适配完成,电源电压=\"+dstV);\n            return dstV;\n        }\n        return -1;\n    }\n}\n\n```\n\n\n\n客户端测试类:\n\n```java\npackage com.robin.adapter.objectAdapter;\n\npublic class Client {\n\n    public static void main(String[] args) {\n        System.out.println(\"对象适配器模式\");\n        Computer computer = new Computer();\n        computer.charge(new CpVoltageAdapter(new Voltage220V()));\n    }\n}\n\n```\n\n\n\n对象适配器模式与类适配器模式基本一致,只是通过合成复用代替继承,解决了类适配器产生的继承局限问题,使用成本更低更灵活。\n\n\n\n# 接口适配器模式\n\n接口适配器模式的思想:当不需要全部实现接口提供的方法时,可以先设计一个抽象类实现接口,并为该接口中的每个方法提供一个默认实现(空方法体),那么该抽象类的子类可以有选择的覆盖父类的某些方法来实现需求。\n\n接口适配器模式适用于不想使用一个适配接口中所有方法的情况,按照自己的需求来挑选合适的方法自行实现。\n\n\n\n比如,你要去旅游了,每个国家插座插孔和电压都不一样,你带了一个万能转换器(比如:wp-933)\n\n\n然后各国插座如下:\n\n\n\n\n暂且假定该万能转换插孔只提供一个空的插孔,需要你去自定义实现(我例子举得不是很好...有点牵强)\n\n\n\n万能插孔适配接口:\n\n```java\npackage com.robin.adapter.interfaceadpter;\n\n// 万能插孔适配接口\npublic interface AllJacks {\n\n    // 德国标准\n    public void germanJack();\n    // 欧洲标准\n    public void europeanJack();\n    // 中国,澳大利亚标准\n    public void chinaAndOzJack();\n    // 美国标准\n    public void usaJack();\n    //......\n}\n\n```\n\n万能插孔抽象类实现接口中的所有方法,提供空方法体:\n\n```java\npackage com.robin.adapter.interfaceadpter;\n\n// 抽象类实现万能适配接口,实现全部接口方法,提供空方法体\npublic abstract class AbsAllJacksAdapter implements AllJacks {\n\n    // 德国\n    @Override\n    public void germanJack() {\n\n    }\n\n    // 欧洲\n    @Override\n    public void europeanJack() {\n\n    }\n\n    // 中国和澳大利亚\n    @Override\n    public void chinaAndOzJack() {\n\n    }\n\n    // 美国\n    @Override\n    public void usaJack() {\n\n    }\n}\n\n```\n\n\n\n客户端测试:\n\n```java\npackage com.robin.adapter.interfaceadpter;\n\npublic class Client {\n\n    public static void main(String[] args) {\n        // 中国电脑插孔为三孔,方形\n        String srcJack = \"[三孔]三方形孔\";\n        // 假设我现在旅行去美国\n        AbsAllJacksAdapter absAllJacksAdapter = new AbsAllJacksAdapter(){\n            @Override\n            public void usaJack() {\n                System.out.println(\"=============使用万能转化器转换=============\");\n                // 美国电压为 100-130V,插孔为三孔,两方一圆\n                String destJack = \"[三孔]两方一圆孔\";\n                System.out.println(\"[插孔适配完毕]:\"+srcJack+\"==>\"+destJack);\n            }\n        };\n        absAllJacksAdapter.usaJack();\n    }\n}\n\n```\n\n\n\n\n# 小结\n\n适配器模式的三种方式,也其实就是被适配类,如何被适配器类获取使用的(类=>继承,对象=>合成复用,接口)。Adapter适配器模式的最大作用就是将原本不兼容的接口融合在一起工作。', 0, '2023-10-02 04:46:21', 'csdn文章迁移测试', 11, 1, 1);
INSERT INTO `articles` VALUES (20, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 11, '技术模块/微信小程序', 'http://robin.com/storage/index/20231002/be4f646e1d23c6ec0f6645990807b747.jpg', '简单文本', 0, '2023-10-02 19:08:54', '测试102', 1, 0, 1);
INSERT INTO `articles` VALUES (21, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 4, '日常模块/聊天灌水', 'http://robin.com/storage/index/20231002/710e262c0f9264029bd65c19b38dea79.jpg', '# 《肖申克的救赎》\n\n1.生命可以归结为一种简单的选择:要么忙于生存,要么赶着去死。\n\n2.懦怯囚禁人的灵魂,希望可以感受自由。强者自救,圣者渡人。\n\n3.希望是件美丽的东西,也许是最好的东西。美好的东西是永远不会死的。\n\n4.每个人都是自己的上帝。如果你自己都放弃自己了,还有谁会救你?\n\n------------------------------------\n\n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231002%2F79b65df1dea7a66db6f600cd40e193bb.png&pos_id=img-EpNZWIys-1700793364908)', 0, '2023-10-02 11:14:03', '随便测试', 11, 1, 1);
INSERT INTO `articles` VALUES (22, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', 14, '技术模块/web', 'http://robin.com/storage/index/20231003/8b2ef0b7d564915c9e14dd9653ef5490.jpg', '# 资源专栏遇到的一些问题\n\n首先,存储方面我还是先将其存到服务器的网页上面,然后再将返回的域名字符串保存到数据库中,然后既然要做资源专栏,那么就得区分不同的资源,这个时候就需要提出一个概念 mime.\n\n# MIME介绍\n>MIME类型(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型)是一种用于标识和表示文档、文件或数据流的格式和类型的方式。以下是常见的一些MIME类型及其含义:\n\n1. text/plain:表示纯文本内容,没有任何格式化或样式信息。\n2. text/html:表示HTML文档。\n3. text/css:表示CSS样式表。\n4. application/json:表示JSON数据。\n5. application/pdf:表示PDF文档。\n6. image/jpeg:表示JPEG图像。\n7. image/png:表示PNG图像。\n8. audio/mpeg:表示MP3音频文件。\n9. video/mp4:表示MP4视频文件。\n\n这些MIME类型只是常见的一部分,实际上还有很多其他的MIME类型,用于表示各种不同类型的文档、文件和数据流。每个MIME类型都由两部分组成:主类型和子类型,它们之间用斜杠(/)分隔。**主类型表示文档、文件或数据流的大类别,而子类型表示该大类别下的具体子类型。**\n\n在Web开发和网络传输中,MIME类型通常用于指定HTTP请求和响应的Content-Type头部字段的值,以告诉浏览器或其他客户端如何解释和处理接收到的数据。', 0, '2023-10-03 00:50:22', '常见的文章类型', 3, 1, 1);
INSERT INTO `articles` VALUES (23, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', 10, '技术模块/vue技术2', 'http://robin.com/storage/index/20231004/ddf4213a618f29f6d80e4e09e964b7d7.jpg', '# particles vue3\n[https://particles.js.org/](https://particles.js.org/)\n\n使用步骤:\n1. 安装 paricles\n\n```shell\nnpm install particles.vue3 --save\n```\n2. 安装 tsparticles-slim\n\n```shell\nnpm i tsparticles\n```\n3. 在main.js中导入并且挂载\n\n```shell\nimport Particles from \"particles.vue3\"; \napp.use(Particles)\napp.mount(\'#app\')\n```\n4. 在页面中使用\n\n```html\n<script setup>\nimport { ref } from \'vue\'\n\n// 粒子参数\nconst options =ref( {\n    background: {\n        color: {\n            value: \'#032224\'\n        }\n    },\n    // backgroundColor:\'#000000\',\n    fpsLimit: 120,\n    interactivity: {\n        events: {\n            onClick: {\n                enable: true,\n                mode: \'push\'\n            },\n            onHover: {\n                enable: true,\n                mode: \'grab\'\n            },\n            resize: true\n        },\n        modes: {\n            bubble: {\n                distance: 400,\n                duration: 2,\n                opacity: 0.8,\n                size: 40\n            },\n            push: {\n                quantity: 4\n            },\n            repulse: {\n                distance: 200,\n                duration: 0.4\n            }\n        }\n    },\n    particles: {\n        color: {\n            value: \'#ffffff\'\n        },\n        links: {\n            color: \'#ffffff\',\n            distance: 150,\n            enable: true,\n            opacity: 0.5,\n            width: 1\n        },\n        collisions: {\n            enable: true\n        },\n        move: {\n            direction: \'none\',\n            enable: true,\n            outModes: {\n                default: \'bounce\'\n            },\n            random: false,\n            speed: 4,\n            straight: false\n        },\n        number: {\n            density: {\n                enable: true,\n                area: 800\n            },\n            value: 80\n        },\n        opacity: {\n            value: 0.5\n        },\n        shape: {\n            type: \'circle\'\n        },\n        size: {\n            value: { min: 1, max: 5 },\n        }\n    },\n    detectRetina: true\n}\n)\n\nimport { loadSlim } from \"tsparticles-slim\"; \n\nconst particlesInit = async engine => {\n    //await loadFull(engine);\n    await loadSlim(engine);\n};\n\nconst particlesLoaded = async container => {\n    console.log(\"Particles container loaded\", container);\n}\n</script>\n\n<template>\n    <!-- 粒子特效插件n -->\n    <div class=\"wrapper\">\n        <vue-particles \n         id=\"tsparticles\" \n         :particlesInit=\"particlesInit\"\n         :particlesLoaded=\"particlesLoaded\" \n         :options=\"options\" />\n</template>\n\n<style>\n.wrapper {\n    height: 100vh;\n    min-width: 100vw;\n    /* background-image: linear-gradient(to bottom right, #fc466b, #3f5efb); */\n    overflow: hidden;\n}\n\n#tsparticles {\n    position: fixed;  \n    z-index: -1;\n \n}\n</style>\n```\n\n# 效果图\n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231004%2F264d56fc8cf8db44c5f439d79f78b81f.png&pos_id=img-1psbr6y1-1700793364909)', 0, '2023-10-04 03:53:23', 'vue3的粒子插件的使用', 17, 2, 1);
INSERT INTO `articles` VALUES (24, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 5, '日常模块/天道酬勤', 'http://robin.com/storage/index/20231004/be16c4572f21c6f5d2b9871d1eac6e2c.jpg', '![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231004%2F31626f2a966d495d8bd9e4931fe7e7cf.jpg&pos_id=img-YvGKq9aB-1700793364909)\n\n\n好耶!!!!', 0, '2023-10-04 12:45:49', '结束', 2, 0, 1);
INSERT INTO `articles` VALUES (25, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 10, '技术模块/vue技术2', 'http://robin.com/storage/index/20231007/5fbb4b9c01988d1b9b16195203181729.png', 'Go 面向对象\n\n# Go 面向对象\n\n \n\n## 1. struct 实体的抽象描述\n\n在Go语言中,使用struct来对现实世界实体进行描述。\n\nstruct的定义格式如下:\n\n```go\ntype 实体名 struct{\n    成员变量 数据类型\n    ...\n}\n```\n\n\n\n\n\n假设现在有一个people的结构体,我们接着对其声明创建一个结构体对象。\n\n```go\ntype people struct{\n    name string\n    age int\n}\n```\n\n\n\nstruct的使用,结构体对象的声明定义\n\n```go\np1 := people{name:\"张三\",age:17}\n// 或者\nvar p2 = people{name:\"李四\",age:19}\n```\n\n\n\n### 匿名字段和结构体嵌套\n\nGo语言中,在结构体(struct)中,实际上Go支持只提供类型,而不写字段名的方式,这便是匿名字段的定义。在结构体嵌套中经常使用。\n\n```go\ntype people struct{\n    name string\n    age int \n    pet\n}\n\ntype pet struct{\n    name string\n}\n```\n\n\n\n匿名字段可以实现面向对象中的字段继承,即成员变量的继承,在嵌套结构体中,访问嵌套结构体的成员字段就好比自己的成员字段一样。\n\n```go\npackage main\n\ntype People struct {\n	name string\n	age  int\n	Student\n}\n\ntype Student struct {\n	name string\n}\n\nfunc main() {\n	st1 := People{\"张三\", 20, Student{\"李四\"}}\n	println(st1.name) // 张三\n	println(st1.Student.name)  //李四\n}\n\n```\n\n访问内嵌结构体,使用 `结构体.内嵌结构体.成员变量`,访问外部结构体,使用`结构体.成员变量`,Go语言中,最外层的结构体优先访问(就按照现实世界的思维逻辑理解即可)。Go语言允许去重载通过匿名字段继承的一些字段,当然如果我们想访问重载后对应匿名类型里面的字段,可以通过匿名字段名来访问。\n\n这里需要注意的是 结构体名定义的首字母是大写或者小写的不同,访问的对应权限不同。\n\n\n\n**Go**语言通过首字母的大小写来控制访问权限。 无论是方法,变量,常量或是自定义的变量类型,如果首字母大写,则可以被外部包访问,反之则不可以。 而结构体中的字段名,如果首字母小写的话,则该字段无法被外部包访问和解析\n\n## 2. method 方法\n\nGo语言中方法的定义很类似函数的定义格式。\n\n区别是一个方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集。\n\n\n\n对比一下:\n\n```go\n// 1. 函数的定义格式\nfunc function_name( [parameter list] ) [return_types] {\n   /* 函数体 */\n}\n\n// 2. 方法的定义格式\nfunc (variable_name variable_data_type) function_name() [return_type]{\n   /* 方法体 */\n}\n```\n\n就是方法只属于某一个结构体类型,不能被直接调用,而函数是任意类型都可以调用,只要传入对应的参数即可。\n\n如下面的例子:\n\n```go\ntype Circle struct {\n	r float32\n}\n\nfunc (c Circle) getArea() float32 {\n	return c.r * c.r * 3.14\n}\n\n\nfunc main() {\n	c1 := Circle{15}\n    area1 :=c1.getArea()\n    println(area1) //+7.065000e+002\n    // getArea()\n    // 直接调用,会出现无法调用,\n    // getArea(c1) ,尝试传入参数也无法调用\n}\n```\n\n', 0, '2023-10-07 14:38:57', '测试120', 1, 0, 1);
INSERT INTO `articles` VALUES (26, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 4, '日常模块/聊天灌水', 'http://robin.com/storage/index/20231011/1a0902835ae29e701cdbd74353cd042e.jpeg', '# ds dasd\n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231011%2F6b5df2dd64438db2bd79c57b76badb17.jpg&pos_id=img-aw8guFzR-1700793364909)\nh', 0, '2023-10-11 10:58:42', 'sddasd', 1, 0, 1);
INSERT INTO `articles` VALUES (27, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 4, '日常模块/聊天灌水', 'http://robin.com/storage/index/20231030/26302bd3a8e6b3f591646faf8a2e2402.jpeg', '# sadsd assd\n\n## asdas \n![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=http%3A%2F%2Frobin.com%2Fstorage%2Findex%2F20231030%2F11acf69c263e74bea8fc2e26d5be8012.jpg&pos_id=img-KBKt61CY-1700793364910)', 0, '2023-10-30 10:13:03', 'cessss', 1, 1, 1);-- ----------------------------
-- Table structure for comments
-- ----------------------------
DROP TABLE IF EXISTS `comments`;
CREATE TABLE `comments`  (`id` int(0) NOT NULL AUTO_INCREMENT COMMENT '评论id',`articleid` int(0) NOT NULL COMMENT '评论的文章id',`uid` int(0) NULL DEFAULT NULL COMMENT '评论人id',`commentator` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '评论人',`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '头像',`content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '评论内容',`ctime` datetime(0) NOT NULL COMMENT '评论时间',`pid` int(0) NULL DEFAULT NULL COMMENT '依赖的父评论id',`isdelete` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '是否被过滤或者删除',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 43 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of comments
-- ----------------------------
INSERT INTO `comments` VALUES (1, 1, 6, 'chen', 'http://robin.com/storage/index/20230910/86952b7f57fb025d5502cc99e5e9fef9.jpeg', '我陈平安,唯有一剑,可搬山,倒海,降妖,镇魔,敕神,摘星,断江,摧城,开天!', '2023-09-09 15:35:22', 0, '0');
INSERT INTO `comments` VALUES (2, 1, 10, 'ccc', 'http://robin.com/storage/index/20231004/3afab15bcd3cfa3074dc5f79b9584a13.jpeg', '芜湖!!', '2023-09-09 15:35:49', 0, '0');
INSERT INTO `comments` VALUES (3, 1, 6, 'chen', 'http://robin.com/storage/index/20230910/86952b7f57fb025d5502cc99e5e9fef9.jpeg', '火力支持', '2023-09-10 19:15:43', 1, '0');
INSERT INTO `comments` VALUES (4, 1, 6, 'chen', 'http://robin.com/storage/index/20230910/86952b7f57fb025d5502cc99e5e9fef9.jpeg', '啦啦啦', '2023-09-10 20:36:30', 2, '0');
INSERT INTO `comments` VALUES (5, 1, 10, 'ccc', 'http://robin.com/storage/index/20231004/3afab15bcd3cfa3074dc5f79b9584a13.jpeg', '呃呃呃', '2023-09-09 20:39:27', 1, '0');
INSERT INTO `comments` VALUES (6, 1, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', '心情不错', '2023-09-11 08:44:51', 0, '0');
INSERT INTO `comments` VALUES (7, 1, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', 'robin,你在干嘛?', '2023-09-11 08:47:09', 0, '0');
INSERT INTO `comments` VALUES (8, 1, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', '我是水军内容!!!', '2023-09-11 08:48:50', 0, '0');
INSERT INTO `comments` VALUES (9, 1, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', '再水一条', '2023-09-11 08:51:56', 0, '0');
INSERT INTO `comments` VALUES (10, 1, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', '你不对劲!', '2023-09-11 08:53:49', 7, '0');
INSERT INTO `comments` VALUES (11, 1, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', '过分', '2023-09-11 08:54:17', 9, '0');
INSERT INTO `comments` VALUES (12, 9, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', '呦呵,你小子也读剑来', '2023-09-11 08:54:59', 0, '0');
INSERT INTO `comments` VALUES (13, 1, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 'cccc', '2023-09-11 18:50:57', 0, '0');
INSERT INTO `comments` VALUES (14, 1, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 'asdasd', '2023-09-11 22:58:47', 0, '0');
INSERT INTO `comments` VALUES (15, 2, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 'asda', '2023-09-11 22:59:06', 0, '0');
INSERT INTO `comments` VALUES (16, 1, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', '水内容', '2023-09-27 08:46:47', 0, '0');
INSERT INTO `comments` VALUES (17, 1, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 'fasong', '2023-09-27 09:04:59', 0, '0');
INSERT INTO `comments` VALUES (18, 1, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', 'asdasd', '2023-09-27 20:04:46', 0, '0');
INSERT INTO `comments` VALUES (19, 1, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', 'vue端测试评论1', '2023-09-28 21:33:40', 0, '0');
INSERT INTO `comments` VALUES (20, 1, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', '测试回显数据', '2023-09-28 21:36:27', 0, '1');
INSERT INTO `comments` VALUES (21, 1, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', '测试前端刷新数据', '2023-09-28 21:37:30', 0, '0');
INSERT INTO `comments` VALUES (22, 2, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', '嗨,月底咯!', '2023-09-28 21:38:20', 0, '0');
INSERT INTO `comments` VALUES (23, 2, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', '跨域测试', '2023-09-30 17:18:11', 0, '0');
INSERT INTO `comments` VALUES (24, 2, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', '跨域测试2', '2023-09-30 17:19:05', 0, '0');
INSERT INTO `comments` VALUES (28, 14, 10, 'ccc', 'http://robin.com/storage/index/20231004/3afab15bcd3cfa3074dc5f79b9584a13.jpeg', 'sad asd ', '2023-09-30 21:11:09', 0, '0');
INSERT INTO `comments` VALUES (29, 15, 10, 'ccc', 'http://robin.com/storage/index/20231004/3afab15bcd3cfa3074dc5f79b9584a13.jpeg', 'asdasd as', '2023-09-30 21:11:17', 0, '0');
INSERT INTO `comments` VALUES (30, 4, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', '言论过滤测试', '2023-10-01 15:55:36', 0, '1');
INSERT INTO `comments` VALUES (31, 1, 10, 'ccc', 'http://robin.com/storage/index/20231004/3afab15bcd3cfa3074dc5f79b9584a13.jpeg', 'ok', '2023-10-01 22:50:51', 0, '0');
INSERT INTO `comments` VALUES (32, 17, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', '好耶,markdown文章上传测试成功', '2023-10-02 10:36:06', 0, '0');
INSERT INTO `comments` VALUES (33, 17, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 'mardown不错', '2023-10-02 19:15:26', 0, '0');
INSERT INTO `comments` VALUES (34, 22, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', 'get', '2023-10-03 08:51:15', 0, '0');
INSERT INTO `comments` VALUES (35, 23, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', '1', '2023-10-04 12:39:09', 0, '0');
INSERT INTO `comments` VALUES (36, 23, 11, 'ddd', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', 'https://www.npmjs.com/package/particles.vue3 粒子插件地址', '2023-10-04 20:13:37', 0, '0');
INSERT INTO `comments` VALUES (37, 21, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', '喜欢看看啥电影?', '2023-10-04 20:33:55', 0, '0');
INSERT INTO `comments` VALUES (38, 1, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', '嘿!', '2023-10-04 20:44:44', 0, '0');
INSERT INTO `comments` VALUES (39, 19, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 'ku', '2023-10-09 13:02:19', 0, '0');
INSERT INTO `comments` VALUES (40, 1, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 'c', '2023-10-11 19:02:23', 0, '0');
INSERT INTO `comments` VALUES (41, 18, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', '写的不错啊,自吹自擂', '2023-10-17 09:39:56', 0, '0');
INSERT INTO `comments` VALUES (42, 4, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', '0ok', '2023-10-21 17:25:56', 0, '0');
INSERT INTO `comments` VALUES (43, 27, 2, 'robin', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', 'zxczxc', '2023-10-30 18:14:34', 0, '0');-- ----------------------------
-- Table structure for likes
-- ----------------------------
DROP TABLE IF EXISTS `likes`;
CREATE TABLE `likes`  (`articleid` int(0) NOT NULL COMMENT '文章id',`likeuid` int(0) NOT NULL COMMENT '点赞的用户id',PRIMARY KEY (`articleid`, `likeuid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of likes
-- ----------------------------
INSERT INTO `likes` VALUES (1, 11);
INSERT INTO `likes` VALUES (2, 2);
INSERT INTO `likes` VALUES (2, 11);
INSERT INTO `likes` VALUES (3, 2);
INSERT INTO `likes` VALUES (11, 2);
INSERT INTO `likes` VALUES (17, 2);
INSERT INTO `likes` VALUES (17, 11);-- ----------------------------
-- Table structure for modules
-- ----------------------------
DROP TABLE IF EXISTS `modules`;
CREATE TABLE `modules`  (`id` int(0) NOT NULL AUTO_INCREMENT COMMENT '模块主键',`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '模块名称',`describe` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '模块描述',`iconurl` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '模块的icon图标',`pid` int(0) NOT NULL COMMENT '模块依赖的父id',`pcicon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'pc端的模块图标',`isdelete` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '是否被删除',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of modules
-- ----------------------------
INSERT INTO `modules` VALUES (1, '日常模块', '日常模块', NULL, 0, NULL, '0');
INSERT INTO `modules` VALUES (2, '技术模块', '技术模块', NULL, 0, NULL, '0');
INSERT INTO `modules` VALUES (3, '社区模块', '社区模块', NULL, 0, NULL, '0');
INSERT INTO `modules` VALUES (4, '聊天灌水', '日常模块/聊天灌水', 'duihuazixun', 1, '', '0');
INSERT INTO `modules` VALUES (5, '天道酬勤', '日常模块/天道酬勤', 'a-263', 1, NULL, '0');
INSERT INTO `modules` VALUES (6, '吃喝玩乐', '日常模块/吃喝玩乐', 'chihewanle', 1, NULL, '0');
INSERT INTO `modules` VALUES (7, '刹那感悟', '日常模块/刹那感悟', 'kuaileshiguang', 1, 'el-gw', '0');
INSERT INTO `modules` VALUES (8, 'JAVA技术', '技术模块/JAVA技术', 'java', 2, NULL, '0');
INSERT INTO `modules` VALUES (9, '公告模块', '社区模块/公告模块', '', 3, 'el-msg', '0');
INSERT INTO `modules` VALUES (10, 'vue技术2', '技术模块/vue技术2', '', 2, 'el-vue2', '0');
INSERT INTO `modules` VALUES (11, '微信小程序', '技术模块/微信小程序', '', 2, 'el-wx', '0');
INSERT INTO `modules` VALUES (12, 'php', '技术模块/php', '', 2, 'el-php', '0');
INSERT INTO `modules` VALUES (13, 'C#', '技术模块/C#', '', 2, 'el-c#', '1');
INSERT INTO `modules` VALUES (14, 'web', '技术模块/web', '', 2, 'el-web', '0');-- ----------------------------
-- Table structure for resource
-- ----------------------------
DROP TABLE IF EXISTS `resource`;
CREATE TABLE `resource`  (`id` int(0) NOT NULL AUTO_INCREMENT COMMENT '资源主键自增',`publisherid` int(0) NOT NULL COMMENT '发布人id主键',`filesurl` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '文件的url地址',`filetype` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '资源类型',`status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '0' COMMENT '资源状态 0 ,1, 2',`filename` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '资源名称',`ctime` datetime(0) NOT NULL COMMENT '发布时间',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 24 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of resource
-- ----------------------------
INSERT INTO `resource` VALUES (1, 2, 'http://robin.com/storage/index/20231003/24f7aca5dfcdd50c8cd5afe2c54bb4fc.txt', 'text/plain', '1', 'C#,winform,listView动态插入数据.txt', '2023-10-02 09:10:07');
INSERT INTO `resource` VALUES (2, 2, 'http://robin.com/storage/index/20231003/eb72a0a7dde40507af819d3116480a32.pdf', 'application/pdf', '0', '15030123-0001568070-d9e7b5.pdf', '2023-10-03 09:21:14');
INSERT INTO `resource` VALUES (3, 2, 'http://robin.com/storage/index/20231003/4ed242ce77a20cde2800c8a8941bb38a.xlsx', 'application/octet-stream', '-1', 'export.xlsx', '2023-10-03 09:26:21');
INSERT INTO `resource` VALUES (4, 2, 'http://robin.com/storage/index/20231003/e8eb8277bbb7d205011f5f327ad5a0d3.md', 'text/html', '-1', 'vue模板语法.md', '2023-10-03 09:42:28');
INSERT INTO `resource` VALUES (5, 2, 'http://robin.com/storage/index/20231003/99a91ea23e452d69171a351c1c39e625.md', 'text/plain', '0', 'layui 的 使用.md', '2023-10-03 09:44:35');
INSERT INTO `resource` VALUES (6, 2, 'http://robin.com/storage/index/20231003/47332810e14d616ed0fd5f242ab8ee3a.mp4', 'video/mp4', '1', '小红书.mp4', '2023-10-03 10:26:49');
INSERT INTO `resource` VALUES (7, 2, 'http://robin.com/storage/index/20231003/06bb31077573f6d118c62c113e8cd870.jpg', 'image/jpeg', '0', 'mrxtt.jpg', '2023-10-03 10:29:01');
INSERT INTO `resource` VALUES (8, 11, 'http://robin.com/storage/index/20231003/9edeacc218c2fc6cd1f3825bfee3fac1.pdf', 'application/pdf', '1', 'spring-boot中文文档.pdf', '2023-10-03 10:58:42');
INSERT INTO `resource` VALUES (9, 11, 'http://robin.com/storage/index/20231003/27271d3552f40d502c54c8914849bdf6.pptx', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', '1', '课件(动效演示).pptx', '2023-10-03 12:23:31');
INSERT INTO `resource` VALUES (10, 11, 'http://robin.com/storage/index/20231003/3c3c2f4e3f02de20cf13d53f837b6de0.docx', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', '1', '参考文献.docx', '2023-10-03 12:27:17');
INSERT INTO `resource` VALUES (11, 11, 'http://robin.com/storage/index/20231003/e60bf589975118dfd3af8c38563a894f.xlsx', 'application/octet-stream', '1', 'export (2).xlsx', '2023-10-03 12:29:46');
INSERT INTO `resource` VALUES (12, 11, 'http://robin.com/storage/index/20231003/04811a2e6d45a383ab6fdbf31d90a307.zip', 'application/zip', '1', 'vue-element-admin-master.zip', '2023-10-03 12:31:03');
INSERT INTO `resource` VALUES (13, 11, 'http://robin.com/storage/index/20231003/4b63d53cb3f9afbbc9ebe0596d2e40f1.c', 'text/x-c', '0', '01线性表顺序存储_List.c', '2023-10-03 12:31:49');
INSERT INTO `resource` VALUES (14, 11, 'http://robin.com/storage/index/20231003/a7a77bb1bd339be9e4a0a3d16886bea8.php', 'text/plain', '0', '1.php', '2023-10-03 12:32:16');
INSERT INTO `resource` VALUES (15, 11, 'http://robin.com/storage/index/20231003/57bf670ebe7d001711d65b32c0542b26.java', 'text/x-c++', '0', 'ok.java', '2023-10-03 12:33:42');
INSERT INTO `resource` VALUES (16, 11, 'http://robin.com/storage/index/20231003/8f4c44174a546a0ee71338bb9f626143.cs', 'application/x-empty', '1', 'ok2.cs', '2023-10-03 12:34:55');
INSERT INTO `resource` VALUES (17, 11, 'http://robin.com/storage/index/20231003/2a3f051cd7476e45bbc7ca3dff700a25.mp4', 'video/mp4', '1', '小红书短视频.mp4', '2023-10-03 12:43:57');
INSERT INTO `resource` VALUES (18, 2, 'http://robin.com/storage/index/20231004/5e09a6e33abbd8cae14e1fc11aaeee59.rar', 'application/x-rar', '1', 'ListView图片.rar', '2023-10-04 20:36:37');
INSERT INTO `resource` VALUES (19, 2, 'http://robin.com/storage/index/20231004/9b4d917fba1656ad3b62514960e8033f.jpeg', 'image/webp', '0', 'a11.jpeg', '2023-10-04 20:56:40');
INSERT INTO `resource` VALUES (20, 2, 'http://robin.com/storage/index/20231005/beb1b51d52f11ce16ad674040c43e9c6.zip', 'application/zip', '1', '2020040413 张慧.zip', '2023-10-05 22:39:57');
INSERT INTO `resource` VALUES (21, 2, 'http://robin.com/storage/index/20231009/8ae6a23231d56bc33d9486529a5fe76f.xml', 'text/xml', '1', 'pom.xml', '2023-10-09 12:42:24');
INSERT INTO `resource` VALUES (22, 2, 'http://robin.com/storage/index/20231009/757ee7d40ca035fb7199fd868e28d25d.zip', 'application/zip', '0', '游戏平台1.0.zip', '2023-10-09 12:44:05');
INSERT INTO `resource` VALUES (23, 2, 'http://robin.com/storage/index/20231009/1250f5c6bc0c9e5986d6b76e67238e76.cs', 'text/x-c++', '1', 'LoginFrm.cs', '2023-10-09 12:44:25');
INSERT INTO `resource` VALUES (24, 2, 'http://robin.com/storage/index/20231030/7165e2809dd31dbdf37683dcd6026aaa.jpg', 'image/jpeg', '1', 'loop2.jpg', '2023-10-30 18:15:54');-- ----------------------------
-- Table structure for signs
-- ----------------------------
DROP TABLE IF EXISTS `signs`;
CREATE TABLE `signs`  (`id` int(0) NOT NULL AUTO_INCREMENT COMMENT '签名id',`content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '签名内容',`updtime` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '发表签名时间',`uid` int(0) NOT NULL COMMENT '用户id',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 22 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of signs
-- ----------------------------
INSERT INTO `signs` VALUES (1, '少年的肩膀,就该这样才对嘛,什么家国仇恨,浩然正气的,都不要急,先挑起清风明月、杨柳依依和草长莺飞,少年郎的肩头,本就应当满是美好的事物啊。', '2023-09-01 11:24:56', 2);
INSERT INTO `signs` VALUES (2, '君子坐而论道,少年起而行之。', '2023-09-01 11:25:35', 2);
INSERT INTO `signs` VALUES (3, '总有些人,一眼看到就会心生好感,道理都讲不通。', '2023-09-01 11:27:33', 2);
INSERT INTO `signs` VALUES (4, '这人间不来也罢', '2023-09-01 11:31:25', 2);
INSERT INTO `signs` VALUES (5, '测试数据', '2023-09-08 08:20:06', 2);
INSERT INTO `signs` VALUES (6, '测试数据2', '2023-09-08 08:24:17', 2);
INSERT INTO `signs` VALUES (7, '我陈平安,唯有一剑,可搬山,倒海,降妖,镇魔,敕神,摘星,断江,摧城,开天!', '2023-09-08 08:26:33', 2);
INSERT INTO `signs` VALUES (8, '心中有剑 何处不是倒悬山。', '2023-09-08 08:41:23', 2);
INSERT INTO `signs` VALUES (9, '有些人心如花木,皆向阳而生', '2023-09-08 12:40:31', 2);
INSERT INTO `signs` VALUES (10, '有些人心如花木,皆向阳而生', '2023-09-08 12:41:28', 11);
INSERT INTO `signs` VALUES (11, '今天心情不错', '2023-09-10 15:58:25', 10);
INSERT INTO `signs` VALUES (12, '世间唯有痴情,不许他人痴笑', '2023-09-11 10:53:07', 2);
INSERT INTO `signs` VALUES (13, '这个世界没你想的那么坏 但也没你想的那么好', '2023-09-11 18:50:08', 2);
INSERT INTO `signs` VALUES (14, '中秋明月,豪门有,贫家也有。 \n\n极慰人心。\n\n——烽火戏诸侯《剑来》', '2023-10-01 19:49:08', 2);
INSERT INTO `signs` VALUES (15, '有心为善虽善不赏,无心为恶虽恶不罚。人力有穷尽之时,尽力又尽心了,就不用太愧疚', '2023-10-01 19:58:59', 2);
INSERT INTO `signs` VALUES (16, '有庙无僧风扫地,有香无火月点灯。', '2023-10-01 20:03:35', 2);
INSERT INTO `signs` VALUES (17, 'ok', '2023-10-01 22:51:23', 11);
INSERT INTO `signs` VALUES (18, '(¬︿̫̿¬☆)', '2023-10-02 12:13:52', 11);
INSERT INTO `signs` VALUES (19, 'ery', '2023-10-02 19:44:48', 18);
INSERT INTO `signs` VALUES (20, '嘿嘿完事!', '2023-10-04 20:32:50', 2);
INSERT INTO `signs` VALUES (21, '╰(*°▽°*)╯', '2023-10-09 11:08:03', 2);
INSERT INTO `signs` VALUES (22, 'czxczxc', '2023-10-30 18:16:43', 2);-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (`id` int(0) NOT NULL AUTO_INCREMENT COMMENT '用户id',`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名',`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密码',`phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '手机号',`email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '邮箱',`ctime` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '注册时间',`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '头像url',`gender` enum('男','女','无') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '无' COMMENT '性别',`sign` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户个人签名',`status` enum('正常','注销','封停') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '正常' COMMENT '用户状态',`role` enum('管理员','普通用户') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '普通用户' COMMENT '用户角色',`location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '地址',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'admin', '21232f297a57a5a743894a0e4a801fc3', '19024586372', 'ddd@126.com', '2023-09-01 11:22:46', 'http://robin.com/storage/index/20231004/6c9365149f47594addfcf3f973fa88fd.jpeg', '男', NULL, '正常', '管理员', '内蒙古科技大学包头医学院');
INSERT INTO `user` VALUES (2, 'robin', '8ee60a2e00c90d7e00d5069188dc115b', '15024779820', 'robinDebug@163.com', '2023-09-01 11:23:14', 'http://robin.com/storage/index/20231030/43102dd204b968857792020b38d70bcf.jpeg', '男', 'czxczxc', '正常', '普通用户', '大理龙泉县');
INSERT INTO `user` VALUES (3, 'bird', 'abaecf8ca3f98dc13eeecbac263cd3ed', NULL, NULL, '2023-09-01 11:54:46', 'http://robin.com/storage/index/20230907/736efbbbdecfc2317c9b03b161c83590.jpg', '无', NULL, '正常', '普通用户', NULL);
INSERT INTO `user` VALUES (7, '裴钱', 'e10adc3949ba59abbe56e057f20f883e', NULL, NULL, '2023-09-07 15:46:35', 'http://robin.com/storage/index/20231004/17c1ea57783114cba2b2793704df01e5.jpeg', '无', NULL, '正常', '普通用户', NULL);
INSERT INTO `user` VALUES (8, 'cui', 'e10adc3949ba59abbe56e057f20f883e', NULL, NULL, '2023-09-07 15:54:09', 'http://robin.com/storage/index/20230907/736efbbbdecfc2317c9b03b161c83590.jpg', '无', NULL, '正常', '普通用户', NULL);
INSERT INTO `user` VALUES (9, '张三丰', 'e10adc3949ba59abbe56e057f20f883e', NULL, NULL, '2023-09-07 16:11:06', 'http://robin.com/storage/index/20230907/736efbbbdecfc2317c9b03b161c83590.jpg', '无', NULL, '正常', '普通用户', NULL);
INSERT INTO `user` VALUES (10, 'ccc', '9df62e693988eb4e1e1444ece0578579', NULL, NULL, '2023-09-07 16:17:33', 'http://robin.com/storage/index/20231004/3afab15bcd3cfa3074dc5f79b9584a13.jpeg', '无', '今天心情不错', '正常', '普通用户', NULL);
INSERT INTO `user` VALUES (11, 'ddd', '77963b7a931377ad4ab5ad6a9cd718aa', '8762123', 'cui@123.com', '2023-09-07 16:18:07', 'http://robin.com/storage/index/20231004/bf44510a752e071bcafc3255f1ea5da6.jpeg', '无', '(¬︿̫̿¬☆)', '正常', '普通用户', '大理龙泉县');
INSERT INTO `user` VALUES (12, 'yao', '9852f6575c282db621d991fd9ced3cc1', NULL, NULL, '2023-09-08 06:55:52', 'http://robin.com/storage/index/20230907/736efbbbdecfc2317c9b03b161c83590.jpg', '无', NULL, '注销', '普通用户', NULL);
INSERT INTO `user` VALUES (13, 'solo', 'e10adc3949ba59abbe56e057f20f883e', NULL, NULL, '2023-10-01 09:37:47', 'http://robin.com/storage/index/20230907/736efbbbdecfc2317c9b03b161c83590.jpg', '无', NULL, '正常', '普通用户', NULL);
INSERT INTO `user` VALUES (14, 'scum', 'e10adc3949ba59abbe56e057f20f883e', NULL, NULL, '2023-10-01 09:44:41', 'http://robin.com/storage/index/20230907/736efbbbdecfc2317c9b03b161c83590.jpg', '无', NULL, '正常', '普通用户', NULL);
INSERT INTO `user` VALUES (15, 'cat3', '9b9423f286ce21b709cf1f69dc48c4a4', NULL, NULL, '2023-10-01 10:01:45', 'http://robin.com/storage/index/20230907/736efbbbdecfc2317c9b03b161c83590.jpg', '无', NULL, '正常', '普通用户', NULL);
INSERT INTO `user` VALUES (16, 'demo101', '60249d326473cf41eb665f9ea05003e6', NULL, NULL, '2023-10-01 10:03:10', 'http://robin.com/storage/index/20230907/736efbbbdecfc2317c9b03b161c83590.jpg', '无', NULL, '正常', '普通用户', NULL);
INSERT INTO `user` VALUES (17, 'demo102', 'bd14a323cd40b0338c2d85a1b1d13128', NULL, NULL, '2023-10-01 10:06:16', 'http://robin.com/storage/index/20230907/736efbbbdecfc2317c9b03b161c83590.jpg', '无', NULL, '正常', '普通用户', NULL);
INSERT INTO `user` VALUES (18, 'ery', '8febfb31e5bcc247ce8d0ede460d2ca3', NULL, NULL, '2023-10-02 19:44:38', 'http://robin.com/storage/index/20230907/736efbbbdecfc2317c9b03b161c83590.jpg', '无', 'ery', '正常', '普通用户', NULL);
INSERT INTO `user` VALUES (19, '陈平安', 'e10adc3949ba59abbe56e057f20f883e', NULL, NULL, '2023-10-04 20:22:08', 'http://robin.com/storage/index/20230907/736efbbbdecfc2317c9b03b161c83590.jpg', '无', NULL, '正常', '普通用户', NULL);SET FOREIGN_KEY_CHECKS = 1;

六、小皮服务配置

在这里插入图片描述

目前只使用了 robin.com,这个域名映射的是index模块,robinadmin.com原本想着用管理端,后面写着忘了就都写一块了。


相关文章:

基于ThinkPHP8 + Vue3 + element-ui-plus + 微信小程序(原生) + Vant2 的 BBS论坛系统设计【PHP课设】

一、BBS论坛功能描述 我做的是一个论坛类的网页项目&#xff0c;每个用户可以登录注册查看并发布文章&#xff0c;以及对文章的点赞和评论&#xff0c;还有文件上传和个人签名发布和基础信息修改&#xff0c;管理员对网站的数据进行统计&#xff0c;对文章和文件的上传以及评论…...

苹果cms搭建教程附带免费模板

准备工作: 一台服务器域名源码安装好NGINX+PHP7.0+MYSQL5.5 安装php7.0的扩展,fileinfo和 sg11,不安装网站会搭建失败。 两个扩展都全部安装好了之后 点击-服务-重载配置 这样我们的网站环境就配置完成啦 下载苹果cms 苹果cms程序github链接:选择mac10!下载即可 http…...

【LeetCode:828. 统计子串中的唯一字符 | 贡献法 乘法原理】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

字符串和内存函数(2)

文章目录 2.13 memcpy2.14 memmove2.15 memcmp2.16 memset 2.13 memcpy void* memcpy(void* destination, const void* source, size_t num); 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。这个函数在遇到 ‘\0’ 的时候并不会停下来。如果so…...

毅速:复杂零件制造首选3D打印

确金属3D打印技术在制造行业的应用日益广泛&#xff0c;为制造业带来了巨大的变革和机遇。这种增材制造技术相较于传统制造工艺具有许多优势&#xff0c;尤其在制造复杂形状零件方面表现出色。 传统制造工艺在制造复杂形状零件时往往面临诸多挑战&#xff0c;如加工难度大、周期…...

【数据中台】开源项目(2)-Moonbox计算服务平台

Moonbox是一个DVtaaS&#xff08;Data Virtualization as a Service&#xff09;平台解决方案。 Moonbox基于数据虚拟化设计思想&#xff0c;致力于提供批量计算服务解决方案。Moonbox负责屏蔽底层数据源的物理和使用细节&#xff0c;为用户带来虚拟数据库般使用体验&#xff0…...

代理模式(常用)

代理模式&#xff08;代理设计模式&#xff09; 在有些情况下&#xff0c;一个客户不能或者不想直接访问另一个对象&#xff0c;这时需要找一个中介帮忙完成某项任务&#xff0c;这个中介就是代理对象。例如&#xff0c;购买火车票不一定要去火车站买&#xff0c;可以通过 123…...

redis(Remote Dictionary Service) 底层数据结构

redis 底层数据结构 动态字符串SDS 优点 获取字符串长度的时间复杂度O(1) 支持动态扩容&#xff0c;减少内存分配次数 新字符串小于1M – 新空间为扩展后字符串长度的两倍 1 新字符串大于1M – 新空间为扩展后字符串长度 1M 1. 内存预分配 二进制安全&#xff08;记录了…...

电子学会C/C++编程等级考试2021年06月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数对 给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。 比如给定1 4 3 2 9 7 18 22,得到的答案是3,因为2是1的两倍,4是2个两倍,18是9的两倍。 时间限制:1000 内存限制…...

冥想第九百八十五天

1.周四&#xff0c;最近几天刷题的节奏太紧张了&#xff0c;放松一点&#xff0c;不能太大压力了&#xff0c;认证看&#xff0c;慢慢看效果会更好一点。 2.发现了一个跑步比较好的地方&#xff0c;沿着凯旋路&#xff0c;然后昭化路&#xff0c;种德桥路。一圈&#xff0c;刚好…...

Qt OpenGL固定管线与可编程管线

作者:令狐掌门 技术交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目录 在Qt框架中,你可以使用Qt的OpenGL模块(包括QOpenGLWidget和QOpenGLFunctions等类)来使用OpenGL进行图形渲染。以下是一个简单的示例,展示了如何在Qt应用程序中使用OpenGL绘…...

冯·诺依曼体系结构和操作系统

目录 一、冯诺依曼体系结构 1、初见结构 2、对体系结构的理解 3、总结 二、操作系统 1、概念 2、作用 一、冯诺依曼体系结构 1、初见结构 数学家冯诺依曼提出了计算机制造的三个基本原则&#xff0c;即采用二进制逻辑、程序存储执行以及计算机由五个部分组成&#xff08…...

Nginx(资源压缩)

建立在动静分离的基础之上&#xff0c;如果一个静态资源的Size越小&#xff0c;那么自然传输速度会更快&#xff0c;同时也会更节省带宽&#xff0c;因此我们在部署项目时&#xff0c;也可以通过Nginx对于静态资源实现压缩传输&#xff0c;一方面可以节省带宽资源&#xff0c;第…...

数据结构与算法之二叉树: LeetCode 226. 翻转二叉树 (Typescript版)

翻转二叉树 https://leetcode.cn/problems/invert-binary-tree/ 描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1 4 4/ \ / \2 7 >…...

lightdb-ignore_row_on_dupkey_index

LightDB 支持 ignore_row_on_dupkey_index hint LightDB 从23.4 开始支持oracle的 ignore_row_on_dupkey_index hint&#xff0c; 这个hint是用来忽略唯一键冲突的。类似与mysql的 insert ignore。 语法如下&#xff1a; 在LightDB中ignore_row_on_dupkey_index的效果等同于o…...

wangeditor实时预览

<template><div><!--挂载富文本编辑器--><div style"width: 45%;float: left;margin-left: 2%"><p>编辑内容</p><div id"editor" style"height: 100%"></div></div><div style"w…...

【前沿技术了解】web图形Canvas、svg、WebGL、数据可视化引擎的技术选型

目录 Canvas&#xff1a;HTML5新增 Canvas标签&#xff08;画布&#xff09; 渲染上下文canvas.getContext(contextType[, contextAttributes]) 上下文类型&#xff08;contextType&#xff09; 上下文属性 (contextAttributes) 示例 动画 setInterval(function, delay)…...

【Java】循环语句练习

文章目录 1. 计算5的阶乘2. 计算 1! 2! 3! 4! 5!3. 数字9 出现的次数4. 判定素数5. 求1-100之间的素数6. 求2个整数的最大公约数7. 计算分数的值8. 模拟登陆9. 输出乘法口诀表10. 求出0&#xff5e;999之间的所有“水仙花数”并输出11. 猜数字游戏&#x1f648; 1. 计算5的…...

「Verilog学习笔记」非整数倍数据位宽转换24to128

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 要实现24bit数据至128bit数据的位宽转换&#xff0c;必须要用寄存器将先到达的数据进行缓存。24bit数据至128bit数据&#xff0c;相当于5个输入数据第6个输入数据的拼接成一…...

2023亚太地区数学建模C题思路模型代码论文

C题的参考思路: 1&#xff0c;问题1的思路: 确定研究问题的主要指标体系(新能源电车的售出数量、安全性指标、充电桩数目、电池续 航里程等)&#xff0c;收集指标的对应数据&#xff0c;检验数据是否服从正态性: 若服从正态分布: 0&#xff0c;可考虑优先采用“多元方差分析”模…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...