java platform se binary 关闭_java初中级面试框架和项目部分问题

aebb7da93a1da50352e6128b2a952b7c.png

Java框架部分

1.说说Spring?

Spring的核心是控制反转、依赖注入,Aop(面向切面)相当于把每个bean与bean之间的关系交给第 三方容器进行管理.

2.说说SpringIOC、SpringAOP?

SpringIOC ,其实就是依赖注入、控制反转。相当于把每个bean与bean之间的关系交给第三方容器管理。而这个容器就是spring

SpringAOP 面向切面的编程,或AOP,是一种编程技术,允许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理。 SpringAop 就是用 Javva的动态代理

3.Spring的底层实现机制是什么?

使用Demo4j(解析XML)+Java反射机制

Demo4j 其实就是解析XML。使用反射机制实例化bean。

4.SpringAOP用到了什么代理?

JDK动态代理:对实现了接口的类生成代理

CGLib代理机制:对类生成代理

5.动态代理与静态代理区别?

静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 动态代理:在程序运行时,运用反射机制动态创建而成。

6.Spring注入有那些方式?

Set注入

构造器注入

静态工厂的方法注入

实例工厂的方法注入

6.Spring有那些注解?

@Autowired(按类型注入)

@Service(标示为注入为服务层)

@Resource(按名称注入)

@Controller(标识控制器bean id)

@RequestMapping(表示映射URL路径)

7.简述Spring的优缺点?

Spring 的优点:

1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦

2.可以使用容易提供的众多服务,如事务管理,消息服务等

3.容器提供单例模式支持

4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能

5.容器提供了众多的辅助类,能加快应用的开发

6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等

7.spring属于低侵入式设计,代码的污染极低

8.独立于各种应用服务器

9.spring的DI机制降低了业务对象替换的复杂性

10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部

Spring 的缺点:

使用到了大量反射机制。反射机制非常占内存,

8.SpringMVC工程流程

1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;

2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;

3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)

4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

数据转换:对请求消息进行数据转换。如String转换成Integer、Double等

数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等

数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

5. Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;

6. 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;

7. ViewResolver 结合Model和View,来渲染视图

8. 将渲染结果返回给客户端。

9.SpringMVC工作流程描述

为什么SpringMVC只使用一个Servlet(DispatcherServlet)来处理所有请求?

详细见J2EE设计模式-前端控制模式

Spring为什么要结合使用HandlerMapping以及HandlerAdapter来处理Handler?

符合面向对象中的单一职责原则,代码架构清晰,便于维护,最重要的是代码可复用性高。如HandlerAdapter可能会被用于处理多种Handler。

Hibernate面试题

1.什么是Hibernate?

hibernate是一个基于ORM持久框架,可以让程序员以面向对象的思想操作数据库,提高生产效率.

2.什么是ORM?

orm不过是一种思想,对象关系映射。是对象关系模型,如hibernate,让你以面向对象的方式去编程。封装了JDBC.

3.说一下orm与jdbc的区别?

jdbc只是一个java操作数据库的规范接口而已

orm不过是一种思想,对象关系映射。

ORM:是对象关系模型,如hibernate,让你以面向对象的方式去编程。封装了JDBC.

JDBC:是从底层访问数据库服务器。一般银行,金融行业为了安全起见,直接用JDBC访问

Hibernate中get和load有什么不同之处?

load :找不到数据的话会抛出org.hibernate.ObjectNotFoundException异常。此时hibernate会使用延迟加载加载机制

get找不到的话会返回null。

如果查询不到数据,get 会返回 null,但是不会报错, load 如果查询不到数据,则报错ObjectNotFoundException

使用get 去查询数据,(先到一级/二级)会立即向db发出查询请求(select ...), 如果你使用的是 load查询数据,(先到一级、二级))即使查询到对象,返回的是一个代理对象,如果后面没有使用查询结果,它不会真的向数据库发select ,当程序员使用查询结果的时候才真的发出select ,这个现象我们称为懒加载(lazy)

4.hibernate的三种状态?

在Hibernate中,对象有三种状态:临 时状态(Transient)、持久状态(Persistent)和游离状态(Detached)。

处于持久态的对象也称为 PO(PersistenceObject),临时对象和游离对象也称为VO(ValueObject).

5.hibernate的懒加载? 有几种禁用方法

在Hibernate框架中,当我们要访问的数据量过大时,明显用缓存不太合适, 因为内存容量有限 ,为了减少并发量,减少系统资源的消耗,这时Hibernate用懒加载机制来弥补这种缺陷,但是这只是弥补而不是用了懒加载总体性能就提高了。

我们所说的懒加载也被称为延迟加载,它在查询的时候不会立刻访问数据库,而是返回代理对象,当真正去使用对象的时候才会访问数据库。

1.使用代理对象:Hibernate.initialize("代理对象");

2.在需要禁用懒加载的映射文件中显示的加入lazy = "false"

