- 博客(127)
- 收藏
- 关注
原创 spring注解:@Transactional使用简介
是 Spring 框架提供的声明式事务管理的一个核心注解,主要用于对方法进行事务管理。它能够确保方法在执行过程中的多个操作要么全部成功,要么全部失败。如果应用于方法上,仅对被注解的方法提供事务管理;如果应用于类上,则对类中的所有方法提供事务管理。属性可以指定事务的超时时间(以秒为单位)。如果事务在指定的时间内没有完成,将被自动回滚。注解修饰,分别表示添加用户操作需要事务支持,而查询用户操作是只读的。属性可以指定事务的传播行为。属性可以指定事务的隔离级别。,则事务将被标记为只读,这有助于提高数据库性能。
2024-08-03 18:06:12
498
原创 MyBatis-Plus 分页查询基本用法
MyBatis-Plus 的分页功能是通过拦截 MyBatis 的查询操作,动态地修改 SQL 语句来实现的。它支持多种数据库的分页查询,包括 MySQL、PostgreSQL、SQL Server 和 Oracle 等。
2024-07-30 16:58:30
747
原创 项目开发:@ControllerAdvice注解的基本应用
是 Spring 框架中提供的一个注解,用于定义一个组件,该组件可以集中处理来自不同控制器的异常或提供统一的拦截器功能。注解定义了一个方法,该方法将在每个控制器方法调用之前执行,用于注册自定义的数据绑定行为。方法中,你可以在控制器方法执行前进行一些操作,例如记录开始时间。方法在视图渲染后执行,适合用于记录请求处理的总时间。假设我们想要捕获并统一处理所有控制器抛出的。方法捕获,并返回一个包含错误信息的响应。方法在控制器方法执行后执行,而。在这个例子中,任何控制器抛出的。在这个例子中,我们通过。
2024-07-29 20:43:51
470
原创 Java中为什么在迭代器遍历的过程中修改原有集合中的内容会报错?为什么要这样设计?
在Java中,迭代器(Iterator)是一种常用的设计模式,用于访问集合(如List、Set等)中的元素,而无需关心集合的实现细节。然而,在使用迭代器遍历集合时,直接修改集合的内容(如添加、删除元素等)通常是不被允许的,并且可能会抛出异常。:迭代器在创建时会记录集合的状态。如果在迭代过程中集合的内容被修改,迭代器可能会获得不一致或过时的信息,从而导致错误的迭代结果。:当集合中的数据结构被修改时(如添加或删除元素),其内部结构可能发生变化,这可能导致迭代器无法正确地访问或更新元素,从而可能破坏数据的完整性。
2024-07-25 22:55:26
439
原创 面试题:简单介绍一下快速失败和安全失败。简单介绍一下快速失败和安全失败和集合类的关联。
Java 中的快速失败(Fast-fail)和安全失败(Safe-fail)是两种异常处理机制,它们在处理程序运行过程中出现的错误或异常时有所不同。
2024-07-25 22:12:46
903
原创 Java中volatile特性和作用
变量的读写有内存屏障(memory barriers)的保护,确保了可见性和指令重排的限制,但它并不保证复合操作的原子性。关键字是 Java 中用于处理多线程内存可见性问题的一种机制,但它有局限性,不能替代锁机制来处理更复杂的同步问题。变量可以提供线程安全的基本保证,但它不能替代锁(synchronized)的更复杂的同步需求。是 Java 中的一个关键字,用于声明一个变量在多线程环境中的内存语义。变量的值时,新值对其他线程立即可见。不能保证对一个复合操作的原子性,也不能保证多个变量的原子性。
2024-07-21 21:30:38
385
原创 面试题:ConcurrentHashMap的put方法执行过程,执行逻辑是什么?ConcurrentHashMap中的Node节点是什么?(jdk1.8)
如果节点已经存在,并且它的哈希值、键值与要插入的键值相匹配,那么直接返回旧值。扩容过程中,旧的哈希表将被复制到一个新的更大的哈希表中,同时新的键值对也会被插入到新的哈希表中。:首先,使用键(key)的哈希值计算出在哈希表中的索引位置,然后尝试定位到对应的 Node 节点。关键字修饰,以确保在多线程环境下对该字段的修改能够立即对其他线程可见,从而保证内存的可见性。的基本存储单元,它通过继承和字段设计,实现了线程安全的键值对存储和哈希表的高效操作。方法返回与新插入键关联的旧值,如果之前没有这个键的值,则返回。
2024-07-21 21:25:56
824
原创 面试题:为什么说HashMap是线程不安全的?有什么解决方法?
如果线程 A 首先执行,它将键 1 与 “ValueA” 关联。然后,线程 B 执行并尝试将相同的键 1 与 “ValueB” 关联。当 HashMap 需要扩容时,它会创建一个新的内部数组并重新分配现有的键值对。线程尝试读取该值,它可能会得到 “Updated” 或 “Initial”,这取决于线程的执行顺序和 JVM 的内存模型。如果多个线程尝试填充这个 HashMap 并触发扩容,可能会导致键值对的丢失或不正确的映射。当迭代 HashMap 时,如果其他线程修改了 HashMap,迭代器可能会抛出。
2024-07-20 21:13:32
904
原创 面试题:Java中堆内存和栈内存的区别,缓存数据是把数据放到哪里
在Java中,堆内存(Heap)和栈内存(Stack)是两种不同类型的内存区域。它们各自扮演着不同的角色,并具有不同的特性。
2024-07-20 20:53:01
1187
原创 HttpHeaders类详解,这一篇就够了
在Java中,`HttpHeaders` 是一个用于表示HTTP请求或响应头的类,它属于 `java.net.http` 包,从Java 11开始引入。这个类提供了一种方便的方式来操作HTTP消息头,包括添加、删除和获取头字段的值。
2024-07-20 17:06:21
2618
原创 面试题 HashMap中key的存储索引是怎么计算的
为了减少哈希冲突并使哈希值分布更均匀,JDK 1.8对哈希值进行了一些额外处理,即通过一个位运算将高位的哈希值混合到低位。哈希值计算出来之后,接下来需要将哈希值映射到数组的索引位置。通过上述步骤和代码,我们可以看到HashMap在JDK 1.8中是如何计算键的索引值的。的结果相当于取哈希值的低几位,这样可以确保索引值在0到n-1之间。假设数组的长度是2的幂(HashMap的容量总是2的幂),则。操作是按位与运算,它能确保计算出来的索引值在数组的范围内。的二进制表示将是全1,比如容量为16时,
2024-07-17 20:37:37
339
1
原创 HashMap默认加载因子是多少?为什么要设置成这个值?
加载因子的值越高,哈希表的填充程度越大,意味着哈希表的性能可能会降低,因为更多的哈希冲突可能导致查找、插入和删除操作的效率降低。这意味着,当哈希表的实际存储的键值对数量达到其容量的75%时,会触发扩容操作。扩容操作会创建一个新的哈希表,其容量通常是原始容量的两倍,并将原始哈希表中的所有键值对重新散列到新的哈希表中。例如,如果加载因子设置为0.75,而哈希表的容量为100,则当哈希表中的元素数量达到75时,就会进行Rehash。加载因子越小,哈希表的容量越大,元素的分布就越稀疏,哈希冲突的可能性就越小。
2024-07-17 20:24:12
592
原创 vue简答题
指令主要包括内置命令和自定义命令,内置命令指的是vue中自带的命令,而自定义命令指的是有用户自己定义的指令。router.push():push()方法会向历史记录中添加一个新的记录,以编程方式导航到一个新的URL,当用户单机浏览器后退按钮时,会回到之前的URL。当需要频繁切换某个元素的显示或隐藏属性的时候,使用v-show会更加节省性能上的开销,如果只需要切换一次的时候,使用v-if更合理。私有自定义指令指的是在组件内部定义的指令,私有自定义指令指的是在组件内部定义,在定义的组件内部使用的指令。
2024-05-29 00:19:43
456
原创 vue期末复习选择题5
1. 有如下组件代码: <template> <input type="text" v-model.number="count"> <p>{{count}}乘以2的值为:{{plus}}</p></template><script setup> import { ref,computed} from 'vue' const count = ref(1) const plus =____
2024-05-24 22:36:53
739
原创 vue期末复习选择题4
这个指令用于设置元素的文本内容,它会将指定的数据作为纯文本插入到元素中。它不会实现双向数据绑定,因为它只能将数据从组件实例渲染到 DOM,而不能反向将用户输入的数据同步到组件实例中。等表单元素上,实现用户输入数据的同步更新到 Vue 实例中,并且将 Vue 实例中的数据变化同步更新到表单元素中。:这是 Vue 中用于插值的语法,用于将数据输出到文本内容中。:指令用于将数据作为 HTML 插入到元素中,但它并不适用于绑定元素的。符号通常用于绑定事件处理程序,而不是用于绑定元素的属性。
2024-05-24 22:36:13
1009
原创 vue期末复习选择题3
河南科技大学</p>B.<p @click="show">河南科技大学</p>C.<p v-on:click="show">河南科技大学</p>D.<p v-on:mouseenter="show">河南科技大学</p>NOTE]事件名应该是,而不是。Vue中使用或来绑定事件,然后接着事件名即可,不需要加。A.<p v-text="msg+'你好'"></p>B.C.D.<p>{{msg+"你好"}}
2024-05-24 22:35:01
1252
4
原创 vue复习选择题2
1. 下面哪一个方法可以实现判断元素的class属性是否含有pp样式? (A)A. hasClass(“pp”)B. is(“pp”)C. attr(“class”,“pp”)D. toggleClass(“pp”)[!NOTE]当涉及到在 jQuery 中判断元素的类属性时,下面是各个选项的作用:A. hasClass("pp"): 这个方法用于检查匹配的元素集合中的每个元素是否具有指定的类名。如果其中至少一个元素含有指定的类名,则返回 true;否则返回 false。在这种情况下,h
2024-05-24 22:34:10
618
原创 vue期末复习选择题1
1. 下面哪一项描述是错误的?(B)A.$("ul li:gt(5):not(:last)")选取ul标记里面索引值大于5且不是最后一个的li元素B.$("div").find("span")选取div元素的子元素spanC.$("div.showmore > a")选取class属性值为showmore的div元素的子元素aD. $("ul li").filter(":contains('佳能'),:contains('尼康'),:contains('奥林巴斯')")选取文本包含佳能或尼康
2024-05-24 22:33:08
1026
原创 Dubbo简介及基本作用
Dubbo 是一个高性能、轻量级的开源Java RPC框架。它提供了一套完整的服务治理方案,包括服务的提供、服务的发现、负载均衡、流量调度、服务监控等功能。Dubbo主要用于构建高效的微服务架构,主要面向企业中大型的分布式系统。
2024-04-03 08:00:00
399
原创 MySQL、Redis 和 Zookeeper 实现分布式锁方法及优缺点
MySQL、Redis 和 Zookeeper 都可以用来实现分布式锁,每种技术都有其特定的实现方法以及各自的优缺点。
2024-04-02 20:27:06
1442
原创 CAP定理之一致性、可用性和分区容错性
在CAP定理中,强一致性意味着任何时刻,所有的数据副本都必须是一样的。换句话说,如果系统需要保证分区容错性(而现实世界中的分布式系统通常必须要保证),那么系统必须在一致性和可用性之间做出权衡。:在分区发生时,系统仍然会响应请求,但不能保证数据的即时一致性,允许在不同节点上出现临时的数据副本不一致的情况。:在分区发生时,系统可能拒绝或延迟响应请求,以保证数据的一致性,直到网络分区问题解决。在实际应用中,根据具体场景的需求,开发者会选择不同的方案来平衡一致性和可用性。
2024-04-02 20:20:41
559
原创 分布式简介
分布式系统(Distributed System)是由一组相互独立的计算机通过网络连接和协作组成的系统。这些计算机共同工作,对于用户来说,它们就像是单个一致的系统。分布式系统的设计使得计算资源可以被共享,工作可以并行处理,从而提高效率和可靠性。
2024-03-21 22:12:09
825
原创 Java实战开发之springboot3整合swagger基本设置
创建一个返回值为OpenAPI的方法并返回一个新创建的OpenAPI对象。.contact():设置作者基本信息如姓名邮箱链接地址等。上一篇讲到了如何配置以及导入依赖,需要的小伙伴可以看看。现在讲讲springboot3中如何设置文档的基本信息。.description():设置文档综述。添加@Configuration注解。创建一个swagger信息配置类。.title():设置文档标题。.version():设置版本。
2024-03-21 21:29:28
585
原创 Java实战开发之swagger配置及访问
Swagger 是一个流行的开源框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。它可以让开发者和用户更方便地理解和使用 API。Swagger 通过定义 RESTful API 的规范(使用 YAML 或 JSON 格式)来实现这些功能。这些规范称为 OpenAPI 规范(之前称为 Swagger 规范)。Swagger 的主要特点包括:自动生成 API 文档:通过分析代码中的注解,Swagger 自动生成清晰、易读的 API 文档,包括 API 的路径、参数、响应等详细信息。
2024-03-21 21:02:44
1639
原创 Java实战开发之Apache HttpClient
HttpClient允许Java应用程序与HTTP服务器进行交互,支持执行GET、POST、PUT、DELETE等各种HTTP方法,处理cookies、HTTP状态管理、重定向、认证等复杂特性,并且可以自定义请求和响应头信息,设置超时时间,以及处理各种不同类型的HTTP实体内容。功能丰富:提供了全面的HTTP协议支持,包括HTTP/1.0、HTTP/1.1以及部分HTTP/2特性,能够处理HTTPS(SSL/TLS)连接,支持代理服务器和隧道。
2024-03-20 15:18:17
729
原创 Java项目开发之fastjson详解
它主要用于 Java 对象与 JSON 数据格式之间的转换,提供了简单易用的 API 来实现序列化(Java 对象转 JSON 字符串)和反序列化(JSON 字符串转 Java 对象)操作。高性能:Fastjson 在处理速度和内存消耗方面表现优异,相较于其他 JSON 库如 Gson 和 Jackson,Fastjson 在许多场景下提供了更快的处理速度。易用性:Fastjson 提供了简洁的 API,方便开发者快速实现 JSON 与 Java 对象之间的转换。
2024-03-20 13:07:39
518
原创 Cookie和JWT的区别
Cookies是一种更传统的技术,通常用于跟踪用户的会话状态。它们在客户端存储,具有较长的生命周期,并可以通过HttpOnly标志提高安全性。JWT是一种较新的技术,提供了一种更灵活、紧凑且跨域兼容的身份验证方法。它们在客户端存储,具有较短的生命周期,并通过签名确保安全性。Cookies和JSON Web Tokens(JWT)是两种常用于Web应用程序中管理用户身份验证和会话信息的技术。尽管它们都可以用于跟踪用户身份,但它们在存储位置、结构和安全性方面存在一些关键差异。
2024-03-06 15:04:06
714
原创 跳坑日志之微信小程序开发——真机调试背景颜色不显示问题和页面无法下滑问题
如果你也遇到了在真机环境下background-color属性不显示而开发者工具中这个属性显示的情况,不妨去检查一下你的app.json文件中,renderer属性值是不是为skyline。如果是的话,改成webview就行了。同样的如果你的页面无法下滑,而且你在.json下"设置disableScroll":false 报错(),没错还是这么改也能改过来。
2024-01-11 17:02:39
1151
2
原创 手搓MyBatis框架(原理讲解)
你在学完MyBatis框架后会不会觉得很神奇,为什么我改一个配置文件就可以让程序识别和执行不同的sql语句操作数据库?SqlSessionFactoryBuilder,SqlSessionFactory和SqlSession对象到底是怎样执行的?如果你有这些问题看就完事了没错,现在要做的就是手搓mybatis框架底层,简易版还原mybatis框架的执行原理
2023-11-10 17:38:19
294
5
原创 java.io.IOException: Couldn‘t copy [路径1] to [路径2] 问题
项目文件夹\out\artifacts\gfs_war_exploded\WEB-INF\lib。有个同名的文件夹,把文件夹删掉再把jar包复制到路径2就可以了。第一个路径就是jar包所在路径,路径2,往里一找好家伙。复制路径1的jar包到路径2,删除路径2同名文件夹。开始我以为是有其他程序占了我的jar包进程。于是就把这两个路径复制看了下。
2023-10-08 10:37:22
1555
原创 Java中Hashset存储原理底层深挖
HashSet添加元素会调用HashMap的添加方法值作为key,一个空对象作为value而HashMap用hash计算的出元素的hash值并放在对应的数组索引上,如果hash冲突了就在下面挂一个链表。如果找到了同一个元素就把新加入的元素值赋给旧元素。当这条链表长度大于8时 ,这条链表自动转换成红黑树存储
2023-09-20 13:18:41
258
3
原创 vue入门及小项目小便签条
框架:是一个半成品软件,是一套可重用的,通用的,软件基础代码模型。在el命中标签内部及子类的属性中设置data中的值,即可在该标签内部 显示该属性ps:可以进行字符串的拼接。通常用一个变量表示该值,再用一个方法控制 该值,再将该方法绑定一个事件。v-bind为HTML标签绑定属性值,如设置href,css样式等。设置元素的属性eg:src,title,class。根据表达式的真假,切换元素的显示和隐藏。根据表达式的真假,切换元素的显示状态。
2023-09-15 11:18:39
245
原创 Java ArrayList扩容底层原理深挖
今儿咱来看看ArrayList是怎么扩容的,底层是什么样的先说结论1.利用空参构造创建集合时,在底层创建一个默认长度为0的数组。2.添加第一个元素时,底层会创建一个新的长度为10的数组,要是存不下,就创建一个能正好存下的数组。3.这个数组存满时,会扩容1.5倍创建新数组,并把旧数组拷贝到新数组中。4.如果一次添加多个元素,1.5倍还放不下,则新创建的数组的长度以实际为准,并把旧数组拷贝到新数组中。
2023-05-27 13:37:31
1024
原创 Java包装类 这一篇就够了
Java中包装类(Wrapper Class)是Java为了解决八种基本数据类型不是面向对象的问题而设计的一种类,它们可以将基本数据类型转换为相应的对象装类就是把基本数据类型的对象形式。自动拆箱(包装类直接转化为基本数据类型):可以直接 Integer i = new Integer(123) int i2 = i;2.使用静态方法valueOf来创建包装类对象 eg:Integer i = Integer.valueOf(123);3.包装类可以自动装箱 eg:Integer i2 = 10;
2023-05-23 09:59:42
400
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人