• 柱子哥的面试题


    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(主配置的包名作为包扫描范围)
    
    • 1
    • 2
    • 3

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

    	AutoConfigurationImportSelector
    
    • 1

    是配置类选择器对象,去所有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]

  • 相关阅读:
    万物皆可集成系列:低代码释放用友深度价值(1)—系统对接集成
    Redis6 八:Redis的发布和订阅
    Hive 实操案例二:统计 Top10 视频类别热度
    2-网络架构和Netty系列-Java和IO网络模型
    【编码问题】使用 http 请求,中文乱码问题
    GameFrameWork框架(Unity3D)使用笔记(五)游戏主流程ProcedureMain
    公钥密码学中的公钥和私钥
    vscode开发STM32(四)--- 技巧篇
    IO多路复用技术(二)
    CMake库搜索函数居然不搜索LD_LIBRARY_PATH
  • 原文地址:https://blog.csdn.net/qq_42765493/article/details/125531030