自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序人生

一个爱编程的码农

  • 博客(86)
  • 收藏
  • 关注

原创 Asp .Net Core 系列:详解授权以及实现角色、策略、自定义三种授权和自定义响应

在 ASP.NET Core 中,授权(Authorization)是控制对应用资源的访问的过程。它决定了哪些用户或用户组可以访问特定的资源或执行特定的操作。授权通常与身份验证(Authentication)一起使用,身份验证是验证用户身份的过程,授权与身份验证相互独立, 但是,授权需要一种身份验证机制。身份验证是确定用户标识的一个过程。身份验证可为当前用户创建一个或多个标识。在底层,基于角色的授权和基于声明的授权均使用要求、要求处理程序和预配置的策略。这些构建基块支持代码中的授权评估的表达式。

2024-07-26 23:06:11 518

原创 Asp .Net Core 系列:基于 T4 模板生成代码

T4模板,即,是微软官方在Visual Studio中引入的一种代码生成引擎。自Visual Studio 2008开始,T4模板就被广泛应用于生成各种类型的文本文件,包括网页、资源文件以及各种编程语言的源代码等。T4模板是一种由文本块和控制逻辑组成的混合模板,它可以根据预设的规则和输入数据生成目标文本文件。

2024-07-16 23:21:12 1033

原创 JavaScript系列:JS实现复制粘贴文字以及图片

Clipboard API 是一组用于在浏览器中操作剪贴板的 JavaScript API,它允许开发者在网页上读取和写入剪贴板内容,实现复制、剪切和粘贴等功能。是一个在网页上执行复制操作的旧式API,属于 Web API 的一部分,用于在不需要用户交互(如点击或按键)的情况下,通过脚本复制文本到剪贴板。然而,这个API在现代Web开发中已经被视为过时(deprecated),并在许多现代浏览器中受到限制或不再支持,尤其是在没有用户明确交互的情况下。

2024-07-15 23:23:20 1231

原创 Java 设计模式系列:外观模式

外观模式(Facade Pattern)是一种设计模式,又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。外观模式的关键在于隐藏系统的复杂性,并简化客户端与系统之间的交互。它通过提供一个统一的接口,使得客户端无需了解系统内部的复杂联系和实现细节,只需要通过外观类与系统进行交互即可。这有助于降低系统的耦合度,提高系统的可维护性和可扩展性。

2024-07-14 22:32:41 1125

原创 Java 设计模式系列:解释器模式

解释器模式是一种行为型设计模式,它提供了一种构建抽象语法树的机制,并定义了如何解释这棵树。解释器模式属于编译原理中的语法制导翻译的范畴。如上图,设计一个软件用来进行加减计算。我们第一想法就是使用工具类,提供对应的加法和减法的工具方法。//用于两个整数相加//用于两个整数相加//用于n个整数相加sum += i;return sum;上面的形式比较单一、有限,如果形式变化非常多,这就不符合要求,因为加法和减法运算,两个运算符与数值可以有无限种组合方式。

2024-07-13 18:36:44 834

原创 Asp .Net Core 系列:基于 Castle DynamicProxy + Autofac 实践 AOP 以及实现事务、用户填充功能

AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在通过将横切关注点(cross-cutting concerns)从主要业务逻辑中分离出来,以提高代码的模块化性、可维护性和复用性。在传统的面向对象编程中,我们通常通过类和对象来组织和实现功能。然而,某些功能,如日志记录、事务管理、安全性检查等,可能会跨越多个对象和模块,这种跨越称为横切关注点。

2024-07-04 22:09:28 469

原创 Asp .Net Core 系列:详解鉴权(身份验证)以及实现 Cookie、JWT、自定义三种鉴权 (含源码解析)

定义鉴权,又称身份验证,是确定用户身份的过程。它验证用户提供的凭据(如用户名和密码)是否有效,并据此确认用户是否具备访问系统的权利。过程用户向系统提供凭据(如用户名和密码)。系统使用已注册的身份验证服务(如IAuthenticationService)和身份验证处理程序来验证这些凭据的有效性。如果凭据有效,系统将识别并确认用户的身份,然后用户可以访问系统。方式传统的鉴权方式通常依赖于密码验证,但这种方式存在安全风险,如密码泄露或被盗用。

2024-06-07 21:00:00 1579

原创 Asp .Net Core 系列:集成 CAP + RabbitMQ + MySQL(含幂等性)

