自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 [java八股文][MySQL面试篇]索引

覆盖索引是指一个索引包含了查询所需的所有列,因此不需要访问表中的数据行就能完成查询。换句话说,查询所需的所有数据都能从索引中直接获取,而不需要进行回表查询。覆盖索引能够显著提高查询性能,因为减少了访问数据页的次数,从而减少了I/O操作。age INT,在这种情况下,idx_name_age_department 是一个覆盖索引,因为它包含了查询所需的所有列:name、age 和 department。查询可以完全在索引层完成,而不需要访问表中的数据行。

2025-06-10 18:02:31 742

原创 [java八股文][MySQL面试篇]SQL基础

如果记录存在,且持有者是同一个线程,则可重入,增加重入次数,执行 UPDATE lock_table SET reentry_count = reentry_count + 1 WHERE lock_name =?假设你有两个表,一个是学生表,另一个是课程表,这两个表之间有一个关系,即一个学生可以选修多门课程,而一门课程也可以被多个学生选修。所有的查询语句都是从FROM开始执行,在执行过程中,每个步骤都会生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入,最后一个步骤产生的虚拟表即为输出结果。

2025-06-04 16:05:29 799

原创 [java八股文][JavaSpring面试篇]SpringCloud

服务熔断是应对微服务雪崩效应的一种链路保护机制,类似股市、保险丝。比如说,微服务之间的数据交互是通过远程调用来完成的。服务A调用服务,服务B调用服务c,某一时间链路上对服务C的调用响应时间过长或者服务C不可用,随着时间的增长,对服务C的调用也越来越多,然后服务C崩溃了,但是链路调用还在,对服务B的调用也在持续增多,然后服务B崩溃,随之A也崩溃,导致雪崩效应。服务熔断是应对雪崩效应的一种微服务链路保护机制。例如在高压电路中,如果某个地方的电压过高,熔断器就会熔断,对电路进行保护。

2025-06-03 10:53:28 1069

原创 [java八股文][JavaSpring面试篇]Mybatis

通过以上步骤,你可以利用原生的MyBatis框架来进行数据库查询操作。请确保配置正确、SQL语句准确并与数据库字段匹配,以确保查询的准确性和高效性。MybatisPlus是一个基于MyBatis的增强工具库,旨在简化开发并提高效率。请注意,在实际应用中,需要进行异常处理以确保资源的正确释放,以及使用 try-with-resources 来简化代码和确保资源的及时关闭。方面表现卓越,尤其适合重视 SQL 可控性的项目。

2025-05-28 10:37:30 1088

原创 [java八股文][JavaSpring面试篇]SpringBoot

SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用 jar 包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器(此处涉及到 JVM 类加载机制与 Spring 的容器知识),并执行类中定义的各种操作。在你的主应用的pom.xml中添加你的starter依赖,然后在application.yml或application.properties中配置你的属性。首先,需要创建一个新的Maven项目。

2025-05-27 16:37:03 1550

原创 [java八股文][JavaSpring面试篇]SpringMVC

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。视图(view): 为用户提供使用界面,与用户直接进行交互。模型(model): 代表一个存取数据的对象或 JAVA POJO(Plain Old Java Object,简单java对象)。

2025-05-26 10:48:46 791

原创 [java八股文][JavaSpring面试篇]Spring

IoC:即控制反转的意思,它是一种创建和获取对象的技术思想,依赖注入(DI)是实现这种技术的一种方式。传统开发过程中,我们需要通过new关键字来创建对象。使用IoC思想开发方式的话,我们不通过new关键字创建对象,而是通过IoC容器来帮我们实例化对象。通过IoC的方式,可以大大降低对象之间的耦合度。AOP:是面向切面编程,能够将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,以减少系统的重复代码,降低模块间的耦合度。

2025-05-23 10:26:14 997

原创 【调优】Java 调优学习笔记之字符串

