面试题目类型双指针二叉树链表滑动窗口76题目,最小覆盖字串。
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。
我们可以用滑动窗口,因为他是只是覆盖,不需要我们要求顺序一样。每个字母的出现次数一样就可以。那么我们可以使用一个数组来统计字母和出现的次数
然后使用滑动窗口涵盖字串,进->统计次数->减少次数
当最小次数为0的时候,这个时候如果滑动窗口的长度小于结果的长度的时候
更新节点位置
然后出左节点,如果需要出现的为0了
那么最少字母次数++
然后左端点对应的字母需要次数++,左端点移动
最后需要的是结果左端点和右端点之间的
也就是我们常说的right-left+1
堆&栈
面试二轮76. 最小覆盖子串(x)给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。
1234567891011121314151617181920212223242526272829303132333435363738class Solution{ public String minWindow(String S, String t) { int[] cnt = new int[128]; int less = 0; for (char c:t.toCharArray()){ if (cnt[c]==0){ less++; } cnt[c]++; } char[] s = S.toCharArray(); int m = ...
Gemini模拟面试2025.7.291.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的所有能力,同时还提供了更多面向企业应用的功能。它的预加载机制能帮助你在应用启动时就发现配置错误,而不是等到运行时才报错。
特性
BeanFa ...
普通概念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.截断策略 ...
Githubclose1.
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 << 1) 不是 8 字节对齐时,触发 S ...
redis的高并发和高可用如何用 redis 来加多台机器,保证 redis 是高并发的,还有就是如何让 redis 保证自己不是挂掉以后就直接死掉了,即 redis 高可用。
redis 实现高并发主要依靠主从架构,一主多从,一般来说,很多项目其实就足够了,单主用来写入数据,单机几万 QPS,多从用来查询数据,多个从实例可以提供每秒 10w 的 QPS。
主从架构redis的主从架构就是读写分离,一主多从。
主节点负责写,其他的从节点负责读
其中重要的就是数据的一致性的问题,就是数据的replication。我们采用了主从架构的时候,必须开启持久化
Redis 采用异步方式复制数据到 slave 节点,不过 Redis2.8 开始,slave node 会周期性地确认自己每次复制的数据量;
一个 master node 是可以配置多个 slave node 的;
slave node 也可以连接其他的 slave node;
slave node 做复制的时候,不会 block master node 的正常工作;
slave node 在做复制的时候,也不会 block 对自己的 ...
缓存1.为什么要用缓存?
用缓存,主要有两个用途:高性能、高并发。
就是说对于一些需要复杂操作耗时查出来的结果,且确定后面不怎么变化,但是有很多读请求,那么直接将查询出来的结果放在缓存中,后面直接读缓存就好。
缓存功能简单,说白了就是 key-value 式操作,单机支撑的并发量轻松一秒几万十几万,支撑高并发 so easy。单机承载并发量是 mysql 单机的几十倍。
如果按照我们存储的位置来分的话,缓存分为:
本地缓存,访问速度最快的,一般我们查数据的时候,首先查的就是本地缓存,比如Caffeine, Guava Cache, Ehcache
分布式缓存,容量更大,多个应用之间可以i将那些共享数据,比如Redis, Memcached, Hazelcast
客户端缓存,缓存数据存储在客户端,比如浏览器缓存,app缓存等等
CDN缓存,缓存静态资源在离用户较近的 CDN 节点上,常用于加速访问的速度
数据库缓存,数据库自身提供的缓存机制, 用于缓存查询结果,比如mysql就有缓存机制
Redis1.Redis 和 Memcached 有啥区别?
Redis 相比 Memcach ...
场景题1.如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?问题分析:
1.大量的消息在MQ里积压了
2.MQ中的消息过期失效了
3.MQ的队列快满了
第一个问题:
消息在MQ大量积压是消费者和生成者生产消费的速度差距过大
消费者消费的少,生产者生产的多
那么我们就先修复消费者的问题,确保消费者都能使用
然后紧急扩容,新建一个 topic,partition 是原来的 10 倍,临时建立好原先 10 倍的 queue 数量。
写一个临时的分发数据的 consumer 程序,这个程序部署上去消费积压的数据,消费之后不做耗时的处理,直接均匀轮询写入临时建立好的 10 倍数量的 queue。
临时征用 10 倍的机器来部署 consumer,每一批 consumer 消费一个临时 queue 的数据。这种做法相当于是临时将 queue 资源和 consumer 资源扩大 10 倍,以正常的 10 倍速度来消费数据。
然后恢复原先的架构
或者是业务支持批量发送的时候,使用批量发送
或者是跳过非重要的消息,
12345678910111 ...
介绍Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。
单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。
Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。
所以,Elastic 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写。
下面的命令可以查看当前节点的所有 Index。
1curl -X GET 'http://localhost:9200/_cat/indices?v'
Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。
Document 使用 JSON 格式表示,下面是一个例子。
12345{ "user": "张三", "title": "工程师", &q ...