首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
彳亍云力
蚌埠坦克学院 golang
关注
已关注
取消关注
@程序员Hasity:
京东实习后端面经,被问麻了...
1.mysql联合索引失效MySQL联合索引失效通常发生在以下情况:未使用最左前缀原则: 联合索引的最左前缀原则指的是在查询中使用索引的时候,必须从联合索引的最左边列开始使用。如果查询不按照最左前缀的顺序使用索引,MySQL 可能无法充分利用这个索引。例如,如果有一个联合索引 (col1, col2),而你的查询中只使用了 col2,那么这个索引就不会被用到。不符合索引顺序的查询: 联合索引只在查询中按照索引的顺序使用时才会生效。如果你的查询中的条件不按照索引的顺序,MySQL 可能无法使用这个索引。例如,如果有一个联合索引 (col1, col2),而你的查询中使用了 col2,col1 进行筛选,那么这个索引也可能无法生效。数据分布不均匀: 如果索引列的数据分布不均匀,即某些值的出现频率远高于其他值,那么 MySQL 可能会选择不使用索引,而是进行全表扫描。数据类型不匹配: 联合索引的列如果包含了不同的数据类型,可能会导致索引失效。例如,如果一个列是字符串类型,另一个列是数字类型,MySQL 在执行查询时可能无法有效使用这个索引。使用了函数或运算符: 如果在查询条件中使用了函数或运算符,可能会导致索引失效。MySQL 无法直接在索引上执行函数或运算符,因此可能会选择不使用索引。为了避免这些问题,设计索引时应根据实际查询需求考虑最佳的索引顺序,并确保查询条件与索引一致。同时,确保索引列的数据类型和函数的使用方式符合索引的要求。在优化查询性能时,可以使用 EXPLAIN 来查看 MySQL 的执行计划,以确定是否正确使用了索引。面经专栏直通车面经专栏下载2.索引底层MySQL索引的底层实现主要依赖于B+树和哈希索引两种结构。B+树索引:B+树结构: B+树是B树的一种变体,它在B树的基础上进行了优化。在B+树中,只有叶子节点存储实际的数据,而非叶子节点仅包含键值信息用于导航。这样的结构使得范围查询更加高效。InnoDB使用的索引即为B+树索引。哈希索引:哈希结构: 哈希索引是将键的值通过哈希函数转换成一个固定大小的哈希值,然后将哈希值与存储实际数据的位置相对应。这种结构使得单个键的查找效率很高,但不支持范围查询。InnoDB不直接支持哈希索引,但可以通过Memory存储引擎来创建哈希索引。在InnoDB存储引擎中,使用的是B+树索引。每个InnoDB表都有一个聚簇索引(clustered index),这是数据行的物理排序。聚簇索引在InnoDB中实际上就是一颗B+树,因此表的数据行实际上是按照聚簇索引的排序存储的。此外,InnoDB中的辅助索引也是B+树结构,这些辅助索引的叶子节点包含了指向聚簇索引中对应行的引用。MySQL通过使用不同的索引结构,使得它在处理各种类型的查询和数据操作时能够取得较好的性能。选择适当的索引结构取决于具体的应用场景和查询需求。3.说说分库分表分库分表是一种数据库水平拆分的策略,旨在应对数据库规模不断增长导致的性能瓶颈和存储容量限制。这种策略将一个大型数据库拆分成多个较小的数据库实例(分库)和表(分表),从而提高并行处理能力、降低单个数据库实例的负载,提升整体系统的性能和可伸缩性。以下是关于分库分表的一些要点:水平拆分: 分库分表是水平拆分的一种形式,与垂直拆分(按照业务模块划分表)不同。水平拆分指的是将一个表中的数据按照某个规则分散存储在多个数据库实例或表中。分库: 将原来的单个数据库拆分成多个独立的数据库。每个数据库实例都可以独立运行在不同的物理服务器上,从而提高并发处理能力。分库通常采用数据划分的规则,比如按照用户ID的取模或哈希值进行分库。分表: 在每个数据库中,原来的大表被拆分成多个较小的表。分表的常见策略包括按照时间范围、按照业务模块或按照数据范围等。分表可以减小每个表的数据量,提高查询性能。数据一致性: 在分库分表的架构中,需要考虑数据一致性的问题。因为数据分散在不同的数据库和表中,应用程序需要确保对跨库、跨表的事务有良好的处理机制。全局唯一标识: 在分库分表的情况下,通常需要一个全局唯一的标识符,以便在多个数据库和表中唯一标识一条记录。这可以是通过分布式ID生成器、UUID等方式实现的。路由策略: 应用程序需要实现合适的路由策略,确保查询时能够正确定位到需要的数据库和表。路由策略可以基于数据划分的规则,例如用户ID的哈希值。动态扩展: 分库分表的优势之一是能够相对容易地进行水平扩展。当数据量增加时,可以通过增加新的数据库实例或表来进行扩展,而不必改变整体系统架构。分库分表的实现需要谨慎考虑业务需求、数据一致性、查询性能和扩展性等因素。这样的架构适用于大型、高并发的应用,但也带来了管理和维护的挑战。4.mysql事务MySQL事务和InnoDB引擎的实现方式涉及到ACID属性(原子性、一致性、隔离性、持久性)的保障。MySQL事务:事务的开始和结束: 事务是由BEGIN、COMMIT和ROLLBACK语句来标识的。BEGIN标志事务的开始,COMMIT标志事务的结束并提交,而ROLLBACK则用于事务的回滚。隔离级别: MySQL支持不同的事务隔离级别,包括READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。这些级别决定了在事务执行过程中,对数据的读写是否会受到其他事务的影响。InnoDB引擎:事务日志(Redo Log): InnoDB引擎使用事务日志(redo log)来实现事务的持久性。当事务对数据库进行更改时,这些更改首先被写入事务日志,然后再写入磁盘上的数据页。这样即使在事务提交之前系统崩溃,通过重放事务日志,可以将数据库恢复到崩溃前的状态。两阶段提交(Two-Phase Commit): InnoDB引擎使用两阶段提交来确保事务的原子性。在第一阶段,事务的更改被写入事务日志,但尚未将其应用到磁盘上的数据页。在第二阶段,如果事务成功完成,所有的更改都被写入磁盘;如果事务失败,所有的更改都会被回滚。MVCC(多版本并发控制): InnoDB使用MVCC来提供不同的事务隔离级别。MVCC通过在每行数据上维护多个版本,使得事务可以在不互相干扰的情况下并发执行。每个事务可以看到数据库在它开始之前已经提交的版本,但不会看到其他事务正在执行的版本。行级锁: InnoDB引擎支持行级锁,这意味着事务在修改数据时只锁定涉及的行,而不是锁定整个表。这提高了并发性,减少了锁竞争,但也引入了一些额外的开销。总体来说,InnoDB引擎通过事务日志、两阶段提交、MVCC和行级锁等机制,实现了对事务的可靠支持,保证了ACID属性的满足。这使得InnoDB成为MySQL中常用的事务型存储引擎。5.MQ幂等性消息队列(MQ)中的幂等性是指无论消息被消费多少次,最终的效果应该是一致的。在分布式系统中,由于网络延迟、重试机制等原因,消息可能被处理多次,而幂等性可以确保系统的一致性。实现MQ幂等性的方法:唯一标识符: 每条消息都应该包含一个唯一的标识符(Message ID),该标识符可以用来检测消息的重复。当消息处理完成后,可以记录已处理的消息标识符,下次收到相同标识符的消息时,直接判断为重复消息,不再处理。幂等性检测逻辑: 在消息的处理逻辑中加入幂等性检测的逻辑,确保同一消息在多次处理时不会产生不一致的结果。例如,在数据库中存储已处理消息的信息,每次处理消息前检查是否已经处理过。版本号: 每个消息可以包含一个版本号,表示消息的版本信息。消费者在处理消息时,可以检查消息的版本号,如果版本号相同,即使消息重复到达,也可以认为是幂等的。幂等性接口设计: 对于消息的消费者,可以设计幂等性接口,确保相同输入产生相同的输出。通过合理设计接口,消费者可以在处理相同消息时返回相同结果,保证了幂等性。事务性操作: 如果消息的处理涉及到事务性操作,可以利用数据库事务的特性来保证幂等性。通过将消息的处理和数据库的更新放在同一个事务中,可以确保即使消息多次到达,数据库的状态也能正确更新。分布式锁: 使用分布式锁机制,确保在同一时间只有一个消费者能够处理消息。这可以避免多个消费者同时处理同一消息,从而保证幂等性。实现MQ的幂等性需要结合业务场景和具体的消息处理逻辑,采用合适的方式来防止重复处理相同的消息。选择合适的幂等性策略可以提高系统的可靠性和一致性。6.了解分布式吗分布式系统是由多台计算机(或节点)协同工作,共同完成某个任务或提供某种服务。分布式系统常用于处理大规模数据、提高系统的可扩展性和可靠性。以下是一些常用的分布式技术和框架:分布式存储系统:Hadoop Distributed File System (HDFS): 用于存储和处理大规模数据的分布式文件系统,是Apache Hadoop的核心组件。Amazon S3: 亚马逊提供的分布式对象存储服务,适用于在云环境中存储和检索数据。分布式计算框架:Apache Spark: 用于大规模数据处理的分布式计算框架,支持内存计算,适用于迭代式算法和复杂的数据流处理。Apache Flink: 分布式流处理引擎,支持事件时间处理和状态管理,适用于实时数据处理和分析。分布式消息队列:Apache Kafka: 高吞吐量的分布式消息系统,用于构建实时数据流平台,支持发布/订阅模型。RabbitMQ: 开源的消息代理,实现了高级消息队列协议(AMQP),用于在分布式系统中传递消息。分布式数据库:Apache Cassandra: 高度可扩展的分布式 NoSQL 数据库,适用于处理大规模的分布式数据。MongoDB: 非关系型的分布式数据库,支持水平扩展,适用于处理大量文档型数据。分布式缓存:Redis: 高性能的内存键值存储系统,用于缓存和数据存储。Memcached: 分布式内存对象缓存系统,用于加速动态Web应用程序。容器与编排:Docker: 轻量级容器技术,用于打包、分发和运行应用程序。Kubernetes: 开源的容器编排引擎,用于自动化容器的部署、扩展和管理。分布式事务:XA协议: 提供了一种分布式事务的协议,可以在不同数据库管理系统之间确保事务的一致性。TCC(Try-Confirm-Cancel): 一种补偿型分布式事务的设计模式,通过预留资源、确认和取消操作来保证事务的一致性。服务发现与治理:Consul: 分布式服务发现和治理工具,用于服务注册、健康检查和动态路由。etcd: 分布式键值存储系统,常用于服务发现和配置管理。这些技术和框架在不同领域解决了分布式系统面临的各种问题,提供了可靠的基础设施和工具,帮助开发者构建高性能、可扩展和可靠的分布式应用。7.spring类如何使用的Spring框架提供了众多的类和功能,用于开发各种类型的应用程序,包括依赖注入、AOP(面向切面编程)、事务管理、数据访问、Web开发等。以下是Spring中一些核心类的使用方式:ApplicationContext: ApplicationContext 是 Spring 中用于管理Bean的上下文对象。它可以通过配置文件或Java配置类加载并管理应用程序中的所有Bean。// 通过XML配置文件加载ApplicationContextApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");// 或者通过Java配置类加载ApplicationContextAnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);// 通过ApplicationContext获取BeanMyService myService = context.getBean(MyService.class);Bean: 在Spring中,Bean是由Spring容器管理的对象。通过配置文件或注解标记类为Bean,Spring容器负责实例化、配置和管理Bean。// 在XML配置文件中定义Bean<bean id="myBean" class="com.example.MyBean"/>// 在Java配置类中定义Bean@Configurationpublic class AppConfig { @Bean public MyBean myBean() { return new MyBean(); }}// 使用@Component注解定义Bean@Componentpublic class MyComponent { // ...}依赖注入: Spring通过依赖注入来管理对象之间的关系。可以通过构造函数、setter方法或字段注入的方式将依赖关系注入到Bean中。// 通过构造函数注入public class MyClass { private MyDependency myDependency; public MyClass(MyDependency myDependency) { this.myDependency = myDependency; }}// 通过setter方法注入public class MyClass { private MyDependency myDependency; public void setMyDependency(MyDependency myDependency) { this.myDependency = myDependency; }}AOP(面向切面编程): Spring的AOP模块提供了面向切面编程的能力,通过定义切面和切点,可以在应用程序中插入横切关注点。// 定义切面@Aspectpublic class MyAspect { @Before("execution(* com.example.MyService.*(..))") public void beforeMethod() { // 在方法执行前执行的逻辑 }}事务管理: Spring提供了对声明式事务的支持,通过配置可以简化事务管理的过程。// 在XML配置文件中声明事务<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes></tx:advice><aop:config> <aop:pointcut id="serviceMethods" expression="execution(* com.example.*Service.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" /></aop:config>以上是一些Spring中核心类的基本使用方式。Spring框架提供了广泛的文档和示例,可以根据具体应用场景和需求深入学习和使用不同的功能。Spring框架提供了众多的类和功能,用于开发各种类型的应用程序,包括依赖注入、AOP(面向切面编程)、事务管理、数据访问、Web开发等。以下是Spring中一些核心类的使用方式:ApplicationContext: ApplicationContext 是 Spring 中用于管理Bean的上下文对象。它可以通过配置文件或Java配置类加载并管理应用程序中的所有Bean。// 通过XML配置文件加载ApplicationContextApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");// 或者通过Java配置类加载ApplicationContextAnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);// 通过ApplicationContext获取BeanMyService myService = context.getBean(MyService.class);Bean: 在Spring中,Bean是由Spring容器管理的对象。通过配置文件或注解标记类为Bean,Spring容器负责实例化、配置和管理Bean。// 在XML配置文件中定义Bean<bean id="myBean" class="com.example.MyBean"/>// 在Java配置类中定义Bean@Configurationpublic class AppConfig { @Bean public MyBean myBean() { return new MyBean(); }}// 使用@Component注解定义Bean@Componentpublic class MyComponent { // ...}依赖注入: Spring通过依赖注入来管理对象之间的关系。可以通过构造函数、setter方法或字段注入的方式将依赖关系注入到Bean中。// 通过构造函数注入public class MyClass { private MyDependency myDependency; public MyClass(MyDependency myDependency) { this.myDependency = myDependency; }}// 通过setter方法注入public class MyClass { private MyDependency myDependency; public void setMyDependency(MyDependency myDependency) { this.myDependency = myDependency; }}AOP(面向切面编程): Spring的AOP模块提供了面向切面编程的能力,通过定义切面和切点,可以在应用程序中插入横切关注点。// 定义切面@Aspectpublic class MyAspect { @Before("execution(* com.example.MyService.*(..))") public void beforeMethod() { // 在方法执行前执行的逻辑 }}事务管理: Spring提供了对声明式事务的支持,通过配置可以简化事务管理的过程。// 在XML配置文件中声明事务<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes></tx:advice><aop:config> <aop:pointcut id="serviceMethods" expression="execution(* com.example.*Service.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" /></aop:config>原文连接
点赞 70
评论 7
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
04-27 14:30
辽宁大学 模拟IC设计
实习一个月,班味儿都出来了
实习快一个月,今天和mentor一起去吃饭,mentor说我眼里没光了,一下两个人都笑了啊啊啊啊,主要是五一调休,好吧,身上确实有了班味。 但遇到了神仙组,组里的姐姐们都超级好!但是也有点想回学校了,想朋友们
笨蛋瓦学弟梦不到秋招offer:
羡慕了,我的leader感觉是个社恐,每天都不主动跟我说话,每次就周一开小会的时候告诉我干嘛,其他时间在能不沟通的情况下他坚决不和我说话
我和mentor的爱恨情仇
点赞
评论
收藏
分享
04-25 10:43
海康威视_技术支持部_云存储开发工程师(准入职员工)
海康威视内推海康威视内推
工作体验,本人985,产品实习工作感受:部门氛围比较轻松,大家总是有说有笑,工作时偶尔闲聊开玩笑。和同事对接时,他们不会区别对待实习生,把你当做正式员工来交流和讨论项目,给你充分的尊重。总体来说,工作内容和职位描述相同。mentor布置任务时也会给你留充分的时间去做,并且告诉你不用着急慢慢做,但是会让你预估完成时间,不会的问题也有问必答。 工作时间:上午9:30-12:00 下午13:30-18:00 快下班的时候同事就不会和你讨论工作或交代任务了,实习生基本上准时下班,很贴心。但是正式员工忙起来平均0点下班。 实习成果 第一次做产品方向的实习,还是有学到一些干货的,但更多地是...
海康威视公司氛围 261人发布
点赞
评论
收藏
分享
03-09 15:02
门头沟学院 测试开发
真老板直聘
牛客963010790号:
一般是hr拿着老板账号在招人
不是真是老板招
点赞
评论
收藏
分享
04-27 16:19
OPPO_无线通信协议(准入职员工)
OPPO内推,OPPO内推码
🔔OPPO好消息来啦,从本周起,每周三都会发一批offer(昨天的推迟了),面完的同学可以期待一波~上线了IT功能 大大提效,一志愿复筛被淘汰直接进行二志愿推进,所以建议大家投递的时候一次把两个意向都填了~内推链接:https://careers.oppo.com/university/oppo/campus/post?shareId=9468内推码:X6538748内推码填写路径:基础信息>推荐码>X6538748以前一直听说OPPO的实习体验超级好,入职之后果然名不虚传,组里的同事都非常非常好,一直在耐心的教我,欧对于实习生的包容度还是特别特别高的!想学什么都能找到大佬教,超好相处!!!...
OPPO公司福利 473人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
暑期后端高频问题汇总
7.3W
2
...
左手敲代码的程序员,不配拥有offer吗?
6.7W
3
...
五一假期,弯道超车时间表
1.2W
4
...
后端简历上最值得写的项目
1.0W
5
...
北京到底有谁在啊?
8566
6
...
五一别写你那破开源代码了
8170
7
...
五一准备刷完这些面试八股题!!
7387
8
...
拼多多服务端信息确认
6478
9
...
快手投诉后续- HR把我拉黑了!
6205
10
...
和ai聊天,忍不住爆哭
6194
创作者周榜
更多
正在热议
更多
#
设计人如何选offer
#
98399次浏览
689人参与
#
找工作,行业重要还是岗位重要?
#
7753次浏览
102人参与
#
五一之后,实习真的很难找吗?
#
45723次浏览
325人参与
#
盲审过后你想做什么?
#
12686次浏览
113人参与
#
外包能不能当跳板?
#
22197次浏览
191人参与
#
领导秒批的请假话术
#
9931次浏览
74人参与
#
考研可以缓解求职焦虑吗
#
21162次浏览
251人参与
#
五一假期,你打算“躺”还是“卷”?
#
30479次浏览
436人参与
#
找工作前vs找工作后的心路变化
#
7203次浏览
64人参与
#
面试等了一周没回复,还有戏吗
#
115651次浏览
1074人参与
#
硬件人,你被哪些公司给挂了
#
46711次浏览
722人参与
#
安克创新求职进展汇总
#
32580次浏览
415人参与
#
大疆的机械笔试比去年难吗
#
69651次浏览
603人参与
#
应届生薪资多少才合理?
#
3115次浏览
24人参与
#
牛友们的论文几号送审
#
27269次浏览
623人参与
#
写简历别走弯路
#
714501次浏览
7850人参与
#
你喜欢工作还是上学
#
37667次浏览
412人参与
#
如果有时光机,你最想去到哪个年纪?
#
43340次浏览
769人参与
#
如果不工作真的会快乐吗
#
101227次浏览
867人参与
#
每人推荐一个小而美的高薪公司
#
72850次浏览
1357人参与
牛客网
牛客企业服务