官网:https://cap.dotnetcore.xyz/事件总线是一种机制,它允许不同的组件彼此通信而不彼此了解。组件可以将事件发送到 Eventbus,而无需知道是谁来接听或有多少其他人来接听。组件也可以侦听 Eventbus 上的事件,而无需知道谁发送了事件。这样,组件可以相互通信而无需相互依赖。同样,很容易替换一个组件。只要新组件了解正在发送和接收的事件,其他组件就永远不会知道.

2024-05-22 21:15:00 1140

原创 Asp .Net Core 系列:国际化多语言配置

全球化 (G11N):使应用支持不同语言和区域的过程。缩写来自第一个和最后一个字母以及它们之间的字母数。本地化 (L10N):针对特定语言和区域自定义全球化应用的过程。国际化 (I18N):包括全球化和本地化。区域性:一种语言和/或区域。非特定区域性:具有指定语言但不具有区域的区域性(例如“en”、“es”)。特定区域性:具有指定语言但和区域的区域性(例如“en-US”、“en-GB”、“es-CL”)。父区域性:包含特定区域性的非特定区域性。

2024-04-28 20:15:00 2211

原创 Java 设计模式系列:建造者模式

建造者模式(Builder Pattern)是一种对象构建设计模式,它提供了一种构建对象的最佳方式。这种模式属于创建型模式,它提供了一种创建对象的最佳方式。建造者模式的主要特点是它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式将一个复杂对象的构建过程分为多个步骤,每一步只完成一部分构建工作,最终通过这些步骤的顺序完成整个对象的构建。通过将构建过程分解为一系列的步骤,使得客户端只需要关心所需产品的接口,而不必关心具体的构建过程。

2024-04-21 17:11:02 609

原创 设计模式系列:适配器模式

适配器模式(Adapter Pattern)又称为变压器模式,它是一种结构型设计模式。适配器模式的目的是将一个类的接口转换成客户端所期望的另一种接口,从而使原本因接口不匹配而不能一起工作的两个类能够一起工作。适配器模式有两种形式:类适配器(Class Adapter)和对象适配器(Object Adapter)。类适配器通过继承实现适配器功能,让Adapter实现Target接口并且继承Adaptee,这样Adapter就具备Target和Adaptee的特性,可以将两者进行转化。

2024-04-15 22:26:12 1419

原创 设计模式系列:责任链模式

责任链模式是一种行为型设计模式,它允许你将请求沿着处理者链进行发送。每个处理者都可以对请求进行处理,或者将其传递给链上的下一个处理者。责任链模式主要应用于面向对象编程中,特别是当系统中的对象需要根据其属性来决定如何处理请求时。在责任链模式中,通常会有多个对象(处理者)连接在一起形成一个链。当一个请求发送到链的开始时,它将沿着链传递,直到找到一个处理者来处理这个请求。如果没有处理者能够处理该请求,那么请求将沿着链继续传递,直到找到一个可以处理它的处理者。

2024-04-14 21:55:24 1292

原创 Java 设计模式系列:模板方法模式

模板方法模式是一种行为型设计模式,它定义一个操作中的算法骨架,将一些步骤推迟到子类中。模板方法模式使得子类可以不改变一个算法的结构,即可重定义该算法的某些特定步骤。在模板方法模式中,抽象类中定义了一系列基本操作,这些操作是具体的也可以是抽象的,每一个基本操作对应算法的一个步骤。在子类中可以重定义或实现这些步骤,同时抽象类实现了一个模板方法,定义一个算法的框架。模板方法模式通过封装不变部分,扩展可变部分,将特定步骤的具体实现与操作流程分离开来,实现了代码的复用和扩展,提高了代码质量和可维护性。

2024-04-14 00:56:31 1192

原创 Java 设计模式系列:享元模式

享元模式(Flyweight Pattern)是一种软件设计模式,用于减少内存使用和提高性能。它通过共享细粒度对象来减少创建和销毁对象时所需的内存。享元模式适用于大量相似对象的场景,这些对象可以共享相同的状态和行为。享元模式的核心思想是将对象分为内部状态和外部状态。内部状态是对象自身的状态,通常是不可变的,可以共享;而外部状态则是与对象相关联的环境信息,通常是变化的,由客户端传入享元对象内部。通过共享内部状态,可以显著减少系统中的对象数量,从而降低内存消耗。

2024-04-13 19:17:02 860

原创 Asp .Net Core 系列:集成 Refit 和 RestEase 声明式 HTTP 客户端库

