Java面试题总结(乱序版,面试官问的那些Java原理你都懂吗

4、原型模式

clone();

原型模式的本质是拷贝原型来创建新的对象,拷贝是比new更快的创建对象的方法,当需要大批量创建新对象而且都是同一个类的对象的时候考虑使用原型模式。

一般的克隆只是浅拷贝(对象的hash值不一样,但是对象里面的成员变量的hash值是一样的)。

有些场景需要深拷贝,这时我们就要重写clone方法,以ArrayList为例:

5、适配器模式

作用:使不兼容的接口相容。

JDK中体现:InputStream、OutputStream。

6、装饰器模式

作用:为类添加新的功能,防止类继承带来的类爆炸。

JDK中体现:io类、Collections、List。

7、外观模式

作用:封装一组交互类,一直对外提供接口。

JDK中体现:logging包。

8、享元模式

作用:共享对象、节省内存。

JDK中体现:Integer.valueOf、String常量池。

9、代理模式

作用:

(1)透明调用被代理对象,无须知道复杂实现细节;

(2)增加被代理类的功能;

JDK中体现:动态代理。

10、迭代器模式

作用:将集合的迭代和集合本身分离。

JDK中体现:Iterator

11、命令模式

作用:封装操作,使接口一致。

JDK中体现:Runable、Callable、ThreadPoolExecutor。

八、什么是 Spring 框架?Spring 框架有哪些主要模块?


Spring是一个控制反转和面向切面的容器框架。

Spring有七大功能模块:

1、Core

Core模块是Spring的核心类库,Core实现了IOC功能。

2、AOP

Apring AOP模块是Spring的AOP库,提供了AOP(拦截器)机制,并提供常见的拦截器,供用户自定义和配置。

3、orm

提供对常用ORM框架的管理和支持,hibernate、mybatis等。

4、Dao

Spring提供对JDBC的支持,对JDBC进行封装。

5、Web

对Struts2的支持。

6、Context

Context模块提供框架式的Bean的访问方式,其它程序可以通过Context访问Spring的Bean资源,相当于资源注入。

7、MVC

MVC模块为spring提供了一套轻量级的MVC实现,即Spring MVC。

九、使用 Spring 框架能带来哪些好处?


1、轻量级框架、容器

Spring是一个容器,管理对象的生命周期和配置。基于一个可配置原型prototype,你的bean可以使单利的,也可以每次需要时都生成一个新的实例。

2、控制反转IOC

Spring通过控制反转实现松耦合。

3、支持AOP

Spring提供对AOP的支持,它允许将一些通用任务,如安全、事务、日志等进行集中式处理,从而提高了程序的复用性。

4、轻量级框架

5、方便测试

Spring提供Junit4的支持,可以通过注解方便测试spring程序。

6、对Java中很多API进行了封装

7、方便集成各种优秀框架

如Struts、hibernate、mybstis。

8、支持声明式事务处理

只需通过配置就可以完成对事务的管理,而无须手动编程。

十、什么是 Spring Boot?Spring Boot 有哪些优点?


1、Spring Boot简介

基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突、引用的不稳定性得到了解决。

2、Spring Boot 有哪些优点?

  • 快速构建项目,可以选一些必要的组件;

  • 对主流框架的无配置集成;

  • 内嵌Tomcat容器,项目可独立运行;

  • 删除了繁琐的xml配置文件;

  • 极大地提高了开发和部署效率;

  • 提供starter,简化maven配置;

3、SpringBoot有哪些缺点?

  • 版本迭代速度快,一些模块改动很大;

  • 由于无须配置,报错时很难定位;

十一、为什么要使用 hibernate?


1、hibernate对jdbc进行了封装,简化了JDBC的重复性代码;

2、hibernate对dao有一个封装类hibernateTemplate,可以继承它,实现简单的CRUD接口。

3、hibernate使用注解和配置文件,可以对实体类和映射文件进行映射;

4、hibernate有事务管理机制,保证了数据的安全性;

5、hibernate有一级缓存和二级缓存;

十二、mybatis 中 #{}和 ${}的区别是什么?


1、#{}带引号,${}不带引号;

2、#{}可以防止SQL注入;

3、${}常用于数据库表名、order by子句;

4、一般能用#{}就不要使用${};

十三、RabbitMQ的使用场景有哪些?


1、解决异步问题

例如用户注册,发送邮件和短信反馈注册成功,可以使用RabbitMQ消息队列,用户无需等待反馈。

2、服务间解耦

订单系统和库存系统,中间加入RabbitMQ消息队列,当库存系统出现问题时,订单系统依旧能正常使用,降低服务间耦合度。

3、秒杀系统

利用RabbitMQ的最大值,实现秒杀系统。

十四 、数据库的三范式是什么?


1、列不可再分;

2、每一行数据只做一件事,只与一列相关,主键;

3、每个属性都与主键有直接关系,而不是间接关系;

三大范式只是设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情结,当然要特殊对待,数据库设计最重要的是看需求和性能,需求>性能>表结构。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值