java框架常见的面试题

1.谈谈你对MVC的理解

MVC是Model—View—Controler的简称。即模型—视图—控制器。MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。

MVC中的模型、视图、控制器它们分别担负着不同的任务。

视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。视图不进行任何业务逻辑处理。

模型: 模型表示业务数据和业务处理。相当于JavaBean。一个模型能为多个视图提供数据。这提高了应用程序的重用性

控制器: 当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去处理请求。

然后根据处理的结果调用相应的视图来显示处理的结果。

MVC的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并通过视图呈现给用户。

如果在项目中要对应MVC的话:View对应项目的jsp,Controler对应Action,Model对应Service+do层的业务逻辑和持久层的操作SpringMVC工作原理?

1、用户发送请求至前端控制器DispatcherServlet

2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

4、DispatcherServlet调用HandlerAdapter处理器适配器

5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。

6、Controller执行完成返回ModelAndView

7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器

9、ViewReslover解析后返回具体View

10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

11、DispatcherServlet响应用户

为何使用spring

sping是一个轻量级的控制反转(ioc),面向切面(Aop),面向接口、事务管理、包容足进其他框架;使用系统中用到的其他框架耦合程度大大降低,拓展性强,简单易用好管理。

Sping 在项目中如何充当粘合剂

1在项目中利用sping的IoC(控制反转或依赖注入)明确地定义组件接口(如UserDAo),开发者可以独立开发各个组件,然后根据组件间的依赖关系组装(UserAction 依赖于UserService),UserService依赖UserDAo)运行,很好的把Struts(Action)和hibernate(DAo)的实现结合起来。

2 spring 的事务管理把hibernate 对数据库的操作进行了事务配置

描述在系统中如何使用了sping的事务控制,

Sping 事务包括编程式事务和声明式事务。在系统中使用了声明式的事务管理是用sping的Aop来实现的,配置了只读事务和回滚事务,当出现错误后进行回滚操作。在项目中通过AOP切入事务到serivce层,这样子做能使一次业务逻辑操作如果包括几个数据库操作都控制在一个事务中

sping中的概念

什么是IoC和DI?DI是如何实现的?

答:IoC叫控制反转,是Inversion of Control的缩写,DI(Dependency Injection)叫依赖注入,是对IoC更简单的诠释。控制反转是把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的”控制反转”就是对组件对象控制权的转移,从程序代码本身转移到了外部容器,由容器来创建对象并管理对象之间的依赖关系。IoC体现了好莱坞原则 – “Don’t call me, we will call you”。依赖注入的基本原则是应用组件不应该负责查找资源或者其他依赖的协作对象。配置对象的工作应该由容器负责,查找资源的逻辑应该从应用组件的代码中抽取出来,交给容器来完成。DI是对IoC更准确的描述,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。

举个例子:一个类A需要用到接口B中的方法,那么就需要为类A和接口B建立关联或依赖关系,最原始的方法是在类A中创建一个接口B的实现类C的实例,但这种方法需要开发人员自行维护二者的依赖关系,也就是说当依赖关系发生变动的时候需要修改代码并重新构建整个系统。如果通过一个容器来管理这些对象以及对象的依赖关系,则只需要在类A中定义好用于关联接口B的方法(构造器或setter方法),将类A和接口B的实现类C放入容器中,通过对容器的配置来实现二者的关联。

依赖注入可以通过setter方法注入(设值注入)、构造器注入和接口注入三种方式来实现,Spring支持setter注入和构造器注入,通常使用构造器注入来注入必须的依赖关系,对于可选的依赖关系,则setter注入是更好的选择,setter注入需要类提供无参构造器或者无参的静态工厂方法来创建对象

什么叫AOP(面向切面编程)?

答:AOP(Aspect-Oriented Programming)指一种程序设计范型,该范型以一种称为切面(aspect)的语言构造为基础,切面是一种新的模块化机制,用来描述分散在对象、类或方法中的横切关注点(crosscutting concern)

4.mybatis的工作原理?

MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession。

  3.Hibernate的工作原理?

1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件

2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>读取并解析映射信息

3.通过config.buildSessionFactory();//创建SessionFactory

4.sessionFactory.openSession();//打开Sesssion

5.session.beginTransaction();//创建事务Transation

6.persistent operate持久化操作

