自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 资源 (1)
  • 收藏
  • 关注

原创 基于RBAC的通用权限管理系统的详细分析与实现(理念篇——用户、组织和用户组)

RBAC模型是将客体的存取访问的权限在可靠的控制下连带角色所需要的操作一起提供给那些角色所代表的用户,通过授权的管理机制,可以授予一个角色多个权限,而一个权限也可以赋予多个角色,同时一个用户可以扮演多个角色,一个角色又可以接纳多个用户。

2024-07-19 01:43:00 788

原创 java对接海康摄像头

现在制造业很多都是用的海康的摄像头,作为程序员有时候需要对接海康摄像头,实现门禁访问控制,监控预览,录像文件下载等功能。本文根据官方SDK文档,解释如何通过java调试海康的摄像头。

2024-07-06 14:27:07 773 2

原创 实现领域驱动设计(DDD)系列详解:异常处理

使用好异常的关键在于让它表达一定的领域含义,即细分模型不愿处理的条件,抛出有领域含义的异常,以便让合适的上级调用者找到合适的处理方式。显然,“购物车已满”的异常比“数组越界”的异常更容易让调用者知道如何处理。有些专家建议,当语言框架中已有相应异常时,不要自己创建异常,这适用于语言级别的异常。对于领域层来说,自定义异常是领域逻辑的一部分,它可以丰富通用语言。相比于错误代码,自定义异常能够很自然地被领域专家所理解。

2024-06-10 13:17:21 919

原创 实现领域驱动设计(DDD)系列详解:聚合生命周期的管理——对象工厂与资源库

和。许多面向对象语言都支持类通过构造函数创建它自己。对象自己创建自己,就好像自己扯着自己的头发离开地球表面,完全不合情理,只是开发人员已经习以为常了。然而,构造函数差劲的表达能力与脆弱的封装能力,在面对复杂的构造逻辑时,显得有些力不从心。遵循“最小知识法则”,我们不能让调用者了解太多创建的逻辑,以免加重其负担,并带来创建代码的四处泛滥,何况创建逻辑在未来很有可能发生变化。基于以上因素考虑,有必要对创建逻辑进行封装。领域驱动设计引入工厂(factory)承担这一职责。

2024-04-29 09:19:14 913 1

原创 华为交换机入门(六):VLAN的配置

VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。VLAN内的主机间可以直接通信,而VLAN间不能直接互通,从而将广播报文限制在一个VLAN内。VLAN 主要用来解决如何将大型网络划分为多个小网络,隔离原本在同一个物理LAN中的不同主机间的二层通信,以使广播流量不会占据更多带宽资源,同时也提高网段间的安全性,因为广播域缩小了,广播风暴产生的可能性也大大降低了。

2024-01-02 17:23:20 8464

原创 华为路由器:DHCP配置

在大型企业网络中,会有大量的主机获取IP地址等网络参数。如果采用手工配置,则工作量大不好管理,若用户擅自更改网络参数,则容易导致IP冲突。因此使用(DHCP)可以减少管理员的工作量,同时避免手工配置造成的IP冲突。

2023-12-26 17:20:47 2953

原创 B端界面设计:查询表格页面

自定义搜索条件是一种比较特殊的条件设置方式,是系统在提供2-3个基础搜索条件外,用户可根据自身需要自己设置其他的搜索条件展示或隐藏,并可根据此设置方式保存为查询方案,方便以后使用。自定义搜索条件方式适合强搜索场景,用户可针对自身需求自定义搜索条件,保证自身处理业务高效性。优点:高效便捷,用户可自定义搜索;缺点:开发工作量大,需要条件多个展示和ID保存多个方案。

2023-12-20 08:45:59 2297

原创 B端界面设计:页面分类设计

在B端产品设计中,为用户提高工作效率是每个产品设计师所追求的目标,也是企业主客户对每个打工人的期望。本文介绍3种设计手法,通过提取B端产品中的典型页面,来帮助B端设计师们提高页面的操作效率。

2023-12-20 08:45:13 1532

原创 计算机网络基础(三):IPv4编址方式、子网划分、IPv4通信的建立与验证及ICMP协议

这样一来,一个22位网络就是一个22位网络,它既不是某个A类主网或B类主网的子网,亦非几个C类主网的集合。这种无类编址方式还可以解决当时网络中面临的另一个问题,那就是随着网络蓬勃发展导致的核心网络路由器路由表条目数量剧增的问题。路由器在转发数据包时,会用数据包的目的IP地址一一匹配路由表中的条目,随着网络数量的增加,路由表中的条目也在相应增加,这会延长每一台路由器查询路由表的时间,导致网络性能下降。