经过查找和实验,发现 在 .NET 平台上,虽然没有直接的 Feign 框架的端口,但是有一些类似的框架和库,它们提供了类似的功能和设计理念。然后,您可以在 ASP.NET Core 应用程序中使用 RestEase 客户端。与 Refit 不同的是,RestEase 不需要额外的配置,您只需要直接使用接口即可。然后,您可以在 ASP.NET Core 应用程序中使用 RestEase 客户端。然后,您可以在 ASP.NET Core 应用程序中使用 Refit 客户端。

2024-04-10 17:06:49 921

原创 Java 设计模式系列:备忘录模式

备忘录模式是一种软件设计模式,用于在不破坏封闭的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,很多软件都提供了撤销(Undo)操作,如 Word、记事本、Photoshop、IDEA等软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态;

2024-04-02 21:00:00 1129

原创 Java 设计模式系列:行为型-中介者模式

中介者模式是一种行为型设计模式,它定义了一个中介对象,用于简化对象之间的交互。中介者模式通过引入一个中介对象来解耦多个对象之间的交互,使得这些对象可以独立地改变和复用。中介者模式的适用场景包括多个对象之间存在复杂的引用关系,导致系统的结构变得很复杂;当一个对象发生改变时,需要跟踪与之相关联的对象并做出相应的处理;系统中需要添加新的类来处理多个类中的行为,而不必对原类进行修改。

2024-03-20 21:15:00 974

原创 Java 设计模式系列:行为型-状态模式

状态模式(State Pattern)是一种行为型设计模式,允许一个对象在其内部状态改变时改变其行为。状态模式中类的行为是由状态决定的,在不同的状态下有不同的行为。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。适用场景:一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为;一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。

2024-03-19 21:30:00 1253

原创 Java 设计模式系列:行为型-观察者模式

观察者模式是一种行为型设计模式,又被称为发布-订阅(Publish/Subscribe)模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。观察者模式的主要优点是降低了目标对象和观察者对象间的耦合,二者可以各自独立地改变和复用,让对系统增加功能或删除功能都很方便。然而,观察者模式也存在一些缺点,比如如果一个被观察者对象有很多的直接和间接的观察者,将所有的观察者都通知到会花费很多时间;

2024-03-15 20:00:00 2075

原创 Asp .Net Core 系列:Asp .Net Core 集成 Hangfire+MySQL

在 .NET 和 .NET Core 应用程序中执行后台处理的简单方法,无需 Windows 服务或单独的进程。Hangfire 是一个开源的.NET 任务调度框架,它提供了内置集成化的控制台,允许用户直观明了地查看作业调度情况。Hangfire 不需要依赖于单独的应用程序执行(如 Windows 服务或 Windows 计划任务),支持持久性存储,并且是开源且免费用于商业用途的。Hangfire 的核心组件包括客户端、持久化存储和服务端。

2024-03-13 20:59:23 1176

原创 Git 系列:简介安装以及配置管理

Git是一个开源的分布式版本控制系统,用于有效、高速地处理从小到大的项目版本管理。它最初由Linux之父Linus Torvalds设计开发,旨在帮助管理Linux内核开发。Git采用了分布式版本库的方式,不需要服务器端软件支持,每个开发人员都可以在自己的计算机上拥有完整的项目副本,独立进行开发、测试和修改。速度:Git在版本控制方面表现出色,能够高效地处理大规模项目。简单的设计:Git具有直观易用的设计,使得开发人员能够轻松上手。

2024-03-12 20:45:00 1531

原创 Asp .Net Web Forms 系列:配置图片防盗链的几种方法

在 ASP.NET 中,HttpModule 是一个用于处理 HTTP 请求和响应的重要组件。通过实现 IHttpModule 接口并定义 Init 和 Dispose 方法,你可以创建自定义的 HttpModule,并在 ASP.NET 请求处理管道中的不同阶段插入自定义逻辑。HttpModule 的主要作用包括:请求和响应处理:你可以在请求到达页面或处理程序之前或之后执行自定义代码,例如添加 HTTP 头、修改响应内容、执行身份验证或授权逻辑等。

2024-03-11 21:15:00 1011

原创 Asp .Net Core 系列:Asp .Net Core 集成 Newtonsoft.Json

Newtonsoft.Json是一个在.NET环境下开源的JSON格式序列化和反序列化的类库。它可以将.NET对象转换为JSON格式的字符串,也可以将JSON格式的字符串转换为.NET对象。这个类库在.NET开发中被广泛使用,因为它功能强大、易于使用,并且有良好的性能。序列化:将.NET对象转换为JSON字符串。这通常用于将数据发送到Web服务或保存到文件。反序列化:将JSON字符串转换为.NET对象。这通常用于从Web服务接收数据或从文件中读取数据。

