博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring面试题
阅读量:3958 次
发布时间:2019-05-24

本文共 6375 字,大约阅读时间需要 21 分钟。

1.mybatis中#{}和${}区别

#{}:占位符号,好处防止sql注入

${}:sql拼接符号
#方式能够很大程度防止sql注入,$方式无法防止sql注入。
$方式一般用于传入数据库对象,例如传入表名
一般能用#的就别用$

2.mybatis中resultMap和resultType区别?

两者都是表示查询结果集与java对象之间的一种关系,处理查询结果集映射到java对象。 

resultMap:表示将查询结果集中的列一一映射到bean对象的各个属性。
ResultType:表示的是bean中的对象类,此时可以省略掉resultMap标签的映射,但是必须保证查询结果集中的属性 
和 bean对象类中的属性是一一对应的,此时大小写不敏感,但是有限制。

3.jdbc有哪些不足之处,mybatis是如何解决这些问题的?

1.数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。
2.Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码
解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
3.向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决:Mybatis自动将java对象映射至sql语句。
4.对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
解决:Mybatis自动将sql执行结果映射至java对象。

4.常用sql语句标签

if、choose、when、otherwise、where、trim、set、foreach

5.pagehelper如何使用

1.导入pagehelper依赖

2.在mybatis的配置文件中配置plugin插件
3.在代码中通过PageHelper.startPage(int num,int size)设置查询页码和每页记录数
4.把查询结果封装到PageInfo工具类中,获得相关分页信息

6.实体类与表字段不同如何解决?

1.在sql语句中给字段添加别名,使用别名与属性名相同

2.通过resultMap实现字段与属性的映射

7.什么是maven仓库?maven有哪些仓库,它们的区别?

本地仓库路径配置

所以本地仓库就是相当于加了一层jar包缓存,先到这里来查。如果这里查不到,
那么就去私服上找,如果私服也找不到,那么去中央仓库去找,找到jar后,会把jar的信息同步到私服和本地仓库中。
私服,就是公司内部局域网的一台服务器而已。
中央仓库:该仓库存储了互联网上的jar,由Maven团队来维护.

8.maven的生命周期的命令

clean、compile、test、package、install、deploy   maven中servlet的依赖范围,它的作用

provided:编译期有效,运行期不需要提供,不会打入包中。

9.maven坐标三要素

groupID,artifactId,version

10.springmvc返回值类型

返回值可以有很多类型,有String, ModelAndView。ModelAndView类把视图和数据都合并的一起的,但一般用String比较好。

11.springmvc得到参数的方法

直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面。

12.controller是单例吗?

是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解方案是在控制器里面不能写字段。

13.mvc主要组件

(1)前端控制器 DispatcherServlet 

作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。
(2)处理器映射器HandlerMapping
 作用:根据请求的URL来查找Handler。
(3)处理器适配器HandlerAdapter
注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。
(4)处理器Handler。
(5)视图解析器 ViewResolver。

14.mvc自定义拦截器

有两种写法,一种是实现接口,另外一种是继承适配器类,然后在SpringMvc的配置文件中配置拦截器即可:

  <!-- 配置SpringMvc的拦截器 -->
<mvc:interceptors>
    <!-- 配置一个拦截器的Bean就可以了 默认是对所有请求都拦截 -->
    <bean id="myInterceptor" class="com.MyHandlerInterceptor"></bean>

    <!-- 只针对部分请求拦截 -->

    <mvc:interceptor>
       <mvc:mapping path="/modelMap.do" />
       <bean class="com.MyHandlerInterceptorAdapter" />
    </mvc:interceptor>
</mvc:interceptors>

15.mvc和ajax交互

通过 jackson 框架就可以把 java 里面的对象直接转化成 js 可以识别的 json 对象具体步骤如下 :

1.加入jackson相关依赖
2.在接受 Ajax 方法里面可以直接返回 Object,List 等,但方法前面要加上@ResponseBody注解

16.springboot核心注解由哪几个注解组成

@springbootapplication

@springbootconfigration 组合configuration注解,实现配置文件的功能

@enableautoconfiguration 打开自动配置功能
@componentscan 组件扫描