3.使用openSessionInView【需要借助于过滤器】 需要在web.xml文件中配置

6.hibernate有几种查询方式?

1、 属性查询2、 参数查询、命名参数查询3、 关联查询4、 分页查询5、 统计函数

7.Hibernate的优缺点?

1.Hibernate的优缺点:优点:1、程序更加面向对象;2、提高了生产率;3、方便移植(修改配置文件);4、无侵入性。缺点:1、效率比JDBC略差;2、不适合批量操作。

Hibernate的缓存机制

Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存。

1.Hibernate一级缓存又称为“Session的缓存”。

Session内置不能被卸载,Session的缓存是事务范围的缓存(Session对象的生命周期通常对应一个数据库事务或者一个应用事务)。

一级缓存中,持久化类的每个实例都具有唯一的OID。

2.Hibernate二级缓存又称为“SessionFactory的缓存”。

由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。

第二级缓存是可选的,是一个可配置的插件,默认下SessionFactory不会启用这个插件。

Hibernate提供了org.hibernate.cache.CacheProvider接口,它充当缓存插件与Hibernate之间的适配器。

8.Hibernate延迟加载?

1) Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)

2) Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。

9.Hibernate工作原理及为什么要用?

原理:

1) 读取并解析配置文件

2) 读取并解析映射信息

3) 创建SessionFactory

4) 打开Sesssion

5) 创建事务Transation

6) 持久化操作

7) 提交事务

8) 关闭Session

9) 关闭SesstionFactory

为什么要用:

1) 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

2) Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作

3) hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。

4) hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

10.什么是Mybatis?

Mybatis的前生是ibatis,最后升级版本后名称叫mybatis。mybatis是以纯sql操作数据。

Mybatis与Hibernate区别?

Hibernate是面向对象的思想操作数据生成Sql语句,而mybatis是以纯sql操作数据

相对于mybatis容易优化.扩展性好,但是移植性差。

设计模式部分

1.你熟悉那些设计模式?

总共有23种设计模式

总体来说设计模式分为三大类:

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

企业面试的时候,面试官非常喜欢考单例,而且非常喜欢考手写单例。

2.什么是单例?单例有那些写法?

单例分类:懒汉式单例、饿汉式单例单例模式有以下特点:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。

①懒汉式单例

1. //懒汉式单例类.在第一次调用的时候实例化自己

2. public class Singleton {

3. private Singleton() {}

4. private static Singleton single=null;

5. //静态工厂方法

6. public static Singleton getInstance () {

7. if (single == null) {

8. single = new Singleton();

9. }

10. return single;

11. }

12. }

②饿汉式单例

13. //饿汉式单例类.在类初始化时,已经自行实例化

14. public class Singleton1 {

15. private Singleton1() {}

16. private static final Singleton1 single = new Singleton1();

17. //静态工厂方法

18. public static Singleton1 getInstance() {

19. return single;

20. }

21. }

3.懒汉式与饿汉式区别?

从名字上来说,饿汉和懒汉,

饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了,

而懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。

另外从以下两点再区分以下这两种方式:

1、线程安全:

饿汉式天生就是线程安全的,可以直接用于多线程而不会出现问题,

懒汉式本身是非线程安全的,为了实现线程安全有几种写法,分别是上面的1、2、3,这三种实现在资源加载和性能方面有些区别。

2、资源加载和性能:

饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成,

而懒汉式顾名思义,会延迟加载,在第一次使用该单例的时候才会实例化对象出来,第一次调用时要做初始化,如果要做的工作比较多,性能上会有些延迟,之后就和饿汉式一样了。

项目相关面试题

1.你说说你做的最好的项目?

要重点介绍到①项目是做什么?②用到那些技术?③整个项目中最大的亮点是?核心部分④遇到bug是怎么解决的?

2.你项目遇到bug?怎么查问题?

例如:首先遇到了bug,会查询日志,通过日志定位到某个类的行数,判断是否有代码问题。

你遇到了什么bug?你是怎么解决?

例如我自己项目中,查询量非常大。通过日志发现了堆内存溢出,最后通过优化代码,减轻new和加大堆内存。

你们项目人员是怎么分配的?

项目分配为:

产品经理(负责提需求)

UI设计师(负责设计样式文件)

Web前端(只做Web页面前端静态文件)

Java工程师(写业务逻辑)

测试人员(负责测试bug)

非技术项目经理(负责项目管理、人员分配)

项目架构师(负责架构项目)

你们项目是怎么发布的?

企业当中项目都是发布在linux环境上

小公司:使用maven编译好通过打war包,放入到tomcat的webapps文件下

大公司:使用自动部署系统jenkins jenkins直接关联svn地址自动打包、自动部署等

说说linux常用命令?

Cat 查看某个文件

CP 拷贝

Ls 查看所有列表

Pwd 查看路径

Tail 查看日志

Grep 搜索日志

更多关于java的资料和面试题,请关注我的公众号程序style

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值