7.session.getTransaction().commit();//提交事务

8.关闭Session

9.关闭SesstionFactory

为什么要用:1对于JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

2 Hibernate 是一个基于JDBC的主流框架,是一个优秀的ORM.很大程度的简化DAO层的编码工作

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

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

Struts原理

发送http请求

Web服务器(tomcat)

执行struts核心过滤器strutsPrepareAanltxx

加载struts配置文件中配置信息,找到对应的Action类并实例化

执行各类拦截器和Action中对应方法

配置文件中找到返回结果

转发到具体页面或其他操作

struts有什么优缺点

优点:1 实现MVC模式,结构清晰;

2 丰富的struts的标记库,利用好能大大提高开发效率

3 全局结果与声明式异常

4 可以使用OGNL进行参数传递

5 各类方便使用的拦截器

缺点  1 转到表现层时,需要配置结果页面;页面多了比较复杂

2 对Servlet 的依赖性过强

3 struts 标签稍微比el 表达式繁重

SpingBoot几个常用的注解

@RestController和@Controller指定一个类,作为控制器的注解

(2)@RequestMapping方法级别的映射注解,这一个用过Spring MVC的小伙伴相信都很熟悉

(3)@EnableAutoConfiguration和@SpringBootApplication是类级别的注解,根据maven依赖的jar来自动猜测完成正确的spring的对应配置,只要引入了spring-boot-starter-web的依赖,默认会自动配置Spring MVC和tomcat容器

(4)@Configuration类级别的注解,一般这个注解,我们用来标识main方法所在的类,完成元数据bean的初始化。

(5)@ComponentScan类级别的注解,自动扫描加载所有的Spring组件包括Bean注入,一般用在main方法所在的类上

(6)@ImportResource类级别注解,当我们必须使用一个xml的配置时,使用@ImportResource和@Configuration来标识这个文件资源的类。

(7)@Autowired注解,一般结合@ComponentScan注解,来自动注入一个Service或Dao级别的Bean

(8)@Component类级别注解,用来标识一个组件,比如我自定了一个filter,则需要此注解标识之后,Spring Boot才会正确

SpringBoot特性

1、创建独立的Spring项目

2、内置Tomcat和Jetty容器

3、提供一个starter POMs来简化Maven配置

4、提供了一系列大型项目中常见的非功能性特性,如安全、指标,健康检测、外部配置等

5、完全没有代码生成和xml配置文件

SpringBoot优缺点

优点:

1、快速构建项目。

2、对主流开发框架的无配置集成。

3、项目可独立运行,无须外部依赖Servlet容器。

4、提供运行时的应用监控。

5、极大的提高了开发、部署效率。

6、与云计算的天然集成。

缺点:

1、如果你不认同spring框架,也许这就是缺点。

SpringBoot核心功能

1、独立运行Spring项目

Spring boot 可以以jar包形式独立运行,运行一个Spring Boot项目只需要通过java -jar xx.jar来运行。

2、内嵌servlet容器

Spring Boot可以选择内嵌Tomcat、jetty或者Undertow,这样我们无须以war包形式部署项目。

3、提供starter简化Maven配置

spring提供了一系列的start pom来简化Maven的依赖加载,例如,当你使用了spring-boot-starter-web,会自动加入如图5-1所示的依赖包。

4、自动装配Spring

SpringBoot会根据在类路径中的jar包,类、为jar包里面的类自动配置Bean,这样会极大地减少我们要使用的配置。当然,SpringBoot只考虑大多数的开发场景,并不是所有的场景,若在实际开发中我们需要配置Bean,而SpringBoot灭有提供支持,则可以自定义自动配置。

5、准生产的应用监控

SpringBoot提供基于http ssh telnet对运行时的项目进行监控。

6、无代码生产和xml配置  

SpringBoot不是借助与代码生成来实现的,而是通过条件注解来实现的,这是Spring4.x提供的新特性。

什么是SpringBoot

Spring Boot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目。大多数SpringBoot项目只需要很少的配置文件。

原文地址:https://www.cnblogs.com/lingqin/p/10055816.html

时间: 2024-11-11 16:05:43

java框架常见的面试题的相关文章

Java 最常见 200+ 面试题全解析:面试必备

