自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 收藏
  • 关注

原创 使用GMail API 发送邮箱

创建凭证:在 Google Cloud Console 创建 OAuth 2.0 客户端,下载 client_secret_xxx.json。用户授权:首次使用时,用户登录并授权应用访问 Gmail。保存凭证:授权后保存 access_token 和 refresh_token 到本地文件(如 token.pickle)。自动刷新:每次使用 API 时,检查 access_token 是否过期,若过期,使用 refresh_token 自动刷新。

2025-08-22 22:21:56 609

原创 Stripe支付集成(使用stripe链接快速集成支付)

Stripe支付链接提供零开发成本的解决方案,支持多种支付方式并内置安全合规功能。用户只需在后台创建产品价格并生成支付链接,通过回调URL和Webhook即可实现自动支付状态更新。系统通过session_id验证支付状态并更新用户套餐,同时处理各种支付异常情况。密钥分为公钥(前端使用)和私钥(后端保密使用),确保支付流程安全可靠。

2025-08-21 23:51:17 256

原创 cPanel Python 应用部署流程

📝 cPanel部署Python网站简明指南:1)通过SetupPythonApp配置项目路径、启动文件和日志位置;2)按规范存放代码文件(项目代码放myproject/,入口文件放public_html/);3)配置wsgi.py作为Flask入口,注意路径引用;4)使用Terminal激活虚拟环境并安装依赖;5)启动程序后即可通过域名访问。适用于Flask框架部署,重点注意文件路径配置和依赖安装步骤。

2025-08-16 22:50:47 310

原创 vscode连接远程服务器并调试程序

摘要:本文介绍了使用VSCode的Remote-SSH插件连接远程服务器的方法。首先安装插件并配置服务器信息(主机IP、用户名、端口),建议选择"always"选项强制下载VSCodeServer到本地再传输到远程主机。连接成功后,详细说明了两种Python调试方式:命令行启动(python -m pdb)和代码插入断点(pdb.set_trace()),并列举了常用的调试命令(next、break、print等)及其功能,帮助开发者高效进行远程代码调试。

2025-08-15 14:33:45 759

原创 ThreadPoolExecutor源码解析(下)

文章摘要:本文详细解析了线程池中execute方法的实现逻辑,该方法通过三步策略处理任务提交:1)当前线程数小于核心线程数时直接创建新线程执行;2)当线程数达到核心数但队列未满时将任务入队;3)队列满时创建非核心线程执行。重点分析了addWorker方法如何通过core参数区分核心/非核心线程,并介绍了Worker类的实现机制,包括线程复用和任务获取流程。最后说明了线程退出的处理逻辑和核心/非核心线程在任务获取时的不同等待策略,揭示了线程池动态调整线程数的内在机制。

2025-07-24 09:04:02 252

原创 ScheduledThreadPoolExecutor 简介与源码解析

摘要:文章比较了Java中Timer和ScheduledThreadPoolExecutor两种定时任务实现方式的差异。Timer采用单线程串行执行任务,存在任务阻塞风险;而ScheduledThreadPoolExecutor基于线程池实现多线程调度,支持延迟执行和周期性任务。详细分析了ScheduledThreadPoolExecutor的三种调度方法(schedule、scheduleAtFixedRate、scheduleWithFixedDelay)及其实现原理,包括延迟队列(DelayQueue

2025-07-23 21:51:52 1044

原创 基于 Vue,SPringBoot开发的新能源充电桩的系统

本文介绍了一个基于Vue.js和SpringBoot开发的新能源充电桩管理系统,包含管理员后台和用户预约功能。系统采用前后端分离架构,前端使用Vue.js+Element UI+ECharts技术栈,后端通过SpringBoot处理业务逻辑。核心功能包括:1)基于Vue Router的路由管理,实现多页面组件注册与跳转;2)通过代理配置实现前后端接口映射;3)采用Token机制维持登录状态,配合拦截器进行权限验证;4)提供完整的请求响应追踪机制。系统分为用户端和管理员端两个入口,支持充电桩预约、订单管理等核

