🍕前言
失踪人口终于更新了答案,我保证会更新完毕的!想直接看题目的小伙伴可以来这个传送门:应粉丝要求,请假一周,面了9家深圳非外包初级开发,只为刷一刷真题(文末有福利)
🍟答案汇总
- 拿来吧你!六十题初级开发刷真题答案(7-12)
- 来了来了他来了!六十题初级开发刷真题答案(1-6)
🌈Spring的常用注解有哪些
🌊思路
二话不说,就是为了考验你是否有真实开发经验,拿下!我们只需说一些常用的注解和他们的意义即可
🎉答案
-
@SpringBootApplication:这个注解是Spring Boot最核心的注解,用在 Spring Boot的主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。实际上这个注解是@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解的组合。由于这些注解一般都是一起使用,所以Spring Boot提供了这个统一的注解。
-
@Component:泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类,把普通pojo实例化到spring容器中。
-
@Autowired:在Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。
-
@Bean:Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。SpringIOC 容器管理一个或者多个bean,这些bean都需要在@Configuration注解下进行创建,在一个方法上使用@Bean注解就表明这个方法需要交给Spring进行管理。
-
@Value :@Value的作用是通过注解将常量、配置文件中的值、其他bean的属性值注入到变量中,作为变量的初始值。
🌈MySQL的事务你说一下对他的理解,他有几种隔离级别
🌊思路
这道题有点难,讲真一句,被问到的时候我愣了一下,有点难,但是仔细回过神想想,我们首先要拆分面试官的问题,事务、隔离级别,其实就不难!我们首先讲一下啥是事务,然后说一下事务的特性,最后再说隔离级别,满分!
答案
事务就是数据库中的事务是指对数据库执行一批操作,这些操作最终要么全部执行成功,要么全部失败,不会存在部分成功的情况。他有ACID四个特性。
因为事务的并发问题会导致的问题:脏读、幻读、不可重复读。他有四种隔离级别:
- 读未提交(READ UMCOMMITTED): 对方的事务还没有提交,我们当前事务可以读取到对方未提交的数据。这种隔离级别是最低的,读为未提交存在脏读现象,表示堵到了脏数据。
- 读已提交(READ COMMITTED):对方事务提交之后的数据我们才可以读到,这种隔离级别解决了脏读现象,但是却出现了不可重复读现象。这个级别是oracle的默认隔离级别。
- 可重复读(REPEATABLE READ) MySQL默认:我们无法看到已提交的事务了,这种隔离级别虽然解决了不可重复读的问题,但是却带来了幻读的问题。比方说一个线程删除了数据库中的所有数据,但是我们依然读取的是原来的数据,读到的是数据库的备份。
- 串行化(SERIALIZABLE):将一个事务与其他事务完全地隔离。两个事务不可以并发,线程之间需要排队,也叫作序列化。虽然很安全,但是性能很低且客户的体验不好。
🌈Spring的AOP用过吗,一般用它来做做啥,你怎么实现的。
🌊思路
Spring的AOP可以说是一个很重要的东西,面试官对于他的考察也无可厚非。其实AOP我们常做的就是做一些像日志打印、SQL拦截输出。
🎉答案
我们以打印日志为例:
- 前期准备,设计日志表和日志类,编写日志Dao和Service以及实现
- 自定义注解,注解中加入几个属性,属性可以标识操作的类型(方法是做什么的)
- 编写切面,切点表达式使用上面的注解直接定位到使用注解的方法,
- 编写通知,通过定位到方法,获取上面的注解以及注解的属性,然后从session中直接获取或者从数据库获取当前登录用户的信息,最后根据业务处理一些日志信息之后调用日志Service存储日志。
🌈不可重复读和幻读的区别
🌊思路
不多说,送分题,八股文理解背住满分
🎉答案
- 不可重复读:是同一条记录(一条数据)的内容被其他事物修改了,关注的是update、delete操作一条数据的操作.
- 幻读:是查询某个范围(多条数据)的数据行变多或变少了,在于insert、delete的操作。
🌈你们项目为什么用MyBatis-Plus,不用MyBatis
🌊思路
其实这道题我听上去觉得好简单,MyBatis-Plus简单啊为啥!送分题
🎉答案
因为在一些基础的CRUD功能中,我们无需写太多重复的代码,直接使用MyBatis的加强版即可。
🌈抽象和继承的区别(你不会连这个都不知道把)
🌊思路
问这个问题的是一家做底层的公司,是Linux内核优化和改造的,他问的问题很有深度和广度,很值得学习!
🎉答案
- 中所有的方法隐含的都是抽象的,但是抽象类中可以同时包含抽象方法和普通方法以及静态常量
- 类可以实现很多个接口,但是只能继承一个抽象类
- 类如果要实现一个接口,那么他必须要实现接口声明的所有方法,但是类可以不实现抽象类中的所有方法,但是这个类必须是抽象类
- 接口中不存在构造方法,因为接口的成员变量都是static final变量,是在编译的时候就完成了初始化操作了,无需通过构造方法来进行初始化操作,而抽象类必须有构造方法
- A类继承了B抽象类表示它“是什么”!A类实现了C接口表示它“有什么功能”!