MIKE
.NET CORE 生成/验证 JWT Token
1. 什么是 JSON Web 令牌? JSON Web 令牌 (JWT) 是一种开放标准 (RFC 7519),它定义了一种紧凑且自包含的方式,用于将信息作为 JSON 对象在各方之间安全地传输。此信息是经过数字签名的,因此可以验证和信任。可以使用密钥(使用 HMAC 算法)或使用 RSA 或 E
.NET CORE 读取配置的三种方式
在.NET Core中,配置是通过各种配置提供程序来加载的,比如JSON文件、环境变量、命令行参数等等,appsettings.json是默认的配置文件。 需要考虑在控制器或者服务中如何注入IConfiguration接口?通常在Startup或者Program.cs中,会配置IConfigurat
.NET CORE IOC DI 概念解析
要理解.NET Core中的IOC和DI的概念。首先,我需要明确这两个术语的含义。IOC是控制反转,DI是依赖注入,这两个概念经常一起出现,但具体有什么区别呢?控制反转是一种原则,用来减少代码之间的耦合。依赖注入是实现控制反转的一种方法。 需要了解在.NET Core中,IOC容器是如何工作的。通过
.NET CORE 接入 OpenTelemetry 收集指标、链路跟踪数据
1. OpenTelemetry简介 OpenTelemetry(简称 OTel)是一个开源的云原生观测框架,由 Cloud Native Computing Foundation(CNCF)维护。它的目标是提供一套标准化的工具、API 和 SDK,帮助开发者收集、生成和管理应用程序的遥测数据(如指
.NET CORE 构建 gRPC服务
1. gRPC 概述 gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架 2. gRPC 的主要优点 现代高性能轻量级 RPC 框架。 协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现。 可用于多种语言的工具,以生成强类型
Redis 部署模式
Redis 有多种部署模式,适用于不同的场景和需求。以下是常见的几种部署模式及其特点: 1. 单机模式(Standalone) 描述:单个 Redis 实例独立运行,无冗余或扩展能力。 优点: 简单易用,适合开发和测试。 资源消耗低。 缺点: 单点故障风险(宕机则服务不可用)。 数据容量和性能受限于
Redis 线程模型
Redis在处理客户端请求的时候,主要用的是单线程模型。 也就是说,所有的命令都是一个接一个处理的,避免了多线程的竞争问题,所以不需要锁,这也保证了原子性。不过,可能有例外的情况,比如某些异步任务可能会用多线程,比如持久化操作或者UNLINK命令删除大键,这些可能是在后台线程处理的。 另外,Redi
Redis 持久化机制
Redis 持久化是将内存中的数据保存到磁盘,确保数据在重启后不丢失的关键机制。Redis 提供了两种主要的持久化方式:RDB(Redis Database) 和 AOF(Append-Only File),以及两者的混合模式。 RDB(快照持久化) RDB 通过生成某个时间点的数据快照(snaps
Redis 数据类型
在Redis中,数据类型是构建其强大功能的核心。Redis支持多种数据类型,每种类型都为不同的使用场景提供了高效的数据存储和操作方式。理解这些数据类型的意义对于有效利用Redis至关重要。 Redis 主要支持以下几种数据类型: string(字符串): 基本的数据存储单元,可以存储字符串、整数或者
MySQL 索引分类 实现原理
MySQL索引是优化查询速度的关键机制,其分类和实现原理如下 索引分类 按数据结构划分 B+Tree索引 最常见类型,InnoDB和MyISAM引擎的默认索引。 支持范围查询、排序和模糊匹配(如LIKE 'abc%')。 哈希索引 基于哈希表实现,仅Memory引擎显式支持。 仅支持等值查询(=、I
MySQL 存储引擎
MySQL支持多种存储引擎,每种引擎都有其特定的使用场景和优缺点。以下是常见的存储引擎及其主要区。 InnoDB 事务支持:支持ACID事务(提交、回滚、崩溃恢复)。 锁机制:行级锁,提高并发性能。 外键:支持外键约束。 存储结构:数据与索引存储在表空间(.ibd文件),支持独立表空间或共享表空间。
MySQL 隔离级别
SQL标准定义了四个隔离级别:读未提交、读已提交、可重复读和串行化。这四个级别主要是为了解决并发事务中可能出现的脏读、不可重复读和幻读等问题。而MySQL默认的隔离级别是可重复读。 读未提交是最低的级别,可能允许脏读,也就是一个事务可以读到另一个未提交事务的修改。 读已提交解决了脏读,但可能还存在不
MySQL 常见面试题 01-10
01 数据库的三大范式 每个列不可以再拆分 非主键列完全依赖于主键,不能是依赖于主键的一部分 非主键列只能依赖于主键, 不依赖于其他非主键 02 MySQL有关权限的表有哪几个 MySQL服务通过权限表控制用户对数据库的访问,权限表存放在 mysql 数据库 user表:记录允许连接到服务器的用户帐
Visual Studio 插件
XAML Styler for Visual Studio 2022 XAML Styler 是一个 Visual Studio 扩展,它根据一组样式规则设置 XAML 源代码的格式。此工具可以帮助您/您的团队保持更好的 XAML 编码风格以及更好的 XAML 可读性。
Kubernetes 常见面试题 01-10
01 Docker和虚拟机有哪些不同 Docker是轻量级的沙盒,在其中运行的只是应用,共享宿主机内核,而虚拟机里面还有额外的虚拟机操作系统。 传统虚拟化: 硬件层、宿主机操作系统、虚拟机管理程序、虚拟机操作系统、运行时环境、应用程序 Docker虚拟化:硬件层、宿主机操作系统、Dokcer容器、运
Kubernetes Service 使用介绍
Kubernetes(K8S)中的 Service 是一种抽象层,用于为一组动态变化的 Pod 提供稳定的网络访问入口,解决 Pod 因重启、扩展或故障导致 IP 变化的问题。Service的作用是提供稳定的网络访问,服务发现,负载均衡,支持不同的暴露方式,适用于集群内部或外部的访问需求。 Serv
Kubernetes Job 和 CronJob 使用介绍
Job 和 CronJob 控制器与 Deployment、Daemonset 都是同级的控制器。 Job 和 CronJob 都是用来执行一次性任务的,区别在于 Job 是一次性的,而 CronJob 是周期性的。 Job 使用介绍 具体来说,Job 控制器可以执行 3 种类型的任务。 一次性任务
Kubernetes DaemonSet 使用介绍
DaemonSet 是一种特殊的控制器,它确保会在集群的每个节点(或大部分)上都运行 一个 Pod 副本。 在节点加入或退出集群时,DaemonSet 也会在相应节点增加或删除 Pod。 因此常用来部署那些为节点本身提供服务或维护的 Pod(如日志收集和转发、监控等)。 因为这一特性,DaemonS
Kubernetes Deployment 使用介绍
通常,Pod 不会被直接创建和管理,而是由更高级别的控制器,例如 Deployment 来创建和管理。 这是因为控制器提供了更强大的应用程序管理功能。 应用管理:Deployment 是 Kubernetes 中的一个控制器,用于管理应用程序的部署和更新。它允许你定义应用程序的期望状态,然后确保集群
Kubernetes Pod 使用介绍
在 VMware 的世界中,调度的原子单位是虚拟机(VM);在 Docker 的世界中,调度的原子单位是容器(Container);而在 Kubernetes 的世界中,调度的原子单位是 Pod。 在Kubernetes中,用户无法直接在集群中运行一个容器,而是需要将容器定义在 Pod 中来运行。P
Kubernetes 简介
Kubernetes 可以实现容器集群的自动化部署、自动扩缩容、维护等功能。它拥有自动包装、自我修复、横向缩放、服务发现、负载均衡、 自动部署、升级回滚、存储编排等特性。 Kubernetes 被广泛地支持和集成到各大云服务提供商的容器服务中,国内有腾讯云 TKE 和阿里云 ACK 等。 1 架构设
WPF ComboBox 首次下拉显示慢的问题
由于Item项多且每项显示内容多(ItemTemplate复杂的话也会导致慢,比如要显示image之类的),导致使用ComboBox显示列表异常缓慢,这是由于ComboBox在展开列表时绘制了列表中的每一项,为了避免这个问题,我们可以使用VirtualizingStackPanel来代替ComboB
WPF MVVM框架 - Prism IEventAggregator 发布订阅
WPF Prism 中使用 IEventAggregator 进行发布-订阅 1. IEventAggregator 简介 IEventAggregator 是 Prism 框架中用于模块间松耦合通信的核心组件,通过发布-订阅模式实现。它允许不同模块通过事件进行交互,而无需直接引用彼此。 2. 使用
WPF MVVM框架 - Prism IDialogService 对话服务
在 WPF Prism 框架中,IDialogService 是一种用于实现对话框交互的服务,遵循 MVVM 模式,允许在 ViewModel 中管理对话框逻辑而无需直接操作视图。 基本概念 解耦性: 通过依赖注入实现 ViewModel 与对话框视图的解耦。 对话框类型: 支持模态和非模态对话框。
WPF MVVM框架 - Prism IRegionManager 视图注入和导航
在 WPF Prism 框架中,IRegionManager 是一个核心服务,用于管理应用程序的 UI 区域(Regions),实现模块化、松耦合的视图注入和导航。它的主要功能是允许开发者动态地将视图(Views)注入到指定的 UI 区域,并支持复杂的导航逻辑。 区域(Region)的概念 Regi
WPF MVVM框架 - Prism DelegateCommand 命令绑定
在 WPF 的 Prism 框架中,DelegateCommand 是实现 ICommand 接口的核心组件,专门用于 MVVM 模式中的命令绑定。 它的主要功能是将 UI 操作(如按钮点击)与 ViewModel 中的逻辑解耦,同时支持条件执行(例如控制按钮是否可点击)。 核心功能 委托绑定 通过
WPF MVVM框架 - Prism BindableBase 基类介绍和使用
Prism是一个用于构建模块化、松耦合的WPF应用程序的框架,而 BindableBase 是其中的一个基类,要用于简化数据绑定和属性变更通知的实现。 作用 BindableBase 是 Prism 提供的基类,实现了 INotifyPropertyChanged 接口,用于在 MVVM 模式中自动
WPF MVVM框架 - Prism 项目模版安装和使用
Prism 模板包包含一组代码段、项模板和项目模板,用于使用 Prism 构建 WPF。 在Visual Studio 中搜索安装扩展 在扩展>管理扩展>浏览 中输入Prism搜索扩展进行安装
WPF MVVM框架 - Prism 简单接入
1. 安装Prism.DryIoc包 <ItemGroup> <PackageReference Include="Prism.DryIoc" Version="9.0.537" /> </ItemGroup> 2. 了解PrismApplication对象
WPF 资源基础与使用指南
WPF中的资源是用于定义可重用对象(如样式、模板、颜色、画笔、动画等)的核心机制。资源允许你在一个位置定义对象,并在整个应用程序中多次引用,提高代码复用性和维护性。 1. 资源的定义 资源可以是任何类型的对象(如 SolidColorBrush、Style、DataTemplate 等) 资源通常在
WPF MVVM框架 - CommunityToolkit.Mvvm 使用简介
WPF 的 CommunityToolkit.Mvvm(简称 MVVM Toolkit)是微软官方推出的轻量级 MVVM 框架,旨在简化 MVVM 模式在 WPF、UWP、WinUI 等应用中的实现。它通过 源代码生成器 和简洁的 API 减少样板代码,提高开发效率。 主要特性 轻量且高效 基于现代
WPF ICommand命令、INotifyPropertyChanged通知更改
ICommand 是实现 命令模式 的核心接口,用于解耦用户界面操作(如按钮点击)和业务逻辑,常用于MVVM架构。 INotifyPropertyChanged 接口在 WPF 中用于实现数据绑定中的双向通知机制,确保数据模型的属性变更能自动反映到绑定的 UI 元素上。 ICommand 命令 作用
WPF BindingMode 数据绑定机制
支持数据绑定,允许开发者将UI元素与数据源绑定,从而实现数据和界面的自动同步。 在 WPF 中,BindingMode 用于定义数据绑定时数据的流动方向,BindingMode枚举应该有几个不同的值,比如OneWay、TwoWay、OneTime、OneWayToSource,可能还有默认的Defa
WPF DataTemplate 数据模板
WPF 中的 DataTemplate(数据模板) 是用于定义数据对象如何在 UI 中呈现的核心机制。它允许开发者将数据的逻辑结构与可视化展示分离,从而更灵活地控制数据的显示方式。 1. DataTemplate 的作用 数据驱动的 UI:根据数据对象的类型或属性动态决定其可视化表现形式。 解耦数据
WPF ControlTemplate 控件模版
1. 什么是 ControlTemplate? 核心作用:用于定义控件的视觉外观(UI 结构),与控件的行为逻辑分离 与 DataTemplate 的区别: ControlTemplate:控制控件自身的外观(如按钮的形状)。 DataTemplate:控制数据对象在界面中的呈现方式(如列表项的布局
WPF Style 基础样式-1
在 WPF 中,Style(样式) 是一种用于统一管理控件外观和行为的重要机制。通过样式,你可以将一组属性设置(如颜色、字体、边距等)封装起来,并应用到多个控件上,从而提高代码复用性和维护性。 1. 基本语法 样式通过 <Style> 标签定义,通常放置在 Resources 部分(如 Window
WPF UniformGrid 空间均分
UniformGrid 在有限的空间内均分剩余的空间 <UserControl x:Class="WpfApp1.UserControl1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
WPF DockPanel 对空间进行分区
使用 DockPanel 元素创建简单的用户界面(UI)框架。 DockPanel 将可用空间分配给其子元素。 DockPanel.Dock="Top|Right|Bottom|Left"设置元素位置 LastChildFill="False" 设置最后一个子元素不填充剩余的未分配空间 <UserC
WPF WrapPanel 自动换行换列
WrapPanel 元素将子元素按从左到右的顺序定位,将内容分到其包含框边缘的下一行。 能自动换行自动换列 Orientation="Horizontal" 设置水平靠左排列(默认排列方式) Orientation="Vertical" 设置垂直靠左排列 <UserControl x:Class="
WPF StackPanel 水平或垂直堆叠子元素
StackPanel 元素用于水平或垂直堆叠子元素 Orientation="Vertical" 排列方式从上往下排列(默认排列方式) Orientation="Horizontal" 设置从左往右水平排列 <UserControl x:Class="WpfApp1.UserControl1"
WPF Grid 创建复杂网格
Grid 元素用于精确定位行和列中的内容 Grid.RowDefinitions 定义行 Grid.ColumnDefinitions 定义列 Grid.ColumnSpan 合并列 Grid.RowSpan 列合并行 <Window x:Class="WpfApp1.MainWi
WPF Grid 布局练习-2
<Window x:Class="WpfApp2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://sch
WPF Grid 布局练习-1
<Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xm
多线程应用场景与注意事项
使用多线程的主要目的是提高程序效率、优化资源利用率,并解决某些场景下的性能瓶颈或响应性问题。 为什么要用多线程 提高性能(多核 CPU 的并行计算) 多核优势:现代 CPU 多为多核架构,单线程只能利用一个核心,多线程可以将任务拆分到多个核心并行执行,显著缩短计算时间。 示例:视频渲染、大数据分析、
DDD 领域驱动设计 经典DDD分层架构
领域驱动设计(Domain-Driven Design,DDD)是一种以业务领域为核心的软件设计方法,通过将复杂业务逻辑抽象为领域模型,帮助开发者更好地理解和实现业务需求。 DDD分层架构通常包含:用户界面层、应用层、领域层、基础设施层; 根据依赖倒置原则,高层模块不应该依赖低层模块,两者都应该依赖
C# 多线程和异步编程的区别
多线程是指同时运行多个线程,每个线程执行不同的任务。 比如:用Thread类或者Task.Run来创建线程,这样可以让程序同时处理多个操作,比如UI不卡顿,后台处理数据。 异步编程通过async和await关键字,用来写非阻塞的代码。 比如:在IO操作的时候,比如读取文件或者网络请求,用异步方法可以
C# EF与EFCore性能对比及优化策略
EF(Entity Framework)通常指的是EF6,而EFCore是后来推出的轻量级、跨平台版本。它们都是ORM框架,但有不同的架构和应用场景。EF6比较成熟,支持传统的.NET Framework,而EFCore是开源的,支持.NET Core/.NET 5+,并且更注重性能和跨平台。 性能
C# List与字典性能对比分析
在C#中,List<T>和Dictionary<TKey, TValue>的性能差异主要取决于具体的使用场景和操作类型。 数据结构特性 List<T>:基于动态数组实现,内存连续存储,支持快速索引访问(时间复杂度 O(1))。 Dictionary<TKey, TValue>:基于哈希表实现,通过键
C# 抽象类与接口的区别详解
在 C# 中,抽象类(Abstract Class) 和 接口(Interface) 都用于实现面向对象编程中的抽象和多态,但它们的设计目的和使用场景有显著差异。 1. 定义与核心目的 抽象类 表示一种 "是什么"(Is-A) 关系,用于定义一组相关类的 基类。 可以包含 具体方法(有实现) 和 抽
C# 类与结构的区别详解
在 C# 中,类(Class)和结构(Struct)是两种不同的数据类型,尽管它们都能封装数据和行为,但在设计目的和底层机制上有显著区别。 1. 类型分类 类是引用类型(Reference Type): 变量存储的是对象的引用(内存地址),多个变量可以指向同一个对象。 结构是值类型(Value Ty
C# 异步编程实现方式
异步编程的作用 提高性能和资源利用率: 异步编程可以在等待 I/O 操作完成的同时释放线程资源,使得线程能够继续执行其他任务,从而提高了系统的资源利用率和性能。 改善用户体验: 通过异步编程,可以避免在等待长时间操作完成时出现界面卡顿或无响应的情况,从而改善用户体验,使应用程序更加流畅和响应。 简化
C# 事件机制详解与应用
事件是类或对象用来通知其他类或对象发生了某些事情的一种机制,基于委托。 事件本质上是委托的一种封装,提供更安全的订阅和取消订阅机制。 事件的使用步骤分为:声明委托、定义事件、触发事件和订阅事件。 要注意事件声明的标准模式,比如使用EventHandler委托或者自定义的委托类型,以及事件参数应该继承
C# 委托类型与使用详解
委托在C#中类似于函数指针,用来封装方法,允许将方法作为参数传递或者异步回调。比如Action、Func,还有事件和匿名方法。 需要掌握声明委托的关键字delegate、内置的Action和Func 需要注意多播委托,可以组合多个方法,按顺序执行。比如用+=添加方法,用-=移除,注意返回值的问题,如
C# 实现多线程的几种方式
在C#中,实现多线程编程有多种方式,每种方式适用于不同的场景 使用 Thread 类 命名空间: System.Threading 特点: 最基础的多线程方式,直接控制线程的创建和管理 示例: public class Program { public static void Main(st