2025-07-22 21:46:22 989 1

原创 线程池与ThreadPoolExecutor源码解析(上)

线程池是一种线程复用机制,通过维护固定数量的线程执行任务,避免频繁创建和销毁线程的开销。Java中的ThreadPoolExecutor是核心实现类,包含核心线程数、最大线程数、任务队列等参数。线程池工作流程包括:任务提交、核心线程判断、任务入队、非核心线程创建和拒绝策略执行。创建线程池推荐使用ThreadPoolExecutor构造函数,而非Executors工具类方法(可能引发资源耗尽)。ThreadPoolExecutor的核心方法execute()通过原子变量ctl管理线程池状态和线程数,状态信息存

2025-07-21 21:46:08 731

原创 ThreadLocal简介与源码解析

ThreadLocal是Java中用于实现线程隔离的类,为每个线程提供独立变量副本,确保线程安全。其核心原理是通过ThreadLocalMap存储线程私有数据,key为ThreadLocal实例,value为对应值。ThreadLocal采用空间换时间策略,相比synchronized同步机制更高效。主要方法包括get()获取当前线程变量、set()设置变量、remove()移除变量等。典型应用场景包括数据库连接管理、线程上下文传递等。源码分析显示,ThreadLocal通过弱引用解决内存泄漏问题,内部使用

2025-07-19 07:58:05 811

原创 LongAccumulator源代码解析

LongAccumulator是Java并发包中的高效累加器,适用于多线程环境下的长整型数值聚合操作。它采用双模式设计:低并发时通过CAS直接更新base值,高并发时使用分段Cell数组减少线程竞争。核心方法accumulate()根据竞争情况自动切换模式,而longAccumulate()负责Cell数组的初始化、扩容和线程映射。该实现通过哈希分配线程到不同Cell槽位、动态扩容机制和最终结果合并策略,实现了高吞吐量的线程安全计算。这种设计平衡了单线程性能与高并发场景下的扩展性。

2025-07-15 15:14:04 322

原创 AutoFormer精读

正如上文Auto-Correlation中步骤中的计算,我们选择最可能的k个周期长度τ1,···,τk。2 不同时间处于相同位置的子序列往往有着相似的时间过程,尝试根据系列周期性导出的过程相似性来构建系列级连接-序列周期性来更新自注意力中的点连接。5 将k个概率分别与对应的Roll处理过的序列进行计算(类似自注意力机制中的q,k,v的计算)后聚合(类似自注意输出)即为相关性。1 对于复杂的时间模式,分解是标准的方法,常见对分解的用法只能对过去进行预处理,忽略了不同分解组件的未来的潜在交互。

2024-12-29 15:23:43 1270

原创 FlaskAPI-路径参数、查询参数

在 Flask 中,路径传参是一种常见的传递数据的方式。通过在 URL 路径中指定参数,可以让视图函数根据不同的参数值来返回不同的内容。这种方式可以用于根据用户请求的不同资源(如用户 ID、产品编号等)来提供定制化的响应。

2024-12-27 15:31:48 1170

原创 FlaskAPI-交互式文档与includ_router

装饰器位置:路径操作装饰器位于函数定义的上方,用于将函数与特定的 HTTP 请求路径和方法关联起来。一般形式:@app.请求方法(“路径”),其中app是ASGI 应用对象,请求方法可以是get、post、put、delete等 HTTP 请求方法,路径是一个字符串,表示请求的 URL 路径。这样做的好处是可以对路由进行模块化管理,便于大型项目中不同功能模块的路由划分与组织,使得代码结构更加清晰,各个模块的路由可以独立开发、维护和测试。我们可以设置交互式API文档,比如说对端点设置分类,对端点设置摘要。

2024-12-26 21:04:08 1127

