javase源码详解
1.==和equal()和hashcode
==和equals函数对于基本类型来说, = = 比较是值,equals不能比较基本类型
对于包装类型来说,== 比较的是对象的引用,就是对象的内存地址。而equals()通常被重写以比较对象的值。
需要注意的是,像Interger这种包装类具有缓存机制,如果在缓存的范围,==的结果可能就是true,因为他们都是指向常量池的同一个对象
对于引用类型来说,==比较的是其对象的内存地址,equals要分为两个情况,看这个类型到底重写了equals函数了没,重写了就按重写的比较,比如String类型,他的equals就是比较的对象的值。然后没有重写的话,equals内部还是使用 ==来比较。没有什么区别。还是比较的对象的内存地址
hashcode函数的作用是获取哈希码,然后确定该对象再hash表中的位置,比如hashmap,hashset,布隆过滤器等都用到了hashcode
hasecode分为好几种哈希函数,有取模的,有进行位运算的。我们在布隆过滤器中使用最好是使用两种hash函数来确定位的位置。
hashCode() 定 ...
技术栈应用
Nacos—服务注册
OpenFeign—RPC
Seata —分布式事务
真正内容设计亮点
基于 Sa-Token 构建统一 OAuth2 认证中心,实现账号密码、短信验证码、第三方平台(微信/支付宝/GitHub 等)等多种登录方式;通过自定义 Token 生成与权限控制,实现细粒度角色/权限管理;集成 Redis 实现分布式会话共享,支持多微服务统一认证与单点登录(SSO);结合注解与全局拦截器完成接口级鉴权,有效提升系统安全性与扩展性。
基于 Seata 分布式事务框架 实现跨微服务数据一致性保障,支持 AT/Saga/TCC 多事务模式;通过 Feign 拦截器实现全局事务上下文透传,结合异常分类回滚策略提升稳定性;引入事务监控与告警系统,支持事务状态实时追踪与自动补偿,显著降低人工介入成本。
设计并实现 基于 Spring Cloud Gateway 的全局认证过滤器,支持 JWT 多端统一认证、白名单动态管理、用户上下文透传;集成 Redis 实现 Token 黑名单与防重放攻击机制,提升系统安全性;引入链路追踪 ID 与异常告警体系,支持全链路请求跟踪与安 ...
基本概念
Spring Cloud 是一系列框架的有序集合。
Spring Cloud 利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。
它将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
Spring Cloud Netflix:重要组件之一,与各种Netflix OSS组件集成,组成微服务的核心。
Netflix Eureka:服务注册中心,云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
Netflix Hystrix:熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
Spring Cloud Config:配置中心,配置管理工具包,可以把配置放到远程 ...
面试回答优化
Gemini模拟面试2025.7.29
1.Java面向对象的基本特性:
总:的介绍一下java面向对象
分:封装,继承,多态
总:好处
2.Hashmap的原理
总:hashmap是个啥
分:
基本数据结构类型,1.7 or 1.8
hash冲突解决
核心put过程
扩容机制,为什么是2倍
线程安全实现
concurrenthashmap
平时使用场景
3.ArrayList 和 LinkedList 的区别
底层数据结构
插入删除遍历节点
扩容
使用场景:
4.常用的设计模式
单例:饿汉式,懒汉式,DCL 枚举 实际应用,RedisClient AppConfig Spring bean
策略:
模板
观察
工厂
5.ThreadLocal的实现
底层数据结构
Threalocal涉及两个组件,一个是他对象本身负责set和get
然后一个ThreadLocalMap负责数据的存储,每一个线程都持有一个ThreadLocalMap他就是副本。是线程隔离的,不会有并发的线程不安全问题
ThreadLocalMap是Thread下 ...
他人面经
1.spring的底层实现&三级缓存原理
我们先来说三级缓存的实现吧
首先三级缓存是那三个缓存呢?是在DefaultSingletonBeanRegistry类里面定义的三个Map。然后第一第二层都是key是bean的名字,value是bean的实例。第三次key是bean的名字,value是objectfactory.
第一层缓存是用来存储我们已经完全实例化好的bean,在这里可以直接使用的
第二层缓存时用来存储我们早期的bean,创建好,但是并没有进行依赖注入的
第三次缓存是用来存储我们的objectfactory的,用来创建代理对象的
然后我们缓存的核心方法是我们的getSingleton方法,他定义了我们如何去获取缓存的顺序
我们首先先去看第一层缓存,如果第一次没有且bean正在创建中的话。我们再去找第二层缓存,第二层也没有的话,允许早期引用。然后从三级缓存中获取objectfactory
然后使用objectfactory来创建对象,这里可能是代理对象。因为比如AOP,或者使用了其他的代理模式
然后将其升级到二级缓存,将三级缓存里面的删除。(暂不使用,然后再 ...
基础
1.什么是 IOC?
IOC就是控制反转,反转之前是啥,,,反转之后是啥。。。。实现核心就是反射,设计模式是工厂模式
然后IOC和核心就是DI,几种实现方式,循环依赖的解决方式。
@bean的生命周期,@PostConstruct @PreDestroy,bean的作用域,单例,原型,websocket,session,request,application
bean的单例不一定是线程安全的,这个跟我们的业务逻辑有关,如果bean没有一个可变的成员变量,那么他就是无状态的,也就是线程安全的
我们为了保证线程安全可以改变作作用域为prototype,或者使用ThreadLocal,或者是用锁
IOC容器:
BeanFactory 和 ApplicationContext 都是Spring的IoC容器,但后者是前者的超集,提供了更强大的功能。
ApplicationContext继承了BeanFactory,所以它具备BeanFactory的所有能力,同时还提供了更多面向企业应用的功能。它的预加载机制能帮助你在应用启动时就发现配置错误,而不是等到运行时才报错。
特性
BeanF ...
面试题目类型
双指针
二叉树
链表
滑动窗口
堆&栈
回溯
所有回溯问题,都可以抽象成在一个“决策树”上进行深度优先搜索(DFS)的过程。这个过程包含三个关键部分:
路径(Path):已经做出的选择。在全排列问题中,就是当前已经选了哪几个数字,构成了一个不完整的排列。我们通常用一个 List 或 Stack 来记录。
选择列表(Choices):当前可以做的选择。在全排列问题中,就是那些还没有被选过的数字。
结束条件(End Condition):当“选择列表”为空,或者说“路径”的长度达到了要求(比如等于原数组长度),就意味着我们走到了决策树的叶子节点,找到了一个完整的解。此时需要把“路径”存入最终结果集。
比如说一个全排列的问题,抽象出来就是
我们需要先从选择列表中将其加入到路径之中,然后标记为已选
继续递归
下一层递归返回后,为了能去尝试其他的,就将这次的撤销,就是我们说的回溯,然后移除,标记为没有启用
普通概念
Model
ChatModel: 基于自回归语言模型,其核心是 Transformer Decoder 架构。它通过“逐字生成”的方式工作:接收一段文本(Prompt),预测下一个最可能的词(Token),然后将新生成的词加入输入,再次预测下一个,如此循环,直到生成完整的回答。这种机制保证了生成文本的上下文连贯性和逻辑性。
EmbeddingModel: EmbeddingModel(如text-embedding-ada-002、text2vec-chinese)基于双向编码器,其核心是 Transformer Encoder 架构。与ChatModel不同,它会同时分析整个输入文本的上下文,然后将文本的深层语义信息映射到一个高维、密集的数字向量(Vector)中。在这个向量空间里,语义上相似的文本在空间距离上会更接近。
EmbeddingModel负责检索阶段:就是我们常说的嵌入模型
- 将查询和文档转换为向量表示
- 通过余弦相似度计算相关性
- 检索最相关的K个文档片段
ChatModel负责生成阶段:就是我们常用的聊天的那种模型
- 接收检索到的上下文+用户查询 ...
model类型面试题目
1.如何实现大模型的连续对话?
所有的大模型本身是不进行信息存储的,也不提供连续对话功能,所以想要实现连续对话功能需要开发者自己写代码才能实现
所以呢我们需要将当前用户的提问与经过管理的对话历史一同作为输入,提交给模型。
我们需要维护一个session,
通常是List<Message>结构。Message对象至少包含两个关键字段:
role: 角色(system、user、assistant)
content: 消息内容
然后进入交互循环
用户输入:接收用户的新消息(user role)。
上下文构建:从存储中获取该会话的历史消息列表,并将新消息追加到列表末尾。
API调用:将完整的消息列表提交给大模型。
获取响应:接收模型的回复(assistant role)。
上下文持久化:将模型的回复也追加到历史消息列表中,并更新存储(如Redis、数据库等),为下一次交互做准备。
在这里面最重要的就是上下文是有窗口限制的,超出模型的Token限制(如4K, 8K, 32K, 128K)。这不仅会导致API调用失败,还会增加成本和响应延迟。
1.截断 ...
配置bug
MyBatis bug
[x] factoryBeanObjectType的兼容性问题
Spring Boot 在 3.2 版本中更新了 FactoryBeanRegistrySupport#getTypeForFactoryBeanFromAttributes 方法,它要求 factoryBeanObjectType 必须是 Class<?> 或 ResolvableType,绝不接受 String
旧版本的 MyBatis-Spring 在 ClassPathMapperScanner.processBeanDefinitions() 中将 beanClassName(一个 String)赋给了 factoryBeanObjectType
slove:
我们使用MyBatis-Plus starter3.5.5。然后现在基本都要升级成springboot3,因为springaialibaba等框架也是需要3的
然后我们分模块的时候,为了避免@MapperScan重复扫描,我们只在业务模块进行mybatisplus的导入,然后common模块就只导入一个a ...
issue计划已同步到飞书管理,此文档暂时作废
Github
close
2025.7.15晚上十点,提交了我人生中的第一个PR,
是阿里巴巴的https://github.com/alibaba/fastjson2/项目。
看到一个issue没有人哈哈,我直接在vscode跑了一下,然后发现是
在 Android 10 的系统中,
com.alibaba.fastjson2.util.IOUtils.isNULL(IOUtils.java:2)
会产生一个 native 侧的 crash,Signal 7(SIGBUS), Code 1(BUS_ADRALN)出现了问题
我发现是内存对齐问题: 在 Android 10 ARM 架构上,IOUtils.getLongUnaligned(char[] buf, int offset) 方法直接使用 UNSAFE.getLong() 访问 char 数组内存,ARM 处理器要求 8 字节 long 读取必须在 8 字节对齐的地址上进行,当计算出的内存地址 ARRAY_CHAR_BASE_OFFSET + ((long) offset ...













