自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(248)
  • 资源 (2)
  • 收藏
  • 关注

原创 Java面试八股之Spring-boot-starter-parent的作用是什么

spring-boot-starter-parent 是Spring Boot项目中的一个特殊POM(Project Object Model),它主要的作用是提供一系列默认的配置和依赖管理,以便简化项目的构建过程。这样可以避免版本冲突,并且当Spring Boot发布新版本时,你只需更新spring-boot-starter-parent的版本,而不需要逐一更新项目中的依赖版本。spring-boot-starter-parent可能还包括一些其他的构建配置,比如单元测试相关的配置。

2024-07-25 16:00:14 312

原创 Java面试八股之什么是spring boot starter

例如,如果你想在Spring Boot应用中加入Web功能,你只需要在pom.xml(Maven)或者build.gradle(Gradle)文件中添加spring-boot-starter-web依赖即可。spring-boot-starter-test:包含了测试Spring Boot应用所需的依赖项,如JUnit、Mockito等。spring-boot-starter-web:包含Web开发所需的依赖项,如Spring Web MVC、Tomcat等。

2024-07-25 15:59:29 341

原创 Java面试八股之BeanFactory和ApplicationContext有什么区别

总的来说,BeanFactory适合于简单的应用场景,而ApplicationContext更适合于复杂的企业级应用,因为它提供了更多的功能和服务。在大多数情况下,推荐使用ApplicationContext,因为它包含了BeanFactory的所有功能,并且提供了额外的便利性。ApplicationContext提供了更多的扩展点,如ApplicationListener和ApplicationEvent,允许应用程序注册监听器以响应特定的事件。BeanFactory相对较少的扩展点。

2024-07-23 16:58:20 543

原创 Java面试八股之 Spring Bean的生命周期

依赖注入(Dependency Injection,DI):Spring容器按照Bean定义中的依赖关系,将其他Bean或配置的值注入到新创建的Bean中,实现Bean之间的协作。实例化(Instantiation):Spring容器根据Bean定义信息创建Bean的实例,通常通过无参构造函数进行。使用(Usage):Bean实例已经完全准备就绪,可以被应用程序代码或其它Bean通过Spring容器透明地访问和使用。在Bean定义中通过destroy-method属性指定的销毁方法。

2024-07-23 16:57:31 506

原创 Java面试八股之Spring容器的启动流程

在整个过程中,Spring遵循了IoC(控制反转)和DI(依赖注入)原则,确保Bean的创建、配置、组装和管理都在容器的统一控制之下,实现了松耦合和可扩展的软件架构。创建BeanDefinition:解析配置信息的过程中,Spring会为每个Bean生成对应的BeanDefinition对象,它包含了Bean的类型、构造方法参数、属性值、初始化方法、依赖关系、作用域、生命周期回调方法等所有相关信息。Spring容器的启动流程涉及一系列有序的操作,以确保容器正确初始化并准备好管理应用程序中的Bean。

2024-07-23 16:56:45 1012

原创 Java面试八股之Spring AOP

Spring AOP支持多种类型的通知,如前置通知(方法执行前)、后置通知(方法执行后,无论是否抛出异常)、异常通知(捕获到异常时)、最终通知(无论方法是否正常结束,都会执行)以及环绕通知(包裹整个方法执行过程)。与IoC容器集成:Spring AOP充分利用了Spring的IoC容器,将切面编织到由容器管理的对象中。定义:AOP是一种编程范式,它关注的是如何将跨越多个模块或对象的横切关注点(如日志记录、权限检查、事务管理等)从核心业务逻辑中分离出来,以提高代码的可重用性、可维护性和模块化程度。

2024-07-23 16:55:55 458

原创 Java面试八股之什么是声明式事务管理,spring怎么实现声明式事务管理?

