- 博客(89)
- 资源 (2)
- 收藏
- 关注
原创 .NET Core中的五种过滤器详解
在 .NET Core 中,过滤器(Filters)和面向切面编程(AOP)有着紧密的联系,过滤器可以看作是 AOP 在 .NET Core 框架中的一种具体实现方式。在.NET Core中过滤器是一种特殊的组件,它能够在请求处理管道的特定阶段执行自定义逻辑。借助过滤器,你可以把横切关注点(像日志记录、权限验证、异常处理等)从业务逻辑中分离出来,从而提升代码的可维护性与可复用性。
2025-02-19 19:55:30
1247
原创 nvm管理node版本
nvm 默认从 Node.js 官方源下载文件,由于网络限制或官方服务器响应缓慢,可能会导致连接超时。你可以将 nvm 的镜像源更换为国内的镜像. 这里需要修改nvm的配置文件。这里可以选择下载 .zip 和 .exe 格式, 我这边选择下载 .zip 后解压。
2025-02-14 11:17:07
349
原创 Docker网络
在 Docker 中使用自定义网络具有多方面的重要意义增强网络隔离性:默认情况下,Docker 的bridge网络会将所有容器连接到同一个网络中。而自定义网络允许你根据不同的业务需求创建多个独立的网络,将相关的容器划分到特定的网络中。通过自定义网络,能够在容器层面构建更精细的安全边界。不同安全级别的容器可以放置在不同的网络中,减少了安全漏洞扩散的风险。比如,将处理敏感数据的容器放置在一个独立的自定义网络中,通过网络策略限制其与外部的通信,降低数据泄露的可能性。内置 DNS 支持。
2025-02-13 11:39:42
708
原创 Docker学习笔记
Docker 是一种用于构建、部署和运行应用程序的开源平台,它使用容器技术来实现轻量级、可移植和自包含的应用程序环境。Docker 的核心思想是将应用程序及其依赖项打包到一个称为容器的封闭单元中,从而消除了在不同环境中运行应用程序时可能出现的许多兼容性和依赖性问题。相较于虚拟机技术而言传统虚拟机需要需要虚拟出一套完整的硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。
2025-02-11 16:39:45
1149
原创 Create-Vue创建Vue3项目
create-vue是一个用于快速创建 Vue 3 项目的工具。底层切换到了vite(下一代构建工具),能够为开发者提供极速响应。在使用 create-vue脚手架创建vue3项目的时候,需要确保使用到的Node.js版本在16.0或以上版本。npm init vue@latest 创建vue3 应用,这一指令会安装并执行 create-vue。这里忽略了node.js的安装。
2024-11-21 14:29:58
327
原创 Oraclel联表更新语句
WHEN MATCHED THEN 表示当找到匹配行时执行的操作,这里是更新操作。MERGE INTO 后面指定要更新的目标表,即 table1。USING 后面指定用于提供更新数据的源表,即 table2。ON 子句定义关联条件,根据 id 列进行匹配。
2024-11-21 08:50:05
235
原创 Webpack构建工具
Webpack是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。它的主要作用是将多个松散的模块,包括 JavaScript、CSS、图片、字体等资源,按照指定的规则和依赖关系打包成一个或多个优化后的静态资源文件,以便在浏览器中高效加载和运行。
2024-08-09 08:09:15
906
原创 ASP.NET Core Identity框架介绍与使用
这是因为框架底层已经根据权限设计设计了相应的表并提供了权限设计的相关接口,引入Identity框架后,调用框架提供的API就可以完成我们的业务逻辑。Identity (标识)框架:采用的是基于角色的访问控制策略(Role-Based-Controll-Access),内置了对用户、角色等表的管理以及相关的接口,支持外部登录、2FA等。Identity框架使用EFcore对数据库进行操作(默认使用的SqlServer的数据库),这也意味值标识框架几乎支持所有的数据库。其中 Tkey代表了主键的类型。
2024-05-18 15:53:08
1130
原创 Quartz.Net 整合NetCore3.1,部署到IIS服务器上后台定时Job不被调度的解决方案
经多方查证,可知IIS服务器默认设置会自动回收应用程序池,这意味着将释放内存,清除所有的资源。由于Job实例是由调度器调度运行的,当资源被回收后,调度器关闭后不会再自动打开,因此定时Job无法被调度运行。这意味着,当重启后,服务器会自动的请求http://xxxxxx:8002/Start/StartWeb 这个请求。引起注意的是:在任务结束后的任务监听器中的邮件并没有发出,这意味着任务实例并没有被成功调度。预加载的功能默认是没有安装的,所以为了配置预加载的功能需要先安装这个功能。
2024-05-17 17:41:06
1559
1
原创 Quartz.Net(2)——NetCore3.1整合Quartz.Net
在定义Job时,用到了一个自定义特性JobAttribute,标注在实现了IJobIJob类上,标明该任务的分组,名称,描述 ,触发器触发时的Corn表达式。在实际运行的任务中将依赖于其他服务 如数据库服务、配置服务等,这里可以通过构造函数注入的方式引入其他的服务/// 自定义特性,用来标注Job运行信息/// Job运行的Corn表达式set;/// Job组set;/// Job名称set;/// Job描述set;/// 新进员工创建用户刷脸照片Job。
2024-05-10 10:34:27
1293
1
原创 Quartz.Net(1)
Quartz 中也有自己的切面编程逻辑,可以通过添加监听器的方式,去给工作任务装配额外的工作逻辑,比如记录日志、发送通知或其他自定义业务逻辑。的类来定义一个在触发器触发时的切面类。使用触发器的监听器类时,同样只需要加入到调度器的ListenerManager中。除了可以在Job上增加AOP操作,也能针对触发器增加AOP操作。调度器中去装配JobListener。
2024-05-10 09:48:15
521
原创 NetCore3.1 Controller中直接返回JObject对象抛出异常解决方案
在StartUp中的服务配置类中修改默认的关于序列化器的配置。运行单元测试方法后,发现Newtonsoft.Json可以正常序列化JObject对象,而System.Text.Json不能序列化JObject 类型的对象。因此需要替换到Web项目中的默认序列化器。这是因为在Web项目中,响应结果的的序列化器使用的System.Text.Json包下的。它无法直接序列化JObject类型的对象。在NetCore 3.1的Web项目中,Controller有一个方法直接返回JObject对象时,抛出了异常。
2024-03-28 13:57:18
694
原创 WebClient上载文件——实现将本地文件同步到远端服务器上
本片文章主要提供了一个本地文件同步到远端服务器的一个参考方法,如有其它的解决方案希望和大家一起共享。
2024-03-22 16:35:07
1047
原创 EFcore的实体类配置
该文章使用的是MySQL的数据库,这里使用到了模型驱动开发的模式【现有实体类,后有数据库表。需要使用到迁移指令的使用,本篇文章的重点不是迁移指令的使用,所以忽略该内容】Data Annotation 相较于使用FluentAPI的方式更为简洁,只需要使用特性标注即可,不需要单独的写配置类,不过FluentAPI更为强大,能够完全替代Data Annotation ,但是使用特性的方式则无法完全取代FluentAPI。
2024-03-20 22:20:06
851
原创 C#多线程(5)——异步方法async与await
在上一章节中,为大家介绍了,TPL是从.NetFramwork4.0后引入的基于异步操作的一组API,核心关注于任务【Task和TaskT简化了我们异步编程的步骤,但在C#5.0时,引入了新的语言特性——异步方法,是一种语法糖,是TPL之上的更高级别的抽象,它遵循了基于任务的异步模式,仅仅只使用了async与await关键字,更加简化了异步编程,可以避免性能瓶颈并增强应用程序的总体响应能力。
2024-03-13 11:26:05
1387
原创 C#多线程(4)——任务并行库TPL
TPLTPL(Task Parallel Library)任务并行库,是从.NetFramwork4.0后引入的基于异步操作的一组API。TPL的底层是基于多线程实现的,但是它相较于直接使用多线程,更为简单,它向程序员隐藏了与线程池交互的底层代码。在.NetFramwork4.0后,微软更推荐程序员使用TPL去编写多线程代码或者并行代码。TPL的核心是任务,一个任务代表了一个异步操作,该操作可以使用或不适用独立的线程运行。
2024-03-06 15:41:31
1603
原创 C# 多线程(3)——线程池
线程是计算机宝贵的资源,频繁的创建和销毁线程将会大量的占用计算机资源(为每个线程单独分配内存空间,并且多线程下的CPU时间片的切换也会耗费一定的时间)。为了充分利用硬件资源以及避免线程过多的创建和销毁,可用利用线程池\textcolor{red}{线程池}线程池来管理工作线程。使用者把任务(需要执行的代码)交给线程池,也就是加入线程池的任务队列\textcolor{red}{任务队列}任务队列,工作线程完成之前的任务后,就继续从队列中取任务执行。
2024-03-01 16:14:16
1732
原创 NetCore实现输入用户名和密码后访问Swagger页面
在后端编程时,通常使用swagger文档来呈现接口文档。为了接口的安全性,可通过输入用户名和密码的方式来进行验证。本文介绍如何通过自定义中间件来实现访问接口文档前需要进行Basic认证。
2024-01-31 16:02:40
2667
原创 C# 多线程(2)——线程同步
当在同一时刻多个线程操作共享资源时就会导致数据的错误,但是如果在单一线程中按照顺序就不出现这样的问题,这也就引申出线程同步的内容,保证多个线程提升性能的前提下,也不会出现程式数据的错误,重点就是让多个线程按照一定的顺序同步的执行代码,就是线程同步的概念。lock 排它锁的使用,确保了多个线程在访问竞态代码块时,只有一个线程是获得CPU时间片的,其他的线程处于阻塞中,并处于一个等待队列中。直到锁被释放,等待的线程属于先到先得的情形,依次等待获得锁去执行竞态代码块,保证了线程同步,因此可以保证线程的安全。
2024-01-30 09:51:33
1742
原创 C# 多线程(1)——线程基础
进程是计算机概念,一个程序运用时占用的的所有**计算机资源**(CPU、内存、硬盘、网络)统称为进程。线程是操作系统中能够独立运行的最小单位,是进程(包含多个线程)中的一部分,线程也有自己的计算资源,多个线程间可以共享进程的资源。C#中的Thread其实是对计算机中线程概念的封装(API的封装),它的执行归根结底是向底层操作系统申请了线程资源。在C#中的线程实现包括 Thread/ThreadPool/Task/Await Async。多线程的本质是资源换性能(CPU、内存、硬盘、网络)。好处是提高利
2023-11-28 15:43:21
1298
原创 利用ZipInputStream(解压)/ZipOutputStream(压缩)文件夹
在操作.zip的压缩包时,可以用到高级流ZipInputStream和ZipOutputStream。.zip文件中的每个文件夹和文件都是一个ZipEntry对象。解压和压缩的本质就是操作每个ZipEntry对象,只能操作后缀为.zip的文件。
2023-10-20 11:07:47
2227
原创 Redis持久化——RDB和AOF
Redis数据库是内存数据库,一旦出现服务宕机,那么内存中的数据就容易丢失。所以需要进行redis的持久化动作。Redis持久化是指将Redis内存数据持存储到磁盘中,若出现了Redis服务宕机后,能够从硬盘中再恢复到Redis内存中。Redis的持久化方式包含RDB和AOF 两种方式。
2023-08-15 14:36:35
707
原创 Redis实战(5)——Redis实现消息队列
消息队列,顾名思义,就是一个存放消息的队列。最简单的消息队列包含3个角色。$\textcolor{red}{Redis 提供了三种实现消息队列的方式,基于List结构、PubSub、Stream结构}$
2023-08-05 11:10:51
7585
原创 Redis实战(4)——Redisson分布式锁
当成功获得锁时,返回null,获得锁失败时,获得锁剩余的持有时间。做到了锁重试,且不是无休止的盲目等待去获得锁的信息。至于锁的超时释放问题,redisson 提供了watchdog机制,当不设定锁的超时时间,即默认设置为-1 时,利用watchdog机制,每隔一段时间 (internalLockLeaseTime 3),重置锁的有效时长。即每一个redis节点都当成Master节点来看待,在获得锁时,必须每一个Redis节点都获得锁成功才算成功,释放锁时需要每一个Redis节点都释放锁成功才算成功。
2023-08-02 09:09:07
848
原创 Redis实战(3)——缓存模型与缓存更新策略
缓存就是数据交换的缓冲区,是存贮数据的临时区,一般读写性能较高\textcolor{red}{是存贮数据的临时区,一般读写性能较高}是存贮数据的临时区,一般读写性能较高。缓存可在多个场景下使用以一次web请求为例,演示不同阶段的缓存作用\textcolor{blue}{以一次web请求为例,演示不同阶段的缓存作用}以一次web请求为例,演示不同阶段的缓存作用web开发时:浏览器发送请求时通常会缓存不经常变更静态文件,如css、js文件。
2023-07-28 16:47:38
1479
原创 Redis实战(2)——互斥命令用于构建分布式锁
在单体应用中,线程锁是可以让多个线程串行执行一段代码逻辑的。不过在集群环境或者是分布式的环境下,线程锁无法保证线程串行运行,从而出现线程安全的问题。根本的原因在于,在集群分布式环境下\textcolor{red}{集群分布式环境下}集群分布式环境下,用于确保线程串行运行的线程监视器有多个。因为服务如果是分布式的部署,那么一定是在多个JVM中运行的。每个JVM中都将维护自己的堆栈空间。线程监视器同样如此。每个线程监视器都有可能被线程键入,所以集群、分布式环境下线程锁无线确保线程安全。
2023-07-28 15:16:05
947
原创 Redis应用(1)——生成全局唯一标识ID
在实际项目中,根据不同的业务逻辑需要生成唯一的标识id ,如购买商品生成的订单号。尽管这个标识id功能非常的简单,但是如果不能成功的生成唯一标识id,那将会影响后续的业务逻辑。我们可以使用数据库去生成唯一标识id,但是其性能受到数据库性能的硬性,且随机标识id过于简单会暴露业务信息。所以意味着,生成唯一标识的逻辑方法需要高性能且高可用。并且需要高安全性,不能暴露出业务信息。在这篇文章中,将使用redis数据库区生成唯一的标识id生成的逻辑是时间戳redis自增序列号。
2023-07-27 20:19:31
609
原创 Elasticsearch(3)——JavaAPI操作Elasticsearch
ES 官方提供了三种 Java API 接口,分别是 TransportClient、Java Low Level REST Client、 Java High Level REST Client。原因是 ES 版本迭代较快,TransportClient 使用了特定的传输协议,如果其版本与 ES 实例版 本不一致则可能导致兼容性问题。创建名为post的索引 ,使用CreateIndexRequest,等价于 PUT请求。文档需要操作的字段信息如上 ,包含文章Id,文章作者、创建时间、文章标题、内容等。
2023-07-04 16:52:15
2997
1
原创 Elasticsearch(2)——映射关系
映射(mapping)就像数据库中的 Schema ,描述了文档可能具有的字段或属性、每个字段的数据类型,比如 Text,Keyword,Integer 或 Date ,以及 Lucene 是如何索引和存储这些字段的。Elasticsearch 支持如下简单字段类型:(1) 字符串: text,keyword(2)整数:byte,short,integer,long(3)浮点数: float,double(4) 布尔型: boolean(5) 日期: date。
2023-07-04 16:49:04
780
原创 Elasticsearch(1)——倒排索引与HTTP操作Elasticsearch
核心产品包括 Elasticsearch【存储数据】、Kibana【展示数据】、Beats 和 Logstash【收集与传输数据】(也称为ELK Stack)等等。能够安全可靠地从任何来源获取任何格式的数据,然后对数据进行搜索、分析和可视化。sa是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,Elasticsearch 会集中存储您的数据,让您飞快完成搜索,微调相关性,进行强大的分析,并轻松缩放规模。
2023-07-04 10:25:09
806
原创 AspNetCore中的依赖注入详解
ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制, ASP.NET Core通过定义接口的方式对它们进行了“标准化”,我们将这些标准化的组件称为服务, ASP.NET Core在内部专门维护了一个IOC容器来提供所需的服务。服务的创建到销毁的过程完全交给IOC容器,大大降低了耦合度。依赖注入旨在实现针对服务对象的动态提供。
2023-05-30 10:08:22
1864
原创 AspNetCore中的配置文件详解
除此之外,还提供其他的配置数据源 【不同的ConfigurationProvider】,允许系统从多个配置源中读取配置文件,如环境变量或者系统内存。真实项目中涉及的配置大都具有一个结构化的层次结构,所以在配置模型中的Configuration对象同样具有这样的结构。程序开发中,有些信息是要根据环境改变的,比如开发环境的数据库可能是本地数据,而生产环境下需要连接生产数据库,我们需要把这些信息放到程序外面,在程序运行时通过读取这些外部信息实现不改变程序代码适应不同环境的需求,这些信息就是“配置”。
2023-05-17 19:32:49
1161
原创 AspNetCore中的中间件详解【超详细】
虽然中间件的本质是一个Func middleware 对象,中间件的类型可分为两种,下面自定义实现以及记录请求IP地址的中间件弱类型中间件(1) 定义Ip中间件//调用下一个请求中间件 await requestDelegate . Invoke(context);} }(2)增加Use的拓展方法。
2023-05-08 17:51:53
2787
原创 SpringMVC——响应处理(2)之内容协商
根据**客户端**接收能力的不同,服务端返回不同的媒体类型的数据。这是由**HTTP协议**定的。Accept 首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。可使用 type/subtype 这种形式,一次指定多种媒体类型。如文本文件 **text/html**,支持text和html两种内容格式。若想要给显示的媒体类型增加优先级,则使用 q= 来额外表示权重值1,用分号(;)进行分隔。权重值 q 的范围是 0~1当服务器提供多种内容时,将会首先返回权重值最高的媒体类型。
2023-02-28 10:41:46
409
原创 SpringMVC——响应处理(1)【包含源码分析】
在解析上面这段代码的时候需要,需要了解一个概念内容协商(浏览器在发送请求的时候告知服务器端将接受怎样的返回数据类型,默认通过在请求头中设定Accept头)查看RequestResponseBodyMethodProcessor的supportsReturnType方法的实现源码如下。内容协商(浏览器默认以请求头的方式告知服务器端允许接受的内容类型)是一个处理消息转换的标准接口,不同的内容类型有具体的实现类去处理。服务器根据自身的能力,决定服务器能生产什么样的内容类型的数据。解析的结果正如归纳的步骤而言。
2023-02-27 18:16:46
531
原创 mybatis-spring-boot-starter中设定多数据源,并实现Durid的监控
实现功能:1: 配置两个数据源,根据不同的mapper路径使用不同的数据连接2 :使用Druid连接池3:Druid 可监控多个数据源的sql执行操作分析:查看mybatis_spring_boot_stater中关于自动装配的类可知【如上图】,需要自定义实现SqlsessionFactory和SqlSessionTemplate的Bean,其中方法依赖于DataSource数据源。所以需要根据不同的数据源配置,自定义配置不同的数据源Bean。
2023-02-16 14:28:18
1186
1
原创 注解ConfigurationProperties、EnableConfigurationProperties的用法
ConfigurationProperties主要作用就是将prefix属性指定的前缀配置项的值绑定到这个JavaBean上 ,通过指定的前缀,来绑定配置文件中的配置。这里可以看到仅仅通过new关键字实例一个User对象,并没有看到set 属性的操作,这是Spring框架帮助我们做了这一步,所以User类不能忽略 get set 方法,否则无法将配置信息设置到对应的类属性中。ConfigurationProperties注解可用在类上和方法上(必须是配置类中的标注了@Bean注解的方法)。
2023-02-15 11:18:05
4396
1
原创 SpringBoot整合Druid数据源(实行监控功能)
在上篇文章中分析了数据连接池(Durid)在应用中可以做到资源重用,提升系统响应速度,避免数据库连接遗漏。它除了是一个高性能数据库连接池之外,更是一个自带监控的数据库连接池。
2023-02-11 16:12:26
3310
原创 JDBC与Druid连接池
JDBC(java database connectivity )是Java语言连接操作关系型数据库的一套解决方案,屏蔽了底层各数据库不同的差异。具体是通过sun公司定义的统一的一套API【标准接口】来实现解决差异, 具体实现是各大数据库厂商来实现的,即各个不同的驱动jar包。java----jdbc统一接口----各关系型数据库。
2023-02-10 14:18:07
1064
黑马智慧商城项目-vue2+vant-ui
2024-11-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人