
java面试八股文
文章平均质量分 84
acgchan
这个作者很懒,什么都没留下…
展开
-
Java并发编程
【代码】Java并发编程。原创 2024-12-20 09:13:48 · 781 阅读 · 0 评论 -
Java并发编程
Java的每个对象中都有一个锁(monitor,也可以成为监视器) 并且wait(),notify()等方法用于等待对象的锁或者通知其他线程对象的监视器可用。是虚拟机所管理的内存中最大的一块,被所有线程共享的,在虚拟机启动时创建。首先 ,wait()、notify() 方法是针对对象的,调用任意对象的 wait()方法都将导致线程阻塞,阻塞的同时也将释放该对象的锁,相应地,调用任意对象的 notify()方法则将随机解除该对象阻塞的线程,但它需要重新获取该对象的锁,直到获取成功才能往下执行;原创 2024-12-20 09:11:26 · 661 阅读 · 0 评论 -
MySQL的四种事务隔离级别
三、MySQL事务隔离级别。原创 2024-12-20 08:55:11 · 334 阅读 · 0 评论 -
分布式架构的好处 分布式架构优缺点
服务导向式架构(SOA)是集成多个较大组件(一般是应用)的一种机制,它们将整体构成一个彼此协作的套件。一般来说,每个组件会从始至终执行一块完整的业务逻辑,通常包括完成整体大action所需的各种具体任务与功能。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。与微服务处于一个层面的概念是SOA,SOA(Service Oriented Architecture,面向服务的架构)也是一种架构风格,”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。组件大小:大块业务逻辑,粗粒度。原创 2024-12-20 08:17:37 · 1080 阅读 · 0 评论 -
如何解决kafka消息积压问题
Kafka消息积压问题是指生产者发送消息的速度大于消费者处理消息的速度,导致大量未消费的消息堆积在Kafka中。Kafka 消息积压问题的解决思路是多方面的,既要提高消费者的消费能力,也要优化Kafka集群的配置。增加消息保留时间:如果消费者一时无法快速处理积压消息,可以通过增加Kafka的保留时间(log.retention.hours等)来延长消息的保存时间,避免因消息过期而丢失。增加消费者处理旧的积压消息,或者专门部署任务来处理积压的历史消息,同时继续让其他消费者处理实时流入的新消息。原创 2024-12-19 19:01:53 · 995 阅读 · 0 评论 -
Kafka消息积压的解决方案
综上所述,解决Kafka消息积压的问题需要综合考虑多个方面,包括优化Kafka配置、调整消费者消费速度、增加消费者数量、优化生产者发送速度、启用压缩功能、使用持久化存储以及监控和告警等措施。如果生产者发送消息的速度过快,超过了消费者的处理速度,就可能导致消息积压。这样即使系统重启,也不会丢失已经存储的消息,从而减少消息积压的情况。增加消费者的数量可以提高处理消息的速度,从而减少消息积压的情况。优化Kafka的配置可以提高其吞吐量和可靠性,从而减少消息积压的情况。原创 2024-12-19 18:59:15 · 764 阅读 · 0 评论 -
项目生产环境常见问题
【代码】项目生产环境常见问题。原创 2024-12-19 18:53:30 · 491 阅读 · 0 评论 -
数据结构与算法
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。这种模式在整个应用程序的生命周期内,对于某些需要共享资源或者全局唯一的对象(如数据库连接池、配置管理器等)非常有用。工厂设计模式是一种创建型设计模式,它的核心思想是将对象的创建和使用分离。把对象创建的逻辑封装在工厂类中,这样客户端代码(使用对象的代码)不需要知道具体对象是如何创建的,只需要从工厂类获取创建好的对象即可,降低了客户端代码与具体对象创建过程的耦合度,提高了代码的可维护性和可扩展性。原创 2024-12-19 18:53:19 · 752 阅读 · 0 评论 -
线程池面试题
线程池是使用池化技术管理和使用线程的一种机制。提前准备一些资源,在需要时可以重复使用使用提前准备的资源。内存池:预先申请内存,在 使用时提升申请内存的速度,减少内存碎片。数据库连接池:预先申请数据库连接,提升申请连接的速度,降低系统开销。原创 2024-12-19 18:52:17 · 844 阅读 · 0 评论 -
Java-Redis
【代码】Java-Redis。原创 2024-12-19 08:54:05 · 660 阅读 · 0 评论 -
Java面试-Mysql
【代码】Java面试-Mysql。原创 2024-12-19 08:45:27 · 798 阅读 · 0 评论 -
Java开发框架
【代码】Java开发框架。原创 2024-12-19 08:36:43 · 550 阅读 · 0 评论 -
Java并发
【代码】Java并发。原创 2024-12-19 08:27:25 · 692 阅读 · 0 评论 -
Java基础
【代码】Java基础。原创 2024-12-19 08:21:56 · 706 阅读 · 0 评论 -
第八章-Linux
命令可以查看当前系统中所有已经使用的端口情况,该命令会列出所有正在监听的TCP和UDP端口以及对应的进程信息.的最近1000行日志.命令即可查看日志文件。原创 2024-12-18 23:29:49 · 311 阅读 · 0 评论 -
第五章-Redis
Redis简介:Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它支持多种数据类型,具有高性能、高并发等特点,常用于解决分布式系统中的数据存储和缓存相关问题,并且提供了丰富的命令来操作数据。数据类型字符串(String):最基本的数据类型,可以存储字符串、整数或者浮点数。例如,可以用它存储用户的登录令牌、计数器的值等。操作命令有SET(设置值)、GET(获取值)、INCR(自增)、DECR(自减)等。原创 2024-12-18 23:26:49 · 683 阅读 · 0 评论 -
第四章-MySQL
【代码】第四章-MySQL。原创 2024-12-18 23:23:24 · 846 阅读 · 0 评论 -
第三章-java框架篇
生命周期实例化(Instantiation):通过反射机制创建Bean的实例。属性赋值(Populate):将配置文件或者注解中定义的属性值注入到Bean实例中。初始化(Initialization):如果Bean实现了接口,会调用方法进行初始化;也可以通过注解来定义初始化方法。使用(In - Use):Bean在应用程序中被使用,提供相应的服务。销毁(Destruction):当容器关闭或者Bean不再需要时,如果Bean实现了接口,会调用destroy方法进行销毁;也可以通过。原创 2024-12-18 23:18:32 · 573 阅读 · 0 评论 -
第二章=Java高级篇
线程池的定义线程池是一种多线程处理形式,它预先创建一定数量的线程,当有任务需要处理时,线程池中的线程可以复用,而不是每次都创建一个新的线程。这样可以减少线程创建和销毁的开销,提高系统的性能和资源利用率。线程池的创建方式Executors工厂类创建:创建一个固定大小的线程池,线程池中的线程数量始终保持不变。如果所有线程都处于忙碌状态,新的任务会在任务队列中等待,直到有线程空闲。:创建一个可缓存的线程池。如果线程池中的线程有空闲的,就会复用空闲线程;如果没有空闲线程,就会创建一个新的线程。原创 2024-12-18 23:13:05 · 807 阅读 · 0 评论 -
如何查找/var目录中大于100M的文件?
查找/var目录中大于100M的文件和它们的数量。如何查找/var目录中大于100M的文件?查找/var目录中大于100M的文件并删除。查找/var目录中大于100M的文件的路径。原创 2024-12-18 11:04:50 · 592 阅读 · 0 评论 -
Linux查询日志
【代码】Linux查询日志。原创 2024-12-18 11:01:24 · 890 阅读 · 0 评论 -
常用的 JVM 性能分析工具
jvisualvm:图形化工具,适用于内存、线程和 GC 分析。JConsole:JVM 内置的性能监控工具。GC日志分析工具:例如 GCViewer 和 GCEasy,帮助分析垃圾回收的性能。YourKit 和 JProfiler:商业化性能分析工具,适用于大型应用程序。Flight Recorder 和 Mission Control:低开销的生产环境监控工具。VisualVM:图形化监控工具,适用于多 JVM 实例的性能监控。这些工具可以帮助开发者监控、分析和优化 Java 应用的性能。原创 2024-12-18 10:08:04 · 800 阅读 · 0 评论 -
【JVM】内存分析工具JConsole/Visual VM
当新生成的对象在Eden区无法正常分配时,会触发Minor GC,并将Eden区仍存活的对象拷贝到Survivor区,当From Survivor区达到年龄阈值的对象超过From或To Survivor空间一半时,会将这部分对象分配到老年代。Full GC:针对年轻代和老年代内存回收。当老年代空间不足(直接进入老年代的新建对象)、YGC对象晋升失败(Survivor对象达到年龄设定值,进入老年代,老年代没有足够空间分配)、YGC晋升到老年代对象平均总大小大于老年代空闲空间时发生Full GC。原创 2024-12-18 09:56:20 · 812 阅读 · 0 评论 -
频繁Full GC是什么原因?怎么解决?
频繁Full GC(垃圾收集)会导致应用程序性能下降、响应时间变长,甚至可能导致应用程序停滞。针对这一问题,本文将给出原因分析和解决方案。原创 2024-12-18 09:48:41 · 837 阅读 · 0 评论 -
GateWay路由规则有哪些?
Spring Cloud GateWay 帮我们内置了很多 Predicates功能,实现了各种路由匹配规则(通过 Header、请求参数等作为条件)匹配到对应的路由。原创 2024-12-18 09:28:22 · 321 阅读 · 0 评论 -
CMD和ENTRYPOINT在Docker中的区别
。原创 2024-12-18 09:03:07 · 320 阅读 · 0 评论 -
K8s面试题
检查节点的网络连接,确保它能正常访问控制平面和其他节点。确保控制平面的关键组件(如 API Server、Controller Manager、Scheduler)正常运行,因为这些组件的问题也可能导致节点状态异常。状态可能是由于多种原因引起的,尤其是在资源过量分配(overcommitment)时,常见的原因包括节点资源(CPU、内存)不足、关键组件失败、磁盘压力等。首先,检查节点的资源使用情况,以确定是否由于资源过度使用导致节点不可用。可以看到节点内存、磁盘等信息状态都是未知的,初步怀疑节点状态已经。原创 2024-12-18 08:55:25 · 553 阅读 · 0 评论 -
13-SpringBoot面试题
Spring Boot支持多套不同环境配置,使得你可以在不同的环境(如开发、测试、生产)中使用不同的配置属性。以下是在Spring Boot中定义多套不同环境配置的常见方法:a) 使用不同的配置文件: Spring Boot默认会加载或文件中的配置属性。你可以创建不同环境的配置文件,命名为application-{环境名}.properties或application-{环境名}.yml,然后在启动应用程序时通过属性来指定要使用的环境。例如,创建和文件,并在中设置或。b) 使用@Profile。原创 2024-12-18 08:44:59 · 724 阅读 · 0 评论 -
12-分布式面试题
一、分布式事务面试题(一)基础概念请解释一下分布式事务的CAP定理。CAP定理指出,在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)这三个属性最多只能同时满足两个。一致性:所有节点在同一时刻的数据完全一致。例如,在一个分布式数据库系统中,用户更新了一条记录后,无论从哪个节点读取该记录,都能获取到最新的值。可用性:系统中的每个非故障节点在合理的时间内返回合理的响应。比如,客户端对系统发起请求,只要系统没原创 2024-12-13 10:08:53 · 598 阅读 · 0 评论 -
11-Redis的高频面试题
一、Redis基础概念请简单介绍一下Redis是什么?Redis有哪些数据结构?请简单描述一下它们的特点和应用场景。Redis和传统数据库(如MySQL)有什么区别?二、Redis持久化相关Redis有哪些持久化方式?请简单介绍一下。如何选择RDB和AOF持久化方式?三、Redis缓存相关请描述一下Redis缓存雪崩、缓存穿透和缓存击穿的概念以及如何解决?在Java中,如何使用Redis作为缓存?(以Spring Boot为例)四、Redis分布式锁相关请解释一下Redis分布式锁的原理。在Java中,如何原创 2024-12-13 09:17:54 · 771 阅读 · 0 评论 -
10-Nacos的常见面试题
一、Nacos基础概念请简单介绍一下Nacos是什么?Nacos的主要功能有哪些?Nacos与其他注册中心(如Eureka)相比,有什么优势?二、服务注册与发现相关在Java中,如何使用Nacos进行服务注册?Nacos服务发现的原理是什么?如何在Nacos中实现服务的负载均衡?三、配置管理相关如何在Java中使用Nacos进行配置管理?Nacos配置的动态更新是如何实现的?请举例说明Nacos配置管理在实际项目中的应用场景。原创 2024-12-13 09:13:21 · 715 阅读 · 0 评论 -
9-分布式系统
Kafka是如何存储消息的?Kafka的日志清理策略有哪些?请详细描述Kafka生产者发送消息的分区策略。生产者如何处理消息发送失败的情况?原创 2024-12-13 09:07:43 · 736 阅读 · 0 评论 -
8-Nginx面试题
在Java微服务架构中,Nginx如何与Java应用服务器(如Tomcat)协同工作?如何在Nginx配置文件中实现负载均衡?请列举一些负载均衡策略并说明它们的特点。当Nginx作为反向代理时,它是如何处理客户端请求并转发到后端服务器的?如何配置Nginx来优化Java Web应用的性能?请描述一下Nginx的工作模式(事件驱动模型)。请简单介绍一下Nginx是什么?Nginx的主要应用场景有哪些?请解释一下Nginx配置文件中的。原创 2024-12-13 09:01:40 · 677 阅读 · 0 评论 -
7-分布式服务之间调用
【代码】7-分布式服务之间调用。原创 2024-12-13 08:58:46 · 704 阅读 · 0 评论 -
6-mysql面试题
请描述一下数据库设计中的范式(Normal Forms),并解释前三范式(1NF、2NF、3NF)的概念。请解释一下JDBC(Java Database Connectivity)是什么,以及它的基本工作流程。请介绍一下MySQL的一些常见存储引擎(如InnoDB和MyISAM)的特点和适用场景。请解释一下MySQL中的存储过程和视图的概念,以及它们的用途。请描述一下MySQL中的事务隔离级别,以及它们之间的区别。请解释一下数据库事务的概念,以及它的ACID特性。如何优化MySQL数据库的查询性能?原创 2024-12-13 08:51:19 · 851 阅读 · 0 评论 -
5-Spring Boot 常见面试题
【代码】5-Spring Boot 常见面试题。原创 2024-12-13 08:47:37 · 805 阅读 · 0 评论 -
4-MyBatis常见面试题
MyBatis提供了一级缓存和二级缓存。一级缓存(SqlSession级别的缓存)是默认开启的,它是基于SqlSession对象的。当在同一个SqlSession中执行相同的SQL语句时,MyBatis会直接从缓存中获取结果,而不会再次发送SQL语句到数据库。例如,在一个SqlSession中先查询一次用户信息,然后再次查询相同用户信息时,第二次查询会直接从缓存中获取数据。但是,当SqlSession执行了插入、更新或删除操作后,会清空一级缓存,因为这些操作可能会导致数据的改变。原创 2024-12-12 22:21:37 · 877 阅读 · 0 评论 -
3-Java Spring常见面试题
控制反转(IoC)传统的程序设计中,对象的创建和对象之间的依赖关系是由代码本身来控制的。而在IoC模式下,对象的创建和依赖关系的管理被反转到容器(如Spring的IoC容器)中。也就是说,对象不再负责自己的创建和依赖关系的维护,而是由容器来负责。例如,在没有IoC的情况下,一个类可能会在自己的代码中直接创建对象来进行数据访问。而在IoC模式下,类不再负责对象的创建,而是由Spring容器来创建,并将其注入到中。依赖注入(DI)DI是实现IoC的一种方式。原创 2024-12-12 22:19:56 · 558 阅读 · 0 评论 -
2-多线程&并发面试题
定义:线程池是一种多线程处理形式,它预先创建了一定数量的线程,这些线程可以被重复使用,用来执行多个任务。线程池管理着线程的生命周期,包括创建、销毁等过程。优点降低资源消耗:线程的创建和销毁是有开销的,包括分配内存、初始化线程等操作。通过线程池预先创建线程,可以避免频繁地创建和销毁线程,从而降低系统资源的消耗。提高响应速度:当有新任务到达时,如果线程池中有空闲线程,就可以立即执行任务,而不需要等待线程创建完成,提高了任务的响应速度。便于管理线程。原创 2024-12-12 22:16:53 · 774 阅读 · 0 评论 -
1-JVM常见面试题
堆(Heap)共享内存区域,用于存储对象实例和数组。内存空间动态分配,对象的生命周期由垃圾回收器控制。例如,使用new关键字创建对象时,对象在堆中分配内存。堆的大小可通过 JVM 参数调整。栈(Java Virtual Machine Stacks)线程私有的,主要用于方法的调用和执行。当方法被调用时,会在栈中创建栈帧,方法执行结束后,栈帧出栈。栈的内存大小在启动时基本确定,若方法调用层次过深或局部变量占用空间过大,可能导致栈溢出。原创 2024-12-12 22:14:03 · 630 阅读 · 0 评论