- 博客(818)
- 问答 (2)
- 收藏
- 关注
原创 内网穿透工具讲解
nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcpudp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端。一台有公网IP的服务器(VPS)运行服务端(NPS)一个或多个运行在内网的服务器或者PC运行客户端(NPC)frp是一个专注于内网穿透的高性能的反向代理应用,支持等多种协议。
2025-03-28 16:38:03
1068
转载 使用 Ollama 本地化部署 deepseek
Ollama是一个开源的大型语言模型(LLM)平台,旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。Ollama本地运行:支持在本地环境中部署和运行大型语言模型,确保数据隐私和安全。简化部署:通过简单的安装和配置,即可快速启动模型,降低了技术门槛。多模型支持:兼容多种预训练模型,满足不同的应用需求。硬件友好:支持纯 CPU 推理,适用于各种硬件环境。。
2025-03-26 13:42:38
66
转载 SpringBoot 3 替换 spring.factories
从开始,引入了基于imports文件的新机制,作为的替代方案。这些文件位于文件名对应的spring.factories中的键对于自定义的扩展点,需要提供类似的imports// 自定义扩展点加载器示例// 迁移到新机制// 或者实现自己的imports文件加载逻辑// ...// 1. 创建配置属性类// getter和setter方法// ...// 2. 创建自动配置类。
2025-03-26 11:13:19
53
原创 Java多线程之StampedLock讲解
锁允许多个线程同时读取共享变量,但是在读取共享变量的时候,不允许另外的线程对共享变量进行写操作,更多的适合于读多写少的环境中。那么,在读多写少的环境中,有没有一种比更快的锁呢?答案当然是有!那就是——JDK1.8中新增的与相比,在读的过程中也允许后面的一个线程获取写锁对共享变量进行写操作,为了避免读取的数据不一致,使用读取共享变量时,需要对共享变量进行是否有写入的检验操作,并且这种读是一种乐观读。总之,是一种在读取共享变量的过程中,允许后面的一个线程获取写锁对共享变量进行写操作,使用乐观读。
2025-03-18 11:14:30
847
2
原创 SpringCloud之Gateway灰度发布讲解
灰度发布, 也叫金丝雀发布。是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,而我们平常所说的金丝雀部署也就是灰度发布的一种方式。
2025-03-11 11:50:22
961
原创 Redis两级缓存之Caffeine讲解使用
在高性能的服务架构设计中,缓存是一个不可或缺的环节。在实际的项目中,我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中,只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时,也能降低数据库的压力。随着不断的发展,这一架构也产生了改进,在一些场景下可能单纯使用Redis类的远程缓存已经不够了,还需要进一步配合本地缓存使用,例如或Caffeine,从而再次提升程序的响应速度与服务性能。于是,就产生了使用本地缓存作为一级缓存,再加上远程缓存作为二级缓存的两级缓存架构。
2025-03-01 10:35:42
689
原创 SpringBoot 整合 Apache Tika提取数据
它支持多种文件格式,包括文档、电子表格、PDF、音频、视频、图片等,具有强大的文件内容解析能力。用于 敏感信息识别 和 数据泄露防护,我们可以在文件上传时提取文件内容,并在提取的文本中搜索潜在的敏感数据,如身份证号、信用卡信息、电话号码等。敏感信息的检测通常涉及正则表达式(Regex),你可以使用常见的模式来检测个人信息(如身份证号、信用卡号、电话号码等)。的架构组件主要包括以下几个核心部分,它们共同协作,以支持从各种文件格式中提取文本、元数据和其他信息。
2025-02-13 15:12:11
841
原创 MySQL中大量数据优化方案
表分区可以在区间内查询对应的数据,降低查询范围并且索引分区也可以进一步提高命中率,提升查询效率分区是指将一个表的数据按照条件分布到不同的文件上面,未分区前都是存放在一个文件上面的,但是它还是指向的同一张表,只是把数据分散到了不同文件而已。分表后,显而易见,单表数据量降低,树的高度变低,查询经历的磁盘io变少,则可以提高效率分库分表。
2025-01-17 21:35:47
2206
原创 JavaFX基础之环境配置,架构,FXML
JavaFX中文官方网站JavaFX是一个开源的下一代客户端应用平台,适用于基于Java构建的桌面、移动端和嵌入式系统。目的是为开发丰富的客户端应用提供一个现代、高效、功能齐全的工具包。DBeaver、finalshell、Behinder(冰蝎)、BurpSuite、Jmeter、IDEA等等这类比较知名软件,那么java是否有更好的桌面应用开发的框架呢?准备环境:IDEA,JDK17,Windows,Scene BuilderFXML是一种可编写的、基于XML的用于构造JavaFX。
2025-01-08 17:50:20
1076
转载 JavaFX基础之组件讲解
以下是父节点坐标系的示例,其中子节点位于父节点坐标系中的(25,25)处。子节点也有它自己的坐标系,它有它的 (0,0),其中子节点位于父坐标系中-意思是在父节点坐标系中的(25,25)。这意味着,作为另一个节点的子节点的节点都有自己的坐标系,以及在其父节点坐标系中的位置 (X,Y)。在JavaFX中,窗口Stage可以插入一个场景Scene,它表示在窗口内显示的内容。随着Y值的增加,该点从坐标系的顶部向下移动。类是所有控件的父类,下面通过其控件子类示例演示Node节点的UI控件的通用属性。
2025-01-08 17:49:42
158
原创 Go IO之文件处理,TCP&UDP讲解
UDP是用户数据报协议,是一种无连接传输协议,不需要建立连接就可以直接发送和接收数据,属于不可靠的,没有时序的通信,UDP 实时性好,适合直播环境。一个服务端连接多个客户端,例如:世界各地的用户使用自己电脑的浏览器访问淘宝网。的作用是将 v 的值写入 f 中,并且在写入的值后面会自动添加换行符。” 输出到标准输出(即控制台)函数能够以指定模式打开文件,从而实现文件写入相关功能。函数能够打开一个文件,返回一个。,读到文件末尾时会返回。如果想把某个值写到控制台。如果有乱码,可以使用。v 的内容写入到 f。
2024-12-29 08:31:43
850
1
原创 Go 并发之WaitGroup,并发锁,Context
context是一个用于跨 API 边界传递元数据、取消信号、超时控制以及其他请求范围内的信息的包。它常用于处理并发编程中的超时、取消、以及请求范围内的数据传递。那么为什么需要 context?请求取消:在某些情况下,可能需要在某个请求被取消时终止正在进行的操作。超时控制:有时需要设置操作的超时时间,超过时间就终止操作。跨 API 边界传递元数据:需要在不同的函数、服务或系统之间传递共享的状态信息。为了处理这些问题,context 被引入 Go 语言。
2024-12-29 08:30:42
1039
原创 Go基础之指针和反射讲解
Go 语言的取地址符是,放到一个变量前使用就会返回相应变量的内存地址。一个指针变量指向了一个值的内存地址。类似于变量和常量,在使用指针前需要声明指针。var-type为指针类型,var_name为指针变量名,号用于指定变量是作为一个指针。当一个指针被定义后没有分配到任何变量时,它的值为nil,也称为空指针。nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。一个指针变量通常缩写为 ptr。示例:Go 中函数可以赋值给变量。// 函数可以赋值给变量。
2024-12-29 08:29:51
941
原创 Go 并发之goroutine和Channel讲解
Go 语言支持并发,通过goroutines和channels提供了一种简洁且高效的方式来实现并发。goroutine协程,是轻量级线程,goroutine的调度是由Golang运行时进行管理的,Go 中的并发执行单位,类似于轻量级线程。Goroutine的调度由Go 运行时管理,用户无需手动分配线程,使用go关键字启动Goroutine,以一个不同的、新创建的goroutine来执行一个函数。同一个程序中的所有goroutine共享同一个地址空间。Goroutine是非阻塞的,可以高效地运行成千上万个。
2024-12-29 08:28:50
684
原创 Go基础之结构体,接口
Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。结构体定义需要使用type和struct语句。struct语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。或// 创建一个新的结构体fmt.Println(Books{"Go 语言", "www.test.com", "Go 语言教程", 6495407})// 也可以使用 key => value 格式。
2024-12-29 08:27:58
642
原创 Go基础之条件语句,For循环,错误处理
Go 语言的 For 循环有 3 种形式,只有其中的一种使用分号。和 C 语言的 for 一样:for init;condition;post { }init: 一般为赋值表达式,给控制变量赋初值;condition: 关系表达式或逻辑表达式,循环控制条件;post: 一般为赋值表达式,给控制变量增量或减量。和 C 的 while 一样:和 C 的 for(;;) 一样:for { }for i := 1;i <= 10;i++ {for {也可以在for循环中声明和操作多个变量。
2024-12-29 08:26:55
932
原创 Go基础之函数和方法讲解
函数体func:函数由 func 开始声明:函数名称,参数列表和返回值类型构成了函数签名。:参数列表,参数就像一个占位符,当函数被调用时,可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。:返回类型,函数返回一列值。是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。函数体:函数定义的代码集合。defer是 Go 中的一个关键字,用于延迟函数调用。
2024-12-29 08:25:56
858
原创 Go基础之数组,切片,Map
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。相对于去声明 number0, number1, …, number99 的变量,使用数组形式更加方便且易于扩展。数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推。切片是对数组的抽象,数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片(动态数组。
2024-12-29 08:24:53
1098
原创 Go基础之包&文件夹,数据类型,变量
在Go中,访问权限的控制非常简洁且独特,没有像其他语言(如 Java 或 C++)那样使用显式的 public、private 修饰符。Go通过标识符首字母大小写来决定访问权限。首字母大写:公共(Public)访问如果一个标识符(变量、函数、类型等)的首字母是大写的,则它是导出(exported) 的,包外可以访问。首字母小写:私有(Private)访问如果一个标识符的首字母是小写的,则它是未导出unexported) 的,包外无法访问。在上面的代码中,我们首先创建了一个变量并且赋值为常量。
2024-12-29 01:10:59
857
原创 Go基础之环境搭建
Go语言,也被称为Golang,是一种由Google开发的静态类型、编译型编程语言,是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。go.mod是Go Modules的核心文件,用来定义模块及其依赖项。
2024-12-29 01:09:33
3560
原创 MySQL日志之误删恢复数据
比如说,数据是在9月12日12:00插入的,那么我们看上方的所有binlog文件,可以看出插入语句应该保存在mysql-bin.000213文件中。比如说,数据是在9月12日12:00删除的,那么我们看上方的所有binlog文件,可以看出插入语句应该保存在mysql-bin.000213文件中。因为这些参数是用于解码binlog的,是让开发人员更方便看到binlog被解析之后的格式。目前有一些开源的工具,可以帮助我们解析binlog,并且自动生成binlog记录的操作的逆向操作。被误删的数据,如何恢复呢。
2024-12-27 10:38:43
1590
原创 C#面向对象之抽象,接口,运算符重载,属性,索引器
接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。接口使得实现接口的类或结构在形式上保持一致。抽象类在某种程度上与接口类似,但是,它们大多只是用在当只有少数方法由基类声明由派生类实现时。接口本身并不实现任何功能,它只是和声明实现该接口的对象订立一个必须实现哪些行为的契约。接口使用interface关键字声明,它与类的声明类似。接口声明默认是public的,通常接口命名以I字母开头,重定义或重载C#
2024-12-01 17:26:13
1272
原创 C#面向对象之访问限制,类基础,继承
C#封装根据具体的需要,设置使用者的访问权限,并通过访问修饰符来实现。一个访问修饰符定义了一个类成员的范围和可见性。public:所有对象都可以访问;允许一个类将其成员变量和成员函数暴露给其他的函数和对象private:对象本身在对象内部可以访问;允许一个类将其成员变量和成员函数对其他的函数和对象进行隐藏。只有同一个类中的函数可以访问它的私有成员。即使是类的实例也不能访问它的私有成员protected:只有该类对象及其子类对象可以访问允许子类访问它的基类的成员变量和成员函数。
2024-12-01 17:24:52
1322
原创 C#基础之集合讲解
数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。声明数组变量并不是声明 number0、number1、…、number99 一个个单独的变量,而是声明一个就像 numbers 这样的变量,然后使用 numbers[0]、numbers[1]、…、numbers[99] 来表示一个个单独的变量。数组中某个指定的元素是通过索引来访问的。所有的数组都是由连续的内存位置组成的。最低的地址对应第一个元素,最高的地址对应最后一个元素。Array。
2024-12-01 17:23:28
1002
原创 C#基础之方法
当定义一个方法时,从根本上说是在声明它的结构的元素。:访问修饰符,这个决定了变量或方法对于另一个类的可见性。:返回类型,一个方法可以返回一个值。返回类型是方法返回的值的数据类型。如果方法不返回任何值,则返回类型为 void。:方法名称,是一个唯一的标识符,且是大小写敏感的。它不能与类中声明的其他标识符相同。:参数列表,使用圆括号括起来,该参数是用来传递和接收方法的数据。参数列表是指方法的参数类型、顺序和数量。参数是可选的,也就是说,一个方法可能不包含参数。:方法主体,包含了完成任务所需的指令集。
2024-12-01 17:21:51
956
原创 C#基础之反射,依赖注入
反射指程序可以访问、检测和修改它本身状态或行为的一种能力。程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。C#中的 依赖注入()是一种设计模式,用于实现控制反转(它通过将依赖对象的创建和管理交给框架,而不是由代码直接负责,这样可以提高代码的可维护性和测试性。依赖依赖是一个类在运行时所需要的其他类。
2024-12-01 17:20:26
1728
原创 C#基础之特性讲解
特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。特性(Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。.Net框架提供了两种类型的特性:预定义特性和自定义特性。特性(Attribute) 是一种元数据机制,允许开发者将额外的信息嵌入到代码中,如类、方法、属性等。
2024-12-01 17:19:24
717
原创 C#基础之委托,事件
C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自类。C# 事件(Event)是一种成员,用于将特定的事件通知发送给订阅者。事件通常用于实现观察者模式,它允许一个对象将状态的变化通知其他对象,而不需要知道这些对象的细节。事件(Event。
2024-12-01 17:18:29
1540
原创 C#基础之多线程讲解
进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源。一个正在运行的应用程序在操作系统中被视为一个进程,进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元,在进程中可以有多个线程同时执行代码。进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程运行的失败也不会影响其他进程的运行,Windows系统就是利用进程把工作划分为多个独立的区域的。进程可以理解为一个程序的基本边界。
2024-12-01 17:17:36
1376
原创 C#基础之预处理器,异常处理
预处理器指令()指导编译器在实际编译开始之前对信息进行预处理。通过这些指令,可以控制编译器如何编译文件或编译哪些部分。常见的预处理器指令包括条件编译、宏定义等。所有的预处理器指令都是以开始,且在一行上,只有空白字符可以出现在预处理器指令之前。预处理器指令不是语句,所以它们不以分号;结束。C# 编译器没有一个单独的预处理器,但指令被处理时就像是有一个单独的预处理器一样。在 C# 中,预处理器指令用于在条件编译中起作用。与 C 和 C++ 不同的是,它们不是用来创建宏。
2024-12-01 17:16:31
1122
原创 C#基础之结构体讲解
在 C# 中,结构体(struct)是一种值类型(value type),用于组织和存储相关数据。在 C# 中,结构体是值类型数据结构,这样使得一个单一变量可以存储各种数据类型的相关数据。使用struct关键字用于创建结构体。为了定义一个结构体,必须使用struct语句。struct语句为程序定义了一个带有多个成员的新的数据类型。
2024-12-01 17:14:46
858
原创 C#基础之不安全代码讲解
当一个代码块使用unsafe修饰符标记时,C#允许在函数中使用指针变量。不安全代码或非托管代码是指使用了指针变量的代码块。
2024-12-01 17:13:42
1164
原创 Java代理之Java Agent分析
Java Agent是一种用于在Java应用启动或运行过程中对其进行监控、修改或增强的机制。它利用,可以在应用启动时或运行中动态加载代码,对目标应用的字节码进行操作。这种机制非常适合应用监控、性能分析、调试、代码注入和安全性增强等任务。简单来说,Java Agent就是运行在 Java 虚拟机(JVM)上的一种工具,能在程序运行时对其进行监控、修改甚至重定义。它的作用和AOP(面向切面编程)有点类似,但更加底层,直接作用在JVM层面。可以理解为它是全局的 AOP。
2024-11-08 18:30:53
962
原创 C#基础之基础语法,类型转换,运算符
C#是一个简单的、现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的。C#是专为公共语言基础结构(CLI)设计的。CLI由可执行代码和运行时环境组成,允许在不同的计算机平台和体系结构上使用各种高级语言。C#是.Net框架的一部分,且用于编写.Net应用程序。.NET平台由于其强大的功能和丰富的开发工具,成为了开发Windows应用程序的热门选择。无论是桌面应用、Web应用还是服务应用,.NET提供了一系列强大的框架和工具来帮助开发者高效地构建应用.Net。
2024-10-29 09:08:41
919
原创 visual studio之安装详解
开发者常用的一个包管理器,为了提高下载速度和稳定性,许多开发者会选择使用国内的NuGet镜像源。开发设置选择 常规 ,颜色选择 浅色 ,可根据自己的喜好选择,点击 启动 Visual Studio。,这个软件是专门用来更改visual stduio组件的,方便随时随地修改组件或者卸载。如果之前安装过想要修改,下载缓存 与 组件工具和SDK 路径,则需要清理注册表。项目配置,配置【项目名称】及【位置】,点击【创建】。勾选上,然后点左下角的修改,等待下载安装就好。选择组件,并在下面的位置那里选择位置。
2024-10-24 09:12:05
11921
原创 HTTP客户端框架之UniHttp讲解
从企业级项目来说,如果项目里还在用传统的编程式Http客户端比如HttpClientOkhttp去直接对接第三方Http接口, 那么项目一定充斥着大量的对接逻辑和代码,并且针对不同的对接渠道方需要每次封装一次调用的简化,一旦封装不好系统将会变得难以维护,难以阅读,甚至不同的开发会用自己的方式用不同的Http客户端用不同的封装逻辑去对接接口,这种情况一般发生于项目换了维护者,技术负责人也没把控代码质量和规范所导致如果项目里也存在这样的问题或者需要解决这样的问题, 那么UniHttp就是这个版本答案。
2024-10-24 09:11:24
1505
2
原创 MySQL查询之distinct 和 group by效率比较
group by和distinct都能使用索引,效率相同。因为group by和distinct近乎等价,distinct可以被看做是特殊的group by。distinct效率高于group by。原因是distinct和group by都会进行分组操作,但group by在Mysql8.0之前会进行隐式排序,导致触发filesort,sql执行效率低下。但从Mysql8.0开始,Mysql就删除了隐式排序,所以,此时在语义相同,无索引的情况下,group by和distinct。
2024-10-24 09:10:52
1101
原创 Oracle架构之用户,权限,角色讲解
Oracle用户(user)就是访问oracle数据库的人。通过对用户的各种安全参数进行控制,以维护数据库的安全性,这些概念包括模式(schema)、权限、角色、存储设置、空间限额、存取资源限制、数据库审计等。当用户登录Oracle时需要进行身份认证,以便确认该用户能够进行的操作。认证是指对需要使用数据、资源或应用程序的用户进行身份确认。通过认证后,可以为用户后面的数据库操作提供一种可靠的连接关系。Oracle提供了多种身份认证方式:操作系统身份认证,Oracle 数据库身份认证,管理员身份认证。
2024-10-07 18:26:27
1720
原创 Oracle架构之段管理和区管理
段是由一个或多个数据区构成的,它不是存储空间的分配单位,而是一个独立的逻辑存储结构,用于存储表、索引或簇等占用空间的数据对象, Oracle 也把这种占用空间的数据对象统一称为段。当一个段被创建时,区间(Extent)就被分配,随着后续的不断使用,一个段的空间可以以区为单位不断扩展。一个段只属于一个特定的数据对象,每当创建一个具有独立段的数据对象时,Oracle将为它创建一个段。段是为特定的数据对象(如表、索引、回滚等)分配的一系列数据区。段是逻辑结构中更高层次的组织单位,用于存储和管理数据。
2024-10-06 19:21:40
1353
原创 Oracle架构之表空间详解
Oracle数据库开创性地提出了表空间(tablespaces)的设计理念,Oracle中很多优化都是基于表空间实现的。表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库对象,如表、视图、索引、聚簇、回退段和临时段等。Oarcle 数据库真正存放数据的是数据文件,表空间()实际上是一个逻辑的概念,在物理上并不存在。Oracle 使用表空间将相关的逻辑结构(如段、数据区等)组合在一起,表空间是数据库的最大逻辑划分区域。
2024-10-04 16:47:55
1398
空空如也
关于EL表达式的动态取值
2017-12-07
maven项目在tomcat上运行正常但是在jetty上运行一启动就报错
2017-12-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人