自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis面试问题三什么是缓存雪崩怎么解决

缓存雪崩是因为大量的key设置了同一过期时间的导致在同一时间类缓存同时过期,而这时因为请求过来已经没有缓存了,DB压力大数据库崩溃了。

2023-09-21 21:13:35 366

原创 Redis面试二“缓存击穿是什么”

如果要求数据的强一致测使用分布式锁,如果要求高可用就使用逻辑过期就可以了。

2023-09-21 20:30:05 379

原创 面试redis主题一“什么是缓存穿透”

1.一个很长的二进制数组 (位数组,就是这个数组里只有0和1)2.若干个哈希函数3.空间效率和查询效率高4.不存在漏报(False Negative),即某个元素在某个集合中,肯定能报出来。5.可能存在误报(False Positive),即某个元素不在某个集合中,可能也被爆出来。5.删除困难。

2023-09-19 22:04:50 589

原创 java面试Day15

当事务并发执行修改某条记录的时候,不同的事物对这条数据的修改产生多个版本,每次修改之前都会记录下这条记录之前的数据,在隐藏字段中设置上本次操作事务的ID,并让回滚指针指向上一个版本,这样就会形成一条链表,就锁所谓的版本链。AOF 持久化机制是指将 Redis 在内存中的操作命令以追加的形式写入到磁盘中的 AOF 文件,AOF 文件记录了 Redis 在内存中的操作过程,只要在 Redis 重启后重新执行 AOF 文件中的操作命令即可将数据恢复到内存中。,可以处理大量的并发连接和请求。

2023-07-04 16:15:39 175

原创 Java面试Day16

如果要挂起或者唤醒一个线程,都需要操作系统帮忙完成,而操作系统实现线程之间的切换时需要从用户态转换到内核态,这个状态之间的转换需要相对比较长的时间,这也是为什么早期的synchronized 效率低的原因.Java 官方对从 JVM 层面对synchronized 较大优化,如自旋锁、适应性自旋锁、锁消除、锁粗化、偏向锁、轻量级锁等技术来减少锁操作的开销。大多数时候是不存在锁竞争的,常常是一个线程多次获得同一个锁,因此如果每次都要竞争锁会增大很多没有必要付出的代价,为了降低获取锁的代价,才引入的偏向锁。

2023-07-04 16:12:57 536

原创 java面试Day14

在互联网中,网关是一个可以连接不同协议的网络的设备,比如说可以连接局域网和互联网,它可以把局域网的内部网络地址转换成互联网上的合法地址,从而使得局域网内的主机可以与外界通信。等待阻塞:运行的线程执行 wait 方法,该线程会释放占用的所有资源,JVM会把该线程放入 "等待池"中,进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用 notify 或者 notifyAll 方法才能被唤醒,wait 是object 类的方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。

2023-06-30 10:31:39 548

原创 java面试Day13

堆是被所有线程共享的,当创建一个新对象时,对象实例存储在堆中,堆中存储的对象实例都有一个标记用于标记对象是否存活。:Java 自带的注入方式,按照名称自动装配,默认是按照属性名称进行匹配,如果需要按照 Bean 的名称进行匹配,可以使用 @Resource(name="beanName")。:和 @Autowired 类似,也是按照类型进行自动装配,但是 @Inject 注解是 JSR-330 提供的,而 @Autowired 注解是 Spring 框架提供的。是通过在文件系统中创建一个新的文件来实现的,

2023-06-30 10:31:21 394

原创 Java面试Day12

此时Redis对象的头部和SDS是在一个连续的内存空间中,申请内存的时候只需要一次分配,效率更高。然后SDS中头部3个字节,尾巴结束字符一个字节,加在一起共20个字节,20个字节加上44个字节就是64个字节,因为redis内存分配会以2的n次方进行分配,64个字节不会产生内存碎片。因此,SpringBoot 可以看作是在 Spring 的基础上,通过自动配置和约定优于配置的方式,提供了更加简单、快速的开发体验。,由于在对记录加独占锁前,先会加上表级别的意向独占锁,那么在加「独占表锁」时,直接。

