面试问题
面试问题
map集合遍历有哪几种方式?
Spring boot常用注解:
- @PathVariable:将URL中的占位符参数绑定到控制器处理方法的入参中
- @RequestBody和@RequestParam:接收参数使用.......在GET请求中,不能使用@RequestBody.在POST请求中,两者都能使用,推荐使用@RequestParam
- @RestController
- @RestponseBody
Spring常用注解
声明bean的注解:@Controller,@service,@Respostory,@Component
注入bean的注解:@Autowired按类型注入,
配置类相关注解:@Configuration,声明配置类,相当于
SpringBean的生命周期:
- 解析类得到BeanDefinition
- 如果有多个构造方法,则要推断构造方法
- 确定好构造方法后,进行实例化得到一个对象
- 对对象中加了@Autowired注解的属性进行属性填充。
- 回调Aware方法,比如BeanNameAwate,BeanFactoryAware
- 调用BeanPostProcessor的初始化前的方法
- 调用初始化方法
- 调用BeanPostProcessor初始化后的方法,,在这里会进行AOP
- 如果当前创建的Bean是单例的,则会吧当前Bean放入单例池
- 使用Bean
- Spring容器关闭时,调用DispossbleBean中的destory()方法
SpringMVC常用注解:
@Controller:标识Controller控制器,
@ControllerAdvice:声明全局异常,
@PathVariable:映射URL中占位参数绑定到Controller处理方法的参数。
@RequestParam
@RequestBody
@RequestMapping
mybatis常用标签有哪些(xml文件里的,如select、resultMap、for等)
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="Object"> select * from student where id=#{id} </select>
<insert id="insert" parameterType="Object"> insert into student <trim prefix="(" suffix=")" suffixOverrides="," > <if test="name != null "> NAME, </if> </trim> <trim prefix="values(" suffix=")" suffixOverrides="," > <if test="name != null "> #{name}, </if> </trim> </insert>
delete,update,
resultMap:建立映射关系,对应的是查询后的列名
动态SQL:
if,foreach,choose类似于switch,
格式化输出
where标签,set:可以动态配置set关键字,可以提出追加到条件末尾的任何不相关逗号,
定义常量及引用,
sql,include,
mybatis #{}和${}的区别
${}是Properties中的变量占位符,属于静态文本替换,用statment来赋值直接替换
{}是sql的参数占位符,用PrepatedStatement来赋值,会给变量加上单引号,预编译,字符串拼接
mysql索引
mysql事务,事务的四大特性
- 原子性:事务时最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么全部失败。
- 一致性:执行事务前后,数据保持一致,多个事务对同一个数据读取的结果时相同的。
- 隔离性:并发访问数据库,一个用户的事务不被其他用户事务所干扰,各并发事务之间数据库是独立的;
- 持久性:一个事务被提交后。他对数据库中的数据改变时持久的,即使数据库发生故障也不应该对其有影响。
修饰符区别(public、protected、default、private)
接口和抽象类的区别(接口中可以定义方法吗)
String StringBuffer 和 StringBuilder
finall关键字的作用(修饰类、方法、变量时)
线程和进程的区别,创建线程的方法
redis常用数据结构
spring ioc和aop
项目是怎么设计的,有哪些功能,整体架构是什么样的,前端用到了哪些技术(框架),有哪些难点,如何解决的
你认为自己有哪些优点
对加班的看法
想来公司的意愿有多大(满分10分你有几分的意愿)
少了一个,spring cloud常用组件(eureka,ribbion,hystrix,fegin,zuul等)
MySQL索引
- 索引是帮助Mysql高效获取数据的数据结构
- 索引储存在文件系统中
- 索引的文件储存形式与储存引擎有关
- 索引的文件结构
- hash:利用hash存储的话,要将所有的数据文件添加到内存中,比较耗费内存空间。如果所有的查询都是等值查询,
- 二叉树:左子节点小于根节点,右子节点大于根节点
- B树 二叉树和B树,的深度会造成多次io
- B+树:主键-----唯一值------生成六位row_id作为主键
为什么使用B+树
接口和抽象类的区别?
- 接口的方法默认市public ,所有方法在接口中不能有实现(jdk8开始接口方法可以有默认实现),而抽象类可以有非抽象的方法。
- 接口中除了static,final变量,不能有其他变量,而抽象类中则不一定.
- 一个类可以实现多个接口,但只能实现一个抽象类。接口自己本身可以通过extends关键字扩展多个接口。
- 接口方法默认的修饰符市public,抽象方法可以有public ,protected和default这些修饰符
重载和重写的区别?
- 重载跟返回值类型,和修饰符无关
- 重写发生在运行时,如果父类访问修饰符为private/final/static则子类不能重写,构造方法无法重写
Java中为什么只有值传递?
- 值传递:在调用函数时,复制一份值给调用者,调用者改变值时,不会改变原来的值
- 引用传递:在调用函数时,把值的地址给调用者,调用者改变值时,原来的值也会改变
static,final,this,super java 关键字总结
SpringBoot的启动原理
从@SpringBootApplication和SpringApplication.run()说起。
@SpringBootApplication下主要有三个重要注解:
- @SpringBootConfiguration :继承自 @Configuration,二者功能一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到Spring容器中,并且实例名就是方法名。
- @ComponentScan: 扫描当前主启动类同级的包.
- @EnableAutoConfiguration:自动配置,借助@Import的帮助,将所有符合自动配置条件的bean定义加载到Ioc容器。
Spring注入bean的几种方式:
set注入,构造方法注入,静态工厂的方法注入
Spring中的Bean
Spring中的bean的作用域有哪些?
- singleton:单例模式,默认是单例模式。
- prototype:每次请求都会创建一个新的bean实例。
- request:每次HTTP请求都会产生一个新的Bean,仅在当前request有效
- session:每一次HTTP请求都会产生一个新的Bean,尽在当前session有效
- global—session:全局session作用域,仅在portlet的web容器中有效。
Spring中的单例Bean的线程安全问题?
单例Bean存在线程安全问题,主要是当多线程操作同一个对象时,对这个对象的非静态成员变量的写操作会存在线程安全的问题。
解决办法:
- 在Bean对象中尽量避免定义可变的成员变量(不太现实)。
- 在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在TheadLocal中。
@Component和@Bean的区别是什么?
- 作用对象不同:@Component注解作用于类,@Bean注解作用于方法
- @Component通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中。
- @Bean注解比Component注解的自定义性更强,而且很多地方我们只能通过@Bean注解来注册Bean。
将一个类声明为Spring的Bean的注解有哪些?
我们一般使用@Autowired注解自动装配Bean,要想把类标识成可用于@Autowired注解自动装配的Bean的类,采用以下注解实现
- @Component:通用注解,可标注任意类为Spring组件。如果一个Bean不知道属于那个层,可以使用@Component标注。
- @Repository:对应持久层Dao层,主要用于数据库相关操作。
- @Service:对应服务层
- @Controller:对应控制层
MyBatis中Dao接口的工作原理是什么?
Dao接口的工作原理是JDK动态代理,MyBatis运行时会使用JDK动态代理,为Dao接口生成代理proxy对象,代理proxy对象会拦截接口方法,转而执行MappedStatement所代表的sql,然就将执行结果返回。
上家公司主要是做什么的?
在项目中担任什么角色?
参与的项目中都使用了什么技术栈?
你认为在你参与的项目中技术上还有那些可以优化的点?
为什么要使用消息中间件,如果消息丢失的话如何补救
谈谈对spring的理解,spring是线程安全的吗?
bean的生命周期
微服务的有点
springcloud的优点