java后台框架一些常用到的技术理论点

1、Springmvc的运行原理

 

1. 客户端请求提交到DispatcherServlet 

2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller 

3. DispatcherServlet将请求提交到Controller 

4. Controller调用业务逻辑处理后,返回ModelAndView 

5. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图 

6. 视图负责将结果显示到客户端 DispatcherServlet是整个Spring MVC的核心。它负责接收HTTP请求组织协调Spring MVC的各个组成部分。

 

 

2、Struts2的运行原理

1、 在servlet容器启动时加载web.xml,通过核心控制器FilterDispatcher加载struts.xml文件并进行解析,将解析的信息封装在ActionMapper类中。

 

2、 客户端发送请求,请求被核心控制器FilterDispatcher进行拦截。

 

3、 FilterDispatcher通过ActionMapper找到对应的ActionForm和Action中的响应方法,在访问方法前先经过Struts2设置的17个默认拦截器,其中一个拦截器的功能是将请 求时的数据封装在ActionForm中,然后方法进行响应。

 

4、 方法处理完后返回一个字符串,通过sturts.xml配置文件中的<result />找到响应的请求路径。

 

 

3、Springmvc和struts的区别

 

1、springmvc基于方法开发的,struts2基于类开发的。

 

2、spring mvc的入口是servlet(前端控制器),而struts2是filter(核心过滤器),这样就导致了二者的机制不同。

 

3、 拦截器实现机制上,Struts2有以自己的interceptor机制,SpringMVC用的是独立的AOP方式。

 

4、struts2接受参数时是用类属性接受参数的,而springmvc用的是方法的形参。

 

5、struts2响应的数据存放在modelandview里,而struts2响应的参数仍然存放在类属性中,响应和接受的参数都放在类属性中会显得很乱。

 

6、 另外,springmvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。

 

 

4、什么是mvc

 

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

 

 

5、Springmvc和spring的区别

 

Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring。

简单点的话可以将SpringMVC类比于Struts。

Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring。

Spring可以说是一个管理bean的容器,也可以说是包括很多开源项目的总称,spring mvc是其中一个开源项目,所以简单走个流程的话,http请求一到,由容器(如:tomact)解析http搞成一个request,通过映射关系(路径,方法,参数啊)被spring mvc一个分发器去找到可以处理这个请求的bean,那tomcat里面就由spring管理bean的一个池子(bean容器)里面找到,处理完了就把响应返回回去。

 

SpringMVC是一个MVC模式的WEB开发框架;

 

Spring是一个通用解决方案, 最大的用处就是通过Ioc/AOP解耦, 降低软件复杂性, 所以Spring可以结合SpringMVC等很多其他解决方案一起使用, 不仅仅只适用于WEB开发

 

 

6、说下Spring的懒加载,为什么要用呢?

 

所谓懒加载(lazy)就是延时加载,延迟加载

就是说是否在spring容器加载的时候将bean加载到容器中。在没有设置的情况下,默认是false的,就是说不使用懒加载模式。

 

至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适,
因为
内存容量有限 ,为了减少并发量,减少系统资源的消耗,
我们让数据在需要的时候才进行加载,这时我们就用到了懒加载。

 

 

7、Spring的运行原理,

 

 

 

Spring的核心控制器是什么

 

DispatcherServlet

 

 

IOC和AOP的概念,

 

IOC:Inversion of Control控制反转,也叫(Dependency Injection)依赖注入,是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是通过容器生成,同时,要是产生的是单例的bean,他还可以给管理bean的生命周期。

 

AOP面向切面编程将程序中的交叉业务逻辑(比如安全,日志,事务),封装成一个切面,然后注入到目标业务逻辑中去

 

 

8、Spring是如何控制事务的

 

Spring事务管理主要包括3个接口,Spring的事务主要是由他们三个共同完成的。

1)PlatformTransactionManager:事务管理器--主要用于平台相关事务的管理

 主要有三个方法:commit  事务提交;

      rollback  事务回滚;

      getTransaction  获取事务状态。

2)TransactionDefinition:事务定义信息--用来定义事务相关的属性,给事务管理器PlatformTransactionManager使用

这个接口有下面四个主要方法:

getIsolationLevel:获取隔离级别;

getPropagationBehavior:获取传播行为;

getTimeout:获取超时时间;

isReadOnly:是否只读(保存、更新、删除时属性变为false--可读写,查询时为true--只读)

事务管理器能够根据这个返回值进行优化,这些事务的配置信息,都可以通过配置文件进行配置。

3)TransactionStatus:事务具体运行状态--事务管理过程中,每个时间点事务的状态信息。

例如它的几个方法:

hasSavepoint():返回这个事务内部是否包含一个保存点,

isCompleted():返回该事务是否已完成,也就是说,是否已经提交或回滚

isNewTransaction():判断当前事务是否是一个新事务

 

 

9、有哪些不同类型的IOC(依赖注入)?

构造器依赖注入:构造器依赖注入在容器触发构造器的时候完成,该构造器有一系列的参数,每个参数代表注入的对象。