2023-06-30 10:30:50 630

原创 Java面试Day17

联合索引可以包含多个列,但是查询时只能使用前缀列进行查询,即只有在查询中使用了联合索引的前几个列,才能利用联合索引进行查询。ThreadLocal 主要用于解决线程安全问题,例如在 Web 应用中,可以使用 ThreadLocal 存储用户的会话信息,这样每个线程就可以独立地访问自己的会话信息,避免了多个线程之间的数据共享和数据竞争问题。是指一个包含了所有查询需要的列的索引,查询时可以直接从索引中取到需要的数据,而不需要再回到表中查找,从而可以提高查询效率。

2023-06-30 10:29:42 600

原创 java面试Day18

MySQL 执行计划是指 MySQL 查询优化器生成的一份详细的查询执行计划,它展示了 MySQL 在执行查询时所采取的具体执行计划,包括表的访问顺序、数据读取方式、使用的索引、使用的排序方式等等。当我们使用序列化和反序列化创建单例对象时会发现创建出来的对象都是不一样的,违背了单例模式的初衷,因此在需要序列化和反序列化类中实现实现。:实例的创建是在第一次使用时才进行的。更好的可观察性:云原生应用程序可以使用多种技术,如日志记录、指标监控和分布式跟踪等,以实现更好的可观察性,从而更容易地诊断和解决问题。

2023-06-30 10:29:19 963

原创 Java面试Day11

如果 Redis选择多线程模型,又因为 Redis是一个数据库,那么势必涉及到底层数据同步的问题,则必然会引入某些同步机制,比如锁,而我们知道 Redis不仅仅提供了简单的 key-value 数据结构,还有 list、set 和 hash 等等其他丰富的数据结构,而不同的数据结构对同步访问的加锁粒度又不尽相同,可能会导致在操作数据过程中带来很多加锁解锁的开销,增加程序复杂度的同时还会降低性能。针对于上述的并发问题,AIO 就是打算约女神,你发完短信,你就去玩游戏了,女神下楼了,发短信给你,你才出现。

2023-06-30 10:28:19 762

原创 Java面试Day7

来自:编程导航官方分布式是指。

2023-06-15 00:00:00 42

原创 Java面试Day8

消息生产者将消息发送到消息队列中,而消息消费者则从消息队列中接收消息。在实现过程中,消息队列还会提供一些额外的功能,如消息过滤、消息路由、消息持久化等。:消息队列可以缓冲来自多个消息生产者的消息,使得消息消费者可以按照自己的节奏进行消费,从而有效地平衡生产者和消费者之间的处理速度。:将不同的业务逻辑拆分成不同的服务,通过消息队列实现服务之间的通信,提高系统的可维护性和可扩展性。:通过将日志消息发送到消息队列中,将日志收集和分析与业务逻辑解耦合,提高系统的可靠性和可维护性。

2023-06-14 00:45:00 45

原创 java面试Day6

它是在数据库表上创建的一种数据结构,它包含一些指向表中数据的指针,可以快速地定位到满足查询条件的数据行,从而提高查询效率。304 Not Modified:客户端发送了一个带条件的请求,服务器端允许请求访问资源,但是请求未满足条件。索引文件具有 B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。状态码是服务器对客户端请求结果的反馈,根据状态码可以快速定位问题所在,进行相应的处理。索引的优点是可以提高数据库的查询速度,缩短数据检索的时间,提高系统的性能。

2023-06-13 01:45:00 47

原创 java面试Day10

InnoDB 存储引擎中的索引主要有聚簇索引和辅助索引两种类型,聚簇索引是根据主键创建的索引,而辅助索引是根据非主键列创建的索引。B+ 树的叶子节点之间使用指针相连,这样可以实现区间查找,也就是说,可以快速定位某个区间内的数据。:Spring 的 Bean 默认是单例模式,通过 Spring 容器管理 Bean 的生命周期,保证每个 Bean 只被创建一次,并在整个应用程序中重用。总之,Spring 框架中充分利用了许多设计模式,提供了良好的扩展性和灵活性,降低了代码的耦合度,提高了代码的可维护性。