声明式事务管理是一种编程范式,它允许开发人员通过声明性的配置或注解,而不是硬编码事务处理逻辑,来指定哪些方法或类应该在其上下文中执行事务。开发人员只需要在业务代码中使用@Transactional注解进行简单的声明,Spring框架会在幕后自动处理事务的生命周期,大大简化了事务管理的复杂性。方法执行过程中:监控方法执行,如果发生未被捕获的异常,根据回滚规则(默认情况下,运行时异常和Error会导致回滚)决定是否回滚事务。方法结束后:如果方法正常返回或抛出的异常不在回滚规则之内,提交事务;

2024-07-23 16:55:03 430

原创 Java面试八股之详细阐述Spring的DI和IOC

DI则是实现IoC的具体手段,通过将依赖对象从外部注入到所需对象中,消除了硬编码的依赖关系,提高了系统的可测试性和可维护性。可测试:由于对象间的依赖关系由容器透明地注入,使得在单元测试中可以轻易替换依赖对象为模拟对象(Mock),便于进行独立测试。解耦:通过容器集中管理对象创建和依赖关系,对象无需关心其依赖对象的具体实现,只需关注接口契约,从而降低了对象间的耦合度。松耦合:对象无需了解其依赖对象的创建细节,仅需定义好依赖的接口或抽象类型,实现了“面向接口编程”,增强了系统的可解耦性。

2024-07-23 16:53:19 1039

原创 Java面试八股之Spring框架的核心模块

随着Spring生态的发展,还有其他相关的模块和项目(如Spring Data、Spring Security等),虽然不属于严格意义上的核心模块,但也是Spring体系中不可或缺的部分,为特定领域的功能提供了强大支持。Spring-webmvc(Spring MVC):实现了模型-视图-控制器(MVC)设计模式,为构建Web应用程序提供了全面的解决方案,包括处理器映射、视图解析、数据绑定、异常处理等。spring-boot:Spring Boot框架的主模块,提供了框架的核心功能和支持其他模块的基础。

2024-07-23 16:52:26 408

原创 Java面试八股之简述spring boot的目录结构

application.properties 或 application.yml:是 Spring Boot 的主要配置文件,可以有多个版本,例如 application-dev.yml 和 application-prod.yml,分别用于开发和生产环境。Spring Boot 项目遵循标准的 Maven 或 Gradle 项目布局,并且有一些约定的目录用于组织不同的项目组件。src/test/java 和 src/test/resources:包含测试相关的 Java 代码和资源文件。

2024-07-23 16:51:34 429

原创 Java面试八股之Spring boot的自动配置原理

AutoConfigurationImportSelector 类的 selectImports() 方法会读取 spring.factories 文件,这个文件位于 META-INF 目录下,列出了所有可用的自动配置类的全限定名称。这些注解允许自动配置类仅在满足特定条件时才会被激活。如果启用了调试模式(通过 spring-boot:run 或设置 spring-boot-devtools),Spring Boot 会生成一个自动配置报告,显示哪些自动配置类被应用,哪些被忽略,以及原因。

2024-07-23 16:50:37 528

原创 Java面试八股之后Spring、spring mvc和spring boot的区别

Spring Boot 是建立在Spring框架之上的一个微服务框架,它的目标是简化新Spring应用的初始设置和配置。Spring MVC 是Spring框架的一部分,专注于Web应用程序的开发,它实现了MVC设计模式,将业务逻辑、数据和展示层分开,使得Web应用的开发更加清晰和结构化。Spring MVC 是一个专注于Web应用的框架,是Spring框架的一部分,用于构建MVC架构的Web应用。Spring 是一个核心的、基础的框架,提供了广泛的开发支持。

2024-07-23 16:49:49 552 1

原创 Java面试八股之什么是Redis的缓存降级

