柱子哥的面试题

2024-02-29 12:20
文章标签 面试题 柱子

本文主要是介绍柱子哥的面试题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 的范畴。它跳出了传统企业边界,从供应链范围去优化企业的资源,是基于网络经济时代的新一代信息系统。它主要用于改善企业业务流程以提高企业核心竞争力。

这篇关于柱子哥的面试题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/758770

相关文章

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

一些其他面试题

阿里二面:那你来说说定时任务?单机、分布式、调度框架下的定时任务实现是怎么完成的?懵了。。_哔哩哔哩_bilibili 1.定时算法 累加,第二层每一个格子是第一层的总时间400 ms= 20 * 20ms 2.MQ消息丢失 阿里二面:高并发场景下引进消息队列有什么问题?如何保证消息只被消费一次?真是捏了一把汗。。_哔哩哔哩_bilibili 发送消息失败

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

【Kubernetes】常见面试题汇总(三)

目录 9.简述 Kubernetes 的缺点或当前的不足之处? 10.简述 Kubernetes 相关基础概念? 9.简述 Kubernetes 的缺点或当前的不足之处? Kubernetes 当前存在的缺点(不足)如下: ① 安装过程和配置相对困难复杂; ② 管理服务相对繁琐; ③ 运行和编译需要很多时间; ④ 它比其他替代品更昂贵; ⑤ 对于简单的应用程序来说,可能不

【附答案】C/C++ 最常见50道面试题

文章目录 面试题 1:深入探讨变量的声明与定义的区别面试题 2:编写比较“零值”的`if`语句面试题 3:深入理解`sizeof`与`strlen`的差异面试题 4:解析C与C++中`static`关键字的不同用途面试题 5:比较C语言的`malloc`与C++的`new`面试题 6:实现一个“标准”的`MIN`宏面试题 7:指针是否可以是`volatile`面试题 8:探讨`a`和`&a`

Laravel 面试题

PHP模块 PHP7 和 PHP5 的区别,具体多了哪些新特性? 性能提升了两倍 结合比较运算符 (<=>) 标量类型声明 返回类型声明 try…catch 增加多条件判断,更多 Error 错误可以进行异常处理 匿名类,现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义 …… 了解更多查看文章底部链接 PHP7 新特性 为什么 PHP

【吊打面试官系列-Redis面试题】说说 Redis 哈希槽的概念?

大家好,我是锋哥。今天分享关于 【说说 Redis 哈希槽的概念?】面试题,希望对大家有帮助; 说说 Redis 哈希槽的概念? Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽, 集群的每个节点负责一部分 hash 槽。

【Kubernetes】常见面试题汇总(一)

目录 1.简述 etcd 及其特点? 2.简述 etcd 适应的场景? 3.简述什么是Kubernetes? 4.简述 Kubernetes和 Docker的关系? 1.简述 etcd 及其特点? (1)etcd 是Core0s 团队发起的开源项目,是一个管理配置信息和服务发现(service discovery)的项目,它的目标是构建一个高可用的分布式键值(keyvalue)数据

2018秋招C/C++面试题总结

博主从8月中旬开始大大小小面试了十几家公司,至今也许是告一段落吧,希望后面会有好结果,因此总结记录一些C/C++方向常见的问题。和大家一起学习! 参考了互联网的各种资源,自己尝试归类整理,谢谢~ 一、C和C++的区别是什么? C是面向过程的语言,C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。 C中函数不能进行重载,C++函数可以重载 C++在C的基础上增添类,C是一个结构