原创 FlaskAPI-初识

Flask API 是 Flask 的直接替代品,它提供类似于 Django REST 框架提供的可浏览 API的实现。它为你提供适当的内容协商响应和智能请求解析。这是官网的解释,那我们用Flask框架来介绍Flask API。Flask是一个基于 WSGI(Web Server Gateway Interface)的 Web 框架。WSGI 是一种规范,它定义了 Web 服务器和 Python Web 应用程序之间的接口。

2024-12-26 21:01:25 1117

原创 Python进阶学习笔记(一)对象

在之前了解到引用对象的类型为对应的类型对象,就如上述的PyTypeObject,记录了Float类型的内存大小及支持的操作,它与PyFloat通过ob_type 进行关联。这是因为继承必须有一个终点。也就是说当对不可变变量对象修改时,仅仅只会改变该变量的指针,使之指向新的对象,而其他指向旧对象的变量指针不会fa。类型对象也是有类型的,那么它也是应该通过ob_type关联的对象记录type类型的内存大小及支持的操作。之前对象的结构已有引用次数,类型指针,以及变长对象的元素个数,但是缺少了对象的存储空间。

2024-09-22 09:47:27 1083

原创 使用Anaconda安装pyTorch

Anaconda 是一个流行的 Python 数据科学和机器学习平台,它简化了包管理和部署,使得安装、运行和升级包及其依赖变得非常容易。Anaconda 通过其内置的 Conda 包和环境管理器,提供了一个强大的环境,用于科学计算(包括数据科学、机器学习、人工智能等领域)。总之,Anaconda 是一个强大的平台,它简化了数据科学和机器学习项目的开发过程,使研究人员和开发人员能够更专注于他们的工作,而不是花费时间在环境配置和包管理上。

2024-09-20 22:11:20 1046

原创 机器学习笔记(一)初识机器学习

机器学习是一门多学科交叉专业,涵盖概率论知识,统计学知识,近似理论知识和复杂算法知识,使用计算机作为工具并致力于真实实时的模拟人类学习方式,并将现有内容进行知识结构划分来有效提高学习效率。机器学习有下面几种定义:(1)机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能。(2)机器学习是对能通过经验自动改进的计算机算法的研究。(3)机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。简要概念:让机器具备找一个函式的能力。

2024-09-20 21:45:04 1459

原创 Python爬虫-BeautifulSoup解析

是一个用于解析 HTML 和 XML 文档的 Python 库。它提供了一种灵活且方便的方式来导航、搜索和修改树结构或标记文档。这个库非常适合网页抓取和数据提取任务,因为它允许你以非常直观的方式查询和操作文档内容。

2024-04-27 13:19:50 1505 2

原创 UML---活动图

活动图(Activity Diagram)是UML(Unified Modeling Language,统一建模语言)中的一种行为建模工具,主要用于描述系统或业务流程中的一系列活动或操作。活动图通常用于描述用例中的行为,展现从一个活动到另一个活动的控制流。1.用户可以通过该系统进行网上预约,用户填写预约内容选取预约时间,点击提交交由系统判定此预约是否成功。在活动图中,常用的元素及图形表示。

2024-02-19 23:43:03 4730

原创 Quartz---Springboot项目整合Quartz---实现内存、数据库持久化

Quartz的内存持久化是指Quartz框架在默认情况下将任务调度的运行信息保存在内存中。这种方式的优点是可以提供最佳的性能,因为内存中数据访问最快。然而,内存持久化的缺点是缺乏数据的持久性。当程序停止或系统崩溃时,所有运行的信息都会丢失。

2024-02-19 15:38:12 3132

原创 Quartz---串行执行、JobDataMap持久化

