- 博客(75)
- 收藏
- 关注
原创 浅拷贝和深拷贝
首先对于一个对象中的基本数据类型,来做浅拷贝和深拷贝其实没有什么区别,都是将原始值复制一份给新的对象,但是对于对象中的引用数据类型来说,浅拷贝只是将引用数据类型的地址值复制一份给新的对象,这样就会导致新对象和旧的对象之间共用一个引用数据,但是深拷贝是直接开辟一个新的内存地址,这样深拷贝的数据和原来的数据是八竿子打不着的!
2024-04-10 16:29:07
285
原创 JDK 8
方法体:用于执行业务逻辑,可以是单一语句,亦可以是语句块,当时一个单一的语句时,可以省略花括号。当需要返回值的时候,如果方法体中只有一个语句,可以省略return,会自动根据结果进行返回。没有参数的只有一个参数的多个参数参数类型可以省略哦。
2024-04-08 08:37:43
658
原创 JUC(五)
ThreeLocal并不解决线程之间数据共项的数据问题,适用于变量在线程间隔离且在方法之间共享的场景,通过隐式的在不同的线程内创建独立实例副本避免了实例线程安全问题,每一个线程持有一个只属于自己的专属Map并维护ThreadLocal对象与具体实例的映射,该Map由于只被持有它的线程访问,所以不存在线程的安全以及锁的问题。
2024-03-29 22:49:53
348
原创 JUC(四)
是什么意思呐,是这样的,认为自己在使用共享数据的时候一定有其他线程来对数据进行操作(写),因此在获取数据的时候会先加锁,确保数据不会被其他的线程修改。synchronized关键字和Lock的实现类都是悲观锁,这种方式适合对数据进行写操作比较频烦的场景,先加锁可以保护写数据时数据的正确,先锁定再操作数据!
2024-03-27 12:36:12
785
原创 JUC(三)
是一种特殊的线程为其他线程服务,在后台默默的完成一系列的系统性服务,比如GC垃圾回收线程,守护线程做为一个服务线程,没有服务对象就没有必要再继续运行下去,如果用户线程全部结束了,意味着程序需要完成的业务操作已经结束了,系统可以退出了,所以假如系统只有守护线程的时候,java虚拟机会自动退出。这里我们思考一个问题,事实上面的基本已经解决了我们的问题,但是现在想进一步的优化,如果我有多个异步的任务要执行呐,我是不是要每一次都要new一个新的线程来执行异步任务。也就是Monitor监视器,也就是我们平时说的锁。
2024-03-26 10:51:59
619
原创 JUC(二)
Owner 线程发现条件不满足,调用 wait 方法,即可进入 WaitSet 变为 WAITING状态 BLOCKED 和 WAITING 的线程都处于阻塞状态,不占用 CPU 时间片BLOCKED 线程会在 Owner 线程释放锁时唤醒WAITING 线程会在 Owner 线程调用 notify 或 notifyAll 时唤醒,但唤醒后并不意味者立刻获得锁,仍需进入 EntryList 重新竞争。
2024-03-24 22:13:59
197
原创 JUC(一)
阻塞与非阻塞是针对线程来说的,阻塞可能发生在IO期间也可能发生在IO之前。同步与异步是针对IO操作来说的,同步是用户线程一直盯着IO直到完成,异步是用户线程在IO完成时会收到通知。
2024-03-22 13:31:25
333
原创 Elasticsearch(四)
正向索引:是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程。则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程。正向索引优点:可以给多个字段创建索引根据索引字段搜索、排序速度非常快缺点:根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。倒排索引优点:根据词条搜索、模糊搜索时,速度非常快缺点:只能给词条创建索引,而不是字段。
2024-02-08 10:12:49
2480
原创 Elasticsearch(三)
虽然 Elasticsearch 带有一些现成的分析器,然而在分析器上 Elasticsearch 真正的强大之处在于,你可以通过在一个适合你的特定数据的设置之中组合字符过滤器、分词器、词汇单元过滤器来创建自定义的分析器。
2024-02-06 11:31:31
2333
1
原创 Elasticsearch(二)
默认情况下,Elasticsearch 中的每个索引被分片 1 个主分片和 1 个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有 1 个主分片和另外 1 个复制分片(1 个完全拷贝),这样的话每个索引总共就有 2 个分片,我们需要根据索引需要确定分片个数。当你创建一个索引的时候,你可以指定你想要的分片的数量。幸运的是,在其它节点上存在着这两个主分片的完整副本, 所以新的主节点立即将这些分片在 Node 2 和 Node 3 上对应的副本分片提升为主分片, 此时集群的状态将会为yellow。
2024-02-04 19:49:34
1025
原创 Elasticsearch(一)
The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。Elaticsearch,简称为 ES,ES 是一个是整个 Elastic Stack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。:基于Apache License 2.0开源协议,并且完全免费。
2024-02-02 17:18:23
1441
原创 RabbitMQ(三)
用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条。在以前的单应用系统中,我们只需要把数据操作放入事务中即可,发生错误立即回滚,但是再响应客户端的时候也有可能出现网络中断或者异常等等。
2024-01-31 16:20:14
752
原创 RabbitMQ(二)
可以看到,在订阅模型中,多了一个exchange角色,而且过程略有变化:Publisher:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给X(交换机)Exchange:交换机,图中的X。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange有以下3种类型:Fanout:广播,将消息交给所有绑定到交换机的队列。
2024-01-29 12:55:09
1142
原创 Redis(六)
首先查看Redis最大的占用内存,打开redis配置文件,设置maxmemory参数,maxmemory是bytes字节类型,注意转换。打开配置文件发现没有配置,那么默认是多少的内存,是这样的,如果不设置最大的内存或者最大的内存为零,在64位的操作系统下不限制内存的大小,在32位操作系统下做多使用3G的内存。那么想配置的话,给redis配置多少呀,一般推荐Redis设置内存为最大物理内存的四分之三,另外配置方式分为两种,一种是直接在配置文件中修改,另外一个种是在客户端种配置数据。
2024-01-22 12:46:39
909
原创 Redis(五)
由一个初值都为零的bit数组和多个哈希函数构成,可以用来快速判断集合中是否存在某个元素,减少占用内存,不保存数据信息,只是在内存中做出一个标记。它实际上是一个很长的二进制数组(00000000)+一系列随机hash算法映射函数,主要用于判断一个元素是否在集合中。通常我们会遇到很多要判断一个元素是否在某个集合中的业务场景,一般想到的是将集合中所有元素保存起来,然后通过比较确定。布隆过滤器(Bloom Filter) 是一种专门用来解决去重问题的高级数据结构。实质就是一个大型*
2024-01-20 15:36:12
1074
原创 Redis(四)
其实直接说Redis什么单线程或者是多线程,不太准确,在redis的4.0版主之前是单线程,然后在之后的版本中redis的渐渐改为多线程。Redis是单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的,Redis在处理客户端的请求时包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理,这就是所谓的“单线程”。这也是Redis对外提供键值存储服务的主要流程。
2024-01-19 14:27:01
957
原创 Redis (三)
配置过的从机是只能执行读操作,不能执行写操作,这样以来可以实现读写分离提高性能。#从机写入假设主机启动后然后执行了多次的写操作后从机才启动,那么从机可以读取之前的写入的数据嘛,是这样的从机第一次启动的话会备份主机的之前的所有的数据做到同步,然后对于后续的主机的写操作同步的更新。#主机写OKOK#启动从机,访问数据正常> get k2v2> get k3v3主机宕机的话会出现什么操作,是从机变主机?数据读取失败?是这样的从机还是老老实实的做从机,等待主机恢复,而且读取数据正常没有影响。
2024-01-04 21:34:38
1122
原创 Redis(二)
RDB的优点,是对数据的整体的备份所以使用RDB可以进行大规模的数据备份和恢复,可以按照业务定时的备份,默认使用的是bgsave,不影响主进程。和AOF相比RDB文件在内存中的加载的速度更快。对数据完整性和一致性不高。可以更好的保护数据不丢失,性能比较高,有三种写回策略,即使丢失数据也只是很少的一部分,对于损坏的AOF文件,也可以使用工具去修复文件。有重写机制。
2024-01-02 16:49:14
1088
原创 Redis(一)
Redis是一个完全开源免费的高性能(NOSQL)的key-value数据库。它遵守BSD协议,使用ANSI C语言编写,并支持网络和持久化。Redis拥有极高的性能,每秒可以进行11万次的读取操作和8.1万次的写入操作。它支持丰富的数据类型,包括String、Hash、List、Set和Ordered Set,并且所有的操作都是原子性的。此外,Redis还提供了多种特性,如发布/订阅、通知、key过期等。Redis采用自己实现的分离器来实现高速的读写操作,效率非常高。
2023-12-31 14:04:26
1121
原创 cron表达式
cron表达式是一种用于设置定时任务的语法规则,它可以让你指定任务在某个时间点或者周期性地执行。cron表达式由6个或7个字段组成,分别表示秒、分、小时、日、月、星期和可选的年份。每个字段可以使用数字、通配符、范围、列表、步长等符号来表示执行的时间点或周期。其实我们大概了解一下表达式就可以,简单的我们可以看懂的,对于复杂的表达式我们可以利用一些在线的工具去生成,然后使用就可以!
2023-12-25 15:33:36
396
原创 Dubbo
Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用。一个作为服务的提供方,一个作为服务的消费方。通过Dubbo来实现服务消费方远程调用服务提供方的方法。Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。其中RPC全称为remote procedure call,即远程过程调用。Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用。:暴露服务的服务提供方:服务运行容器:调用远程服务的服务消费方:服务注册与发现的注册中心。
2023-12-22 14:53:43
864
原创 linux 操作系统(二)
在linux中的用户可以分为两类,一类是root用户,root用户拥有linux操作系统的最大的权限,另外一类就是普通用户,相比于root用户,普通用户的权限受到一定的限制(对于文件的读写删除等操作)。我们可以使用sudo命令,为普通的命令授权,临时以root身份执行。在其它命令之前,带上sudo,即可为这一条命令临时赋予root授权,但是并不是所有的用户,都有权利使用sudo,我们需要为普通用户配置sudo认证。参数:用户名,表示要切换的用户,用户名也可以省略,省略表示切换到root。
2023-12-17 22:33:13
1095
原创 Spring Boot (三)
使用@ConfigurationProperties可以为使用@Bean声明的第三方bean绑定属性当使用@EnableConfigurationProperties声明进行属性绑定的bean后,无需使用@Component注解再次进行bean声明。
2023-11-11 15:58:02
974
原创 Spring Boot(二)
多环境开发需要设置若干种常用环境,例如开发、生产、测试环境yaml格式中设置多环境使用---区分环境设置边界每种环境的区别在于加载的配置属性不同启用某种环境时需要指定启动时使用该环境。
2023-11-11 15:39:11
1992
1
原创 linux 操作系统(一)
先讲一下叭,自己学这的原因,是因为我在做项目的时候使用到啦Redis,其实在windows系统上我其实也装啦Redis上,但是我觉得后期在做其他的项目的时候可能也会用到这个然后就想着要不先学学redis,然后在后面也不至于什么都不知道,会让自己有很大的挫败感,然后找啦Redis的资料,发现都是基于liunx的(其实也可以部署到云服务器,但是咱不是没钱嘛),所以因为linux是前置知识就不得不去学习一下,其实在大学阶段学校也开啦这门课程,忘记是在大一还是大二啦,又还给课本了!
2023-11-09 20:22:12
226
原创 Spring Boot(一)
Spring Boot是一个开源的Java框架,旨在简化基于Java的应用程序的开发和部署过程。它提供了许多开箱即用的功能和工具,使开发者能够快速构建独立、可执行的、生产级别的应用程序。以下是Spring Boot的一些主要特点和优势:简化的配置:Spring Boot采用了约定优于配置的原则,通过自动配置和默认值减少了开发者在配置方面的工作量。它提供了内置的默认配置,可以根据需要进行覆盖,同时还支持外部化配置,使得应用程序的配置变得非常灵活。
2023-11-09 20:14:35
1054
原创 MyBatis-Plus
Test// 1.准备自定义查询条件// 2.调用mapper的自定义方法,直接传递Wrappermapper接口映射文件
2023-11-07 18:50:57
216
原创 后台管理(二)
资源就是系统中需要保护起来的功能。具体形式很多:URL 地址、controller方法、service 方法、页面元素等等都可以定义为资源使用权限控制系统保护起来。
2023-11-01 19:33:16
106
原创 项目基础配置
dependencesManagement标签,在父类工程中的所有的依赖只是声明并没有真实的引入依赖,他只是起到一个管理的作用,在子类项目中,可以按需选择所要引入的依赖,之所以有这个标签是因为可以方便的进行依赖的版本的控制。配置文件一定要好好的、细心的、认认真真的配置,我在测试的时候myabtis的核心配置文件我使用的是我自己的模板,然后创建完我也没有修改里面的配置文件导致一致出错,然后我一直以为是我导入的依赖的版本太高了,最后仔仔细细的看异常信息才解决问题!测试中间出现一个问题,就是在运行的时候说我的。
2023-10-29 21:10:51
188
原创 Spring MVC(下)
SpringMVC中的拦截器用于拦截控制器方法的执行SpringMVC中的拦截器需要实现HandlerInterceptor。
2023-10-26 18:11:15
414
原创 Spring MVC(上)
MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分Model,模型层,指工程中的JavaBean,作用是处理数据JavaBean分为两类:一类称为实体类Bean:专门存储业务数据的,如 Student、User 等一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理业务逻辑和数据访问。View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据Controller,控制层,指工程中的servlet,作用是接收请求和响应浏览器。
2023-10-19 11:24:20
486
原创 Spring框架(四)
第七步:编写service接口和service接口实现类。第九步:编写mybatis-config.xml配置文件。第八步:编写jdbc.properties配置文件。第三步:基于三层架构实现,所以提前创建好所有的包。第十一步:编写测试程序,并添加事务,进行测试。第二步:IDEA中创建一个模块,并引入依赖。第十步:编写spring.xml配置文件。第六步:编写mapper配置文件。第五步:编写mapper接口。配置文件: 开启组件扫描。第一步:准备数据库表。第四步:编写pojo。
2023-10-18 22:35:44
266
原创 Spring框架(三)
就拿日志功能来说,将来其他地方也需要附加日志,那还得再声明更多个静态代理类,那就产生了大量重复的代码,日志功能还是分散的,没有统一管理。程序运行阶段,在内存中动态生成代理类,被称为动态代理,目的是为了减少代理类的数量。调用目标方法时先调用代理对象的方法,减少对目标方法的调用和打扰,同时让附加功能能够集中在一起也有利于统一维护。它的作用就是通过提供一个代理类,让我们在调用目标方法的时候,不再是直接对目标方法进行调用,而是通过代理类。这样可以是可以,但是每一个模块都要写重复的代码,而且违背OCP的开闭原则!
2023-10-17 21:56:23
147
原创 MyBatis(下)
缓存通过减少IO的方式,来提高程序的执行效率。mybatis的缓存将select语句的查询结果放到缓存(内存)当中,下一次还是这条select语句的话,直接从缓存中取,不再查数据库。一方面是减少了IO。另一方面不再执行繁琐的查找算法。
2023-10-14 20:15:24
952
原创 MyBatis(中)
这里的sql语句可以很直观的看出来,这个choose的特点就是只有一个条件会被执行,即使其传递的参数也符合要求。需求:先根据品牌查询,如果没有提供品牌,再根据指导价格查询,如果没有提供指导价格,就根据生产日期查询。比如我们只更新提交的不为空的字段,如果提交的数据是空或者"",那么这个字段我们将不更新。使用where的标签的话可以去where语句的前面的。测试和接大差不差,就不复制粘贴啦,主要是看Trim标签怎么使用的!where标签的作用:让where子句更加动态智能。,但是不可去除条件语句的后面的。
2023-10-13 21:33:39
388
原创 MyBatis(上)
MyBatis(以前称为iBATIS)是一个Java持久性框架,用于简化数据库访问和与关系数据库的交互。它提供了一种将数据库操作与Java应用程序的业务逻辑分离的方式,使开发人员能够更轻松地编写数据库访问代码。MyBatis本质上就是对JDBC的封装,通过MyBatis完成CRUD。MyBatis作为持久层的一个框架,使用到的一个思想就是ORM,用于将对象模型(通常是面向对象编程语言中的类和对象)映射到关系数据库中的数据模型(表、列等)。
2023-10-10 22:57:07
316
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人