缓存降级是一种服务端策略,当面临高并发访问、资源紧张或其他不可预期的问题时,为了保护核心服务的稳定运行,可以选择暂时关闭或限制某些非核心功能。Redis的缓存降级是指在特定情况下,为了应对系统压力、资源紧张或Redis服务异常等问题,采取的一种动态调整策略,以降低对缓存的依赖,减少对Redis的访问,从而保护系统核心服务的稳定运行。部分功能降级:在电商等应用场景中,例如在秒杀活动等高并发时段,可以临时禁用一些非核心服务模块,如商品推荐、广告展示等,优先保证订单处理等核心流程的顺畅。

2024-07-18 11:42:25 948 1

原创 Java面试八股之什么是Redis的缓存更新

Redis的缓存更新是指当缓存中的数据发生变化时,需要将这些变化同步到缓存中以保持数据的一致性。缓存更新的目的是确保缓存中的数据始终是最新的,以便用户可以获取到最新的数据。通过合理的缓存预热和更新策略,可以确保缓存中的数据始终是最新的,并且能够快速响应用户的请求。如果只需要更新缓存数据中的某些字段,而不是全部替换,可以使用Redis的HSET命令或者HMSET命令(设置多个字段的值)来更新指定的字段。当需要更新缓存数据时,先删除原有的缓存数据,然后再重新设置新的缓存数据。

2024-07-18 11:41:40 572

原创 Java面试八股之什么是Redis的缓存预热

Redis的缓存预热是指在系统启动或者服务重启之后,通过提前将常用数据加载到缓存中,以提高缓存命中率和系统性能的过程。缓存预热的目的是尽可能地避免缓存击穿和缓存雪崩,同时减轻后端存储系统的负载,提高系统的响应速度和吞吐量。通过缓存预热,可以避免这种情况。一些缓存框架提供了缓存加载器的机制,可以在缓存中不存在数据时,自动调用加载器加载数据到缓存中。在系统启动时,将常用的数据加载到缓存中,以便后续的访问可以直接从缓存中获取。定时执行任务,将常用的数据加载到缓存中,以保持缓存中数据的实时性和准确性。

2024-07-18 11:41:00 568

原创 Java面试八股之Redis怎么实现消息队列

XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]:从消费者组读取消息。Pub/Sub是Redis 2.0版本引入的消息传递模型,允许生产者发送消息到一个或多个channel,订阅了这些channel的消费者都能接收到消息。支持多消费者争抢消息,消息分流给组内的不同消费者,加快消息处理速度。不支持数据持久化,消息一旦发布,若消费者不在线,则消息丢失。

2024-07-18 11:40:11 412

原创 Java面试八股之简述单例redis并发承载能力

为了准确评估单例Redis的并发承载上限,通常需要进行基准测试,使用特定的工作负载和数据集来模拟实际的使用场景。例如,一个配置良好的现代服务器,可能拥有强大的CPU、足够的RAM和高速网络,理论上单例Redis可以达到每秒10万到数十万的请求处理能力。单例Redis实例的并发承载上限受到多种因素的影响,包括但不限于硬件性能、网络条件、数据集大小、操作类型以及Redis自身的配置。较大的数据集可能需要更多的内存,这可能限制了并发承载能力,特别是在内存有限的情况下。更高的带宽意味着可以同时处理更多的数据传输。

2024-07-17 11:02:17 469

原创 Java面试八股之简述redis常见的性能问题和解决方案

Redis作为一款高性能的键值存储系统,虽然设计用于提供低延迟的读写操作,但在特定场景下仍可能出现性能瓶颈。某些Redis命令在大数据集上运行时可能非常耗时,如SCAN, SORT, HGETALL等,这些操作可能会阻塞其他客户端的请求。Redis是内存数据库,过多的内存使用会导致服务器资源紧张,甚至触发swap,严重影响性能。通过上述措施,可以有效地诊断和解决Redis中的性能问题,确保其高效稳定地运行。避免使用全局范围的命令,如KEYS *,使用SCAN命令替代。

2024-07-17 11:01:28 468

原创 Java面试八股之Redis集群是怎么选择数据库的

