- 博客(30)
- 收藏
- 关注
原创 动态代理模式
假设有 UserService接口及其实现类 UserServiceImpl,我们需要在不改变实现类代码的基础上,增加日志记录的功能。代理模式的结构比较简单,其核心是代理类,为了让客户端能够一致性地对待真实对象和代理对象,在代理模式中引入了抽象层。虽然静态代理实现简单,且不侵入原代码,但是,当场景稍微复杂一些的时候,静态代理的缺点也会暴露出来。代理模式:给某一个对象提供一个代理,并由代理对象来控制对真实对象的访问。通过静态代理,我们达到了功能增强的目的,而且没有侵入原代码,这是静态代理的一个优点。
2024-09-20 17:10:06
414
原创 线程池的类型
4.Executors.newScheduledThreadPool(corePoolSize)定时及周期执行的线程池。1.Executors.newFixedThreadPool(n Threads) 固定数目线程的线程池。线程存活时间为0(keepAliveTime=0),代表非核心线程一旦空闲,就会被回收。2.Executors.newCachedThreadPool()可缓存线程的线程池。工作队列为无界队列 LinkedBlockingqueue。任务依次按照顺序被执行,适用于串行执行任务的场景;
2024-09-19 19:02:19
303
原创 线程池的状态
调用线程池的 shutdown()方法,可以切换到 SHUTDOWN 关闭状态;调用线程池的 shutdownNow()方法,可以切换到 STOP停止状态;terminated()执行完毕,进入TERMINATED 状态,当工作队列为空时,并且线程池中执行的任务也为空时,线程池进入。线程池中执行的任务为空,进入 TIDYING 状态;TIDYING 状态;
2024-09-19 12:06:10
245
原创 线程池的执行流程
线程池内部维护了若干个线程,没有任务的时候,这些线程都处于等待空闲状态。如果有新的线程任务,就分配一个空闲线程执行。如果所有线程都处于忙碌状态,线程池会创建一个新线程进行处理或者放入队列(工作队列)中等待。2.如果线程池中不存在空闲线程,则线程池会判断当前“存活的线程数”是否小于。maximumPoolsize,则创建一个新线程(非核心线程)执行。,线程池会在线程池中分配一个空闲线程,用于执行线程任务;线程池中如果出现空闲线程,将从工作队列中按照。如果当前“存活线程数”没有达到。,则判断线程数是否达到。
2024-09-19 11:44:40
364
原创 ElasticSearch
Elasticsearch是一个基于的搜索服务器。它提供了一个分布式多用户能力的引擎,基 于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布, 是一种流行的企业级搜索引擎。Elasticsearch用于中,能够达到实时搜索,稳定,可靠,快速, 安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他 语言中都是可用的。
2024-09-04 19:13:47
1039
原创 kafka及异步通知文章上下架
目前springboot整合后的kafka,因为序列化器是StringSerializer,这个时候如果需要传递对象可以有。Kafka对于zookeeper是强依赖,保存kafka相关的节点数据,所以安装Kafka之前必须先安装 zookeeper。在article端的nacos配置中心配置kafka的消费者。在自媒体端的nacos配置中心配置kafka的生产者。在water-common模块下导入kafka依赖。(1)创建kafka-demo项目,导入依赖。在自媒体端文章上下架后发送消息。
2024-09-04 18:59:40
1026
原创 对象存储服务MinIO
MinIO兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志 文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。存储桶(Bucket)如果发生改变,比如上传对象和删除对象,可以使用存储桶事件通知机制进行监 控,并通过以下方式发布出去:AMQP、MQTT、Elasticsearch、Redis、NATS、MySQL、Kafka、 Webhooks等。作为高性能对象存储,在标准硬件条件下它能达到55GB/s的读、35GB/s的写速率。
2024-09-02 19:13:09
1263
原创 freemarker介绍
是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网 页,电子邮件,配置文件,源代码等)的通用工具。它是简单的,专用的语言, 不是 像PHP那样成 熟的编程语言。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示 什么数据。在templates下创建模板文件 01-basic.ftl ,模板中的插值表达式最终会被freemarker替换成具体的数 据。创建一个freemarker-demo 的测试工程专门用于freemarker的功能测试与模板的测试。
2024-09-02 18:59:03
488
原创 创建微服务组件
3.在shop_product、shop_order、shop_user子模块中导入公共子模块common的坐标。创建公共模块 shop_common ,⽤于存放公共的实体类和⼯具类。2.新建一个shop_common模块,只需要配置pom.xml。创建商品微服务模块 shop_product 端⼝808X。创建订单微服务模块 shop_order 端⼝809X。创建⽤户微服务模块 shop_user 端⼝807X。4.shop_product的pom.xml。5.shop_order的pom.xml。
2024-08-27 19:34:19
324
原创 微服务基础知识
互联⽹应 ⽤构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使⽤不同的编程语⾔ 来实现、有可能布在了⼏千台服务器,横跨多个不同的数据中⼼。2、 RPC 框架作为架构微服务化的基础组件,它能⼤⼤降低架构微服务化的成本,提⾼调⽤⽅与服务提 供⽅的研发效率,屏蔽跨进程调⽤函数(服务)的各类复杂细节。微服务架构:其实和SOA 架构类似,微服务是在SOA上做的升华,微服务架构强调的⼀个重点是“业务需 要 彻底的组件化和服务化” ,原有的单个业务系统会拆分为多个可以独⽴开发、设计、运⾏的⼩应⽤。
2024-08-27 19:16:59
1222
原创 MySQL中的索引
3.【建议】主键的名称以 pk 开头,唯一键以 uni 或 uk 开头,普通索引以 idx 开头,一律 使用小写格式,以字段的名称或缩写作为后缀。7.【建议】在多表 JOIN 的SQL里,保证被驱动表的连接列上有索引,这样JOIN 执行效率最高。有汉字的一定要启用它。6.【建议】在建立索引时,多考虑建立 联合索引 ,并把区分度最高的字段放在最前面。特殊能力 通过使用索引,可以在查询过程 中,使用优化隐藏器,提高系统性能。唯一索引 :不允许具有索引值相同的行,从而禁止重复 的索引或键值。
2024-08-25 15:17:23
929
原创 MySQL中的事务
Session A和Session B各开启了一个事务,Session B中的事务先将studentno列为1的记录的name 列更新 为'张三',然后Session A中的事务再去查询这条studentno为1的记录,如果读到列name的值为' 张三',而 Session B中的事务稍后进行了回滚,那么Session A中的事务相当于读到了一个不存在的数据, 这种现象 就称之为 脏读。事务的执行是互不干扰的,一个事务不可能看到其他事务运行时中间某一时刻的数据。基于锁的状态分类:意向共享锁、意向排它锁。
2024-08-25 15:00:09
1728
原创 面试题(学生表练习)
13. 查询各科成绩最高分、最低分和平均分,以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率(及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90)。insert into Teacher values('1' , '张三',1,'1988-1-15','陕西咸阳','[email protected]',3000.00);insert into Course values('1' , '语文' , '2');
2024-08-21 18:49:27
500
原创 SpringBoot自动配置
ConditionalOnProperty:判断配置文件中是否有对应属性和值才初始化Bean ConditionalOnClass:判断环境中是否有对应字节码文件才初始化Bean ConditionalOnMissingBean:判断环境中没有对应Bean才初始化Bean ConditionalOnBean:判断环境中有对应Bean才初始化Bean。在 Spring 的 IOC 容器中有一个 User 的 Bean,现要求:导入Jedis坐标后,加载该Bean,没导入,则不加载。
2024-08-18 23:11:57
1095
原创 Mongodb的详细简介
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开, 即常规 SQL 的 AND 条件。3. MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++, PHP,C#等多种语言。BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。2.如果负载的增加,它可以分布在计算机网络中的其他节点上这就是所 谓的分片。
2024-08-02 17:26:43
1345
原创 网络和安全操作
vi与vim编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,学会它后,您将在Linux的世界里畅行无阻。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。文本编辑器有很多,比如图形模式的gedit、OpenOffice 等,文本模式下的编辑器有vi、vim(vi的增强版本)等。
2024-07-28 22:47:55
914
原创 进程与权限
date命令不同格式的时间或日期,以及要根据时间和日期执行操作,也可以使用命令设置固定的格式,在类UNIX系统中,日期被存储为一个整数,1970年1 月1日0时0分0秒起流逝的秒数。chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指 定文件的所有者或者改变文件所属的组。(5)、可中断睡眠状态:处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。op命令查看进程的信息,进程状态显示和控制,每5s中自动刷新一次(动态显示)
2024-07-28 22:23:45
735
原创 Linux介绍和常见基本命令
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、 支持多线程和多CPU的操作系统。tar -czvf xxx.tar.gz /aaa bb #将/aaa bb 文件 打包压缩为 xxx.tar.gz。它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。tar -xzvf xxx.tar.gz #将 xxx.tar.gz解包解压到当前目录下。ls -a #查看当前目录下的所有目录和文件(包括隐藏的文件)
2024-07-25 23:47:50
785
原创 UDP实现客户端与服务端的通信
这段代码是一个简单的UDP客户端实现,用于向指定的UDP服务器发送数据并接收来自服务器的响应。一个简单的UDP服务器实现,用于监听来自客户端的UDP数据包,并根据接收到的内容发送响应。类来创建一个简单的UDP服务器,该服务器能够接收客户端发送的UDP数据包,并根据接收到的内容发送响应。类来创建一个简单的UDP客户端,该客户端能够向指定的UDP服务器发送数据并接收来自服务器的响应。接收到的数据包将填充到之前创建的。方法,这个数据包必须来自指定的服务器地址和端口。打印出接收到的来自客户端的信息。
2024-07-15 23:14:30
317
1
原创 《压缩文件的解析方式》
这个方法首先创建了一个解压目录,然后读取RAR文件中的所有子目录和子文件,按照文件名排序,遍历列表,为每个子目录或子文件创建对应的目录或文件,并将RAR文件中的子文件内容复制到新创建的文件中,最后打印所有子目录或子文件的名称。这两个方法都遵循了类似的步骤:创建解压目录、删除已存在的解压目录(如果需要)、读取压缩文件、遍历压缩文件中的条目、在物理磁盘上创建对应的子目录或子文件,并处理可能发生的异常。对于每个条目,它会在目标目录中创建相应的文件或目录,并将条目内容写入新创建的文件中。
2024-07-11 19:40:05
732
原创 Java基础知识点
静态代码块(先父类、再子类)=>父类的构造代码块=>父类的构造方法=>子类的构造代码块=>子类构造方法。备注1:普通方法(没有使用static关键字修饰的方法)允许调用static修饰的方法。String.join()方法:将多个字符串元素使用指定字符串,拼接成完整字符串。调用方式2:如果是在其他类的static中,则需要通过类名.方法()调用。2.用于声明方法(最终方法),该方法在子类中不重写,在当前类中允许重载。1.==是关系运算符,equals()是Object类中的定义的方法。
2024-03-27 17:41:42
422
原创 抽象类与接口
语法4:接口中不允许定义带有方法体的普通方法,但可以通过default关键字定义默认方法。* 语法5:实现类通过implements关键字实现接口,必须重写接口中定义的抽象方法。* 语法2:接口中允许定义抽象方法,定义时允许省略abstract。3.抽象方法使用abstract关键字定义的方法,并且没有方法体。在抽象类中,允许定义”抽象方法“,”普通方法“,”构造方法“4.抽象父类中如果存在抽象的方法,则子类必须实现该方法。* 语法3:接口中不允许定义构造方法。2.抽象类中允许定义抽象方法。
2024-03-27 17:17:03
798
原创 Arrays工具类的常见方法总结
提纲4:Arrays.copyOfRange( )作用、参数、返回值、举例、【加分项:源代码解读】提纲7:Arrays.toString( )作用、参数、返回值、举例、【加分项:源代码解读】提纲3:Arrays.copyOf( )作用、参数、返回值、举例、【加分项:源代码解读】提纲5:Arrays.fill( )作用、参数、返回值、举例、【加分项:源代码解读】提纲6:Arrays.sort( )作用、参数、返回值、举例、【加分项:源代码解读】作用:Arrays.copyOf( )方法的作用是复制数组。
2024-03-22 00:12:56
679
1
原创 输入某年某月某天,判断这一天是这一年的第几天 ???
步骤:1.先用Scanner语句读取输入,输入的是某年某月某天。问题:* 输入某年某月某天,判断这一天是这一年的第几天。* 输入:2023,8,7。5.判断2月是否为闰年。4.以下两种计算方式。3.提取出"年月日"
2024-03-19 22:12:06
388
1
原创 数组常见算法代码总结
数组乱序 的基本实现思路是:对一个打乱顺序的数组,通过for循环逆序遍历产生随机下标,从数组的最后一个元素(数组的长度-1)开始到第二个元素(i>0),设置一个随机数作为循环中遍历到的元素之前的所有元素的下标,即可从该元素之前的所有元素中随机取出一个每次将随机取出的元素与遍历到的元素交换,即可完成乱序。无序数组查找是通过双指针查找实现的基本实现思路是:使用for循环,通过两个下标,分别从数组的头部和尾部遍历该无序数组,将数组中的每个元素与指定元素进行比较,从而确定该数组中是否存在目标元素。
2024-03-15 08:50:41
1592
1
原创 String字符串的常见方法总结
lastIndex0f()方法: 从原字符串中查找目标字符串,返回最后一次出现的位置。字符串是不可变,每次截取,都会产生一个新的字符对象,使用substring()index0f()方法: 从原字符串中查找目标字符串,返回第一次出现的位置。startsWith()方法: 判断原字符串是否以目标字符串开头。contains()方法: 判断原字符串中是否存在目标字符串。endsWith()方法: 判断原字符串是否以目标字符串结尾。3.字符串的内容等值比较。b>a ASCII码。4.字符串的查找搜索。
2024-03-14 23:50:20
217
原创 String为什么是不可变的???
String字符串的内部是final关键字修饰的字符数组 char[ ],这个数组无法被修改(指引用地址不可被修改,并非是数组本身的内容不可修改),如果是改变数组本身的内容,这样的操作是可行的,同时在String的所有方法里面涉及到对char[ ]数组进行修改的操作全部都会重新创建一个新的String对象,将修改后的值保存在新的字符串对象,原字符串不会改变。从String类的源代码可知,String字符串的内部是final关键字修饰的字符数组char【】,所以不能修改。二.每次修改都会产生一个新的字符串。
2024-03-14 18:30:30
143
原创 数值类型的运算方式总结
十进制的小数在进行二进制转换时,整数部分会除二取余,小数部分会乘二取整,在乘二取整的过程中,会产生无限循环的情况,所以就出现了精度丢失。是因为计算机内部是通过二进制形式来保存浮点数的,无法精确的表示十进制的小数,所以会产生精度丢失的问题。类型转换:将一个大范围的整数类型转换为一个极小范围的整数类型时,如果原始值超出了目标类型的表示范围,就会发生溢出。||运算:同时为false,结果为false,否则为true。运算规则:数值类型之间运算,运算结果为boolean。运算规则:同时1,结果1,否则为0。
2024-03-04 23:42:28
421
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人