在Quartz中,作业(Job)默认是以并行方式执行的,这意味着如果调度器(Scheduler)有多个线程可用,并且满足触发条件,那么多个作业可能会同时执行。然而,有时候我们可能希望作业以串行方式执行,即一个接一个地执行,而不是同时执行。Quartz的作业在执行时使用的是触发时创建的JobDataMap的一个拷贝,因此作业中对JobDataMap的任何更改都不会影响到原始的JobDataMap,也不会在作业执行结束后保留下来每次任务调度都会使用新的实例。在任务子类中添加此注解。记录每个任务执行间隔。

2024-02-18 23:29:33 838

原创 Quartz---JobDataMap使用的两种方式

有两种方式可以从执行方法的上下文中取出参数:一种是直接从execute方法的上下文中取出,另一种是在作业类中定义参数名称,并完成相应的get和set方法。JobDataMap是Quartz调度器中的一个重要组件,主要用于存储和传递与作业(Job)相关的数据。这些对象在作业执行时可以被获取并使用。当任务详细类中的JobDataMap设置的key和调度器类设置的key一样的话,后者会覆盖前者的值。通过Job子类的set方法将属性赋值,在添加jobdata时将key值设为set方法中设置的属性名。

2024-02-18 23:18:47 1510

原创 Quartz---基础

创建一个类实现org.quartz.Job接口,并实现execute方法。这个方法将在作业被调度时执行。// 这里是定时任务的逻辑部分创建一个触发器来定义作业的执行计划。触发器可以指定作业的开始时间、结束时间、执行间隔等。1.配置调度器(Scheduler):创建一个调度器实例,并使用它来安排作业和触发器。// 创建作业详情JobDetail jobDetail = JobBuilder.newJob(MyJob.class)//作业的类名。

2024-02-18 23:10:14 1113

原创 多线程---乐观锁、悲观锁

CAS算法,全称为Compare-And-Swap(比较并交换),是一种无锁的非阻塞算法,也是乐观锁的技术实现。因此,乐观锁在访问数据时不会立即对数据进行加锁,而是在更新数据时检查数据是否被其他线程修改过。否则,更新失败,并可能需要重新尝试。因此,悲观锁在每次访问数据时都会先对数据进行加锁,以保证同一时间只有一个线程可以访问数据。其他试图访问该数据的线程将被阻塞,直到锁被释放。如果发生变化,则说明数据已经被其他线程修改过,需要重新获取数据并尝试更新。乐观锁的优点是减少了锁的使用,从而提高了系统的并发性能。

2024-02-18 10:44:18 567

原创 多线程---线程池

线程池(Thread Pool)是一种多线程处理形式,它允许一个或多个线程并行执行,以减少在创建和销毁线程上花费的时间以及系统资源的开销。线程池不仅提高了程序的响应速度,还增强了系统的吞吐量。线程池主要由一个或多个创建好的线程和一个线程安全的任务队列组成。当需要执行新任务时,线程池会尝试从任务队列中获取任务,并由一个或多个空闲的线程来执行这些任务。如果所有线程都在忙,那么新任务就会在队列中等待,直到有线程空闲出来。线程池中的线程数量可以根据需要进行调整,以适应不同的工作负载。

2024-02-18 10:25:02 848

原创 多线程---线程同步,线程通信

线程同步是多线程编程中的一个重要概念,它指的是在多线程环境中,通过一定的机制保证多个线程按照某种特定的方式正确、有序地执行。这主要是为了避免并发问题,如死锁、竞态条件、资源争用等,确保数据的一致性和完整性。当多个线程共享同一份资源时,由于线程的执行顺序是不确定的,可能会出现线程安全问题。例如,两个线程同时对一个共享变量进行操作,可能会出现预期之外的结果。如下:小明和小弘对同一账号取钱,会出现余额为负的情况//操作账户try {

2024-02-17 23:53:50 1481

原创 多线程---创建线程