在Redis集群中,数据被水平分割(sharding)到各个节点上,这意味着所有的键空间被分成16384个哈希槽(hash slots),这些槽均匀地分布在集群中的各个节点上。但是,在集群环境中,由于数据分布的特性,这种切换机制并不适用,因为这会破坏数据的一致性和分布逻辑。构建或使用现有的中间件或代理,如Redisson或Twemproxy,它们可以提供更高级的功能,包括对多个数据库的支持。如果你需要多个数据库的隔离性,可以部署多个独立的Redis集群,每个集群相当于一个数据库。

2024-07-17 11:00:34 280

原创 Java面试八股之Redis集群的最大节点数是多少

集群中的每个节点负责一部分哈希槽,因此在理论上的极限情况下,每个哈希槽都可以由一个独立的节点来负责,从而达到16,384个节点的最大值。每个Redis节点都需要消耗一定的CPU、内存和网络带宽,因此在计算最大节点数时,必须考虑服务器的总资源和每个节点所需的资源。在一些讨论中提到,根据硬件和网络配置,一个合理的Redis集群可能包含数十个节点,而非达到理论上的最大值。然而,在实际部署中,这样的节点数目是不切实际的,不仅因为资源和管理的复杂性,还因为集群的稳定性、数据分布的均匀性和网络拓扑等因素。

2024-07-16 11:07:16 400

原创 Java面试八股之Redis Stream的实现原理及应用场景

每个消息都有一个唯一ID,这个ID由时间戳和序列号组成,格式通常是`<timestamp>.<sequence>`,例如`1569312908931-0`。- XREAD 和 XREADGROUP:用于读取消息,前者用于简单的读取,后者用于消费者组(Consumer Group)的读取。- 在微服务架构中,不同的服务之间可以通过Redis Stream发送和接收消息,实现异步通信和解耦。- 消息是按时间顺序排列的,因此Stream可以看作是一个有序的消息列表。

2024-07-16 11:06:36 343

原创 Java面试八股之Redis与MySQL双写一致性如何保证

这是最常见的一种策略。数据订阅与推送:利用MySQL的binlog订阅功能(如通过 canal 或 Debezium),每当数据库有更新时,自动将变更推送到Redis进行更新。否则,发送回滚指令。数据丢失风险:如果在更新缓存后、更新数据库之前发生系统故障,缓存中的新数据可能丢失,且无法从数据库中找回。更新延时:在数据库更新成功与缓存更新完成之间存在时间窗口,期间如果有读请求到来,可能会读到旧数据。缓存始终反映最新数据:一旦数据库更新完成,缓存立即更新,客户端后续读取时能够获取到最新的数据。

2024-07-15 13:27:19 1265

原创 Java面试八股之Redis持久化策略

Redis 4.0及以后版本支持混合持久化,即在执行BGSAVE时,既生成RDB文件,又将自上次RDB保存以来的增量AOF日志写入到RDB文件末尾。过度的写操作可能导致AOF文件过大,需要定期进行bgrewriteaof命令进行重写优化,将多条连续的写操作合并为更少的命令。使用fork创建子进程,子进程负责将内存数据写入临时RDB文件,完成后替换旧的RDB文件,避免数据一致性问题。重写完成后,用新的AOF文件替换旧文件,同时将重写缓冲区中的命令追加到新文件中,确保不丢失重写期间的写操作。

2024-07-15 13:26:30 300

原创 Java面试八股之Redis集群Cluster

如果客户端连接的是错误的节点,节点会返回MOVED或ASK重定向响应,指示客户端转向正确的节点。添加新节点:向集群中添加新节点时,通过redis-trib或redis-cli重新分配部分槽位到新节点,其他节点自动与新节点同步这部分槽位的数据。配置集群模式:为每个节点启用Cluster模式,指定Cluster所需的端口(通常为主节点端口+10000,用于节点间通信)以及Cluster配置文件(如redis.conf中的相关参数)。原主节点恢复后,若配置允许,它将自动成为新主节点的从节点。

