Java面试题总结(乱序版,2024-08-18)(1),2024年最新2024年最新Java大厂面试笔试题分享

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

  1. exception

  2. out,out用于在web浏览器内输出信息,并且管理应用服务器上的输出缓冲区,作用域page。

  3. config,取得服务器的配置信息。

五、http 响应码 301 和 302 代表的是什么?有什么区别?


301和302状态码都表示重定向,当浏览器拿到服务器返回的这个状态码后悔自动跳转到一个新的URL地址。

301代表永久性重定向,旧地址被永久移除,客户端向新地址发送请求。

302代表暂时性重定向,旧地址还在,客户端继续向旧地址发送请求。

303代表暂时性重定向,重定向到新地址时,必须使用GET方法请求新地址。

307代表暂时性重定向,与302的区别在于307不允许从POST改为GET。

307代表永久性重定向,与301的区别在于308不允许从POST改为GET。

六、什么是设计模式?你是否在你的代码里面使用过任何设计模式?


1、什么是设计模式?

设计模式是解决软件开发某些特定问题而提出的一些解决方案,也可以理解为解决问题的一些固定思路。

通过设计模式可以帮助我们增强代码的可复用性、可扩展性、灵活性。

我们使用设计模式的最终目的是实现代码的高内聚、低耦合。

2、设计模式的七大原则

  • 单一职责原则

  • 接口隔离原则

  • 依赖倒转原则

  • 里式替换原则

  • 开闭原则

  • 迪米特法则

  • 合成复用原则

3、你是否在你的代码里面使用过任何设计模式?

(1)单例模式

JDK种的runtime,Spring种的singeton。

(2)简单工厂模式

Spring的BeanFactory,根据传入一个唯一标识来获得bean对象。

(3)原型模式

clone()

(4)代理模式

Spring的AOP中,Spring实现AOP功能的原理就是代理模式,①JDK动态代理。②CGLIB动态代理,使用Advice(通知)对类进行方法级别的切面增强。

(5)装饰器模式

为类添加新的功能,防止类爆炸;

IO流、数据源包装,Spring中用到的装饰器模式表现在Wrapper。

七、什么是控制反转(IOC)?什么是依赖注入?


借助Spring实现具有依赖关系的对象之间的解耦。

对象A运行需要对象B,由主动创建变为IOC容器注入,这便是控制反转。

获得依赖对象的过程被反转了,获取依赖对象的过程由自身创建变为由IOC容器注入,这便是依赖注入。

八、BeanFactory 和 ApplicationContext 有什么区别?


1、BeanFactory是Spring的最底层接口,包含bean的定义,管理bean的加载,实例化,控制bean的生命周期,特点是每次获取对象时才会创建对象。

ApplicationContext是BeanFactory的子接口,拥有BeanFactory的全部功能,并且扩展了很多高级特性,每次容器启动时就会创建所有的对象。

ApplicationContext的额外功能:

  1. 继承MessageSource,支持国际化;

  2. 统一的资源文件访问方式;

  3. 提供在监听器中注册bean;

  4. 同时加载过个配置文件;

  5. 载入多个(有继承关系)上下文,使得每个上下文都专注于一个特定的层次,比如应用的web层;

2、BeanFactory通常以编程的方式被创建,ApplicationContext可以以声明的方式创建,如使用ContextLoader。

3、BeanFactory 和 ApplicationContext都支持BeanPostProcessor,BeanFactoryPostProcessor,但BeanFactory需要手动注册,ApplicationContext则是自动注册。

九、什么是 JavaConfig?


JavaConfig是Spring3.0新增的概念,就是以注解的形式取代Spring中繁琐的xml文件。

JavaConfig结合了xml的解耦和java编译时检查的优点。

@Configuration,表示这个类是配置类;

@ComponentScan,相当于xml的<context:componentScan basepackage=>;

@Bean,相当于xml的;

@EnableWebMvc,相当于xml的mvc:annotation-driven;

@ImportResource,相当于xml的;

@PropertySource,用于读取properties配置文件;

