面试问题

面试问题

map集合遍历有哪几种方式?

Spring boot常用注解:

  • @PathVariable:将URL中的占位符参数绑定到控制器处理方法的入参中
  • @RequestBody和@RequestParam:接收参数使用.......在GET请求中,不能使用@RequestBody.在POST请求中,两者都能使用,推荐使用@RequestParam
  • @RestController
  • @RestponseBody

Spring常用注解

声明bean的注解:@Controller,@service,@Respostory,@Component

注入bean的注解:@Autowired按类型注入,

配置类相关注解:@Configuration,声明配置类,相当于标签。@Bean注解在方法上,声明当前方法的返回值是一个Bean。

SpringBean的生命周期:

  1. 解析类得到BeanDefinition
  2. 如果有多个构造方法,则要推断构造方法
  3. 确定好构造方法后,进行实例化得到一个对象
  4. 对对象中加了@Autowired注解的属性进行属性填充。
  5. 回调Aware方法,比如BeanNameAwate,BeanFactoryAware
  6. 调用BeanPostProcessor的初始化前的方法
  7. 调用初始化方法
  8. 调用BeanPostProcessor初始化后的方法,,在这里会进行AOP
  9. 如果当前创建的Bean是单例的,则会吧当前Bean放入单例池
  10. 使用Bean
  11. 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+树

接口和抽象类的区别?

  1. 接口的方法默认市public ,所有方法在接口中不能有实现(jdk8开始接口方法可以有默认实现),而抽象类可以有非抽象的方法。
  2. 接口中除了static,final变量,不能有其他变量,而抽象类中则不一定.
  3. 一个类可以实现多个接口,但只能实现一个抽象类。接口自己本身可以通过extends关键字扩展多个接口。
  4. 接口方法默认的修饰符市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容器。

自动配置原理分析

img

img

img

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存在线程安全问题,主要是当多线程操作同一个对象时,对这个对象的非静态成员变量的写操作会存在线程安全的问题。

解决办法:

  1. 在Bean对象中尽量避免定义可变的成员变量(不太现实)。
  2. 在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在TheadLocal中。
@Component和@Bean的区别是什么?
  1. 作用对象不同:@Component注解作用于类,@Bean注解作用于方法
  2. @Component通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中。
  3. @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的优点

posted @ 2022-02-24 18:04  萝卜i  阅读(35)  评论(0编辑  收藏  举报