对于纯 Latin-1 字符串场景,Java 11 的内存占用约为 Java 8 的。(字符存储字节数减半)。在常规 Java 应用中,字符串可能占据堆内存的。若包含非 Latin-1 字符,则仍使用。(每个字符占 2 字节,属于 16 位字符数组)。⚠️ 注意:Java 8 及之前版本统一使用。特性(Java 11 默认开启。以上,因此优化效果显著。

2025-05-22 14:34:13 547

原创 [java八股文][Java虚拟机面试篇]垃圾回收

垃圾回收(Garbage Collection, GC)是自动管理内存的一种机制,它负责自动释放不再被程序引用的对象所占用的内存,这种机制减少了内存泄漏和内存管理错误的可能性。内存不足时:当JVM检测到堆内存不足,无法为新的对象分配内存时,会自动触发垃圾回收。手动请求:虽然垃圾回收是自动的,开发者可以通过调用或建议 JVM 进行垃圾回收。不过这只是一个建议,并不能保证立即执行。JVM参数-Xmx(最大堆大小)、-Xms(初始堆大小)等。对象数量或内存使用达到阈值。

2025-05-20 18:44:48 1653

原创 [java八股文][Java虚拟机面试篇]类初始化和类加载

通过类的全限定名(包名 + 类名),获取到该类的.class文件的二进制字节流,将二进制字节流所代表的静态存储结构,转化为方法区运行时的数据结构,在内存中生成一个代表该类的Java.lang.Class对象,作为方法区这个类的各种数据的访问入口。这些类加载器之间的关系形成了双亲委派模型,其核心思想是当一个类加载器收到类加载的请求时,首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中。:使用类或者创建对象。

2025-05-16 16:24:03 834

原创 [java八股文][Java虚拟机面试篇]内存模型

JVM的内存模型根据JDK8规范,主要分为虚拟机栈、堆、元空间、程序计数器和本地方法栈五个部分。此外,直接内存属于操作系统的本地内存,可以直接操作。程序计数器用于存储当前线程执行的字节码行号,是线程私有的。虚拟机栈和本地方法栈分别用于Java方法和Native方法的执行,可能抛出StackOverflowError和OutOfMemoryError异常。堆是JVM中最大的内存区域,用于存放对象实例,分为新生代和老年代。元空间取代了方法区,用于存储类信息、常量和静态变量。直接内存通过NIO类引入,提高I/O性

2025-05-14 15:45:49 1102

原创 [java八股文][Java并发编程面试篇]场景

例如,线程 1 和线程 2 同时读取了变量的当前值,然后各自将其加 1,最后都将相同的新值写回变量,这就导致了一次加 1 操作的丢失。在上面的示例中,通过一个共享的锁对象lock来控制两个线程的交替执行。在没有任何同步机制的情况下,两个线程并发对同一个整型变量进行 50 次加 1 操作,最终结果可能是 100,也可能小于 100,最坏的结果是 50,也就是最终的结果可能是在 [50, 100]。的修改对所有线程都是可见的,并且保证了上述三个步骤按顺序执行,避免了在单例创建过程中因指令重排序而导致的问题。

2025-05-08 15:59:00 953

原创 [java八股文][Java并发编程面试篇]线程池

线程池是为了减少频繁的创建线程和销毁线程带来的性能损耗,线程池的工作原理如下图:线程池分为核心线程池,线程池的最大容量,还有等待任务的队列,提交一个任务,如果核心线程没有满,就创建一个线程,如果满了,就是会加入等待队列,如果等待队列满了,就会增加线程,如果达到最大线程数量,如果都达到最大线程数量,就会按照一些丢弃的策略进行处理。提交任务 → 核心线程是否已满?├─ 未满 → 创建核心线程执行└─ 已满 → 任务入队├─ 队列未满 → 等待执行└─ 队列已满 → 创建非核心线程。

2025-05-07 20:47:46 1073

原创 [java八股文][Java并发编程面试篇]并发安全

AQS全称为AbstractQueuedSynchronizer,是Java中的一个抽象类。AQS是一个用于构建锁、同步器、协作工具类的工具类(框架)。AQS核心思想是,如果被请求的共享资源空闲,那么就将当前请求资源的线程设置为有效的工作线程,将共享资源设置为锁定状态;如果共享资源被占用,就需要一定的阻塞等待唤醒机制来保证锁分配。这个机制主要用的是CLH队列的变体实现的,将暂时获取不到锁的线程加入到队列中。

2025-05-06 17:05:32 1230

原创 [java八股文][Java并发编程面试篇]多线程

从Java 5开始引入的java.util.concurrent.ExecutorService和相关类提供了线程池的支持,这是一种更高效的线程管理方式,避免了频繁创建和销毁线程的开销。这是最直接的一种方式,用户自定义类继承java.lang.Thread类,重写其run()方法,run()方法中定义了线程执行的具体任务。Java 底层会调用 pthread_create 来创建线程,所以本质上 java 程序创建的线程,就是和操作系统线程是一样的,是 1 对 1 的线程模型。)无法通过中断直接响应。

2025-04-29 10:47:57 1260

原创 [java八股文][Java集合面试篇]Set

2025-04-28 10:24:04 267

原创 [java八股文][Java集合面试篇]Map