多线程是指从软件或者硬件上实现多个线程并发执行的技术。线程是程序中独立运行的程序片段,每个线程都有独立的执行流程,可以在同一时间内执行不同的任务。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。多线程是并行化的一种形式,或者是拆分工作以便同时进行处理。线程化的程序将工作拆分到多个软件线程,而不是将大量工作交给单个内核。这些线程由不同的CPU内核并行处理,以节省时间。多线程可以提高程序的并发性和效率,实现异步处理,提高程序的响应速度和用户体验。

2024-02-17 23:48:15 1037

原创 IO流---缓冲流,转换流,打印流,序列化流

字符流(如Reader和Writer)处理的是char类型的数据,而字节流(如InputStream和OutputStream)处理的是byte类型的数据。**序列化(Serialization)**是将对象的状态转换为字节流的过程,这样可以将对象的状态保存到磁盘、数据库或通过网络发送到另一台机器。在Java中指的是将对象的状态转换为可以存储或传输的形式的过程,以及随后将这个形式的数据恢复为对象的过程。**反序列化(Deserialization)**则是将之前序列化保存的字节流恢复为对象的过程。

2024-02-16 19:38:42 1152

原创 IO流---字节输入输出流,字符输入输出流

IO流,即输入输出流(Input Output Stream),是一种抽象概念,用来处理设备之间的数据传输问题,例如文件复制、文件上传、文件下载等。在Java中,对数据的操作通常是通过流的方式进行的,这些用于操作流的类都包含在IO包中。按照流向分类,IO流可以分为输入流和输出流。输入流主要用于从外部设备(如文件、键盘、网络等)读取数据,而输出流则用于将数据写入外部设备。按照数据类型分类,IO流可以分为字节流和字符流。

2024-02-16 19:03:06 1292

原创 编码与解码

编码是将信息从一种形式或格式转换为另一种形式的过程。在电子计算机、电视、遥控和通讯等领域中,编码被广泛使用。编码通常涉及将文字、数字或其他对象转换为特定的数码或电脉冲信号。例如,在计算机中,字符编码是将字符(如字母、数字、标点符号等)转换为计算机能够理解的二进制代码。常见的字符编码方式有ASCII、Unicode、UTF-8、GBK等。是编码的逆过程,即将编码后的数据还原成原始格式。在接收端,解码器会对接收到的编码数据进行解码,以恢复成原始的数据形式。

2024-02-16 18:51:25 1320

原创 IO流---File 类

File 类是 java.io 包的一部分,用于表示文件和目录路径名的抽象表示形式。这个类可以用来创建、查找、管理文件系统中的文件和目录。尽管 File 对象可以表示文件或目录,但它并不表示文件内容本身或文件系统中实际存在的文件或目录。将下面的文件依次修改为21.txt,22.txt,23.txt,24.txt,25.txt。搜索文件,采用递归查找fileTest中的22.txt并返回此文件的位置。相对路径是对应蓝色位置,就是lambada路径下的位置。使用相对路径创建文件。

2024-02-15 23:46:58 1027

原创 事务及在SpringBoot项目中使用的两种方式

事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。原子性(Atomicity)原子性指事务是一个不可分割的工作单位,事务中包括的操作要么全部完成,要么全部不完成,不可能结束在中间某个环节。事务中的所有操作要么全部提交成功,要么在发生错误时全部回滚,撤销对数据库的所有更改。这意味着事务内的操作如果失败了,那么会回滚到事务开始前的状态,就像这些操作从来没有发生过一样。

2024-02-15 15:20:23 2918

原创 UML---用例图,类图

类图(Class Diagram)是UML(统一建模语言)中的一种重要图形化表示法,用于描述系统中的类、接口以及它们之间的静态结构和关系。,主要描述系统的功能需求和参与者与系统之间的交互。用例图被视为系统的蓝图,通过它,人们可以获知系统不同种类的用户和用例,了解系统的功能和行为。泛化关系(Generalization):表示类与类之间的继承关系,用带空心三角形的实线表示,箭头指向父类。实现关系(Realization):表示类与接口之间的实现关系,用带空心三角形的虚线表示,箭头指向接口。