2023-06-12 01:00:00 48

原创 java面试Day5

这样,应用代码只需要关注业务逻辑的实现,而不需要关注对象的创建和管理,降低了应用代码的复杂度,提高了代码的可重用性和可维护性。因为 Java 只有值传递,所以,对于 == 来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引用类型变量存的值是对象的地址。另外,需要注意的是,== 操作符用于比较两个对象的引用是否相等,即它们是否指向同一个对象。两者之间的区别在于,hashCode 方法返回的是一个 int 类型的数值,而 equals 方法返回的是一个 boolean 类型的值。

2023-06-11 01:00:00 50

原创 java面试Day4

HTTP使用URL(Uniform Resource Locator)来定位资源,通过请求方法(如GET、POST、PUT、DELETE等)来描述对资源的操作,通过请求头和响应头来传递附加信息,如编码格式、内容类型、Cookie等。但需要注意线程安全问题。:客户端发送HTTP请求到服务器,包括请求方法(GET、POST、PUT等)、请求头(如User-Agent、Accept等)和请求正文(可选)等信息。在操作系统中,进程是指一个正在执行中的程序,而线程是进程的一部分,是一个程序中执行的代码片段。

2023-06-10 00:45:00 53

原创 java面试Day9

需要注意的是,Spring IOC 还提供了多种作用域,例如单例、原型、会话、请求等作用域,可以根据具体的需求来选择。:在查询优化后,MySQL 开始执行查询,读取和处理数据。在执行过程中,MySQL 会根据查询中所涉及的表和列等信息,从磁盘中读取相应的数据,并进行计算和过滤操作。:在 Spring IOC 中,所有的对象都被看作是 Bean,需要在配置文件或者使用注解的方式中进行定义和配置。:Spring IOC 容器根据配置文件中的信息,将不同的 Bean 实例组装起来,形成一个完整的应用程序。

2023-06-09 00:45:00 47

原创 java面试Day2

分布式锁:Redis 支持原子性的操作,结合它的过期时间机制,可以实现分布式锁的功能。:Redis 的安装和部署非常简单,可以通过源代码编译或者使用预编译的包进行安装,同时提供了命令行工具和 Web 界面来管理 Redis 服务。计数器:Redis 的计数器功能非常方便,可以支持原子性的自增/自减操作。:Redis 提供了两种持久化方式,RDB 和 AOF,可以将数据写入磁盘以实现数据的持久化存储,防止数据丢失。不同的编程语言适用于不同的应用场景,开发者可以根据项目的需求、自己的经验和偏好选择合适的语言。

2023-06-08 14:00:00 50

原创 java面试Day3

Spring 框架提供了面向切面编程的支持,可以将应用程序的不同功能抽象成切面,并将这些切面与应用程序中的不同组件关联起来,从而降低了应用程序中的重复代码量,并提高了代码的可重用性和可维护性。:通过 Spring 框架的依赖注入功能,开发者可以将应用程序中的不同组件之间的依赖关系交给 Spring 来管理,从而降低组件之间的耦合度,并方便后续的组件替换和维护。,如果被代理目标没有接口那么Spring也无能为力,Spring通过Java的反射机制生产被代理接口的新的匿名实现类,重写了其中AOP的增强方法。

2023-06-07 15:47:39 45

原创 java面试题Day1

事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,JVM 是 Java 虚拟机,是 Java 程序运行的环境,负责将 Java 代码转换为可以在计算机上运行的机器码,并提供必要的环境支持。:由于字节码是一种紧凑的二进制格式,相比于直接编译为机器码,可以更快地加载和传输,同时也可以在运行时进行动态优化,提高程序的执行效率。字节码是 Java 程序编译后的中间代码,是一种可移植的二进制代码,可以在任何支持 Java 虚拟机(JVM)的平台上运行。

2023-06-07 15:44:04 65

原创 jvm基础高效面试(二)

