柱子哥的面试题

1、Redis的持久化机制 RDB和AOF

RDB 指定时间内进行了多少次操作来触发存储
AOF
当AOF持久化功能打开时,服务器在执行完一个写命令之后,会以协议格式(纯文本格式)将被执行的写命令追加到服务器状态的 aof_buf缓冲区末尾。并且当文件大小到指定阈值的话,还会进行压缩
RPUSH list “A” “B”
RPUSH list “C” “D”

RPUSH “A” “B” “C” “D”

RDB优点
RDB文件是一个非常紧凑的文件,适合进行备份
缺点:丢失你指定时间间隔内的数据

AOF优点
文件有序地保存了对数据库执行的所有写入操作,以指令的形式保存容易让人看到
缺点:
AOF 文件的体积通常要大于 RDB 文件的体积
• 在大数据量下,数据恢复较慢

2、 重载和重写

重载(Overload):发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不 同),与方法 返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分。
重写(Override):发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类(里氏代换原则);如果父类方法访问修饰符为private则子类中就不是重写。

3、io流

分为字符流和字节流。

字节流继承inputStream和OutputStream

字符流继承自Reader和Writer。

输入流就是从外部文件输入到内存,输出流主要是从内存输出到文件。

Buffer 是缓冲区,类似于公交车,攒够了一车一起读写

4、反射

反射就是Java可以给我们在运行时获取类的信息

SOURCE:在原文件中有效,被编译器丢弃。 2、CLASS:在class文件有效,可能会被虚拟机忽略。 3、RUNTIME:在运行时有效。

你在类上加上@Component注解,Spring就帮你创建对象

CLASS

假如要编译A.java源码文件和B.class文件,其中A类依赖B类,并且B类上有些注解希望让A.java编译时能看到,那么B.class里就必须要持有这些注解信息才行。
同时我们可能不需要让它在运行时对反射可见

:通过”约定“使用姿势,使用反射在运行时获取相应的信息(毕竟作为一个”工具“是真的不知道你是怎么用的),实现代码功能的「通用性」和「灵活性」

5、创建对象的几种方式

构造器
反射
Clone
反序列化

springboot核心配置类

@Configuration:声明配置类,相关创建了xml

@ComponentScan:启动包扫描,可以指定扫描范围

@PropertySource:加载properties资源配置文件;

@Import:导入其他类配置文件

properties
yaml

通过active 开启其他配置类

springboot主配置文件格式:properties或yml或yaml。

配置文件中的数据,会被加载到XXXXProperties对象中,该对象注册进入容器

properties文件优先级比yaml高;

获取自定义数据方式:建议使用@ConfigurationProperties注解指定配置前缀,注解到配置对象上。

​ 可以使用@Value获取单个配置数据。

yml语法:

​ 以缩进表示层级关系;

​ 大小写敏感;

​ 冒号后面必须有空格;

​ yml相比于properties来说,有优势的地方是如果配置量大,yml的自动排版很优雅。

springboot核心注解

1.@Configuration
@Configuration 注解用户定义配置类,可替换xml 文件,被注解的类包含一个或者多个 @Bean 注解的方法,这些方法将被 ,用于构建Bean ,初始化Spring 容器

2.@ComponentScan
常用的注解 @Controller @Service @Repository ,有一个共同的注解 @Component ,@ComponentScan 标注的就会扫描这些注解标注的类到Spring 容器中

6.@Component
@Component 是一个元注解,带有该注解的类被看作组件,当基于注解的类路径扫描的时候,这些类就会被实例化

  1. @SpringBootApplication
    是SpringBoot 的最核心的注解,在spring boot 的主类上,标识 是SpringBoot 应用,用来开启SpringBoot 的各项能力。由@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan 三个注解组成。这三个注解是一起使用,

所以spring boot提供了一个统一的注解 @SpringBootApplication

2.@EnableAutoConfiguration
允许Springboot 自动装配,开启改注解,Spring boot 就能根据当前类路径下的包或者类来配置 Spring Bean

例如:当前类路径下有 Mybatis 的 JAR 包,MybatisAutoConfiguration 注解就能根据相关的参数来配置Mybatis 的各个Spring Bean

@EnableAutoConfiguration 实现的关键在于引入了AutoConfigurationImportSelector ,其核心逻辑为 selectImports 方法,

从配置文件 MATA-INF/spring.factories 加载所有可能用到的自动装配类
exclude excludeName 属性携带的类排除
过滤,将满足条件 @Conditional 的自动配置类返回

4.@ConditionalOnBean
@ConditionalOnBean(A.class) 当前上下文存在A对象时,才会实例化一个 Bean ,也就是只有A.class ,在 Spring 的 上下文中时,当前的 bean 才能够创建

5.@ConditionalOnMissingBean
与上述相反,当缺失某个 bean 才会创建当前的bean

6.@ConditionalOnClass
当且仅当某些类存在于 classpath 上,才会创建某个 bean

