2019年公司最新面试题

石家庄东美春宁公司

1.Mybatis中$#区别

自我理解:#{}出来的字段会加上双引号,而${}出来的字段不会加双引号;${}一般用来传输表名;能用#尽量用#,最好不要用$
核心回答:#防止sql注入,$防不住sql注入

2.程序中异常如何处理

Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。
一般情况下是用try来执行一段程序,如果系统会抛出(throw)一个异常对象,可以通过它的类型来捕获(catch)它,或通过总是执行代码块(finally)来处理;try用来指定一块预防所有异常的程序;catch子句紧跟在try块后面,用来指定你想要捕获的异常的类型;throw语句用来明确地抛出一个异常;throws用来声明一个方法可能抛出的各种异常;finally为确保一段代码不管发生什么异常状况都要被执行;try语句可以嵌套,每当遇到一个try语句,异常的结构就会被放入异常栈中,直到所有的try语句都完成。如果下一级的try语句没有对某种异常进行处理,异常栈就会执行出栈操作,直到遇到有处理这种异常的try语句或者最终将异常抛给JVM。

3.程序日志收集

采用slf4j作为日志API,采用logback作为日志输出工具,用slf4j桥接方式替换掉log4j和commons-logging。
采用trace(追踪)、debug(调试)、info(信息)、warn(警告)、error(错误)、fatal(致命)共6种日志级别。
采用dev(开发环境)、test(测试环境)、production(生产环境)等不同的日志配置,根据环境变量自动识别。
特殊的记录,需要大批量写入日志文件,应该采用异步线程写文件。

4.如何通过数据库进行数据恢复

mysql可以通过备份恢复文件	    也可以用日志恢复数据
日志恢复教程:1.找到my.ini文件(在此文档里找到[mysqld]标签,并且在下面加上log-bin=binary-log这句话 log-bin操作符命令为开启日志文件
2.在mysql安装目录打开命令提示符,输入mysqlbinlog “C:\ProgramData\MySQL\MySQL Server 5.7\Data\binary-log.000001” --start-datetime=“2018-11-05 18:00:04.531” --stop-datetime=“2018-11-05 18:01:10.125” |mysql -u root -p
就可以恢复删除的数据了!
注意:当你误删一条数据,利用二进制日志恢复的时候你需要寻找的是 创建数据的那个节点(时间),而并非你删除数据的那个节点(时间)
当你回滚数据,回滚到删数据之前的数据库状态(只执行了stop-position 或者stop-datetime),那么在stop-position之后所有的数据库操作都将丢失所以你需要    start-position stop-position 回滚单条被删数据 (start-datetime为开始恢复的时间,stop-datetime为结束恢复的时间)


1、首先导入全备数据
mysql -h10.6.208.183 -utest2 -p123  -P3310 < test.sql,也可以直接在mysql命令行下面用source导入
2、恢复bin-log.000002
   mysqlbinlog bin-log.000002 |mysql -h10.6.208.183 -utest2 -p123  -P3310  
3、恢复部分 bin-log.000003
   在general_log中找到误删除的时间点,然后更加对应的时间点到bin-log.000003中找到相应的position点,需要恢复到误删除的前面一个position点。
可以用如下参数来控制binlog的区间
--start-position 开始点 --stop-position 结束点
--start-date 开始时间  --stop-date  结束时间
找到恢复点后,既可以开始恢复。
  mysqlbinlog mysql-bin.000003 --stop-position=208 |mysql -h10.6.208.183 -utest2 -p123  -P3310

5.数据库事务的特性

原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性:如果事务执行之前数据库是一个完整的状态,那么事务结束后,无论事务是否执行成功,数据库仍然是一个完整的状态。
  数据库的完整状态:当一个数据库中的所有的数据都符合数据库中所定义的所有约束,此时可以称数据库是一个完整的状态。
隔离型:多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离。
持久性:指一个事务一旦被提交,他对数据库的影响是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作

补充:数据库三大范式

1、第一范式*(确保每列保持原子性)
2、第二范式(确保表中的每列都和主键相关)
3、第三范式(确保每列都和主键列直接相关,而不是间接相关)

6.springmvc的执行原理

根据request请求URL,循环遍历HandlerMapping列表获取包含Handler和HandlerInterceptor的HandlerExecutionChain对象;
然后通过HandlerExecutionChain对象内部Handler实例循环遍历HandlerAdapter列表获取适配器对象;
执行HandlerExecutionChain内部的所有拦截器HandlerInterceptor的preHandle方法,成功返回true,返回false直接return;
如果拦截器preHandle执行成功,再使用HandlerAdapter适配器去执行Handler的业务逻辑并返回一个ModelAndView对象;
执行所有拦截器postHandle方法;
通过ModelAndView对象的view属性的值(实际上就是viewName)从ViewResolver集合中获取View对象;
将ModelAndView中model数据渲染到View返回HTML基于response输出到终端;
执行所有拦截器的afterCompletion方法;
上述执行过程中如果出现未主动try catch的异常,都将被HandlerExceptionResolver捕获处理

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

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

3、  处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给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响应用户。

7.什么是跨域 如何解决跨域

跨域:浏览器对于javascript的同源策略的限制,
同域:简单的解释就是相同域名,端口相同,协议相同
jsonp 全称是JSON with Padding,是为了解决跨域请求资源而产生的解决方案,是一种依靠开发人员创造出的一种非官方跨域数据交互协议。

一个是描述信息的格式,一个是信息传递双方约定的方法。

8.springboot怎么简化了开发

(1)遵循“习惯优于配置”的原则,使用Spring Boot只需要很少的配置,大部分的时候我们直接使用默认的配置即可;
(2)项目快速搭建,可以无需配置的自动整合第三方的框架;
(3)可以完全不使用XML配置文件,只需要自动配置和Java Config;
(4)内嵌Servlet容器,降低了对环境的要求,可以使用命令直接执行项目,应用可用jar包执行:java -jar;
(5)提供了starter POM, 能够非常方便的进行包管理, 很大程度上减少了jar hell或者dependency hell;
(6)运行中应用状态的监控;
(7)对主流开发框架的无配置集成;
(8)与云计算的天然继承;

9.说几个springboot常用注解

使用@GetMapping注解描述参数获取方法
使用@Validated注解对参数进行校验
@RestController和@RequestMapping注解

10.spring的依赖注入控制反转

Spring的核心内容在于控制反转(IOC)和依赖注入(DI),所谓控制反转并非是一种技术,而是一种思想,在操作方面是指在spring配置文件中创建<bean>,依赖注入即为由spring容器为应用程序的某个对象提供资源,比如 引用对象、常量数据等。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值