2024-02-01 21:57:37 1450

原创 Lambda表达式

在Java中,Lambda表达式提供了一种简洁的方式来实现只有一个方法的接口,这类接口被称作函数式接口(Functional Interface)。Lambda表达式于Java 8中被引入,它帮助简化了匿名内部类的写法,让代码更加简洁易读。

2024-01-24 10:28:51 415

原创 Mybatis----缓存

MyBatis是一个流行的Java持久化框架,它提供了一个灵活的缓存机制来提高查询性能。MyBatis的缓存机制主要分为一级缓存和二级缓存。一级缓存是指在同一个SqlSession中,查询结果会被缓存起来,当再次执行同样的查询时,直接从缓存中获取结果,而不需要再次发起数据库查询。一级缓存是MyBatis默认启用的,可以通过配置来禁用。二级缓存是指多个SqlSession之间共享的缓存,它可以减少数据库的访问次数,提高性能。默认情况下,二级缓存是禁用的,需要手动配置开启。

2024-01-23 18:42:12 1157

原创 Mybatis----分页

分页(Pagination)是指将大量数据划分为多个页面进行展示的一种技术手段。在数据量较大的情况下,将所有数据一次性显示在页面上会导致加载时间过长和页面过于庞大,影响用户体验和系统性能。分页技术通过划分数据为多个页面,并提供导航控制,使用户可以按需加载和浏览数据。通常的分页方式是根据指定的每页显示数量,将数据分为多个独立的页,每页呈现一定数量的数据。用户可以通过页码或者上一页、下一页等导航控件来切换不同的页。常见的分页信息包括当前页码、总页数、总记录数等。

2024-01-23 15:41:37 1070

原创 mybatis----动态Sql

当测试id值为null时,prefixOverrides属性值的设定取出了多余的and,prefix值的设定在trim标签前添加了where。如下,trim标签还用suffix,suffixOverrides属性,与前两个属性相对,分别是在trim标签中语句后添加值,在if标签中对and或or相对属性值后的动态处理,防止sql语句出错。where标签是对if标签的升级版,这里用where标签替代where语句,而且它还能消除条件语句中可能出现的多余sql字段,例如and,or。

2024-01-22 22:52:01 714

原创 SpringMvc中拦截器的配置及应用

Component// 在controller执行前的逻辑@Override// 在controller执行之前执行的逻辑// 返回 true,将允许请求继续传递到处理程序;//返回 false,将阻止请求传递给处理程序// 在controller执行后、并在视图渲染前执行的逻辑@Override//在服务器响应结束后执行的逻辑@Override@Autowired@Override//registry.addInterceptor() 方法可以向注册表中添加拦截器。

2024-01-21 15:32:34 799

原创 SpringBoot项目中集成Kaptcha

Kaptcha是一个流行的Java库,用于生成验证码(CAPTCHA)图片。CAPTCHA是“Completely Automated Public Turing test to tell Computers and Humans Apart”的缩写,通常用于在线表单验证以防止机器人或自动化工具的滥用,保护网站不被自动注册帐户、发送垃圾邮件等使用。

2024-01-21 15:28:15 940

原创 Springboot集成JavaMail Sender发送邮件

spring-boot-starter-mail 是 Spring Boot 的一个 Starter,它提供了集成 JavaMail Sender 和对应配置的自动配置。

2024-01-19 13:01:44 1034

MyBatis在webApp中的使用,此种使用方式是实现dao层接口,并未让mybatis自动生成dao接口的实现类

MyBatis在webApp中的使用,此种使用方式是实现dao层接口,并未让mybatis自动生成dao接口的实现类

2024-01-17

SpringCloud-Ribbon,使用RestfulTemplate实现负载均衡练习

如果只有一台主机,需要设置hosts文件,添加server1 ,server2映射 基于高可用负载均衡练习

2023-04-16

空空如也

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

TA关注的人

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