2024-07-15 13:25:38 648

原创 Java面试八股之Redis哨兵机制

选择新主节点:领导者哨兵根据配置的从节点选择策略(如优先选择复制偏移量最大的从节点,表示数据最完整)从健康的从节点中选择一个作为新的主节点。故障自动修复:如果新的主从关系出现问题(如新主节点故障),哨兵会再次触发故障转移流程,选举新的主节点,确保集群的高可用性。配置监控:为每个哨兵节点配置要监控的主节点(以及其从节点),包括主节点的IP地址、端口、密码(如有)以及监控间隔等参数。原主节点恢复(可选):当原主节点恢复在线时,哨兵会将其自动配置为新主节点的从节点,等待后续可能的手动或自动故障恢复。

2024-07-15 13:24:55 1152

原创 Java面试八股之Redis缓存淘汰策略

只针对设置了过期时间的键,优先淘汰剩余存活时间(TTL)最短的键。请注意,以上策略中的volatile-系列仅针对设置了过期时间的键进行操作,而allkeys-系列则涵盖了所有键。LFU策略根据数据的历史访问频率来决定淘汰对象,理论上能更好地识别长期未被访问但偶尔会被访问的数据。只对设置了过期时间(TTL)的键进行操作,移除最近最少使用的键。当内存不足时,优先淘汰这些有过期时间且最近访问较少的键,保留未设置过期时间的键不受影响。这种策略适用于无需关心数据访问频率,仅希望对有过期时间的键进行随机淘汰的情况。

2024-07-15 13:23:53 580

原创 Java面试八股之什么是布隆过滤器

通过这种方式,布隆过滤器充当了数据库查询的前置屏障,对那些数据库中必然不存在的数据请求进行了有效拦截,大大减少了数据库的无效查询,从而防止了缓存穿透现象的发生。需要注意的是,由于布隆过滤器存在误判的可能,某些情况下可能会将实际存在的数据误判为不存在,因此在设计时应合理权衡误判率与空间效率。存在误判:由于其概率性特性,布隆过滤器有可能将实际上不在集合中的元素判断为“可能存在”,这就是所谓的假阳性(False Positive)。这样,对于数据库中存在的任何数据,布隆过滤器都应该返回“可能存在”。

2024-07-10 14:17:02 291

原创 Java面试八股之使用Redis会有哪些问题?击穿、穿透、雪崩等

增加互斥锁机制,第一个请求发现缓存失效后,从数据库获取,并更新缓存,后续请求继续从缓存中读取最新数据。雪崩:大量key同时过期失效,大量请求被发送到数据库。通常是因为大量key的过期时间设置成相同时间,或者Redis服务器宕机。穿透:注意这个透字,顾名思义就是redis和数据库中都没有找到请求的数据,一般是非法请求或者尝试获取数据库中不存在的数据。增加请求验证,避免非法请求发送到Redis和数据库。设置随机的过期时间,避免大量key同时过期。击穿:热点数据过期,大量并发请求被发送到数据库。

2024-07-10 14:15:33 324

原创 Java面试八股之为什么要使用Redis

在项目中,将热点数据(如经常被查询但不频繁变更的数据)存储在Redis中,作为数据库查询的缓存,可以显著降低数据库查询压力,提高应用的响应速度,提升用户体验。示例:在集群部署的Web应用中,将用户的登录状态、购物车等会话数据存储在Redis中,无论请求路由到哪个应用服务器,都能快速获取到正确的会话信息,保证用户在集群环境下的无缝体验。示例:在抢购、秒杀活动中,通过Redis的原子操作(如INCR、SETNX等)实现分布式锁,保证商品库存扣减的原子性和一致性,避免超卖问题。4. 分布式Session管理。