无论是通过引用计数法判断对象引用数量,还是通过可达性分析法判断对象的引用链是否可达,判定对象的存活都与“引用”有关。JDK1.2 之前,Java 中引用的定义很传统:如果 reference 类型的数据存储的数值代表的是另一块内存的起始地址,就称这块内存代表一个引用。JDK1.2 以后,Java 对引用的概念进行了扩充,将引用分为强引用、软引用、弱引用、虚引用四种(引用强度逐渐减弱)Java 引用类型总结1.强引用(StrongReference)

2023-05-29 16:02:12 30

原创 jvm基础高效复习面试找工作

运行java.class文件的虚拟环境,非常重要在不同的系统环境中它保证了相同的Java.class文件可得到相同的结果。这也是为java程序能够跨平台提供了支撑。当然jvm有很多种其中比用到较多的是我们熟悉的HotSport VM,每个人都可以自己开发属于自己的jvm,当然想了解更多知识我们可以看看这是维基百科提供的关于不同jvm的比较,感兴趣可以了解一下。程序计数器虚拟机栈本地方法栈堆方法区直接内存 (非运行时数据区的一部分)

2023-05-24 11:43:31 82

原创 怎么使用Aop管理事务

事务的管理员和事务的协同员,对于这两个概念具体做什么的,我们待会通过案例来使用下。当程序出问题后,我们需要让事务进行回滚,而且这个事务应该是加在业务层上,而Spring的事务管理就是用来解决这类问题的。及其子类进行事务回顾,其他的异常类型是不会回滚的,对应IOException不符合上述条件所以不回滚。这样就保证他们在同一个事务中,当业务层中出现异常,整个事务就会回滚,保证数据的准确性。②:程序出现异常后,转账失败,但是异常之前操作成功,异常之后操作失败,整体业务失败。

2023-05-19 08:30:00 51

原创 Java中的浅拷贝与深拷贝

接下来,我们使用“==”判断person1和person2中的address是否是同一对象,结果为false,即两个对象的address成员变量指向的是不同的地址。总的来说,浅拷贝只是将原始对象的引用类型成员变量复制到新的对象中,因此新对象中的引用类型成员变量与原始对象中的成员变量指向同一对象。浅拷贝是指在对一个对象进行拷贝时,只拷贝对象本身和其中的基本数据类型,而不拷贝对象内部的引用类型。深拷贝是指在对一个对象进行拷贝时,不仅拷贝对象本身和其中的基本数据类型,同时也拷贝对象内部的引用类型。

2023-05-18 08:00:00 9161

原创 什么是方法的重载?什么是方法重写?

由于animal2和animal3都是Animal类型的对象,但是实际上分别指向了Dog和Cat对象,所以调用它们的eat方法时会分别调用Dog和Cat类中的eat方法,而不是Animal类中的eat方法。方法重载是指在一个类中可以定义多个同名但参数列表不同的方法,而方法重写是指在子类中定义与父类中同名、参数列表相同、返回值类型相同或者是其子类的方法。方法重载是指在一个类中可以定义多个同名但参数列表不同的方法,而方法重写是指在子类中定义与父类中同名、参数列表相同、返回值类型相同或者是其子类的方法。

2023-05-18 07:30:00 1550

原创 java中的实列是什么

Java中的实例是由类创建的对象。实例是通过使用new关键字创建的,它可以访问类中的所有变量和方法。可以创建多个实例,每个实例都可以执行类中的相同代码,但它们的状态可能会不同。例如,如果有一个Person类,可以创建多个Person对象,每个对象都有自己的属性(如姓名、年龄、性别等)和方法(如工作、学习、休息等)来描述其行为和状态。在这个例子中,我们定义了Person类,并设置了一些属性(姓名、年龄、性别)和方法(工作、学习、休息)。最后,我们调用了这两个实例的方法,展示了他们各自的行为和状态。

2023-05-16 09:00:00 248

原创 面向切面编程中AOP的通知类型