2023-10-15 16:46:12 1466

原创 计算机网络基础(二):物理层、数据链路层及网络层

物理层面的通信标准可以概括划分为与网络基础设施有关的标准和与被传输物理信号有关的标准两类。:鉴于物理层面的消息互通也是物理层应该兑现的服务,因此物理层的标准还会包括针脚的用途、线缆的材料与设计等因素。我们大家耳熟能详的水晶头(RJ-11和RJ-45)、串行接口(EIA-RS-232)、网线线序(ANSI/TIA/EIA-568)都属于这一类标准。:既然接收方设备通过传输介质接收到用物理表示方法描述的二进制信号时,需要将物理信号还原成本来的二进制数据,那么收发数据的双方就必须拥有一套相同的数据编码标准。

2023-10-04 17:28:19 744

原创 计算机网络基础(一):网络系统概述、OSI七层模型、TCP/IP协议及数据传输

最早的程序员将事先已穿孔的纸带,装入纸带输入机,启动它们将纸带上的程序和数据输入计算机,然后启动计算机运行。仅当程序运行完毕并取走计算结果后,才允许下一个用户上机。缺点:(1)用户独占全机,即一台计算机的全部资源由上机用户所独占。(2)当用户进行装带(卡)、卸带(卡)等人工操作时,CPU及内存等资源是空闲的。后来出现脱机输入/输出技术,该技术是事先将装有用户程序和数据的纸带装入纸带输入机,在一台外围机的控制下,把纸带上的数据输入到磁带上。当CPU需要这些程序和数据时,再从磁带上高速地调入内存。

2023-10-02 16:14:00 998

原创 element plus封装el-select添加后缀图标并添加远程搜索和对话框功能

当提交的表单Form需要填某个实体的外键ID时,当然不可能使用el-input组件,这个适合提交字符串,然后用户又不可能记住某个引用的外键ID,这时候使用el-select还是必要的。这个组件我折腾了好久,之前想用自带的suffix-icon实现,谁知道图标Component是给属性赋值的,并不是子组件。思路是在el-select后边再加一个icon图标,然后添加上阴影,并隐藏suffix-icon图标和自带的阴影,伪装成一个合体的组件。// 监听父组件传递的值的变化。// 初始化父组件传递的值。

2023-09-16 22:42:32 2511

原创 后端项目开发:代码生成的思想与实现

大部分项目里其实有很多代码都是重复的,几乎每个基础模块的代码都有增删改查的功能,而这些功能都是大同小异, 如果这些功能都要自己去写,将会大大浪费我们的精力降低效率。所以这种重复性的代码可以使用代码生成。在领域驱动设计中,若使用JPA可以根据实体自动生成数据库表。但是该种方式有点风险。所以我们可以使用mybatis-generate提前设计好数据库表,再根据数据库表生成相应的代码。

2023-08-25 00:13:26 379

原创 后端项目开发:集成Druid数据源

Druid作为连接池中间件可以监控数据库访问性能,对数据库密码加密,查看SQL执行日志,扩展JDBC。

2023-08-24 21:59:28 973

原创 后端项目开发:集成日志

SpringBoot 默认选择的是slf4j做日志门面,logback做日志实现。由于log4j有性能问题,不建议使用。由于log4j2的表现性能更好,我们需要集成log4j2,同时排除旧的日志实现包。添加log4j2.xml配置文件

2023-08-24 21:57:45 1003

原创 后端项目开发:关于跨域的解决(CORS)

这样,每当客户端发送请求都会在头部附上跨域信息,支持跨域访问了。为解决浏览器跨域问题,W3C提出了CORS(跨资源共享方案)。

2023-08-24 21:47:59 223

原创 后端项目开发:工具类封装(序列化、反射)

根据《阿里巴巴开发规范》,包名使用单数,类名可以使用复数。所以generic-common创建util包和utils工具类很多时候我们需要将接收到的json数据转换为对象,或者将对象转为json存储。这时候我们需要编写用于json转换的工具类。新建util目录,再创建JacksonUtils类。

2023-08-24 21:43:39 1052

原创 后端项目开发:整合redis缓存

因为各种场合比如门户和后台,需要不同的redis配置,我们在common包配置通用的reids配置。1.新建service目录,建立RedisService服务接口,同时编写工具类实现该接口。2.在config目录下,编写redis通用配置。3.其他包只需要继承该基础配置就够了。

2023-08-24 21:40:02 1221

原创 后端项目开发:整合全局异常处理