2024-07-10 14:13:09 397

原创 Java面试八股之Redis有哪些数据类型?底层实现分别是什么

假设有一个网站需要记录用户每天的签到情况。底层实现:Stream数据结构在内部以键值对的形式存储,键为Stream的名字,值为一个特殊的字典结构,包含多个消息列表(每个消息列表代表一个分片)以及相关元数据。功能:Redis提供了对地理位置数据的支持,可以存储经纬度坐标,并进行距离查询、范围查询(如“附近的人”功能)、地理围栏(如“在某区域内的人”)等操作。底层实现:使用有序集合(Sorted Set)存储地理位置数据,成员为地理位置的标识符,分值为经过特定公式转换后的经纬度坐标,以此实现空间索引。

2024-07-10 14:12:22 699

原创 Java面试八股之Redis单线程为什么性能高

通过客户端分片、代理层(如Twemproxy、Redis Cluster)或直接使用Redis Cluster,可以将数据和请求负载分散到多个Redis实例上,每个实例继续保持单线程模型,整体上实现高性能、高并发的服务。要点:虽然Redis的处理逻辑是单线程,但在网络通信层面,它采用了I/O多路复用技术(如epoll、kqueue等)。要点:单线程设计避免了多线程环境下的锁竞争问题。在多线程环境中,为了保证数据一致性,通常需要使用锁来同步对共享资源的访问,而这会引入锁的获取与释放成本以及潜在的死锁风险。

2024-07-10 14:10:19 503 1

原创 Java面试八股之MySQL中的MVCC是什么,作用是什么?

MySQL中的MVCC(Multiversion Concurrency Control,多版本并发控制)是一种并发控制机制,用于提高数据库的并发性能并确保数据的一致性,特别是在高并发读写场景中。并发性能提升:在大多数读操作(尤其是一致性非锁定读,如SELECT语句)中,MVCC允许事务读取数据的某一历史版本,而不必对正在被其他事务修改的数据加锁。这减少了读写操作间的锁冲突,提高了系统的并发读取能力,特别是在高并发场景下,显著提升了数据库的整体性能。由于读操作通常不需要获取锁,因此降低了死锁的发生概率。

2024-07-09 17:53:36 458

原创 Java面试八股之MySQL中的锁及其作用

仅锁定需要操作的数据行,InnoDB存储引擎支持行级锁,包括共享行锁(Shared Row Lock,S锁)和排他行锁(Exclusive Row Lock,X锁)。锁定整张表,分为读锁(Shared Lock,即S锁)和写锁(Exclusive Lock,即X锁)。一个事务对某一行加X锁后,其他事务不能对该行加任何锁,既不能读也不能写,直到该X锁释放。一旦事务对表加了X锁,其他事务不能对该表加任何锁(无论是S锁还是X锁),直到该X锁释放。事务打算对表中的某个数据行加X锁时,先在表级别加IX锁。

2024-07-09 17:50:53 497

原创 Java面试八股之MySQL事务隔离级别

事务定义:简要介绍事务作为一组逻辑操作单元,必须具备原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability,简称ACID特性)。隔离性解释:强调隔离性是指在并发事务环境中,事务之间互不影响,如同在单线程环境下执行一样。理想情况下,每个事务都应该看到一个完整的、一致的数据视图,不受其他并发事务影响。

2024-07-09 17:48:23 479

原创 Java面试八股之描述一下MySQL使用索引查询数据的过程

如果使用的是非聚集索引(辅助索引),在找到满足条件的叶子节点后,还需要根据叶子节点中存储的主键值,回到聚集索引(主键索引)中再次进行类似的过程,找到实际的数据行,这就是所谓的“回表”操作。对于非聚集索引(辅助索引),叶子节点存储的是主键值;在查询过程中,如果涉及到并发读写,MySQL 会根据隔离级别和事务状态实施必要的锁定机制,如行锁、间隙锁等,以保证数据的一致性和隔离性。如果查询所需的所有列都包含在当前使用的索引(覆盖索引)中,则不需要回表,可以直接从索引叶子节点获取所需数据,减少磁盘I/O。