@Profile,一般用于多环境配置,激活时可用@ActiveProfile(“dev”)注解;

十、什么是 ORM 框架?


ORM(Object-relational mapping),对象关系映射。

是为了解决面向对象与关系型数据库存在的不匹配问题。

ORM框架的优点:

  • 开发效率更高

  • 数据访问更抽象、轻便

  • 支持面向对象封装

十一、mybatis 是否支持延迟加载?延迟加载的原理是什么?


1、mybatis 是否支持延迟加载?

延迟加载其实就是讲数据加载时机推迟,比如推迟嵌套查询的时机。

延迟加载可以实现先查询主表,按需实时做关联查询,返回关联表结果集,一定程度上提高了效率。

mybatis仅支持关联对象association和关联集合对象collection的延迟加载,association是一对一,collection是一对多查询,在mybatis配置文件中可以配置lazyloadingEnable=true/false。

2、延迟加载的原理是什么?

使用CGLIB为目标对象建立代理对象,当调用目标对象的方法时进入拦截器方法。

比如调用a.getB().getName(),拦截器方法invoke()发现a.getB()为null,会单独发送事先准备好的查询关联B对象的sql语句,把B查询出来然后调用a.setB(b),也是a的对象的属性b就有值了,然后调用getName(),这就是延迟加载的原理。

十二、RabbitMQ有哪些重要的角色?有哪些重要的组件?


1、RabbitMQ有哪些重要的角色?

客户端、RabbitMQ、服务端。

2、有哪些重要的组件?

(1)connectionFactory(连接管理器)

应用程序与RabbitMQ之间建立连接的管理器。

(2)Channel(信道)

消息推送使用的信道。

(3)RoutingKey(路由键)

用于把生产者的数据分配到交换机上。

(4)Exchange(交换机)

用于接受和分配消息。

(5)BindKey(绑定键)

用于把交换机的消息绑定到队列上

(6)Queue(队列)

用于存储生产者消息。

十三、一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?


一般情况下,我们创建的表类型是InnoDB。

  • 不重启MySQL,如果新增一条记录,id是8;

  • 重启,ID是6;因为InnoDB表只把自增主键的最大ID记录在内存中,如果重启,已删除的最大ID会丢失。

如果表类型是MyISAM,重启之后,最大ID也不会丢失,ID是8;

InnoDB必须有主键(建议使用自增主键,不用UUID,自增主键索引查询效率高)、支持外键、支持事务、支持行级锁。

系统崩溃后,MyISAM很难恢复;

综合考虑,优先选择InnoDB,MySQL默认也是InnoDB。

十四、Redis有哪些功能?


1、服务端的数据缓存

专门部署一个Redis的服务器;

2、持久化

Redis持久化指的是Redis会把内存中的数据写到磁盘中,在Redis重启时先加载这些数据,就觉Redis服务器重启导致的内存丢失问题。

3、哨兵(Sentinel)和复制

Sentinel可以管理多个Redis服务器,它提供了监控、提醒以及自动的故障转移功能;

复制则是让Redis服务器可以配备备份的服务器;

Redis也是通过这两个功能保证Redis的高可用;

4、集群(Cluster)

单台服务器资源总是有上限的,CPU和IO资源可以通过主从复制,进行读写分离,把一部分CPU和IO的压力转移到从服务器上,但是内存资源怎么办,主从模式只是数据的备份,并不能扩充内存;

总结

在清楚了各个大厂的面试重点之后,就能很好的提高你刷题以及面试准备的效率,接下来小编也为大家准备了最新的互联网大厂资料。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
以及面试准备的效率,接下来小编也为大家准备了最新的互联网大厂资料。

[外链图片转存中…(img-r7cEpAAA-1713067490691)]

[外链图片转存中…(img-VR6yl73P-1713067490691)]

[外链图片转存中…(img-RC75ADK2-1713067490691)]

[外链图片转存中…(img-CCBlWvxv-1713067490692)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-WrJfGqOP-1713067490692)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值