17.springboot mvc 和spring区别

springboot 由于web开发的配置繁琐,为了简化web开发的配置问题

诞生了springboot。它快速搭建web项目,并推出了预定大于配置的思想
简化配置的流程

springmvc 基于servlet的一个mvc框架,解决web开发的问题

spring 是一个web开发的轻量级框架,ioc控制反转,aop面向切面

Spring最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制

反转。当使用 DI 或者是 IOC 的时候,可以开发松耦合应用。松耦合应用的单元测试

可以很容易的进行。

Spring MVC 提供了一种分离式的方法来开发 Web 应用。通过运用像 

DispatcherServelet,MoudlAndView 和 ViewResolver 等一些简单的概念,开发 

Web 应用将会变的非常简单。

Spring 和 SpringMVC 的问题在于需要配置大量的参数。
Spring Boot 通过一个自动配置和启动的项来目解决这个问题。为了更快的构建产品就

绪应用程序,Spring Boot 提供了一些非功能性特征。

18.什么是springboot stater?

启动器是一套方便的依赖没描述符,它可以放在自己的程序中。你可以一站式的获取你

所需要的 Spring 和相关技术,而不需要依赖描述符的通过示例代码搜索和复制黏贴的
负载。

19.spring常用注解

@Controller 控制层,里面有多个连接

@Service 业务层,一般对于接口和实现

@Qualifier 如果一个接口有多个实现,那么注入时候加上唯一标示

@Repository 一般的dao层

@Autowired 自动注入依赖

@RequestMapping (value=’’,method={RequestMethod。GET或者POSt})绑定url

@RequestParam (value=’’ required=false)绑定参数

@ModelAttribute 一般用于controller层,注解的方法会在所以mapping执行之前执行,并且可以绑定参数到Model model里面。

@Transactional (readOnly=true)注解式事务

@Value(“${}”)可以注入properties里面的配置项

@ControllerAdvice 是spring3提供的新注解,控制器增

@ExceptionHandler 如果在controller方法遇到异常,就会调用含有此注解的方法。

@SringBootApplication相当于@configuration,@EnableAutoConfiguation @ComponentScan三个注解合用。

@EnableDiscoveryclient 自定义服务发现的客服端

@EnableEurekaClient配置本应用将使用服务注册和服务发现,注意:注册和发现用这个注解。

@EnableHystrix表示启动断路器,断路器依赖于服务注册和发现。

@HystrixCommand注解方法失败后,系统将西东切换到fallbackMethod方法执行,

@EnableAutoConfiguration spring boot自动配置,尝试根据你添加的jar依赖自动配置你的spring应用。

@ComponentScan 表示将该类自动发现并注册bean 可以自动收集所有的spring组件

@Comfiguration 相当于传统的xml配置文件

@Import 导入其他配置类

@ImportResource用来 加载xml配置文件

@FeignClient注解中的fallbank属性指定回调类

@ResController是@controller和@ResponseBody的结合体

20.springboot的配置文件有几种,区别?

.properties 和 .yml,它们的区别主要是书写格式不同

21.springcloud如何实现服务注册

1.服务发布时,指定对应的服务名,将服务注册到 注册中心(eureka或zookeeper)

2.注册中心加@EnableEurekaServer,客户端服务用@EnableDiscoveryClient,然后用ribbon或feign进行服务直接的调用发现。

22.微服务的优缺点

微服务为了解决当单体应用的业务逻辑和访问量不断上升,所引发的代码冗余和维护修改困难的尴尬场景

微服务的优点:解耦,微服务是松耦合的,在开发和测试阶段独立便于团队开发和测试,微服务可以使用不同的语言开发

微服务的缺点:对服务架构设计要求高,分布式系统复杂难以管理,服务集群之间的数据统一问题

23.谈一谈springcloud和springboot的关系

springboot是对spring的一种简化,它同样是一个web开源框架,但是它在maven管理方面(pom文件),提出了整合包的概念,并在配置文件方面(yml文件)解决spring在web开发过程中,配置文件繁琐问题。它提出了约定大于配置的理念,提倡使用注解的方式来取代配置繁琐的xml。springboot是微服务架构的基础,每一个springboot的小项目都是一个微服务单元