2024-03-06 21:30:00 1883

原创 Asp .Net Core 系列:Asp .Net Core 集成 Panda.DynamicWebApi

是一个动态生成WebApi的组件,生成的API符合Restful风格,受启发于ABP。它可以根据符合条件的类来生成WebApi,由MVC框架直接调用逻辑,无性能问题,完美兼容Swagger来构建API说明文档,与手动编写Controller相比并无区别。应用场景:DDD架构中的应用逻辑层,可使用本组件来直接生成WebApi,而无需再用Controller来调用。

2024-02-07 22:36:26 1808

原创 Asp .Net Core 系列:Asp .Net Core 集成 NLog

NLog是一个基于.NET平台编写的日志记录类库,它可以在应用程序中添加跟踪调试代码,以便在开发、测试和生产环境中对程序进行监控和故障排除。NLog具有简单、灵活和易于配置的特点,支持在任何一种.NET语言中输出带有上下文的调试诊断信息,并能够将这些信息发送到一个或多个输出目标(target)中,如文件、数据库、控制台等。NLog的API非常类似于log4net,但配置方式更加简单,使用路由表(routing table)进行配置,使得配置文件易于阅读和维护。

2024-02-06 21:12:02 2358

原创 Nexus系列:简介和安装(Windows、Linux)以及反向代理Nexus

Sonatype Nexus是一个Maven仓库管理器,可以节省网络带宽并加速项目搭建的进程。它可以管理jar包的仓库,包括上传和下载jar包。此外,Sonatype Nexus还可以配置其他远程maven仓库站点,作为公共maven仓库的专用代理服务器,为maven项目部署提供存储库。它可以搭建局域网maven私服仓库,实现局域网用户共享,并且支持代理广域网上的远程仓库。官网:https://help.sonatype.com/en/sonatype-nexus-repository.html。

2024-02-02 21:03:28 737

原创 MySQL系列:系列结构和基础管理

1.本地socket链接方式socket=/tmp/mysql.sock说明:只能在本地使用,不依赖于IP和端口2.远程TCPIP链接方式实例:mysqld+工作线程+预分配的内存结构功能:管理数据查看连接线程表+库查看mysql中所有的数据库切换到某个数据库查看库中所有的表查看表结构段:一个表就是一个段,可以由1个或者多个区构成区:一个区(簇)默认1M,由连续的64个page构成页:一个页,默认16KB,由连续的4个OS block构成OS 块:一个块,4KB,由连续的8个扇区构成扇区:一个

2024-02-01 21:23:52 1202

原创 怎么同时学好Java和.Net?

怎么同时学好Java和.Net?

2024-01-31 22:33:10 125

原创 Mybatis 源码系列:领略设计模式在 Mybatis 其中的应用

,它属于创建类模式,一般来说,如果一个对象的构建比较复杂,超出了构造函数所能包含的范围,就可以使用工厂模式和Builder模式,相对于工厂模式会产出一个完整的产品,Builder应用于更加复杂的对象的构建,甚至只会构建产品的一个部分。在这个过程中,有一个相似的特点,就是这些Builder会读取文件或者配置,然后做大量的XpathParser解析、配置或语法的解析、反射生成对象、存入结果缓存等步骤,这么多的工作都不是一个构造函数所能包括的,因此大量采用了Builder模式来解决。

2024-01-31 22:30:15 1120

原创 MyBatis 源码系列:MyBatis 解析配置文件、二级缓存、SQL

启动流程分析通过上面代码发现,创建SqlSessionFactory的代码在SqlSessionFactoryBuilder中,进去一探究竟:下面是解析配置文件的核心方法:上面解析流程结束后会生成一个Configration对象,包含所有配置信息,然后会创建一个SqlSessionFactory对象,这个对象包含了Configration对象。简单总结对于MyBatis启动的流程(获取SqlSession的过程)这边简单总结下:解析mapper文件解析mapper解析CachebuildStat

2024-01-30 22:42:23 578

原创 Asp .Net Core 系列:Asp .Net Core 配置 System.Text.Json

命名空间提供用于序列化和反序列化 JavaScript 对象表示法 (JSON) 的功能。序列化是将对象状态(即其属性的值)转换为可存储或传输的形式的过程。序列化形式不包含有关对象的关联方法的任何信息。反序列化从序列化形式重新构造对象。库的设计强调对广泛的功能集实现高性能和低内存分配。内置的 UTF-8 支持可优化读写以 UTF-8 编码的 JSON 文本的过程,UTF-8 编码是针对 Web 上的数据和磁盘上的文件的最普遍的编码方式。库还提供了用于处理内存中文档对象模型 (DOM)的类。

