【面经】招商银行网络科技面试

目录

一 Springboot的启动过程

二 Springboot自动装配原理

三 Springboot使用了什么设计模式

四 Springboot常见注解

五 Redis的数据结构

六 Redis的常见操作

七 Redis除了做缓存还能干嘛

八 MySQL的行锁和表锁

九 MySQL的隔离级别

十 MySQL的索引失效的情况


一 Springboot的启动过程

        首先从main找到run()方法,在执行run()方法之前new一个SpringApplication对象。进入run()方法,创建应用监听器SpringApplicationRunListeners开始监听。然后加载SpringBoot配置环境(ConfigurableEnvironment),然后把配置环境(Environment)加入监听对象中。然后加载应用上下文(ConfigurableApplicationContext),当做run方法的返回对象。最后创建Spring容器,refreshContext(context),实现starter自动化配置和bean的实例化等工作

二 Springboot自动装配原理

        Spring Boot利用@EnableAutoConfigurationspring.factories来实现自动装配。spring-boot-autoconfigure包中的META-INF/spring.factories文件定义了需要自动加载的配置类,通过这些类来根据项目依赖和配置来决定哪些Bean需要自动创建。

三 列举Springboot使用了哪些设计模式

        1.工厂模式:通过SpringApplication.run(),自动创建和管理ApplicationContext及其他Spring组件。

        2.单例模式:Spring默认以单例模式管理Bean,确保Bean在容器中唯一。

        3.代理模式:AOP使用动态代理,拦截方法调用以实现如事务管理、日志记录等功能。

        4.观察者模式:通过ApplicationListenerApplicationEvent,实现事件驱动编程。

四 Springboot常见注解

        1.@SpringBootApplication:用于标记Spring Boot启动类,包含@Configuration@EnableAutoConfiguration@ComponentScan

        2.@RestController:组合了@Controller@ResponseBody,用于定义RESTful Web服务的控制器。

        3.@Autowired:用于自动注入依赖。

        4.@Value:用于注入配置文件中的值。

        5.@Component@Service@Repository:用于标记Spring的Bean组件。

        6.@ConfigurationProperties:用于批量注入配置文件中的属性。

五 Redis的数据结构

        String:简单的键值对,支持任意数据类型。

        List:链表结构,可以在列表的两端进行插入、删除等操作。

        Set:无序集合,支持集合操作(交集、并集等)。

        Sorted Set (ZSet):有序集合,成员带有分数,按分数排序。

        Hash:类似于哈希表,适合存储对象。

        Bitmap:位数组,用于存储和操作二进制位。

        HyperLogLog:用于基数统计,节省内存。

六 Redis的常见操作

Redis基本操作命令(图文详解)_redis操作命令-CSDN博客

七 Redis除了做缓存还能干嘛

        分布式锁:通过SETNX命令和expire实现锁定机制。

        消息队列:使用PUB/SUBList等实现简单的消息发布与订阅。

        计数器:通过INCRDECR操作轻松实现分布式计数器。

        排行榜:利用Sorted Set实现实时的排行榜系统。

        会话管理:将用户会话存储到Redis,提高性能和扩展性。

八 MySQL的行锁和表锁

        行锁:粒度较细,锁定行级别,常见于InnoDB存储引擎。行锁分为共享锁(S锁)和排他锁(X锁)。

        表锁:粒度较大,锁定整个表,常见于MyISAM存储引擎,容易导致并发性降低。

九 MySQL的隔离级别

        Read Uncommitted(未提交读):允许读取未提交的数据,可能会出现脏读。

        Read Committed(已提交读):只能读取到已提交的数据,避免脏读,但会有不可重复读。

        Repeatable Read(可重复读):默认隔离级别,避免不可重复读,使用MVCC机制,可能会产生幻读。

        Serializable(可串行化):最高隔离级别,所有事务串行执行,代价高,性能低。

十 MySQL的索引失效的情况

        1.模糊查询以%开头LIKE '%value%'无法使用索引。

        2.OR条件未全部使用索引:若OR条件中有一列未使用索引,则整体索引失效。

        3.数据类型不一致:查询条件与列的数据类型不一致时索引失效,如字符串列用数字类型比较。

        4.函数操作:在索引列上使用函数或表达式时索引失效。

        5.不等号查询:使用<>!=时索引失效。

        6.太多重复值:索引列有大量重复值时,MySQL优化器可能放弃使用索引。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值