2024-07-09 17:45:46 371

原创 Java面试八股之MySQL索引B+树、全文索引、哈希索引

注意:B+树中B不是代表二叉树(binary),而是代表平衡(balance),因为B+树是从最早的平衡二叉树演化而来,但是B+树不是一个二叉树。可以是单列索引或多列索引(复合索引),并遵循最左前缀匹配原则,即在查询时,如果查询条件包含了复合索引的最左边部分列,就能利用索引进行高效查询。B+树是一种自平衡的多路搜索树,它是一种高度平衡的结构,保证从根节点到任意叶子节点的路径长度几乎相等,从而保证了查询效率相对稳定。能够处理大量数据,因为B+树的高度较低,即使数据量很大,查询深度也不会过高。

2024-07-09 17:44:59 838

原创 Java面试八股之MySQL中int(10)和bigint(10)能存储读的数据大小一样吗

因此,int(10)和bigint(10)能存储的数据大小是不一样的,bigint可以存储比int大得多的数字。bigint(10)类型存储8字节的有符号整数,其值范围大约是从-9,223,372,036,854,775,808到9,223,372,036,854,775,807(对于有符号整数)。在MySQL中,int(10)和bigint(10)的数据存储能力并不相同,尽管括号内的数字(如10)看起来似乎暗示着某种关联,但实际上这个数字代表的是显示宽度,而不是数据存储大小的限制。

2024-07-08 16:53:10 194

原创 Java面试八股之MySQL支持哪些数据类型

例如,使用更精确的类型(如 INT 而不是 BIGINT)可以节省存储空间,而使用适当的日期/时间类型可以简化查询和数据处理。MySQL支持多种数据类型,这些类型可以大致分为三大类:数值类型、日期/时间类型和字符串类型。DATETIME:存储日期和时间,格式为 'YYYY-MM-DD HH:MM:SS'。YEAR:专门用于存储年份,格式为 'YYYY' 或 'YY'。DATE:只存储日期,格式为 'YYYY-MM-DD'。TIME:只存储时间,格式为 'HH:MM:SS'。

2024-07-08 16:51:22 319

原创 Java面试八股之MySQL的redo log和undo log

当事务提交时,相关联的redo log会被标记为已提交,这样即使在之后的系统崩溃中,通过重放redo log,InnoDB能够确保所有已提交的事务所做的更改都能被应用到磁盘上的数据页中。在MySQL的InnoDB存储引擎中,redo log和undo log是两种重要的日志,它们各自服务于不同的目的,对数据库的事务处理和恢复机制至关重要。redo log的主要作用是确保事务的持久性(Durability),即使在系统崩溃的情况下也能恢复数据的一致性。

2024-07-08 16:47:57 417

原创 Java面试八股之MySQL主从复制机制简述

此机制允许从一个服务器(主服务器)到一个或多个其他服务器(从服务器)进行数据的复制,从而增强数据冗余、提高读取性能,并且为灾难恢复提供保障。从服务器上的SQL线程从本地的中继日志中读取事件,并在从服务器上执行相应的SQL语句。从服务器的数据可能滞后于主服务器,特别是在网络延迟较高或从服务器负载较高的情况下。从服务器接收到的二进制日志事件被存储在本地的中继日志(relay log)中。主服务器和从服务器应运行相同或兼容的MySQL版本,以避免潜在的兼容性问题。这种模式更精确,但可能会产生更大的二进制日志。

2024-07-08 16:44:30 896

php7新特性

php7新特性总结。主要内容是PHP7的主要新特性和大幅的性能提升(已经和HHVM的性能不相伯仲).重点是介绍都做了那些性能优化手段, 最后的成果是咋样.

2018-04-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除