springboot专注于快速开发单体应用,springcloud是关注全局的微服务协调者,对springboot项目的整合并管理起来,为各个微服务提供服务注册,负载均衡,服务监控和容错管理

24.微服务的概念

微服务是相对于传统的单体应用而言的,为了解决当单体应用的业务逻辑和访问量不断上升,所引发的代码冗余和维护修改困难的尴尬场景。它的核心在于把单体服务的各个核心模块拆分开来,做成一个个独立的服务,各个服务对外暴露统一的端口调用,以达到服务的低耦合高内聚高可用,可扩展的设计理念

25.springcloud的断路器作用

当一个服务调用另一个服务由于网络原因或者自身原因出现问题时 ,调用者就会等待被调者的响应,

当更多的服务请求到这些资源时,导致更多的请求等待,这样就会发生连锁效应,断路器就是解决这一问题的。

当a服务不可用时,如果b服务依赖a,a的不可用可能会导致b的不可用,可能会导致依赖b的服务的不可用,雪崩效应形成

解决雪崩效应,hystrix通过服务降级和服务熔断,解决当某个服务不可用占用过多的系统资源,服务熔断是指,当某个异常条件被触发时就直接熔断整个服务,而不是一直等到服务超时

26.ribbon和feign区别

Ribbon和Feign都是用于调用其他服务,不过方式不同。

1、启动类使用的注解不同,Ribbon使用的时@RibbonClient,Feign用的时@EnableFeignClients

2、服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口使用@FeignClient声明。

3、调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。

Feign则是在Ribbon的基础进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可。

不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

 

22.Ribbon和Feign的不同

ribbon实现负载均衡

fegin实现客户端访问服务端结构化的工具模板

Ribbon和Feign都是用于调用其他服务,不过方式不同。

1、启动类使用的注解不同,Ribbon使用的时@RibbonClient,Feign用的时@EnableFeignClients
2、服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口使用@FeignClient声明。
3、调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。
Feign则是在Ribbon的基础进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可。
不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

springcloud如何实现服务注册

1.服务发布时,指定对应的服务名,将服务注册到 注册中心(eureka或zookeeper)
2.注册中心加@EnableEurekaServer,客户端服务用@EnableDiscoveryClient,然后用ribbon或feign进行服务直接的调用发现。
90-
springmvc返回string和modelandview时,如何跳转页面。向页面传递数据
返回字符String时,返回的字符串就就直接是对应的视图的名字,可以使用方法的形参中的Model对象的addAttribute方法传递数据.
返回ModelAndView对象时,使用对象的addObject方法传递数据,使用对象的setViewName方法设置视图的名称.

转载地址:http://kvazi.baihongyu.com/

你可能感兴趣的文章
[杂记] 新年物语&关于Mysql引擎性能测试
查看>>
[心得] 近期更新&关于Infobright
查看>>
[杂记] 流量统计 & 短信接口
查看>>
[Java] JRebel + Maven + Jetty 热部署
查看>>
[算法] 从 Memcached 分布式应用看一致性哈希散列函数的选择
查看>>
[中间件] 消息处理利器 ActiveMQ 的介绍 & Stomp 协议的使用
查看>>
[设计] 原型界面设计利器 Balsamiq Mockups 推荐
查看>>
[闲话] 在西方的程序员眼里,东方的程序员是什么样的
查看>>
[管理] 成功之路的探寻 —— “三力” 理论
查看>>
[连载] Socket 深度探索 4 PHP (一)
查看>>
[连载] Socket 深度探究 4 PHP (二)
查看>>
[连载] Socket 深度探究 4 PHP (三)
查看>>
[无线] Android 系统开发学习杂记
查看>>
[无线] 浅析当代 LBS 技术
查看>>
[杂感] 缅怀乔布斯
查看>>
[无线] 让Android支持cmwap上网
查看>>
[教程] Android PHP 最佳实践视频教程
查看>>
[无线] AndroidManifest.xml配置文件详解
查看>>
[无线] 2012 智能手机市场分析
查看>>
[移动] Android推送方案分析(MQTT/XMPP/GCM)
查看>>