Setter方法依赖注入:首先容器会触发一个无参构造函数或无参静态工厂方法实例化对象,之后容器调用bean中的setter方法完成Setter方法依赖注入。

 

你推荐哪种依赖注入?构造器依赖注入还是Setter方法依赖注入?

你可以同时使用两种方式的依赖注入,最好的选择是使用构造器参数实现强制依赖注入,使用setter方法实现可选的依赖关系。

 

10、使用spring框架有什么好处?

使用spring框架可以很好的将控制层和持久层耦合到一起,并降低各个模块之间的耦合性,spring有两大核心IOC和AOP使用spring可以控制事务等。

 

11、Mybatis和hibernate的区别

 

(1)sql方面:mybaits通过mapper.xml维护映射结果,程序员手动编写sql相比hibernate自动生成hql(hibernate sql)更加灵活,sql调优更加容易hibernate的hql数据库移植性更好,体现在强壮性。hibernate在级联删除的时候效率低;数据量大, 表多的时候,基于关系操作会变得复杂。

(2)缓存方面:mybatis和hibernate都可以使用第三方缓存,而hibernate相比maybatis有更好的二级缓存机制。

 

 

12、说说Hibernate怎么使用分页

 

1.首先我们定义一个类,其将实体对象作为泛型接收参数,里面定义的属性包括总数及行的信息。

2. control层接收前台传递的参数(开始、结束、排序字段等信息),然后调用service的方法获得一个page对象。

3. service层的方法进行处理的时候,首先将查询的条件参数存放到Criterion的对象中,作为查询条件。 

4. 同时将orders的map对象取出,根据升序降序的不同存放到Order的对象中,处理排序。

5. Criterion和Order作为函数的参数,hibernateDao继承了SimpleHibernateDao,其接收这几个参数,按照Criteria分页查询。

6. 我们前台使用datatables组件进行分页的处理,后台调用相关方法 

 

 

13、说说Mybatis的懒加载,说明其作用

 

懒加载思想

(所谓懒加载(lazy)就是延时加载,延迟加载。)

 

简单的将就是拖到最后一刻,万不得已了,才加载,才开始占用资源。所谓懒加载,写的就是其getter方法。在开发中,当程序中需要利用的资源时,在程序启动的时候不加载,只有在运行当需要这些资源的时候再去加载这些资源。

 

作用

内存容量有限 ,为了减少并发量,减少系统资源的消耗,
我们让数据在需要的时候才进行加载,这时我们就用到了懒加载

 

 

14、Mybatis动态sql是什么意思?你用过哪些?

常用的动态sql : where  if  foreach  when

 1. 对于一些复杂的查询,我们可能会指定多个查询条件,但是这些条件可能存在也可能不存在,例如在58同城上面找房子,我们可能会指定面积、楼层和所在位置来查找房源,也可能会指定面积、价格、户型和所在位置来查找房源,此时就需要根据用户指定的条件动态生成SQL语句。如果不使用持久层框架我们可能需要自己拼装SQL语句,还好MyBatis提供了动态SQL的功能来解决这个问题。

3. $和#号区别 :

动态 SQL 是 mybatis 的强大特性之一,也是它优于其他 ORM 框架的一个重要原因。mybatis 在对 sql 语句进行预编译之前,会对 sql 进行动态解析,解析为一个 BoundSql 对象,也是在此处对动态 SQL 进行处理的。在动态 SQL 解析阶段, #{ } 和 ${ } 会有不同的表现。

#{ }:解析为一个 JDBC 预编译语句(prepared statement)的参数标记符。

 

 

15、mybatis里的标签有哪些?并说明其作用。

 

16、简单的说一下MyBatis的一级缓存和二级缓存?

Mybatis首先去缓存中查询结果集,如果没有则查询数据库,如果有则从缓存取出返回结果集就不走数据库。Mybatis内部存储缓存使用一个HashMap,key为hashCode+sqlId+Sql语句。value为从查询出来映射生成的java对象
Mybatis的二级缓存即查询缓存,它的作用域是一个mapper的namespace,即在同一个namespace中查询sql可以从缓存中获取数据。二级缓存是可以跨SqlSession的。

 

17、手写Oracle使用分页和mysql使用分页,就查用户表吧

 

  SELECT *  FROM (SELECT A.*, ROWNUM RN   FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40)  WHERE RN > 20

 

Mysql :  select * from tableName limit m,n    tableName表示要分页表名 , m从第几页开始    n  页要显示数据的数量

 

 

18、Maven是干什么的?

 

它是Apache的一个开源项目,主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。

 

 

19、说下maven的搭建使用流程

 

(1)新建maven项目:在file中选择new下的other,选择maven project,在create a simple project中打√,
   此处可以选择workspace,可以使用eclipse中系统默认的workspace路径,
   点击next,在弹出的groupID和artifact ID中输入人为提供的可以使用的ID
(2)配置底层依赖文件:在pom中添加代码块,若不添加此底层依赖文件,则无法运行任何东西。

 

 

20、用过maven聚合项目吗?怎么用的?

 

父子项目    一个父级项目 多个子集项目  通过父级项目 的porm   把多个子集 联系起来  子级项目分别做自己的项目

 

