- 博客(339)
- 资源 (1)
- 收藏
- 关注
原创 python asyncio异步编程
协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。对于协程而言,并不是计算机所提供的,计算机所提供的只有进程和线程、而协程则是通过程序员人为所创造的。我们通常将协程称为微线程,是一种用户态的轻量级线程。协程不像线程和进程那样,需要进行系统内核上的上下文切换,协程的上下文切换是由程序员决定的。
2024-01-28 22:58:39 1042
原创 初识K8S(Kubernetes )
Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。这个名字源于希腊语,意为“舵手”或“飞行员”。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。Google 在 2014 年开源了 Kubernetes 项目。Kubernetes 建立在的基础上, 结合了社区中最优秀的想法和实践。
2024-01-28 14:51:38 1015
原创 ubuntu安装vm和Linux,安装python环境,docker和部署项目(一篇从零到部署)
如果你需要的包要求不同版本的Python,你无需切换到不同的环境,因为conda同样是一个环境管理器。仅需要几条命令,你可以创建一个完全独立的环境来运行不同的Python版本,同时继续在你常规的环境中使用你常用的Python版本。通常 PPA 源里的软件是官方源里没有的,或者是最新版本的软件。Conda创建环境相当于创建一个虚拟的空间将这些包都装在这个位置,我不需要了可以直接打包放入垃圾箱,同时也可以针对不同程序的运行环境选择不同的conda虚拟环境进行运行。
2024-01-21 18:03:18 988
原创 Ubuntu安装mysql8详细步骤
v /docker/mysql8.0.20/data:/var/lib/mysql \ 挂载数据文件 持久化到主机【路径是上面创建的挂载路径】-v /docker/mysql8.0.20/mysql:/etc/mysql \ 挂载配置文件【路径是上面创建的挂载路径】-v /docker/mysql8.0.20/logs:/logs \ 挂载日志【路径是上面创建的挂载路径】-v /etc/localtime:/etc/localtime 容器时间与宿主机同步。进入到上面挂载目录下、因为已经做了cp复制。
2024-01-20 22:26:27 1495
原创 Seata简介
Seata是一个开源的分布式事务解决方案,用于解决分布式系统中的事务一致性问题。它提供了高性能和高可靠性的分布式事务支持,可以在微服务架构中保证数据的一致性和可靠性。Seata的核心概念包括三个组件:事务协调器(Transaction Coordinator)、事务管理器(Transaction Manager)和资源管理器(Resource Manager)。事务协调器负责协调和管理全局事务,事务管理器负责管理分支事务,而资源管理器则负责管理和操作实际的数据源。
2023-08-19 09:15:43 620
原创 python进阶
通过探索这些进阶主题,您将能够在Python中处理更复杂的问题,并编写更健壮、高效的代码。- 使用`threading`和`multiprocessing`模块。- 编写单元测试,使用`unittest`或其他测试框架。- 使用`with`语句来管理资源,如文件或网络连接。- 高阶函数:可以接受函数作为参数或返回函数的函数。- 学习函数式编程的概念,如纯函数、不可变性等。- 列表和字典的高级操作,如排序、过滤、映射等。- 学习如何使用更高效的算法和数据结构。- 使用`open()`函数来读写文件。
2023-08-16 22:50:39 213
原创 python基础
Python有许多内置的模块和库,如`math`(数学函数)、`random`(随机数生成)等。- 比较运算符:`==`、`!=`、`<`、`>`、`<=`、`>=`等。- 条件语句:使用`if`、`elif`和`else`来进行条件判断。- 循环语句:`for`循环和`while`循环用于重复执行代码块。- 算术运算符:`+`、`-`、`*`、`/`、`%`等。- 使用`try`和`except`来捕获和处理异常。- 逻辑运算符:`and`、`or`、`not`。
2023-08-16 22:47:58 158
原创 Java面试
与传统的Spring框架相比,Spring Boot减少了开发人员的配置工作,提高了开发效率,并提供了更好的开发体验。在上面的示例中,`Person`是父类,`Student`是子类。通过将`Student`对象赋值给`Person`类型的引用`person`,可以调用`Person`类中的方法,但实际上会执行`Student`类中重写的方法。在上面的示例中,`Animal`类有一个`makeSound()`方法,`Dog`类继承自`Animal`类并重写了`makeSound()`方法。
2023-08-13 11:00:56 389
原创 springboot 使用zookeeper实现分布式ID
通过ZooKeeper的协调和同步机制,多个应用程序可以共享一个ID生成器,并确保生成的ID是唯一的。请注意,上述示例中的代码仅供参考,实际使用时可能需要根据具体需求进行适当的修改和调整。在上面的示例中,我们使用了Curator提供的DistributedAtomicLong来创建一个分布式ID生成器。我们使用ZooKeeper的路径/id-generator来表示ID生成器的资源。在上述示例中,我们使用increment()方法递增生成ID,并通过AtomicValue对象获取生成的ID。
2023-08-12 13:25:07 1212
原创 springboot 使用zookeeper实现分布式锁
通过ZooKeeper的协调和同步机制,多个应用程序可以共享一个锁,并确保在同一时间只有一个应用程序可以获得锁。请注意,上述示例中的代码仅供参考,实际使用时可能需要根据具体需求进行适当的修改和调整。在上述示例中,我们使用acquire()方法获取锁,并在try-finally块中执行需要保护的代码块。在上面的示例中,我们使用了Curator提供的InterProcessMutex来创建一个分布式锁。我们使用ZooKeeper的路径/lock来表示锁的资源。
2023-08-12 13:11:16 1436
原创 springboot 使用zookeeper实现分布式队列
以上是使用ZooKeeper实现分布式队列的基本步骤。通过ZooKeeper的协调和同步机制,多个应用程序可以共享一个队列,并按照先进先出的顺序处理队列中的消息。请注意,上述示例中的代码仅供参考,实际使用时可能需要根据具体需求进行适当的修改和调整。在上面的示例中,我们使用了Curator提供的QueueBuilder来创建一个分布式队列。我们定义了一个QueueConsumer来处理队列中的消息,并实现了一个QueueSerializer来序列化和反序列化队列中的元素。
2023-08-12 13:08:32 1238
原创 C#学习之路-方法
当定义一个方法时,从根本上说是在声明它的结构的元素。在 C# 中,定义方法的语法如下::访问修饰符,这个决定了变量或方法对于另一个类的可见性。:返回类型,一个方法可以返回一个值。返回类型是方法返回的值的数据类型。如果方法不返回任何值,则返回类型为void。:方法名称,是一个唯一的标识符,且是大小写敏感的。它不能与类中声明的其他标识符相同。:参数列表,使用圆括号括起来,该参数是用来传递和接收方法的数据。参数列表是指方法的参数类型、顺序和数量。参数是可选的,也就是说,一个方法可能不包含参数。
2023-07-08 19:02:38 283
原创 C#学习之路-封装
被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可视化,封装则使开发者实现所需级别的抽象。C# 封装根据具体的需要,设置使用者的访问权限,并通过来实现。一个定义了一个类成员的范围和可见性。
2023-07-08 18:53:13 392
原创 C#学习之路-循环
有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。编程语言提供了允许更为复杂的执行路径的多种控制结构。
2023-07-08 17:36:52 518
原创 C#学习之路-常量
常量是使用const关键字来定义的。定义一个常量的语法如下:// 和java一样的 构造函数传参x = p1;y = p2;class Test。
2023-07-08 16:06:44 498
原创 C#学习之路-变量
在这里,data_type 必须是一个有效的 C# 数据类型,可以是 char、int、float、double 或其他用户自定义的数据类型。variable_list 可以由一个或多个用逗号分隔的标识符名称组成。和java定义变量类似/* 初始化 d 和 f. *//* 初始化 z. *//* 声明 pi 的近似值 *//* 变量 x 的值为 'x' */
2023-07-08 15:55:28 277
原创 C#学习之路-类型转换
类型转换从根本上说是类型铸造,或者说是把数据从一种类型转换为另一种类型。C# 中的类型转换可以分为两种:隐式转换和显式转换。
2023-07-08 12:31:06 264
原创 C#学习之路-数据类型
所以对象(Object)类型可以被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的。指针类型变量存储另一种类型的内存地址。您可以存储任何类型的值在动态数据类型变量中。这些变量的类型检查是在运行时发生的。引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。值类型变量可以直接分配给一个值。
2023-07-08 12:06:03 219
原创 C#学习之路-基本语法
C# 是一种面向对象的编程语言。在面向对象的程序设计方法中,程序由各种相互交互的对象组成。相同种类的对象通常具有相同的类型,或者说,是在相同的 class 中。
2023-07-08 11:52:11 244
原创 TCP协议
TCP全称为“传输控制协议(transmission control protocol)”,它为两台主机提供可靠的数据通信,所做的工作是把应用层交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。
2023-05-15 22:38:32 697
原创 EnableRedisHttpSession注解介绍
这边再普及下Session的概念:Session是服务器端的一个key-value的数据结构,经常被用户和cookie配合,保持用户的登陆回话。客户端在第一次访问服务端的时候,服务端会响应一个sessionId并且将它存入到本地cookie中,在之后的访问会将cookie中的sessionId放入到请求头中去访问服务器,如果通过这个sessionid没有找到对应的数据那么服务器会创建一个新的sessionid并且响应给客户端。
2023-04-18 21:45:52 2561
原创 org.apache.tomcat.util.http.fileupload.FileUploadException: Stream closed
doFilter方法中获取了request的输入流,并且执行了close,所以报错就处在这里了。就是简单的文件上传,为何会出现上面的问题?原来项目中自定义了一个webfilter。
2023-04-15 00:35:12 2500 1
原创 Java知识总结
第二点就是在某些情况下可以提高性能,使用继承 Thread 类方式,每次执行一次任务,都需要新建一个独立的线程,执行完任务后线程走到生命周期的尽头被销毁,如果还想执行这个任务,就必须再新建一个继承了 Thread 类的类,如果此时执行的内容比较少,比如只是在 run() 方法里简单打印一行文字,那么它所带来的开销并不大,相比于整个线程从开始创建到执行完毕被销毁,这一系列的操作比 run() 方法打印文字本身带来的开销要大得多,相当于捡了芝麻丢了西瓜,得不偿失。1、当线程的run方法结束时,该线程就完成。
2023-04-10 22:50:46 801
原创 Zookeeper和Redis分布式锁对比
锁,解决的是多线程或多进程情况下的数据一致性问题;分布式锁,解决的是分布式集群下的数据一致性问题。为了保证一个方法或属性在高并发情况下的同一时间只能被同一个线程执行,在传统单体应用单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLock或Synchronized)进行互斥控制。在单机环境中,Java中提供了很多并发处理相关的API。
2023-04-03 23:12:07 557
原创 Curator实现分布式锁(可重入 不可重入 读写 联锁 信号量 )
Curator是netflix公司开源的一套zookeeper客户端,目前是Apache的顶级项目。与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeeper客户端的开发量。Curator解决了很多zookeeper客户端非常底层的细节开发工作,包括连接重连、反复注册wathcer和NodeExistsException 异常等。Curator主要解决了三类问题:封装ZooKeeper client与ZooKeeper server之间的连接处理。
2023-04-01 14:55:08 387
原创 Zookeeper客户端Curator5.2.0节点事件监听CuratorCache用法
该节点监听的是/root/data/stock,库存操作的是/root/data/stock这个子节点,可以看到监听成功。该节点监听的是/root/data,库存操作的是/root/data/stock这个子节点,可以看到监听成功。监听的是root节点,库存操作的是/root/data/stock这个子节点,可以看到监听成功。(2)PathChildrenCache:监听指定节点的子节点。(3)TreeCache:监听指定节点和子节点及其子孙节点。该监听方式直接替换了上面的三种过时的监听方式。
2023-03-30 00:07:27 649
原创 基于Zookeeper使用InterProcessMutex排他锁
然后使用zookeeper的可视化工具查看当前节点的信息。等待任务执行完成之后,所有的节点信息都会被移除。2、zookeeper的相关配置。3、使用多线程模拟抢占锁。
2023-03-28 22:33:12 114
原创 Windows下安装zookeeper
添加后得知是缺少zoo.cfg配置文件;从国内开源网站下载镜像,例如:清华大学开源软件镜像站 | Tsinghua Open Source Mirror。修改后再次运行,出现ZooKeeper audit is disabled,修改zkServer.cmd 添加。末尾添加pause。这样运行出错就不会退出,会提示错误信息,方便找到原因。执行bin目录下 zkServer.cmd。该文件中常用的例如注册中心端口号。1、下载zookeeper。编辑zkServer.c。或zoo.cfg新增一行。
2023-03-28 21:35:09 164
原创 Activiti 工作流简介
工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。
2023-03-16 21:59:29 6344 1
原创 idea2020版本无法使用actiBPM插件问题
2、idea安装提示:Plugin 'actiBPM' (version 2.E-8) was explicitly marked as incompatible with the current version of ide。2,紫色框圈出来的地方如果你们没有这项就加上里面的值也填idea的版本号,如果有修改为idea的版本号。原因是2020版之后不兼容此插件了 ,我的idea就是2020.3.3。3,把蓝色框里面的值中的 xml 修改为 java。右键工程文件new文件验证是否安装成功;
2023-03-16 21:40:43 1994 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人