7.@ConditionalOnMissingClass
与上述相反,当前仅当classpath 不存在指定的Class 才会开启配置

8.@ConditionalOnProperty
指定的属性有指定的值才开启配置,通过属性 name 以及havingValue ,其中 name 用 application.properties 中读取某个属性的值

10.@PropertySource(“”)
指定配置文件路径

11.@ConfigurationProperties(prefix = “前缀”)
指定配置文件前缀

多线程了解多少
ioc

12、aop

aop:面向切面编程,是oop面向对象编程的一种补充与完善,aop与oop关注点不同。

oop:关注的核心业务;aop:关注的辅助业务。

aop的实现原理:通过动态代理技术,在运行期间,动态的在核心业务对象基础上创建代理对象,在代理对象中统一的把辅助业务对象插入到核心方法的前,后,异常,最终处。

通过oop实现了付款的核心业务;

产品方提出新的需求,请统计每次付款的耗时。

产品方又提出新的需求,请统计每个渠道的付款失败率;

产品方又又提出新的需求,请去掉付款的耗时统计;

springboot自动装配

在这里插入图片描述

@SpringBootApplication注解,该注解是一个复合注解

@SpringBootConfiguration:该注解是@Configuration注解的子注解,表示当前类是一个配置类;

他和@Configuration的区别是,@Configuration可以有多个,但是SpringBootConfiguration应该只有一个,他会根据这个注解来断定主配置类

@ComponentScan:用来做组件扫描的,比如Controller service Repository Component

开启包扫描,但未指定包的扫描范围。
这个注解还用了两个过滤器
一个用来排除自己定义的规则的类
一个用来排除springboot自动配置类,不让自动配置被多次添加到容器里面

@EnableAutoConfiguration:该注解是自动配置注解

第一个子注解 @AutoConfigurationPackage:记录容器的包名

AutoConfigurationPackage里面导入了
@Import(AutoConfigurationPackages.Registrar.class)
	 AutoConfigurationPackages.register(主配置的包名作为包扫描范围)

第二个子注解 @Import({AutoConfigurationImportSelector.class}):导入工程中jar包里面的预配置类

	AutoConfigurationImportSelector

是配置类选择器对象,去所有jar包中的META-INF/spring.factories进行读取,在该文件中读取key=EnableAutoConfiguration的值 加载自动配置。
1、可以分开从属配置,从属配置就是自动配置,默认配置,降低耦合
2、实现了接口 deferredImportSelector 延迟导入选择器 defer推迟 先导入各种bean 最后加载自动配置类

分页查询

hashmap

springmvc工作原理

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响应用户。

springboot设计模式

简单工厂
工厂方法
典型的例子有spring与mybatis的结合。

单例模式
Spring中依赖注入的Bean实例默认是单例的

适配器模式
SpringMVC中的适配器HandlerAdatper。
实现原理:
HandlerAdatper根据Handler规则执行不同的Handler。

代理模式
AOP

观察者模式
listener的实现。
ApplicationContext接口(事件源)

策略模式

hashmap

链表长度 8 数组长度64

数组长度是2的倍数 可以用按位与运算 替换取模运算,提高性能

数据库

在这里插入图片描述

脏读(读取未提交数据)

A事务读取B事务尚未提交的数据,此时如果B事务发生错误并执行回滚操作,那么A事务读取到的数据就是脏数据。

不可重复读(前后多次读取,数据内容不一致)

事务A在执行读取操作,由整个事务A比较大,前后读取同一条数据需要经历很长的时间 。而在事务A第一次读取数据,比如此时读取了小明的年龄为20岁,事务B执行更改操作,将小明的年龄更改为30岁,此时事务A第二次读取到小明的年龄时,发现其年龄是30岁,和之前的数据不一样了,

幻读(前后多次读取,数据总量不一致)

事务A在执行读取操作,需要两次统计数据的总量,前一次查询数据总量后,此时事务B执行了新增数据的操作并提交后,这个时候事务A读取的数据总量和之前统计的不一样,就像产生了幻觉一样,平白无故的多了几条数据,成为幻读。

ReenteredLock [riˈɪntərd] synchronized [ˈsɪŋkrənaɪzd]

elasticsearch [ɪˈlæstɪk] kibana [kɪbana]

Sql有什么聚合函数

SQL语句优化

ERP

企业资源计划即 ERP (Enterprise Resource Planning),由美国 Gartner Group 公司于1990年提出。企业资源计划是 MRP II(企业制造资源计划)下一代的制造业系统和资源计划软件。除了MRP II 已有的生产资源计划、制造、财务、销售、采购等功能外,还有质量管理,实验室管理,业务流程管理,产品数据管理,存货、分销与运输管理,人力资源管理和定期报告系统。目前,在我国 ERP 所代表的含义已经被扩大,用于企业的各类软件,已经统统被纳入 ERP 的范畴。它跳出了传统企业边界,从供应链范围去优化企业的资源,是基于网络经济时代的新一代信息系统。它主要用于改善企业业务流程以提高企业核心竞争力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值