
Java
只吹45°风
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java-如何将其他地方拉取的jar包导入本地maven环境
公司的一个老旧二开项目,原项目维护方不合作了,提供的项目源码提供给到公司。项目中用到了一些原维护方内部的jar包,导致二开时依赖的这些部分全部报错。2、在maven配置文件中依赖安装的maven。1、将依赖的jar包安装到本地maven。原创 2025-02-19 14:23:52 · 315 阅读 · 0 评论 -
Java-关于final关键字不得不知道的几大特点
为了解决这个问题,就将局部变量复制了一份作为内部类的成员变量,这样当局部变量死亡后,内部类仍可以访问它,实际访问的是局部变量的"copy"。就将局部变量设置为final,对它初始化后,我就不让你再去修改这个变量,就保证了内部类的成员变量和方法的局部变量的一致性。将局部变量复制为内部类的成员变量时,必须保证这两个变量是一样的,也就是如果我们在内部类中修改了成员变量,方法中的局部变量也得跟着改变,怎么解决问题呢?如果final修饰的是类变量,只能在静态初始化块中指定初始值或者声明该类变量时指定初始值。原创 2024-11-11 17:26:41 · 353 阅读 · 0 评论 -
Java-hashCode与equals
对象加入HashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,看该位置是否有值,如果没有、HashSet会假设对象没有重复出现。hashCode() 定义在JDK的Object.java中,Java中的任何类都包含有 hashCode() 函数。如果没有重写hashCode(),则该class的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)散列表存储的是键值对(key-value),它的特点是:能根据“键”快速的检索出对应的“值”。(可以快速找到所需要的对象)原创 2024-11-11 17:21:41 · 197 阅读 · 0 评论 -
Java-为什么使用 Executor 框架比使用应用创建和管理线程好?
2、调用 new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制的创建,线程之间的相互竞争会导致过多占用系统资源而导致系统瘫痪,还有线程之间的频繁交替也会消耗很多系统资源。1、每次执行任务创建线程 new Thread()比较消耗性能,创建一个线程是比较耗时、耗资源的。3、直接使用 new Thread() 启动的线程不利于扩展,比如定时执行、定期执行、1、能复用已存在并空闲的线程从而减少线程对象的创建从而减少了消亡线程的。3、框架中已经有定时、定期、单线程、并发数控制等功能。原创 2024-11-06 10:40:16 · 161 阅读 · 0 评论 -
Java-关于Java是值传递还是引用传递的解读(附代码实例解读)
大家都知道Java是面向对象编程,那么有没有考虑过在传递的过程中,究竟传递的是值,还是值的引用呢?所以,值传递并不会影响原来的实际参数。但是引用传递因为传递的是实际地址,对地址所指向的对象修改时会影响实际对象的。:指在调用函数时将实际参数复制一份传递到函数中,这样如果函数中对值进行修改,并不会影响到实际参数。:指在调用函数时,将实际参数的地址直接传递到函数中,那么在函数中对参数进行修改将会影响到实际参数。但是不管哪种情况,你朋友把你家电视砸了,把门拆了,你还是会有影响的。原创 2024-10-23 10:36:17 · 271 阅读 · 0 评论 -
Java-关于Java的四种引用类型的理解
在使用完成后虽然可以显示userInfo = null来断开强引用,此时ThreadLocal只剩下map->Entry->key这一个弱引用,就会被GC回收,但是其中的User的强引用还在CurrentThread中,而且永远访问不到了,只有当前线程结束才会结束。这种引用就是强引用,只要a还指向A对象,哪怕内存不足(引用计数法,只要有引用指向就不是垃圾),JVM也会抛出oom而不会去回收。如果想中断强引用与对象之间的关系,可以显示的将强引用赋值为null,这样一来,JVM就可以适时的回收对象了。原创 2024-10-18 10:33:04 · 206 阅读 · 0 评论 -
Redis-Redis的两种持久化机制及各自优缺点
Redis 提供两种持久化机制: RDB 和 AOF。原创 2024-10-12 16:35:23 · 470 阅读 · 0 评论 -
Mybatis-为什么使用Mybatis,它存在哪些优点和缺点?
基于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL单独写,解除SQL与程序代码的耦合,便于统⼀管理原创 2024-09-24 10:45:56 · 812 阅读 · 0 评论 -
Redis-Redis和Mysql如何保证数据⼀致(延时双删)
我们在使用Redis作为二级缓存时,如何保证缓存数据和数据库数据的一致性呢?先更新Mysql,再更新Redis,当然如果更新Redis失败,可能仍然不⼀致先删除Redis缓存数据,再更新Mysql,再次查询的时候在将数据添加到缓存中,这种方案能解决1方案的问题,但是在高并发下性能较低,而且仍然会出现数据不一致的问题,比如线程1删除了 Redis缓存数据,正在更新Mysql,此时另外⼀个查询再查询,那么就会把Mysql中老数据又查到 Redis中。原创 2024-09-24 10:44:20 · 516 阅读 · 0 评论 -
Redis-Redis的五种数据结构及使用场景
Redis的数据结构有:原创 2024-09-20 11:17:24 · 474 阅读 · 0 评论 -
Java-死锁产生的几个条件以及如何避免死锁?
这是造成死锁必须要达到的4个条件,如果要避免死锁,只需要不满足其中某⼀个条件即可。而其中前3个条件是作为锁要符合的条件,所以要避免死锁就需要打破第4个条件,不出现循环等待锁的关系。3、查看正在锁的事务。4、查看等待锁的事务。原创 2024-09-20 11:04:34 · 382 阅读 · 0 评论 -
Java-ArrayList和LinkedList区别
注:1,2两点可以结合来看,ArrayList之所以查询更快就是因为底层实现逻辑是数组,同样的,LinkedList之所以更适合增删也是因为其底层实现是基于链表,可以通过修改指针指向来快速的完成新增和删除。原创 2024-09-18 11:31:13 · 543 阅读 · 0 评论 -
Java-为什么用线程池?解释下线程池参数?
任务拒绝策略,有两种情况,第一种是当我们调用shutdown等方法关闭线程池后,这时候即使线程池内部还有没执行完的任务正在执行,但是由于线程池已经关闭,我们再继续想线程池提交任务就会遭到拒绝。代表的是最大线程数,它与核心线程数相对应,表示最大允许被创建的线程数,比如当前任务较多,将核心线程数都用完了,还无法满足需求时,此时就会创建新的线程,但是线程池内线程总数不会超过最大线程数。代表核心线程数,也就是正常情况下创建工作的线程数,这些线程创建后并不会 消除,而是一种常驻线程。3、提高线程的可管理性;原创 2024-09-14 10:37:14 · 371 阅读 · 0 评论 -
Java-乐观锁和悲观锁的理解及实现方式
2、java 中的Compare and Swap 即 CAS ,当多个线程尝试使用 CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程 并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。当对一个共享变量执行操作时,我们可以使用循环 CAS 的方式来保证原子操作,但是对多个共享变量操作时,循环 CAS 就无法保证操作的原子性,这个时候就 可以用锁。原创 2024-09-13 10:30:13 · 611 阅读 · 0 评论 -
Spring-BeanFactory和ApplicationContext的区别
ApplicationContext,它是在容器启动时,一次性创建了所有的Bean。ApplicationContext启动后预载入所有的单实例Bean,通过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建好了。BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册。原创 2024-09-12 09:57:09 · 253 阅读 · 0 评论 -
Java-sleep()、wait()、join()、yield()的区别
关于线程,作为八股文面试中必问点,我们需要充分了解sleep()、wait()、join()以及yield()的区别。在正式开始之前先让我们了解两个概念:锁池和等待池所有需要竞争同步锁的线程都会放在锁池当中,比如当前对象的锁已经被其中一个线程得到,则其他线程需要在这个锁池进行等待,当前面的线程释放同步锁后锁池中的线程去竞争同步锁,当某个线程得到后会进入就绪队列进行等待cpu资源分配。当我们调用wait()方法后,线程会放到等待池当中,等待池的线程是不会去竞争同步锁。原创 2024-09-11 16:55:47 · 472 阅读 · 0 评论 -
Java-详解线程Thread生命周期及线程五种的状态
运行的线程执行wait方法,该线程会释放占用的所有资源,JVM会把该线程放入“等待池”中。:运行的线程执行sleep或join方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入“锁池”中。1.新建状态(New):新创建了一个线程对象。原创 2024-09-11 16:44:42 · 360 阅读 · 0 评论 -
Java-并发编程及Volatile关键字详解
原子性是拒绝多线程操作的,不论是单核还是多核,对于原子性的量,同一时刻只允许一个线程对其进行操作,执行期间不会被线程调度器打断的操作,都可以认为是原子性操作。线程A读取i的值,在缓存区进行+1操作,还未刷新到主存;现在时间片分配给A,A将i=2刷新到主存,线程B中的i副本重新从主存读取,但是并不会影响原来i+1之后的结果,最后B将i计算的结果2刷新到主存;(线程A修改后将其同步到主存,线程B、C本地内存中的变量失效,此时B、C去主存获取后在线程本地内存并发进行操作,然后同步到主存,此时就会有问题。原创 2024-09-10 16:02:19 · 543 阅读 · 0 评论 -
Java-父子类的类加载顺序
我们都知道,在类加载的时候,会先加载静态变量和静态的代码块,接下来才是动态变量和构造方法。那么在涉及到父子类的情况下,也是一样的,区别就在于多了父子类继承这一层关系,具体的加载顺序如下:父子类继承1、先加载父类静态(静态变量和静态代码块),具体加载顺序就是代码中的静态变量和静态代码块的书写顺序2、加载子类的静态(静态变量和静态代码块)原创 2024-09-04 13:50:15 · 394 阅读 · 0 评论 -
Java-BeanFactory与FactoryBean的区别
注意:IOC创建bean和管理生命周期是在使用IOC容器的时候,new Student()这种不由IOC容器创建。:用来创建bean实例并管理bean的生命周期。**依赖注入:**也就是常说的DI,bean对象不再维护依赖关系的获取,而是由IOC容器进行注入,通过构造函数、方法参数和直接在对象内部设置属性的方式,由IOC容器进行注入它们所依赖的对象。**控制反转:**其实就是ioc,控制反转其实是一种设计原则,原来是由程序员来控制对象的创建和生命周期,现在将这种控制权教给IOC容器,所以叫做控制反转。原创 2024-09-03 10:28:01 · 502 阅读 · 0 评论 -
Java-Java反射详解(获取类、获取构造器、访问方法method、访问属性)
Java反射,其本质是对类的内省,即在运行时分析类的信息,包括类名、包名、父类、接口、字段、方法等。这一特性使得Java程序能够在运行时动态加载类、实例化对象、调用方法、读写属性,从而实现高度的灵活性和扩展性。对于希望深入了解Java内部机制,或是寻求在框架搭建、单元测试、代码生成等场景下提升开发效率的开发者而言,掌握反射机制无疑是必经之路。获取类class、获取构造器并创建实例、获取方法、访问属性。原创 2024-07-17 10:36:49 · 320 阅读 · 0 评论 -
Java-Redis缓存穿透、缓存击穿及缓存雪崩(配解决方案及代码示例)
在现代高并发的互联网应用中,缓存技术已成为提升系统响应速度与减轻后端数据库压力的关键手段。Redis,以其卓越的性能和丰富的数据结构,成为众多开发者构建缓存层的首选。然而,随着业务复杂度的增加,Redis缓存层也可能遭遇“缓存穿透”、“缓存击穿”以及“缓存雪崩”等现象,这些情况不仅影响系统的稳定性和响应时间,还可能直接导致服务的不可用。本文旨在深入剖析这三种缓存异常现象,探讨其背后的原理,并提出有效的预防策略。原创 2024-07-12 14:58:05 · 1210 阅读 · 0 评论 -
Java-SpringBoot启动报端口被占用,如何找到占用端口的进程并杀掉
当我们本地启动多个项目,可能会出现端口被占用的情况,当然有时候可能idea窗口关闭,但是进程并没有kill掉,导致再次启动项目时也会报端口被占用的错误。输入命令 netstat -ano | findstr “6023”通常的做法是打开任务管理器,然后kill掉对应的进程。找到PID为36188的java进程并kill掉。原创 2024-07-08 10:57:14 · 343 阅读 · 0 评论 -
Java-快速排序、冒泡排序和堆排序三种排序讲解、对比及总结
快速排序(Quick Sort)效率与复杂度:平均时间复杂度为O(n log n),最好情况也是O(n log n),但在最坏情况下(例如数组已经是有序的)会退化到O(n^2)。空间复杂度主要取决于递归深度,最坏情况下为O(n),但平均情况下较好。特点:采用了分治法的思想,通过一个划分操作将要排序的数组分为两个子数组,使得其中一个子数组的所有数据都比另一个子数组的所有数据要小,然后再递归地对这两个子数组进行快速排序。原创 2024-07-05 10:42:11 · 981 阅读 · 0 评论 -
Java-“程序员的浪漫编程:如何用微信公众号打造专属每日惊喜推送“
在这个快节奏的时代,用技术诠释浪漫,不仅展现了程序员的另一面,也让爱情的表达方式更加多元和有趣。谁说代码冰冷?它同样能编织出温暖人心的日常奇迹。开始你的“浪漫编码”之旅吧,让爱与科技共同绽放,每一天都充满惊喜和期待。原创 2024-07-04 11:22:58 · 1474 阅读 · 0 评论 -
Java-SpringBoot启动报错java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed
这通常意味着在尝试连接到MySQL数据库时,遇到了与SSL证书验证相关的问题。具体来说,数据库服务器要求客户端验证其公钥,但数据库连接配置不允许或不支持这种公钥检索操作。那么只要在数据库连接后面添加参数允许公钥检索就可以了,例如:jdbc:mysql://localhost:3306/test?useSSL=true&allowPublicKeyRetrieval=true原创 2024-07-02 16:55:08 · 554 阅读 · 0 评论 -
Java-用Java来实现最小生成树算法
Java中实现最小生成树(Minimum Spanning Tree, MST)主要有两种经典算法:Prim 算法和 Kruskal 算法。以下是这两种算法的基本思路和简化的Java代码示例。以上代码示例展示了如何在Java中实现Prim算法和Kruskal算法来找到给定图的最小生成树。遍历排序后的边,对于每条边,检查它连接的两个顶点是否已经在最小生成树中形成环。找到当前生成树中的顶点与未加入生成树的顶点之间的最小权重边,将这条边加入到生成树中,并将新顶点加入生成树。将所有的边按照权重从小到大排序。原创 2024-07-01 10:25:03 · 235 阅读 · 0 评论 -
Java-阿里巴巴Java开发手册(嵩山版)
Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,公开到业界后,众多社区开发者踊跃参与,共同打磨完善,系统化地整理成册,当前的版本是嵩山版。现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:五花八门的错误码人为地增加排查问题的难度;数据库的表结构和索引设计缺陷带来的系统架构缺陷或性能风险;工程结构混乱导致后续项目维护艰难;没有鉴权的漏洞代码易被黑客攻击等等。原创 2024-06-28 14:44:55 · 649 阅读 · 2 评论 -
Java-Springboot启动报错Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedde
SpringBoot项目启动报错:打开我们的target目录可以看到,确实没有加载到相应的配置文件。告诉Maven将指定的资源文件从src/main/resources目录复制到最终的打包文件中原创 2024-06-27 17:14:10 · 751 阅读 · 0 评论 -
Java-记一次Springboot版本升级导致的问题
根据相关情况,需要将SpringBoot的版本由原来的2.1.8.RELEASE版本升级至2.3.8.RELEASE。原创 2024-06-27 17:12:34 · 1398 阅读 · 0 评论 -
Java-maven打包报错:Failed to execute goal org.apache.maven.plugins:***There are test failures.
在使用maven命令打包时出现问题:原创 2024-06-26 18:31:27 · 558 阅读 · 0 评论 -
Java-日期返参格式化/postman调用string转换Date异常、日期时间少8小时问题
这种情况往往是因为时区问题,在JsonFormat注解中添加timezone="GMT+8"即可解决。此两种情况都需要在Date类型的属性上添加@Jsonformat注解,并指定pattern格式。2:将数据库查询的日期以特定的格式返回给前端,例如:yyyy-MM-DD HH:mm:ss。1.2 postman接口调用string类型日期使用Date接收异常。1.1 将日期按照指定的格式用Date接收。第二种情况:数据库查询日期返回前端少8小时。1:日期出入参格式问题。原创 2024-05-30 18:49:49 · 488 阅读 · 0 评论 -
Java-注解@JsonProperty、@JsonNaming解决出入参驼峰与下划线相互转换
在我们的实际开发过程中,java实体类通常使用驼峰的命名规则;但是有时候在对接其他三方平台的接口或前端框架因为历史遗留问题,要求使用下划线的命名规则,这时候就涉及到如何让自己的接口出入参满足三方平台或前端的下划线参数要求。在出入参需要转换的字段上@JsonProperty注解。原创 2024-05-29 11:27:49 · 1346 阅读 · 0 评论 -
Java-集合中如何过滤出拥有相同属性的对象并返回
日常开发中需要将某个集合中拥有相同属性的多个对象过滤出来并返回,那么需要如何做呢?原创 2024-05-24 14:05:04 · 485 阅读 · 1 评论 -
Java-两个集合取差集(4种方式)
开发中比较两个集合的不同点,例如需要对于两个集合取差集,下面列举了几种方式。原创 2024-05-21 11:05:53 · 11608 阅读 · 1 评论 -
Java-两个集合取交集(4种方式)
开发难免需要对集合进行操作,例如对两个集合取交集也是常见操作。下面就列举了几种对两个集合取交集的方法。原创 2024-05-20 17:41:15 · 5732 阅读 · 1 评论