(1)新建自定义的GlobalException基 类继承RuntimeException类,我们自定义的异常类全部需要继承GlobalException基类进行处理。(2)在exception目录下,新建GlobalExceptionHandler类,拦截异常类。在此类中可以捕获并将异常类转换为可接受的信息返回给前端,防止将异常直接抛出到前端。新建exception目录,用来进行自定义的全局异常处理。这里我们直接利用之前定义的错误码接口类。

2023-08-24 21:36:53 859

原创 后端项目开发:集成接口文档(swagger-ui)

由于后台管理和前台接口均需要接口文档,所以在工具包构建BaseSwaggerConfig基类。swagger集成文档具有功能丰富、及时更新、整合简单,内嵌于应用的特点。接口文档页面了,后续可以通过swagger来测试接口。详细配置参考:https://swagger.io/2.需要添加Swagger配置类。

2023-08-24 21:32:28 1560

原创 后端项目开发:分页功能的实现(Mybatis+pagehelper)

分页查询是项目中的常用功能,此处我们基于Mybatis对分页查询进行处理。在http目录下,新建PageResult类,我们用此类包装分页结果。

2023-08-24 21:27:24 1753

原创 SQL SERVER使用发布订阅同步数据库遇到的坑

可能遇到的各种坑。

2023-07-31 17:36:05 795

原创 转战VUE3学习

安装好vue3后,开始新的项目吧!

2023-06-23 17:48:17 264

原创 typescript入门

js是动态类型的,ts是静态类型的。在大型项目中,变量没有类型,若出现bug很难去查找错误,变得很难维护。因此,ts语言越来越受前端程序员的欢迎。

2023-06-16 22:46:51 1436 2

原创 基于vue3的权限管理系统脚手架搭建项目实战:前端实现(一)

本项目使用springboot+vue3+typescript的技术栈开发。

2023-06-03 23:05:10 1349

原创 C++学习笔记(四): 类、头文件、对象

一个类定义了一个类型,以及与其关联的一组操作。类机制是C++最重要的特性之一。实际上,C++最初的一个设计焦点就是能定义使用上像内置类型一样自然的类类型(class type)。为了使用标准库设施,我们必须包含相关的头文件。类似的,我们也需要使用头文件来访问为自己的应用程序所定义的类。习惯上,头文件根据其中定义的类的名字来命名。

2023-05-27 00:35:14 1757

原创 后端项目开发:实现定时任务功能

一、在pom.xml中添加Quartz和Spring Boot Starter的依赖。三、创建Trigger。四、启动Quartz。

2023-04-18 23:14:21 334

原创 前端项目开发:富文本编辑器(tinymce6简单使用教程)

语言包下载地址:https://www.tiny.cloud/get-tiny/language-packages/插件功能参考官方文档:https://www.tiny.cloud/docs/tinymce/6/plugins/tinymce是开源的富文本编辑器,对于现在众多停止维护的富文本编辑器而言,应该算首选富文本编辑器了。英文官方使用文档:https://www.tiny.cloud/docs/tinymce/6/下载地址:https://www.tiny.cloud/get-tiny/

2023-04-10 22:17:24 1575 1

原创 踩坑:解决npm版本升级报错,无法安装node-sass的问题

在 Node.js 中,采用 gyp 构建工具进行构建 C++ 代码,而 GYP 是基于 Python 2 开发的,所以需要 python,而且不支持 3。当然,要编译 C++ 还需要一个 C++ 编译器,类似 gcc,不同操作系统下需要的环境也不同,参考官网说明。此电脑右键->属性->高级系统设置->环境变量->系统变量->path(添加本地的python路径)要是觉得配置环境麻烦,node-sass 本身提供对应不同系统的二进制版本,直接重新安装即可。于是只能修改npm的config配置。

2023-03-05 17:25:43 1783 1

原创 踩坑:maven打包失败的解决方式总结

使用spring-boot-maven-plugin插件可以创建一个可执行的JAR应用程序,前提是应用程序的parent为spring-boot-starter-parent。通过解压缩jar包,可以看到可执行的jar包有BOOT-INF和META-INF文件夹,可被依赖的jar包无BOOT-INF文件夹,只含有META-INF文件夹。有的人在子模块中也添加了插件,若在子模块中执行打包命令,只能打包单独的模块,会出现程序包不存在的报错。失败原因3:在子模块中执行打包命令,而不是执行的父模块的插件。

2023-03-04 00:23:17 11784

原创 基于RBAC的通用权限管理系统的详细分析与实现(理念篇——权限模型)