3. 返回通知(After Returning Advice):在目标方法执行后返回结果时执行的通知类型。4. 异常通知(After Throwing Advice):在目标方法执行发生异常时执行的通知类型。该通知类型可以获取目标方法抛出的异常并进行一些操作,例如异常处理、日志记录等。1. 前置通知(Before Advice):在目标方法执行前执行的通知类型。(Around Advice):在目标方法执行前后都执行的通知类型。2. 后置通知(After Advice):在目标方法执行后执行的通知类型。

2023-05-16 07:45:00 227

原创 什么面向对象编程,什么是面向切面编程

在这个例子中,UserDao 是一个接口,UserDaoImpl 是它的实现类,LogAspect 是一个切面,它包括了前置通知和后置通知。在Main类中,通过 Spring 的容器来获取 UserDAO 的实例,在调用 save() 方法时,切面会自动插入到程序执行过程中,完成日志记录的工作。面向切面编程(Aspect-oriented Programming,AOP)是一种编程范式,它通过将程序的业务逻辑和横切关注点(如安全性、事务、日志、缓存等)分离,来提高代码的可重用性、可维护性和可移植性。

2023-05-15 08:45:00 182

原创 6.3 Spring整合Junit

Junit是一个搞单元测试用的工具,它不是我们程序的主体,也不会参加最终程序的运行,从作用上来说就和之前的东西不一样,它不是做功能的,看做是一个辅助工具就可以了。Junit运行后是基于Spring环境运行的,所以Spring提供了一个专用的类运行器,这个务必要设置,这个类运行器就在Spring的测试专用包中提供的,导入的坐标就是这个东西。上面两个配置都是固定格式,当需要测试哪个bean时,使用自动装配加载对应的对象,下面的工作就和以前做Junit单元测试完全一样了。//设置Spring环境对应的配置类。

2023-05-14 10:00:00 31

原创 Spring整合Mybatis思路分析

方法中有一个参数为dataSource,当前Spring容器中已经创建了Druid数据源,类型刚好是DataSource类型,此时在初始化SqlSessionFactoryBean这个对象的时候,发现需要使用DataSource对象,而容器中刚好有这么一个对象,就自动加载了DruidDataSource对象。这个MapperScannerConfigurer对象也是MyBatis提供的专用于整合的jar包中的类,用来处理原始配置文件中的mappers相关配置,加载数据层的Mapper接口类。

2023-05-14 09:30:00 106

原创 对象的相等和引用相等的区别

但是对于自定义的类,如果要使用equals()方法比较两个对象的内容,需要注意在类中实现equals()方法,并在equals()方法中明确指定比较哪些属性。如果我们只是想判断两个变量是否指向同一个对象,可以使用引用相等,如果我们想判断两个对象的内容是否相等,则需要使用对象相等。引用相等和对象相等的区别在于,它们比较的内容不同。引用相等只比较两个引用变量是否指向同一个对象,而对象相等则比较两个对象的内容是否相等。在Java中,对象的相等和引用相等是两个不同的概念,它们分别代表了不同的对象比较方式。

2023-05-12 17:06:40 376

原创 静态方法为什么不能调用非静态成员?

在sayAge()方法中,我们尝试访问静态成员变量age,它可以直接访问,但尝试访问非静态成员变量height和非静态方法speak(),它们都会导致编译错误,因为静态方法无法访问非静态成员变量或非静态方法。在静态方法中,只能直接访问静态成员变量或静态方法,无法直接访问非静态成员变量或非静态方法。这是因为在程序运行时,静态成员变量和静态方法已经被类加载器加载到内存中,而非静态成员变量和非静态方法是需要实例化对象后才能使用的,所以静态方法无法访问非静态成员变量或非静态方法。

2023-05-12 16:35:11 465

原创 虽然我们是java程序员但是在面试中总有面试官会问java和c++的区别下面给出20个主要区别给大家参考

11. Java中的常量是不可变的,而C++中的常量可以是可变或不可变的。在Java中,常量是通过关键字“final”进行定义的,一旦定义,它们的值就不能更改。19. Java中的接口是一种特殊的抽象类,而C++中没有接口概念。在Java中,接口是一种特殊的抽象类,其中所有方法都是抽象的,并且没有实现。10. Java中的字符串是对象,而C++中的字符串是字符数组。9. Java中的异常处理机制是针对异常类的,而C++中的信号是针对操作系统的。16. Java中的数组是对象,而C++中的数组是指针。