在 JDK 1.7 版本之前, HashMap 数据结构是数组和链表,HashMap通过哈希算法将元素的键(Key)映射到数组中的槽位(Bucket)。如果多个键映射到同一个槽位,它们会以链表的形式存储在同一个槽位上,因为链表的查询时间是O(n),所以冲突很严重,一个索引上的链表非常长,效率就很低了。所以在JDK 1.8版本的时候做了优化,当一个链表的长度超过8的时候就转换数据结构,不再使用链表存储,而是使用红黑树。

2025-04-27 10:29:22 1427

原创 [java八股文][Java集合面试篇]List

常见的List集合(非线程安全):常见的List集合(线程安全):在Java中,接口是最常用的集合类型之一,用于存储元素的有序集合。以下是Java中常见的实现及其特点: 在 Java 中,在遍历过程中是否可以修改元素取决于遍历方式和具体的实现类,以下是几种常见情况: 使用foreach循环遍历:一般不建议在循环中直接修改正在遍历的元素,因为这可能会导致意外的结果或异常。在循环中修改元素可能会破坏迭代器的内部状态,因为循环底层是基于迭代器实现的,在遍历过程中修改集合结构,会导致迭代器的预期结构和实际结

2025-04-25 09:48:24 1033

原创 [java八股文][Java集合面试篇]Java集合概念

value 不要求有序,允许重复。Map 没有继承于 Collection 接口,从 Map 集合中检索元素时,只要给出键对象,就会返回对应的值对象。List是有序的Collection,使用此接口能够精确的控制每个元素的插入位置,用户能根据索引访问List中元素。常用的实现List的类有LinkedList,ArrayList,Vector,Stack。Set不允许存在重复的元素,与List不同,set中的元素是无序的。在 java.util 包中的线程安全的类主要 2 个,其他都是非线程安全的。

2025-04-24 10:22:55 781

原创 [java八股文][Java基础面试篇]I/O

可以用 Java NIO ,是一种同步非阻塞的I/O模型,也是I/O多路复用的基础。传统的BIO里面socket.read(),如果TCP RecvBuffer里没有数据,函数会一直阻塞,直到收到数据,返回读到的数据, 如果使用BIO要想要并发处理多个客户端的i/o,那么会使用多线程模式,一个线程专门处理一个客户端 io,这种模式随着客户端越来越多,所需要创建的线程也越来越多,会急剧消耗系统的性能。NIO 是基于I/O多路复用实现的,它可以只用一个线程处理多个客户端I/O,如果你需要同时管理成千上万的连接,

2025-04-23 14:48:23 736

原创 [java八股文][Java基础面试篇]设计模式

由于 volatile 禁止对象创建时指令之间重排序,所以其他线程不会访问到一个未初始化的对象,从而保证安全性。正确的双重检查锁定模式需要需要使用 volatile。volatile主要包含两个功能。

2025-04-23 10:02:34 289

原创 【调优】log日志海量数据分表后查询速度调优

使用pagehelper实现分页getTimeBetween 为从查询条件中把开始时间至结束时间取出getFullTableName 是将时间拼接为表名queryByPage 使用mybtis查询。

2025-04-23 10:00:00 760

原创 【大数据】Docker安装Flink安装

前置条件:必须安装docker。

2025-04-22 20:34:17 425

原创 [java八股文][Java基础面试篇]序列化

如果追求性能的话,Protobuf 序列化框架会比较合适,Protobuf 的这种数据存储格式,不仅压缩存储数据的效果好, 在编码和解码的性能方面也很高效。通过以上步骤,对象obj会被序列化并写入到文件"object.ser"中,然后通过反序列化操作,从文件中读取字节流并恢复为对象newObj。,例如加密和解密,TCP的粘包和拆包,序列化机制是通过序列化协议来进行处理的,和 class 文件类似,它其实是定义了序列化后的字节流格式,然后对此格式进行操作,生成符合格式的字节流或者将字节流解析成对象。

2025-04-22 20:28:12 787

原创 [java八股文][Java基础面试篇]Java 新特性

Java 8引入了Stream API,它提供了一种高效且易于使用的数据处理方式,特别适合集合对象的操作,如过滤、映射、排序等。Stream API不仅可以提高代码的可读性和简洁性,还能利用多核处理器的优势进行并行处理。让我们通过两个具体的例子来感受下Java Stream API带来的便利,对比在Stream API引入之前的传统做法。案例1:过滤并收集满足条件的元素问题场景:从一个列表中筛选出所有长度大于3的字符串,并收集到一个新的列表中。没有Stream API的做法。

2025-04-21 14:40:40 1287

原创 [java八股文][Java基础面试篇]object