RBAC 授权模型的基本思想是通过分配和取消角色来完成用户权限的授予和取消,根据不同的职能岗位划分角色,资源访问许可被封装在角色中。用户通过赋予角色间接地访问系统资源和对系统资源进行操作。授权者根据需要定义各种角色,并设置合适的访问权限。而用户根据其工作性质和职责再被指派为不同的角色,完成权限授予。这样,整个访问控制过程就分成两个部分,即访问权限与角色相关联,角色再与用户关联,从而实现了用户与访问权限的逻辑分离。RBAC模型包含五种基本元素:用户集合、角色集合、对象集合、操作集合、权限集合。

2023-02-07 12:49:54 2026

原创 JavaScript:延迟访问和延时执行函数

场景:由于js是单线程异步执行的,当调用第三方API接口时,如果对方没有提供批量操作的接口,我们就需要多次请求相同的API,但是在for语句中会同时去访问多个相同请求,会造成并发冲突。同时,由于setTimeout函数的作用域不能访问外部函数,需要通过匿名函数传递外部参数进去。单纯使用setTimeout函数,最后发现延迟1s后还是一起执行了内部函数,造成冲突。唯一有的就是setTimeout延迟执行函数,但是这个函数也是有很多坑。思路是每个setTimeout函数延迟不同的时间1000 * i。

2022-09-25 16:24:01 5262

原创 C++学习笔记(二):函数

(2)用实参初始化函数对应的形参。(1)将控制权转移给被调函数。函数是一个命名了的代码块。

2022-08-31 23:01:22 131

原创 后端项目开发:爬取动态网页(webmagic和selenium)

爬取网页一般是用Python比较多,当然java也可以爬网页,主要是靠webmagic和selenium实现网页的获取。首先,加入webmagic和selenium的maven依赖包。

2022-08-30 17:01:58 3959 2

原创 数据结构笔记(二):线性表的抽象和代码实现

ADT List {数据对象:{ai|ai∈ElemSet,i=1,2,...,n,n≥0}数据关系:{|ai-1,ai∈D,i=2,...,n}基本操作:操作结果:构造一个空的线性表L初始条件:线性表已存在操作结果:销毁线性表L初始条件:线性表L操作结果:将L重置为空表初始条件:线性表L已存在操作结果:若L为空表,则返回true,否则返回false初始条件:线性表L已存在操作结果:返回L中数据元素个数初始条件:线性表L已存在。..............................

2022-08-04 22:57:10 462

原创 数据库表设计(二):索引规范和SQL语句规范

说明对多表进行查询记录、更新记录、删除记录时,如果对操作列没有限定表的别名(或表名),并且操作列在多个表中存在,就会抛异常。正例反例如果没加别名限制,在另一个表中增加了一个同名字段线上查询可能会导致1052异常反例某工程师为避免写一个xxx,直接使用HashTable接收数据库返回结果结果由于数据库版本不一样,出现日常把bigint转成Long值,而线上把bigint解析成BigInteger的现象,导致线上出现问题。...

2022-07-20 17:30:08 3137

原创 数据库表设计(一):字段设计规范和命名规范

如INSERT、UPDATE、DELETE、SELECT及其子句,IF……ELSE、CASE、DECLARE等。

2022-07-20 01:42:45 15836 1

原创 C++学习笔记(三):自定义数据结构

数据结构是把一组相关的数据元素组织起来然后使用他们的策略和方法。C++语言允许用户以类的形式自定义数据类型,而库类型string、istream、ostream等也都是以类的形式定义的。type_name是结构体类型的名称,是标准的变量定义,比如inti;或者floatf;或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,您可以指定一个或多个结构变量,这是可选的。下面是声明一个结构体类型Books,变量为book}book;注意在结构定义的末尾,一定要加上分号。......

2022-07-18 20:09:42 993

原创 数据结构笔记(一):用案例开始认识数据结构、并认识抽象数据类型

1;0;-2;函数类型函数名(函数参数列表){//函数说明语句序列}//函数名为了便于描述算法,除了值调用方式外,增加了C++语言引用调用的参数传递方式。在形参表中,以“&”打头的参数即为引用参数。传递引用给函数与传递指针的效果是一样的,形参变化实参也发生变化,但引用使用起来比指针更加方便、高效。数据对象D={|e1,e2∈R,R是实数集}数据关系S={|e1是复数的实部,e2是复数的虚部}基本操作操作结果。.................................

2022-07-15 16:50:12 993

原创 C++学习笔记(一):认识变量、初始化、声明、定义、指针、引用、类型

一、新手之路如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。文本编辑器文本编辑器包括 Windows Notepad、OS Edit command、Brief、Epsilon、EMACS 和 vim/vi。例如,Notepad 通常用于 Windows 操作系统上,vim/vi 可用于 Windows 和 Linux/UNIX 操作系统上。通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。C++ 程序的源文件通常使用扩展名 .cpp、

2022-07-01 15:47:18 244

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除