java基础二 面向对象基础面向对象和面向过程的区别面向过程编程(Procedural-Oriented Programming,POP)和面向对象编程(Object-Oriented Programming,OOP)是两种常见的编程范式。 面向过程(POP):是一种以过程为中心的编程思想,主要关注问题解决的步骤和流程。它将问题分解成一系列详细的步骤,然后通过函数实现这些步骤,并依次调用这些函数来解决问题。 面 2024-11-23 java后端面经 > java后端-八股 > java-面经 #java后端面经 #八股 #java-面经
Spring-bean 概念 基本概念:Bean是由Spring IoC容器实例化、组装和管理的一个对象,它是Spring应用程序的基本构建块。 管理范围:Bean可以是Java对象、组件、服务,或者是应用程序中的任何一个被Spring容器管理的对象。 名词介绍 实例化:Spring 容器负责实例化 Bean。当应用程序启动时,Spring 容器会根据配置信息或注解扫描的结果,找到并实例化所有被标记为 Bean 的类, 2024-11-21 java后端面经 > java后端-八股 > Spring-面经 #java后端面经 #八股 #Spring-面经
java基础一 标识符和关键字标识符是用来表示变量、函数、类等命名实体的名称。它由一系列字符组成,可以包含字母、数字和下划线,并且必须以字母或下划线开头。 关键字是具有特殊意义的单词。这些单词被保留,不能用作标识符来命名变量、函数或类等。 java关键字有哪些有访问修饰符关键字,如public,private等 有定义类、接口的关键字,如class,interface 还有用于控制程序流程和用于声明不同的数据类型 2024-11-21 java后端面经 > java后端-八股 > java-面经 #java后端面经 #八股 #java-面经
订单号全局唯一 12306项目保证订单号全局唯一的解决方案基于雪花算法。 雪花算法是一种分布式ID生成算法。主要功能是在分布式系统中生成全局唯一的ID,并且这些ID是按照时间有序递增的,索引效率高。 雪花算法使用一个64位的二进制数字作为ID,这64位被分割成四个部分: 符号位(1位):最高位是符号位,始终为0,用于标识ID是正数。 时间戳(41位):时间戳41位,精确到毫秒级,可以支持69年。 工作机器ID( 2024-11-20 java后端面经 > java后端-项目 > 12306 #java后端面经 #项目 #12306
分库分表 12306为什么要分库分表12306选择分库分表是为了应对高并发的写入请求和数据量增长带来的挑战,提高系统的写入性能和查询性能。 写入压力分散:在高并发场景下,单一数据库可能无法承受大量的写入请求,导致性能瓶颈。通过分库,可以将数据按照一定规则拆分到多个数据库中,每个数据库只处理部分数据的写入请求。这样,每个数据库所承受的写入压力被大大降低,从而提高了整体的写入性能。 存储压力分散和提高查询性能 2024-11-20 java后端面经 > java后端-项目 > 12306 #java后端面经 #项目 #12306
缓存一致性的实现 缓存一致性是指缓存中的数据与数据库之间的数据保持一致,确保用户读取到的是最新、最准确的数据。 在分布式系统中,由于多个节点可能同时访问和修改数据,因此保证缓存一致性非常重要 解决方案当数据更新时,我们最好删除缓存,下一次查询缓存时会出现未命中,这时需要重新读取一次数据库并加载到缓存中,这时缓存中的数据就是最新的数据。 如果直接更新缓存可能会涉及复杂的逻辑和额外的开销,影响缓存服务器的性能 如果 2024-11-20 java后端面经 > java后端-项目 > 12306 #java后端面经 #项目 #12306
双重判定锁解决缓存击穿 出现原因热点数据过期导致大量的请求会同时查询后端数据库。 对于一个之前从未被请求过的数据,当它第一次被请求时,缓存中没有这个数据,从而导致请求穿透到后端存储。 解决方案设置热点数据永不过期:对于一些热点数据,可以将其设置永不过期 但是这些数据将长期占据缓存空间,可能导致缓存资源无法被有效利用。如果后台数据库中的数据发生变化,而缓存中的数据未能及时更新,就会导致数据不一致的问题。 使用互斥锁:在获取 2024-11-20 java后端面经 > java后端-项目 > 12306 #java后端面经 #项目 #12306
解决注册缓存穿透 出现原因在高并发情况下,可能有大量新用户同时注册,输入的用户名极有可能不存于数据库中,而且这些查询数据库的key也不会被写入缓存,造成每次请求都查不到缓存,直接查询数据库,给数据库造成巨大压力。 其他解决方案对不存在的key进行缓存对不存在的 Key 进行缓存,值设为 Null,并设置短暂过期时间,如 60 秒。 问题对用户体验不好,假如有一个人注册了a名字,那别人在过期时间都不能注册这名字 而 2024-11-20 java后端面经 > java后端-项目 > 12306 #java后端面经 #项目 #12306
设计模式 责任链模式在12306项目中,购票请求的校验逻辑通常可能非常复杂,包含多种不同的验证步骤,如用户身份验证、余额检查、购票数量限制、行程冲突检查等。传统的做法可能是将这些验证逻辑顺序地写在一个大方法中,这样不仅导致代码臃肿、难以维护,而且违反了开闭原则。每次需要添加新的验证步骤时,都需要修改现有的代码。 为了解决这个问题,我们可以使用责任链设计模式。责任链模式是一种行为设计模式,它允许你将请求沿着处 2024-11-20 java后端面经 > java后端-项目 > 12306 #java后端面经 #项目 #12306
列车检索 车票搜索为什么用Redis而不是ESElasticSearch 是一款非常强大的开源搜索及分析引擎 而Redis是一个开源的内存数据结构存储系统 从实时性能来说,Redis 将数据存储在内存中,因此具有极低的读取延迟,可以快速响应实时查询请求。这对于需要即时更新的列车数据非常重要,确保用户能够获取到最新的车票信息。 从部署成本来说,Redis是一款轻量级的数据库,内存占用相对较低,可以在较小的硬件 2024-11-20 java后端面经 > java后端-项目 > 12306 #java后端面经 #项目 #12306