本文分为十九个模块,分别是: Java 基础.容器.多线程.反射.对象拷贝.Java Web .异常.网络.设计模式.Spring/Spring MVC.Spring Boot/Spring Cloud.Hibernate.MyBatis.RabbitMQ.Kafka.Zookeeper.MySQL.Redis.JVM ,如下图所示: Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环

Java最常见的面试题:模块十二

十二.Hibernate 113. 为什么要使用 hibernate? 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现.他很大程度的简化DAO层的编码工作 hibernate使用Java反射机制,而不是字节码增强程序来实现透明性. hibernate的性能非常好,因为它是个轻量级框架.映射的灵活性很出色.它支持各种关系数据库,从一对一到多对多的各种复杂关系. 114. 什么是 ORM 框架?

Java最常见的面试题:模块十八

十八.Redis 179. redis 是什么?都有哪些使用场景? Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis 使用场景: 数据高并发的读写 海量数据的读写 对扩展性要求高的数据 180. redis 有哪些功能? 数据缓存功能 分布式锁的功能 支持数据持久化 支持事务 支持消息队列 181. redis 和 memecache 有什么区别? memcached所有的值均是简单的字符串,r

Android常见笔试&amp;面试题

一.JAVA部分: (挂起) 二.Android部分: 1.Android系统的架构 2.Android常用的五大布局 3.Android四大组件是什么 4.Activity的生命周期 5.Activity的四种启动模式 6.Service的启动方式有几种,有什么区别 7.BroadCastReceiver的使用机制 8.谈一谈Handler的工作机制 9.Service运行在哪个线程中 10.两个子线程中如何通过Handler来进行通讯 11.对于不同分辨率屏幕适配你是怎么做的 12.怎样彻底

Java初中级程序员面试题宝典

Java基础部分 &与&&区别? &和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假:但是&&当第一个条件不成之后,后面的条件都不执行了,而&则还是继续执行,直到整个条件语句执行完为止. 使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 使用 final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容 还是可以改变的. 静态变量和实例变量的区别? 在语法定义上的区别: 静态变

2019滴滴java面试总结 (包含面试题解析)

2019滴滴java面试总结  (包含面试题) 本人6年开发经验.今年年初找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.滴滴等公司offer,岗位是既有php也有Java后端开发,最终选择去了滴滴. 面试了很多家公司,感觉大部分公司考察的点都差不多,所以将自己的心得记下来,希望能给正在找或者准备找工作的朋友提供一点帮助.另外,目前在滴滴也做面试官的工作,身份从求职者变为面试官,看问题的很多角度也不一样,所以下文中既有求职者的视角,也有面试官的视角. 面试流程 先说下面试流程,一般大公司都有3

2019年Java后端工程师常见面试题和感想

来新公司有5个月了,从第二个月开始就参与公司后端工程师的面试工作了,包括校招在内,面试超过100个(包括40个校招的终面)应聘者了,应聘者中有超过10年的技术经理,有6年以上的高级开发,有3到5年的中级开发,有刚毕业的初级开发,当然还有未毕业的硕士生本科生,有入职公司的,也有外包公司来参与公司项目的,总之,各种水平层次的都有,每个人的素质也参差不齐,今天就分两个部分讲一讲,一个是作为技术面试官,我比较喜欢问的问题,二是面试后的一些感想,希望对大家有帮助,同时也是要鞭策自己. 一,常见的面试题 这

常见Android面试题及答案(详细整理)

常见Android面试题及答案(详细整理) 1. 请描述一下Activity 生命周期. 答: 如下图所示.共有七个周期函数,按顺序分别是: onCreate(), onStart(), onRestart(), onResume(), onPause(),onStop(), onDestroy(). onCreate(): 创建Activity时调用,设置在该方法中,还以Bundle的形式提供对以前存储的任何状态的访问. onStart(): Activity变为在屏幕上对用户可见时调用. o

Java基础常见英语词汇

(转自http://www.jianshu.com/p/2743fe834166) Java基础常见英语词汇(共70个) ['?bd?ekt] ['?:rientid]导向的 ['pr??ɡr?m??]编程OO: object-oriented ,面向对象 OOP: object-oriented programming,面向对象编程 [d?'vel?pm?nt][k?t]工具箱 ['v??tj??l]虚拟的JDK:Java development kit, java开发工具包 JVM:java