本文主要是介绍柱子哥的面试题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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 是一个元注解,带有该注解的类被看作组件,当基于注解的类路径扫描的时候,这些类就会被实例化
- @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 的范畴。它跳出了传统企业边界,从供应链范围去优化企业的资源,是基于网络经济时代的新一代信息系统。它主要用于改善企业业务流程以提高企业核心竞争力。
这篇关于柱子哥的面试题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!