21、Maven常用的命令

 

1.clean:Maven默认的编译后的文件都放在target目录,clean命名会去清理该目录

2.install:先执行package命令,然后将打包后的文件拷贝到本地Maven repository中

3.test:执行项目中的测试(默认是src/test/java下的测试类)

4.clean test -Dtest=Testclass:在项目开发过程中,我们可能经常会需要执行单个测试类,我们可以通过test命令带一个   test参数,来执行指定测试类的测试

5.clean install :先clean,再install

6.deploy:先执行install,再将打包的文件传到远程的仓库中,这个远程Maven repository需要在项目的POM文件中定义(distributionManagement节点),还需要配置帐号与密码(配置在本地Maven配置文件中,servers节点)。一般需要控制这种权限,这里不深入。

 

 

22、spring boot用过吗?说下你的理解

 

1.springboot是spring的一个升级,对开发者来说,熟悉springboot有助于快速开发javaweb项目.

2.springboot一个重要的概念就是自动配置,约定大于配置,使得开发者无须像之前做spring项目那样做大量的配置,有了springboot,比如我们要集成redis,如果你使用的是mavan来构建项目,只需要引入redis的依赖,然后在application.properties或者application.yml配置必要的东西就可以了.如果要覆盖默认配置,同样也在配置文件写就可以.也就是说,我们使用springboot,不仅仅可以享受快速开发,也可以很轻松的覆盖默认配置

 

 

23、说说maven和springboot的区别

 

maven是项目管理工具     springboot是框架   一个项目管理版本控制。一个让配置更简单

 

 

23、Spring Boot总结
SpringBoot核心功能

2.1、独立运行Spring项目
Spring boot 可以以jar包形式独立运行,运行一个Spring Boot项目只需要通过java -jar xx.jar来运行。
2.2、内嵌servlet容器
Spring Boot可以选择内嵌Tomcat、jetty或者Undertow,这样我们无须以war包形式部署项目。
2.3、提供starter简化Maven配置
spring提供了一系列的start pom来简化Maven的依赖加载,例如,当你使用了spring-boot-starter-web,会自动加入如图5-1所示的依赖包。
2.4、自动装配Spring 
SpringBoot会根据在类路径中的jar包,类、为jar包里面的类自动配置Bean,这样会极大地减少我们要使用的配置。当然,SpringBoot只考虑大多数的开发场景,并不是所有的场景,若在实际开发中我们需要配置Bean,而SpringBoot灭有提供支持,则可以自定义自动配置。
2.5、准生产的应用监控
SpringBoot提供基于http ssh telnet对运行时的项目进行监控。
2.6、无代码生产和xml配置  
SpringBoot不是借助与代码生成来实现的,而是通过条件注解来实现的,这是Spring4.x提供的新特性。
3、SpringBoot优缺点
优点:
3.1、快速构建项目。
3.2、对主流开发框架的无配置集成。
3.3、项目可独立运行,无须外部依赖Servlet容器。
3.4、提供运行时的应用监控。
3.5、极大的提高了开发、部署效率。
3.6、与云计算的天然集成。
缺点:
3.1、如果你不认同spring框架,也许这就是缺点。
4、SpringBoot特性
4.1、创建独立的Spring项目
4.2、内置Tomcat和Jetty容器
4.3、提供一个starter POMs来简化Maven配置
4.4、提供了一系列大型项目中常见的非功能性特性,如安全、指标,健康检测、外部配置等
4.5、完全没有代码生成和xml配置文件
6、SpringBoot CLI
SpringBoot CLI 是SpringBoot提供的控制台命令工具。
7、SpringBoot maven 构建项目
spring-boot-starter-parent:是一个特殊Start,它用来提供相关的Maven依赖项,使用它之后,常用的包依赖可以省去version标签。
8、SpringBoot几个常用的注解
(1)@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才会正确识别。

 

24、springboot是如何管理事务的?

 

直接写@transactional注解就行,在方法就是方法事务,类上就是类事务

 

24、介绍下dobbo框架,运行原理、在项目中的使用,你遇到过哪些问题?

 

运行原理

Dubbo是一种分布式服务框架。 Webservice也是一种服务框架,但是webservice并不是分布式的服务框架,他需要结合F5实现负载均衡。因此,dubbo除了可以提供服务之外,还可以实现软负载均衡。它还提供了两个功能Monitor 监控中心和调用中心。这两个是可选的,需要单独配置。

 

遇到过哪些问题?

1.同时配置了XML和properties文件,则properties中的配置无效

只有XML没有配置时,properties才生效

2.spring 2.x初始化死锁问题。在spring解析到dubbo:service时,就已经向外暴露了服务,而spring还在接着初始化其他bean,如果这时有请求进来,并且服务的实现类里有调用applicationContext.getBean()的用法。getBean线程和spring初始化线程的锁的顺序不一样,导致了线程死锁,不能提供服务,启动不了。

解决:不要在服务的实现类中使用applicationContext.getBean();如果不想依赖配置顺序,可以将dubbo:provider的deplay属性设置为-1,使dubbo在容器初始化完成后再暴露服务。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值