2023-05-12 15:21:38 243

原创 什么是工厂设计模式和工厂设计模式在Spring框架中的应用

总之,创建工厂模式是一种简单而灵活的设计模式,可以通过工厂类来封装对象的创建过程,提高代码的可重用性和可扩展性。在 Spring 框架中,创建工厂模式得到了广泛的应用,可以通过 XML 配置或注解方式实现对象的创建和管理。创建工厂模式是一种创建型设计模式,它将对象的创建过程封装在一个工厂类中,并通过工厂类来创建对象,从而将对象的创建与使用分离开来。Spring 框架中的 Bean 工厂就是一个典型的创建工厂实现,它可以根据配置文件中的信息创建和管理对象。

2023-05-12 10:00:00 65

原创 什么是负载均衡,负载均衡用到的那些技术

这种技术通过DNS服务器的负载均衡策略,将客户端请求分发到多个服务器上。这种技术是一种简单、经典的负载均衡策略,每次将请求分发到一台服务器上,然后按照固定顺序进行轮询,确保每个服务器都能得到一定的负载。这种技术通常采用专门的硬件设备,如负载均衡器(Load Balancer)或交换机(Switch)等,来实现请求的转发和负载均衡。这种技术是一种基于哈希算法的负载均衡策略,通过对客户端IP地址进行哈希运算得出一个值,将请求分发到对应的服务器上。3. 基于DNS的负载均衡技术。2. 基于软件的负载均衡技术。

2023-05-11 10:45:00 300

原创 18个JUC常见面试题

ThreadLocal 是一种线程本地变量,可以允许多个线程并发访问同一个变量,但它是基于线程的隔离机制实现的,可以保证变量对每个线程都是独立的。但它只能实现独占锁,不能实现读写分离。Phaser(阶段器)是一种新的线程同步工具,主要用于分阶段的任务,它可以灵活的控制阶段的完成次数,当所有关联的线程都完成当前阶段时,才可以进入下一阶段,可以。CAS 的实现原理是,先读取变量的内存地址中的值,和期望的值进行比较,如果相同,则将新值写入这个内存地址,如果不同,则重试整个操作,直到交换成功为止。

2023-05-11 07:15:00 2613

原创 6种常用的设计模式

System.out.println("SubscriberOne 收到消息:" + message);System.out.println("SubscriberTwo 收到消息:" + message);System.out.println("执行 ConcreteComponent 的操作。System.out.println("从硬盘加载 " + fileName);System.out.println("显示 " + fileName);System.out.println("画一个矩形。

2023-05-10 07:45:00 385

原创 了解spring技术用到的设计模式有哪些

例如,一个 CustomerService 类需要一个 CustomerDao 接口来完成数据的访问,我们可以在 CustomerService 类中声明一个名为 customerDao 的字段,并给它提供一个 Setter 方法,然后在 Spring 的配置文件中对这个字段进行设置,从而实现了依赖关系的注入。(Lightweight Container)模式:在传统的开发中,需要使用 EJB 容器之类的重量级容器来管理对象之间的依赖关系,这样会造成开发人员的负担和系统的性能开销。

2023-05-09 10:05:30 36 1

原创 Spring IoC和DI详解和哪里用到了它

Spring IoC是Inversion of Control(控制反转)的缩写,也被称为依赖注入(Dependency Injection,DI),它是Spring框架的核心机制之一。最后,我们通过调用UserService的方法来创建和添加用户。通过上述步骤,我们使用IoC和DI创建了一个User对象,并将它注入到UserService对象中,然后通过调用UserService的方法来添加用户。对比传统的开发方式,我们使用IoC和DI大大地减少了代码量,简化了对象之间的依赖关系,提高了系统的可维护性。

2023-05-09 07:00:00 140

空空如也

空空如也

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

TA关注的人

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