本文共 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/