
Java面试题
用奋斗点亮幸福2024
这个作者很懒,什么都没留下…
展开
-
JVM学习笔记02
三十九、运行时数据区内部数据原创 2024-06-10 14:02:34 · 176 阅读 · 0 评论 -
Java大厂面试题第2季
高频最多的常见笔试面试题目。原创 2024-05-31 11:29:59 · 486 阅读 · 0 评论 -
Git学习笔记01
分布式版本控制工具软件git,工具软件就是实现指定功能的应用软件git用于管理软件开发项目中的源代码文件1、学习方式图形演示 + 操作2、常用功能仓库管理、文件管理、分支管理、标签管理、远程操作3、进阶功能使用开发工具来集成Git软件和访问GitHub,Gitee这样的第三方代码托管平台4、功能指令。原创 2023-11-26 15:35:37 · 426 阅读 · 0 评论 -
Java面试题
背景:在分布式系统中是如何处理高并发的。由于在高并发的环境下,来不及同步处理用户发送的请求,则会导致请求发生阻塞。比如说,大量的insert,update之类的请求同时到达数据库MYSQL,直接导致无数的行锁表锁,甚至会导致请求堆积很多。从而触发 too many connections 错误。使用消息队列可以解决【异步通信】1、异步2、并行3、排队消息队列的弊端;消息的不确定性:延迟队列,轮询技术来解决该问题即可!原创 2023-11-10 08:36:06 · 285 阅读 · 0 评论 -
Java使用XWPFTemplate将word填充数据的代码
【代码】Java使用XWPFTemplate将word填充数据的代码。原创 2023-08-31 10:24:20 · 3416 阅读 · 0 评论 -
@MapperScan的作用
MapperScan是MyBatis框架提供的注解,用于指定扫描Mapper接口的位置,将其自动装配到Spring容器中,方便调用Mapper接口实现数据访问。使用@MapperScan注解时,我们可以指定Mapper接口所在的包名或者类名作为参数,也可以使用basePackages和value两个属性来指定多个包名。此外,@MapperScan还支持使用annotationClass属性指定Mapper注解的类类型,这样只有被指定注解的Mapper接口才会被扫描并注册到Spring容器中。原创 2023-08-28 08:53:58 · 963 阅读 · 0 评论 -
Java反射面试题
Java反射是指在程序运行时,动态获取类的信息并调用类的方法或者操作类的属性。Java反射可以让程序在运行时动态地生成对象、调用方法、操作属性,提高程序的灵活性和扩展性。使用Class类的newInstance()方法可以动态生成对象,也可以使用Constructor类的newInstance()方法动态生成对象。可以使用Field类的get()方法动态获取属性的值,也可以使用set()方法动态设置属性的值。可以使用Method类的invoke()方法动态调用方法,传入方法的名称和参数列表即可。原创 2023-08-24 09:10:59 · 161 阅读 · 0 评论 -
Java反射的动态性,介绍一下
动态调用方法:反射可以动态地获取类的方法,并在程序运行时调用这些方法。Java反射机制是指在程序运行时,动态地获取类的信息并且操作类的属性、方法、构造器等。运行时获取类信息:反射提供了获取类信息的方法,包括类名、父类、接口、字段、方法、构造器等,可以在程序运行时动态获取。动态获取类的注解信息:反射可以获取类、方法、字段等的注解信息,并在程序运行时动态地使用这些注解信息。动态访问和修改类的字段:反射可以获取类的字段,并在程序运行时动态访问、修改类的字段。原创 2023-08-24 09:07:36 · 238 阅读 · 0 评论 -
SpringBoot面试题
Spring Boot是基于Spring框架的,但它与Spring框架有很大的不同。在整个启动流程中,Spring Boot的自动装配机制起着至关重要的作用,通过自动配置Beans,实现了许多常用的组件(如数据库、Web、缓存等)的自动配置和集成,大大简化了应用程序的开发和部署。Spring Boot是一种基于Spring框架的快速应用开发框架,它通过自动配置和约定大于配置的方式,使开发者可以快速搭建Spring应用,并集成第三方组件和库,降低开发难度和提高开发效率。Spring Boot的优点是什么?原创 2023-08-23 10:04:27 · 144 阅读 · 0 评论 -
线程池面试题
线程池中的任务队列有哪些类型?线程池的监控和调优:线程池需要监控线程池的运行情况,例如线程池中线程的数量,任务队列中任务的数量等。线程的分配和回收:线程池需要管理线程的状态,例如线程是否空闲、是否正在执行任务等。任务队列的管理:线程池需要管理任务队列的大小和任务队列中的任务。线程池的创建和销毁:线程池的创建需要设置线程池的大小、线程池的类型、任务队列的大小等参数,销毁线程池需要停止所有线程并清空任务队列。异常处理:线程池需要捕获并处理线程池中线程执行任务时可能出现的异常,例如任务抛出异常、线程中断等。原创 2023-08-23 10:00:39 · 96 阅读 · 0 评论 -
HashMap面试题
当哈希表中的元素数量超过了负载因子(默认为0.75)与桶的数量的乘积时,哈希表会自动增加桶的数量,以保证哈希表的性能。HashMap的主要优点是可以实现快速的插入、查找、删除操作,并且可以通过调整负载因子和桶的数量来控制HashMap的性能。对于原数组中的每个位置,如果有多个元素,会形成一个链表或者红黑树,这时会按照顺序遍历链表或者红黑树中的元素,然后重新计算hash值,再将其插入到新数组中的对应位置。另外,由于哈希表的实现方式,HashMap的迭代顺序不一定是元素插入顺序。最后将原数组的引用改为新数组。原创 2023-08-23 09:57:20 · 73 阅读 · 0 评论 -
Java面试题
有序集合类型(sorted set):是集合的一种特殊类型,集合中的元素可以排序。集合类型(set):是一个无序的集合,集合中的元素是唯一的,可以进行求交集、并集、差集等操作。数据缓存:使用缓存可以减少数据库的访问次数,提高查询效率。列表类型(list):是一个列表,可以在列表的两端进行Push和Pop操作,可以简单地理解为Redis中的数组。硬件优化:通过升级硬件(如增加内存、CPU等),可以提高MySQL数据库的处理能力。数据库设计:合理的数据库设计可以减少查询时需要访问的数据量,提高查询效率。原创 2023-08-23 09:53:31 · 81 阅读 · 0 评论 -
Redisi缓存的击穿、穿透、雪崩,介绍一下
缓存穿透是指在高并发场景下,请求的 key 在缓存和数据库中都没有对应的数据,导致大量请求直接落到数据库上,导致数据库瞬间压力过大,甚至宕机。或者设置空值缓存,将请求不存在的 key 在缓存中也做出对应的响应,避免访问数据库。缓存击穿是指在高并发场景下,缓存中的某个 key 失效,此时大量请求同时涌入数据库查询该 key 的数据,导致数据库瞬间压力过大,甚至宕机。缓存雪崩是指在某一时刻,缓存中大量的 key 同时失效,导致大量的请求同时涌入数据库,导致数据库瞬间压力过大,甚至宕机。原创 2023-08-23 09:47:59 · 848 阅读 · 0 评论 -
为什么要使用IOC
在Java应用程序中,使用IOC的主要目的是将程序的依赖关系从代码中解耦,使得代码更加灵活,易于扩展和修改。提高代码的可测试性:IOC可以帮助我们将依赖关系抽象化,从而使得我们可以在测试时轻松地将这些依赖替换成模拟对象,从而使得测试更加容易。减少代码中的硬编码:通过将依赖关系放在外部容器中管理,可以避免在代码中硬编码依赖,从而使代码更加灵活和易于扩展。降低代码的耦合度:通过使用IOC,我们可以将依赖关系解耦,从而使得代码更加模块化和灵活,降低代码的耦合度。原创 2023-08-23 09:45:58 · 736 阅读 · 0 评论 -
乐观锁和悲观锁,介绍一下
乐观锁:假设并发环境下不会发生并发冲突,所以在每次操作共享资源前不会加锁,而是在更新数据的时候先检查该数据是否被其他线程修改过,如果没有则更新成功,如果有则表示数据已过期,需要重新获取后再更新。乐观锁机制不会影响程序的性能,但是如果并发冲突较多,则需要多次重试,会引起额外的开销。悲观锁机制可以确保并发操作的安全性,但是加锁和释放锁的过程会带来额外的开销,会影响程序的性能。总的来说,悲观锁是一种悲观的认为并发操作有可能会发生冲突的锁机制,而乐观锁则是一种乐观的认为并发操作不会发生冲突的锁机制。原创 2023-08-23 09:44:02 · 65 阅读 · 0 评论 -
@Autowired 和 @Resource 有什么区别?
是基于名称(byName)或类型(byType)进行自动装配的,即它可以按照Bean的名称进行自动装配,也可以按照类型进行自动装配。如果同时指定了名称和类型,那么名称优先级更高。是JDK提供的注解,不需要使用其他Spring注解一起使用。使用时可以标注在类的字段、setter方法上,也可以标注在类的构造函数上。是基于类型(byType)进行自动装配的,即Spring会在容器中寻找与指定类型相同的Bean,并将其注入到目标对象中。则更灵活,可以根据名称或类型进行自动装配。更常用,因为它更简洁、更直观,而。原创 2023-08-23 09:39:38 · 88 阅读 · 0 评论 -
JVM学习笔记01
JVM系列之1:内存与垃圾回收篇JVM系列之2:字节码与类的加载篇JVM系列之3:性能监控与调优篇JVM系列之4:大厂面试题作为Java工程师的你曾被JVM伤害过吗?你是否也遇到过这些问题?①、运行着的线上系统突然卡死,系统无法访问,甚至直接OOM!②、想解决线上JVM GC问题,但却无从下手。③、新项目上线,对各种JVM参数设置一脸茫然,直接默认吧,然后就JJ了。原创 2023-04-07 00:50:17 · 235 阅读 · 0 评论 -
JavaSE面试题:类初始化和实例初始化等
类初始化过程1、一个类要创建实例需要先加载并初始化该类 main方法所在的类需要先加载和初始化2、一个子类要初始化需要先初始化父类3、一个类初始化就是执行<clinit>()方法<clinit>()方法由静态类变量显示赋值代码和静态代码块组成类变量显示赋值代码和静态代码块从上到下顺序执行<clinit>()方法只执行一次...原创 2021-05-20 14:30:02 · 185 阅读 · 0 评论 -
算法:快速排序(面试中常考)
package com.atguigu.array.sort;/** * 快速排序 * 通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小, * 则分别对这两部分继续进行排序,直到整个序列有序。 * @author shkstart * 2018-12-17 */public class QuickSort { private static voi...原创 2021-05-20 14:29:16 · 797 阅读 · 0 评论 -
算法:冒泡排序(会写)
package com.atguigu;public class BubbleSortTest { public static void main(String[] args) { int[] arr=new int[]{43,32,76,-98,0,64,33,-21,32,99}; //冒泡排序 for(int i=0;i<arr...原创 2021-05-20 14:28:42 · 77 阅读 · 0 评论 -
算法:二分法查找
package com.atguigu;public class Main { public static void main(String[] args) { //二分法查找 //前提:所查找的数组必须有序 int[] arr=new int[]{-98,-34,2,34,54,66,79,105,210,333}; int...原创 2021-05-20 14:28:12 · 98 阅读 · 0 评论 -
算法:线性查找(重点isFlag标志)
package com.atguigu;public class Main { public static void main(String[] args) { String[] arr=new String[]{"JJ","DD","MM","BB","GG","AA"}; //线性查找 String dest="BB"; ...原创 2021-05-20 14:27:44 · 479 阅读 · 0 评论 -
算法:数组的反转
package com.atguigu;public class Fanzhuan { public static void main(String[] args) { //数组的反转 //方法一 String[] arr=new String[]{"JJ","DD","MM","BB","GG","AA"}; for(int...原创 2021-05-20 14:27:13 · 222 阅读 · 0 评论 -
算法:array1和array2地址值相同,都指向堆空间的唯一的一个数组实体(不是数组的复制)...
package com.atguigu;public class fuzhi { public static void main(String[] args) { int[] array1=new int[]{2,3,5,7,11,13,17,19};//静态初始化 int[] array2; for(int i=0;i<array1...原创 2021-05-20 14:26:31 · 230 阅读 · 0 评论