面试整理温习记录1

本文整理了Java面试中常见的技术点,包括死锁的原理及解决方式、反射的优缺点、equals与hashCode的关系、策略模式与观察者模式的区别、HashMap与Hashtable的差异、Integer比较问题、分布式事务的解决方案、服务注册中心的选择以及数据库设计最佳实践等,旨在帮助读者巩固Java基础知识,提升面试准备效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 死锁

  • 简述
    是一组相互竞争资源的线程,因为互相等待,造成永久阻塞的现象。
  • 发生条件:
    1.互斥条件
    2.占有并等待
    3.不可抢占
    4.循环等待
  • 解决方式:
    1一次性获取所有的资源
    2 主动释放持有的资源
    3 顺序的去获取的资源

2. 反射的优缺点

  • 简述
    反射是java语言里一个比较重要的特性,能够在程序运行的过程中,去构造任意一个类对象;并且可以任意一个类的成员变量、成员方法和属性。通过反射,可以通过java语言动态获取程序的信息,以动态调用的能力,Java中有java.lang.reflect来实现放射相关的类
  • 优点
    1 增加程序的灵活性,在运行过程中对类进行修改和操作
    2 提高代码的复用率
    3 在运行的时候,获取类的方法和属性,通过反射来动态调用
  • 缺点
    1 因为动态的获取类资源,所以jvm无法对类进行优化,导致性能比非反射略低
    2 代码的可读性下降
    3 反射可以绕过一些限制访问的属性和方法,可能破坏代码的抽象性和产生安全性问题

3. 为什么重启equals(),必须重写hashcode()

  • 简述
    equals()会进行两个操作,一是使用==去比较两个对象的内存地址,不相同则去比较这两个对象的值;Java中的任意一个对象都会有native的hashcode方法,并且这个方法会在散列集合中被用到,例如往集合中存在,会使用到hashcode值计算,如果结果没有,则直接存储,否则使用equals比较(直接使用equals效率太低,所以直接使用hashcode方法)

4. 策略模式和观察者模式

两种都属于行为型模式;
策略模式主要用在根据上下文动态去控制类的行为的一个场景,一方面可以解决多个if-else的场景,另外各方面把类的不同行为进行封装,使得程序可以动态的扩展和替换,增加了程序的灵活性。
观察者模式主要用在一对多的对象依赖关系中,实现某一个对象状态变更之后的感知的一个场景,一方面可以降低对象依赖关系的耦合度,另外一方面通过这种状态通知机制,可以保证这些依赖对象之间的状态协同。

4. hashmap和hashtable的区别

都是基于hash表实现的Key-Value结构的集合

  • hashtable是jdk 1.0引入的线程安全的集合类,初始容量是16,所有的方法都加了一个synchronized同步锁,内部主要使用数组加链表。链表主要用来解决hash冲突的场景
  • hashmap是jdk1.2引入的线程不安全的一个集合类,初始容量是11,内部也是使用了数据加链表的结构,但是在jdk1.8的时候做了优化(红黑树,当数组的长度大于64,并且链表的长度>=8,则会转化为红黑树)

5.integer比较问题

  • 自动装箱成integer对象。
  • 享元模式(通过复用对象,减少对象的创建次数,从而减少内存的占用,从而提升性能)
  • Integer内部维护了一个integerCache,缓存了-128-127的数值。

6.分布式事务的理解和解决方案

简述:
分布式事务是指存在多个跨库事务的事务一致性问题
解决:
目前解决方案主要有两种;

  • 一种是是基于XA协议的强一致性的事务方案(atomikos和seata中的xa事务模型)
  • 另一种是基于base协议下的弱一致性事务解决方案(tcc事务模型和基于可靠性消息的最终一致性方案和seata中的saga事务模型)

7.服务注册中心应该是ap还是cp

简述:cap模型:在一个分布式系统里,不可能同时满足三个点(A一致性,可用性C,分区容错性P)
回答:首先应该肯定是一个CP模型,因为注册中心首先是一个地址维护的平台,如果出现故障,不能影响服务之间的通信。第二注册中心的地址感知,本身就存在一个延迟

8.服务降级的理解

服务降级是一种提高服务稳定性和可靠性的策略。在服务器压力很大的时候,关闭一些非核心业务的。主要有两种(主动降级和基于特定情况的被动降级)

9.数据库字段建议设计not null

  • 数据的完整性
  • 提高查询性能
  • 开发的友好性
  • 数据一致性约束

10.数据库最左匹配原则

因为数据库索引B➕的索引结构决定的,优先使用第一个值按照顺序排序,然后再使用第二个值排序。

11.事务在什么场景下会失效

  • 异常必须外抛,不能自己处理
  • 必须走代理

12.高度为3的b+数可以存多少索引

多路平衡树:通过减少非叶子节点的存储数据量以及增加树的分支数量,降低树的高度从而减少磁盘io次数来提高数据检索性能。
b+树的高度和存的数据的多少与索引的大小和数据页的大小有关,b+树的每一个节点都是一个数据页,默认大小16k,非叶子节点存储的是索引值页的偏移量,叶子节点存储的是完整的每一行数据(一行数据大小,主键id类型占用的大小,指针大小)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值