对于字符串变量来说,使用" == “和"equals"比较字符串时,其比较方法不同。” == "比较两个变量本身的值,即两个对象在内存中的首地址,"equals"比较字符串包含内容是否相同。对于非字符串变量来说,如果没有对equals()进行重写的话,“==” 和 "equals"方法的作用是相同的,都是用来比较对象在堆内存中的首地址,即用来比较两个引用变量是否指向同一个对象。

2025-04-18 14:48:34 513

原创 [java八股文][Java基础面试篇]异常

Java异常类层次结构图:Java的异常体系主要基于两大类:Throwable类及其子类。Throwable有两个重要的子类:Error和Exception,它们分别代表了不同类型的异常情况。Error(错误):表示运行时环境的错误。错误是程序无法处理的严重问题,如系统崩溃、虚拟机错误、动态链接失败等。通常,程序不应该尝试捕获这类错误。例如,OutOfMemoryError、StackOverflowError等。Exception(异常):表示程序本身可以处理的异常条件。

2025-04-18 14:42:13 968

原创 [java八股文][Java基础面试篇]注解

注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池。

2025-04-17 10:12:29 854

原创 [java八股文][Java基础面试篇]反射

Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。

2025-04-16 10:33:19 457

原创 [java八股文][Java基础面试篇]对象

在Java中,创建对象的方式有多种,常见的包括:使用new关键字:通过new关键字直接调用类的构造方法来创建对象。使用Class类的newInstance()方法:通过反射机制,可以使用Class类的newInstance()方法创建对象。使用Constructor类的newInstance()方法:同样是通过反射机制,可以使用Constructor类的newInstance()方法创建对象。使用clone()方法:如果类实现了Cloneable接口,可以使用clone()方法复制对象。

2025-04-15 10:03:27 764

原创 [java八股文][Java基础面试篇]面向对象

抽象⽅法抽象⽅法是接⼝的核⼼部分,所有实现接⼝的类都必须实现这些⽅法。抽象⽅法默认是 public 和abstract,这些修饰符可以省略。默认⽅法默认⽅法是在 Java 8 中引⼊的,允许接⼝提供具体实现。实现类可以选择重写默认⽅法。静态⽅法静态⽅法也是在 Java 8 中引⼊的,它们属于接⼝本⾝,可以通过接⼝名直接调⽤,⽽不需要实现类的对象。私有⽅法私有⽅法是在 Java 9 中引⼊的,⽤于在接⼝中为默认⽅法或其他私有⽅法提供辅助功能。这些⽅法。

2025-04-14 11:36:22 1063

原创 [java八股文][Java基础面试篇]java数据类型

Java支持数据类型分为两类: 基本数据类型和引用数据类型。基本数据类型共有8种,可以分为三类:数值型:整数类型(byte、short、int、long)和浮点类型(float、double)字符型:char布尔型:booleanFloat和Double的最小值和最大值都是以科学记数法的形式输出的,结尾的“E+数字”表示E之前的数字要乘以10的多少倍。比如3.14E3就是3.14×1000=3140,3.14E-3就是3.14/1000=0.00314。

2025-04-11 10:17:57 1292

原创 【java开发】【nexus插件】拦截上传和下载

实现com.google.inject.AbstractModule。

2025-04-10 15:41:17 301

原创 [java八股文][Java基础面试篇]java概念

Java 能⽀持跨平台,主要依赖于 JVM 关系⽐较⼤。JVM也是⼀个软件,不同的平台有不同的版本。我们编写的Java源码,编译后会⽣成⼀种 .class ⽂件,称为字节码⽂件。Java虚拟机就是负责将字节码⽂件翻译成特定平台下的机器码然后运⾏。也就是说,只要在不同平台上安装对应的JVM,就可以运⾏字节码⽂件,运⾏我们编写的Java程序。⽽这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这⼀”中间层“,就能在不同平台上运⾏,真正实现了”⼀次编译,到处运⾏“的⽬的。

2025-04-10 14:48:44 1002

转载 你可以考虑下,你项目是用三范式还是反范式,理由是什么?

原文链接:https://blog.csdn.net/u010953880/article/details/89708891有时候在面试的时候,有的面试官可能就问你数据库方面的一些知识。有没有独立做过项目啊,那你是怎么设计数据库的呢?这里就不得不面对一个问题:建表方面,你可以考虑下,你项目是用三范式还是反范式,理由是什么?官方的描述:1NF:无重复的列.表中的每一列都是不可分割的基...

2020-01-10 16:01:02 496

转载 [转]最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备

原文:https://www.cnblogs.com/JavaArchitect/p/10011253.html在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间。我的标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架,我相信其它公司招初级开发时,应该也照着这个标准来面的。我也知道,不少候选人能力其实不差,但面试时没准备或不会说,这样的人可能在进团队干...

2020-01-10 15:54:27 124

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除