2024-01-29 21:45:04 1659

原创 Nginx系列:简介和安装(基于yum和源码的方式)

Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,在同类型的网页服务器中表现较好。此外,Nginx也可以作为一个通用的TCP/UDP代理服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的,公开版本1.19.6发布于2020年12月15日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。

2024-01-28 16:02:07 464

原创 Java 设计模式系列:简单工厂模式

简单工厂模式(Simple Factory Pattern)是一种常用的设计模式,属于创建型模式。又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。它提供了一种创建对象的最佳方式。在简单工厂模式中,有一个专门的工厂类负责创建其他类的实例,而客户端无需知道所创建对象的详细信息。工厂类负责实现创建所有实例的内部逻辑,可以创建具有共同父类的不同类的新实例。

2024-01-27 16:48:07 457

原创 Spring Cloud 系列:基于Seata 实现 XA模式

XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范 描述了全局的TM与局部的RM之间的接口,几乎所有主流的数据库都对 XA 规范 提供了支持。XA 模式是从 1.2 版本支持的事务模式。XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准。

2024-01-25 21:36:46 687

原创 Spring Cloud 系列:Seata 中TCC模式具体实现

TCC模式与AT模式非常相似,每阶段都是独立事务,不同的是TCC通过人工编码来实现数据恢复。Try:资源的检测和预留;Confirm:完成资源操作业务;要求 Try 成功 Confirm 一定要能成功。Cancel:预留资源释放,可以理解为try的反向操作。

2024-01-22 19:59:48 1254

原创 Servlet系列:生命周期(init、 service、destroy)详解

Servlet的生命周期是由Web容器(如Tomcat)管理的,包括以下三个阶段:1. 加载和实例化:当Web应用程序启动时,Web容器会加载和实例化Servlet。加载和实例化过程可以在应用程序启动时自动完成,也可以通过Servlet的名称手动加载。在实例化Servlet后,Web容器会调用其init()方法进行初始化。2. 处理请求:当客户端发送请求时,Web容器会调用Servlet的service()方法处理请求。service()方法会根据请求的类型(GET、POST等)调用doGet()或d

2024-01-21 18:15:49 1745

原创 MyBatis 系列:MyBatis 源码环境搭建

不必过于纠结一些错误,对于一些失败的可以考虑直接注释。

2024-01-20 19:42:11 1231

原创 Servlet系列:(HttpServletRequest、HttpServletResponse、ServletContext、ServletConfig)详解

客户端发出第一个请求,被服务器接收处理后,服务器会进行响应,在响应的同时,服务器会给客户端一个新的地址(下次请求的地址response.sendRedirect(url);HttpServletRequest 对象:主要作用是用来接收客户端发送过来的请求信息,例如:请求的参数,发送的头信息等都属于客户端发来的信息,service()方法中形参接收的是 HttpServletRequest 接口的实例化对象,表示该对象主要应用在 HTTP 协议上,该对象是由 Tomcat 封装好传递过来。

2024-01-19 20:59:22 659

原创 Asp .Net Core 系列:集成 Ocelot+Nacos+Swagger+Cors实现网关、服务注册、服务发现

Ocelot是一个开源的ASP.NET Core微服务网关,它提供了API网关所需的所有功能,如路由、认证、限流、监控等。Ocelot是一个简单、灵活且功能强大的API网关,它可以与现有的服务集成,并帮助您保护、监控和扩展您的微服务。路由管理:Ocelot允许您定义路由规则,将请求路由到正确的微服务。认证和授权:Ocelot支持多种认证机制,如JWT、OAuth等,并允许您定义访问控制策略,确保只有授权的用户才能访问特定的API。

2024-01-18 22:10:22 2006

原创 Servlet系列:两种创建方式(xml,注解)

使用 @WebServlet 注解配置的 Servlet 类,不要在 web.xml 文件中再次配置该 Servlet 相关属性。若同时使用 web.xml 与 @WebServlet 配置同一 Servlet 类,则 web.xml 中 的值与注解中 name 取值不能相同,否则容器会忽略注解中的配置。在注解中,可以指定Servlet的名称、URL映射等。如果值为正整数或者0时,表示容器在应用启动时就加载并初始化这个 servlet,值越小, servlet的优先级越高,就越先被加载。

2024-01-17 20:25:38 1336 2

空空如也

空空如也

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

TA关注的人

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