- 博客(23)
- 收藏
- 关注
原创 刷题笔记--串联所有单词的子串
每次循环,都初始化一个哈希表用来记录划分后的单词出现频率和words的误差,等同于之前字符串中找到字母异位词的做法,只不过这里不再是字母而是一个个长度相等的字符串。注意,体面中words每个单词的长度都是相等的,所以我们是可以等长的去划分子串的,这样划分之后用哈希表differ去划分。这是我在外层调用的方法,最后显示超时了,超时原因在于当words长度过长时,递归回溯的方法复杂度不好控制,过于耗时。//遍历字符串s,与所有可能的拼接结果对比,找到符合的结果。//全排列找出words能拼接成的所有字符串。
2025-07-04 10:32:48
552
原创 刷题笔记--分发糖果
先从左到右遍历一次计算出左数组left,第一个记1个,后续如果第i个分数比i-1分数高的话,令left[i] = left[i-1] + 1,否则left[i] = 1。具体代码实现中,我们不需要显示地分配糖果,而是记录当前递减序列的长度来知道需要额外分配的糖果数量,注意我们需要把递增序列最后一个同学也并入递减序列中。当这个孩子比他左边的人分数高时,他正处在一个递增序列,记上一个孩子的糖果数量为pre,这个孩子的糖果数量就是pre+1,否则就是1;
2025-07-04 10:32:12
186
原创 RPC--Netty服务端实现
判断Rpc请求类型,如果是心跳请求,就返回一个PONG,如果是Rpc调用就调用 RpcRequestHandler 执行方法,构造一个RpcMessage并构造响应数据Response,写回客户端时判断 Channel 是否可写,最后使用 ReferenceCountUtil.release(msg) 避免内存泄漏。//表示系统用于临时存放已完成三次握手的请求的队列的最大长度,如果连接建立频繁,服务器处理创建新连接较慢,可以适当调大这个参数。// 绑定端口,同步等待绑定成功。// 等待服务端监听端口关闭。
2025-07-03 08:52:36
636
原创 RPC--Netty客户端实现
从channel中读取一个message,判断这个message如果是普通的心跳信息,如果是请求的响应就提取其中的RpcResponse对象,并从unprocessedRequest中完成这个请求对应的future,最后释放msg的内存防止泄露。如果找到了连接的channel就发送rpcMessage,下面的写法是典型的netty异步发送消息+回调处理的写法,异步发送一个消息到channel并刷新缓冲区(即发送数据到服务端),监听到发送成功了就打印记录日志,如果失败就发送失败原因。
2025-07-03 08:49:37
1502
原创 RPC--RPCHandler的实现
在RPC框架中,Handler用于接收RpcRequest,经过处理后返回RpcResponse。//从请求中提取方法名成,并调用到这个方法的服务。//通过服务名称调用方法并返回结果。//获取一个单例模式的服务提供类。
2025-07-03 08:48:44
387
原创 RPC--zookeeper服务提供类
发布服务,通过InetAddress类获取到当前主机的ip地址,调用服务发布组件的注册服务接口,将服务名称和通信的IP地址、端口号这些注册到zookeeper,并调用addService接口将信息写入map。先判断要添加的服务是否已经注册过了(服务名称是否已经存在于registeredService这个set集合中),如果没有注册过写入map中。下面三个属性,第一个serviceMap,key是服务名称,value是Object也就是服务对象,用于快速查找服务实例。接口方法:添加服务、获取服务、发布服务。
2025-07-03 08:47:46
249
原创 RPC--自定义注解注册发布服务
通过动态代理,在客户端创建一个实现了远程服务接口的代理对象。@Import注解在配置中引入了CustomScannerRegistrar这个类,这个类是实现自定义扫描包的逻辑的,是一个实现了ImportBeanDefinitionRegistrar接口的类,用来动态注册bean的定义。然后为这个字段的服务生成一个代理对象,默认情况下这些字段我们都会设置成private,所以要先将这个字段设置成可访问并通过反射将代理对象赋值到这个字段,这样当调用这个字段的方法时,就会通过代理对象远程调用到服务的方法了。
2025-07-03 08:47:14
634
原创 实现一个更加完整的RPC框架
RPC(remote procedure call)远程过程调用协议,通过网络通信从远程计算机上调用服务,不需要了解底层网络技术的协议,RPC假设某些网络协议的存在,可以跨越TCP/UDP这些传输层或者应用层,更方便的开发网络分布式程序。1、服务注册中心:将提供的服务实例注册到服务注册中心,让客户端连接调用服务端所发布的服务。也就是说隐藏掉网络层的实现,通过像本地那样通过类名、方法名和参数就能调用到远程服务,其主要作用就是像调用本地方法一样便捷地去调用远程服务。接下来,我将实现一个更加完整的RPC框架。
2025-07-03 08:46:18
178
原创 RPC框架--实现一个非常简单的RPC调用
用map保存注册的服务信息,map的key是提供的服务名称,value是URL的列表我们一开始的实现方法是在服务端保存一个Map用来保存已经注册的服务和它对应的接口,然后consumer从map中拿。以redis为例,每次调用服务时,我们都需要去redis中查询服务信息,rpc服务比较耗时。因此,在这里我们需要实现一个服务注册中心,当provider服务启动时,他会自动把服务信息添加到注册中心,这样就无需手动地去配置,在项目中,我们一开始用一个本地的Map去实现注册信息的存储。实现服务的mock功能。
2025-07-01 09:40:58
1603
原创 Mysql存储引擎
MyISAM引擎不支持事务和外键、索引采用非聚簇索引,优势在于访问速度块对事务没有完整性要求,以select、insert为主的应用基本可以用这个引擎创建表。对于一张mysql的表,需要存储表结构、数据和索引,存储引擎直接影响上面内容的存储方式。mysql主要存储引擎包括:MyISAM和InnoDB。.MYI(MYIndex,存储索引).MYD(MYData,存储数据).ibd(存储数据和索引).frm(存储表的定义).frm(存储表定义)
2025-06-30 22:29:31
186
原创 Mysql单表查询技巧一
3、使用explain修饰查询语句会显示这个sql语句的查询计划,如下图中SIMPLE表示简单查询没有联表等操作,查t_user表,type为all表示整表扫描const则表示索引上常数复杂度扫描,possible_keys表示可能用到的键,key表示实际用到的键rows字段表示扫描了多少行,filtered表示扫描总行数和满足条件行数的比值。2、在建表时,对主键和唯一键,mysql会自动生成唯一索引,查询时直接从索引树上取而不用全表扫,在这些键的字段上查询效率更高。
2025-06-30 22:28:55
238
原创 Mysql支持的数据类型
注:在定义字段时会出现类似INT(9)这样的定义,这个不代表说一个INT型占9个字节,而是说这个字段显示时固定9个宽度,如1会显示000000001,整形内存大小是固定的和具体类型强相关,类似INT(9)只能改变显示宽度。浮点数更建议使用decimal类型 DECIMAL(P,D)表示浮点数类型,小数点前P位,小数点后D位,并保存为字符串格式。而字符串类型CHAR(9)不同,表示9B的内存大小。INT、INTEGER 4字节。CHAR(M) M字节。BIGINT 8字节。DOUBLE 8字节。
2025-06-30 22:28:07
219
原创 netty入门概念NIO、BIO
但是,上面的程序会有问题,当列表中存在几千万个连接时,可能只有几十个激活并接收到了消息,因此访问每个连接其实非常浪费资源,需要对这个算法进行改进。NIO对应一个通道列表,里面存放用户的连接列表,如下面的代码每个连接占用一个通道,当连接建立时,在列表中加入这个连接。System.out.println("接收到消息: " + new String(byteBuffer.array()));此时不能再接收其他客户端连接请求,只能等待同当前连接的客户端的操作执行完成,但是可以通过多个线程来执行多个连接的响应。
2025-06-30 22:27:13
712
原创 Spring boot入门工程
将 spring.factories 文件 key 为 EnableAutoConfiguration 的所有值取出,然后这些值其实是类的全限定名, 也就是自动配置类的全限定名 ,然后 Spring Boot 通过这些全限定名进行类加载(反射),将这些自动配置类添加到 Spring 容器中。Maven的依赖书写遵循GAV的原则(Group、Artifact、version),springboot开发只需要写上G和A,V由boot的配置提供,如果发生了坐标的错误,再手动指定version解决冲突。
2025-06-30 22:26:13
508
原创 Spring事务
如果我们希望不管上面两个方法成功与否,都打印日志的话,可以将log方法移除事务,或者在事务上加上属性,令事务的传播行为为新建事务,而不是加入管理员的事务,这就保证了日志的事务和前面两个数据库操作的事务是两个独立的事务。1、在方法上加上事务注解Transactional,也可以在整个接口或者类上面加上事务注解,这就表示这个接口或者类下面所有方法都要开启事务。下面两个数据库操作都是事务协调员,在数据库操作时,这两个方法都会开启自己的事务,然后加入到前面注解方法的事务中,这就涉及到事务的传播行为。
2025-06-27 23:39:04
275
原创 Spring AOP用法
此外,要记住,在通知方法中可以不处理原始方法的返回值,如果接收了原始方法的返回值并返回的,spring出于框架通用性考虑,这里pjp方法的返回值一定是Object类型的,因此整个增强方法的返回值也一定是Object类型。AOP可以拦截指定的方法并且对方法增强,而且无需侵入到业务代码中,使业务与非业务处理逻辑分离,比如Spring的事务,通过事务的注解配置,Spring会自动在业务方法中开启、提交业务,并且在业务处理失败时,执行相应的回滚策略。2、访问修饰符,例如public、private等等,可以省略。
2025-06-27 23:38:22
638
原创 Spring注解开发定义bean
上面显示的第一种bean定义方式定义了一个value,获取这个bean的时候直接getbean("bookDao")通过名字获取,第二种方式定义bean没有给value,这时候可以通过class类型来识别要获取的bean,获取这个bean的时候直接getbean(BookServiceImpl.class)通过类型来获取。但是如果要注入的类型有两个bean实现,也可以通过名称来进行匹配,如下图,要在Autowire自动装配注解下面加上Qualifier注解,表示按找名称自动装配,这个注解不能单独使用。
2025-06-26 10:19:42
481
原创 SpringIOC容器
但是与ApplicationContext不同,BeanFactory是延迟加载的,也就是容器初始化后并没有预先初始化好bean,而是在getBean方法时生成的,但是ApplicationContext初始化容器时立即加载bean。ApplicationContext也可以实现类似的效果,在配置bean的时候配置lazy-init="true"即可。BeanFactory,这是ApplicationContext接口实现的最上层的接口,是IOC容器的顶层接口。2、使用bean名称获取并指定类型。
2025-06-26 10:18:50
248
原创 spring依赖自动装配,及List、map集合等的注入写法
同时,自动装配优先级低于setter注入与构造器注入,同时出现时自动装配失效。byName,按名称自动装配,bean的id要和对象类型名称对应上,必须保障容器中有指定名称的bean,因变量名与配置耦合,不推荐使用。byType,按类型自动装配,从set方法中找到对应的类型自动装配,因此需要保证容器中相同类型的bean唯一。依赖自动装配指的是IOC容器根据所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配。有以下几种方式:按类型(常用)、按名称、按构造方法、不启用自动装配。
2025-06-23 15:11:36
205
原创 Spring依赖注入
1、强制依赖用构造器进行,使用setter注入有概率不进行注入导致null对象出现(也就是说,某个service强制依赖一个bean的话就要用构造器注入,因为构造器注入时如果不传入这个bean的话就初始化失败,而setter注入如果不传入bean的话就不执行导致这个对象为null)4、如果有必要可以两者同时使用,构造器完成必要依赖注入,setter完成可选依赖注入,实际开发过程中还需要根据实际情况进行分析,如果受控对象没有提供setter方法就必须使用构造器注入。一、setter注入--引用类型。
2025-06-23 15:10:37
180
原创 Spring IOC原理以及实现
就是对象的创建权反转交给Spring,由容器控制程序之间的依赖关系,作用是实现了程序的解耦合,而非传统实现中,由程序代码直接操控。(2)最直观的表达就是,IOC让对象的创建不用去new了,可以由spring自动生产,这里用的就是java的反射机制,通过反射在运行时动态的去创建、调用对象。但是要重写这个类的getObject接口,里面是造要获取的bean实例的方法,上面所有的工厂生产的对象都是单例的,如果要改成非单例的可以在xml配置scope属性,也可以重写isSingleton函数让他返回false。
2025-06-23 15:09:37
853
原创 Attention is All You Need —— Transformer论文解读
Transformer由 Google 的研究团队在 2017 年提出,并在论文《Attention Is All You Need》中详细介绍,其核心在于其完全基于注意力机制的设计,避免了传统 RNN 和 CNN 的循环和卷积操作。它通过多头自注意力机制(Multi-Head Self-Attention)来捕捉输入和输出之间的全局依赖关系,从而实现更高的并行性和训练效率。
2025-02-15 23:00:47
2053
原创 大模型学习笔记一:Transformer的注意力机制
Google 的 T5、清华的 GLM 则同时采用了 Encoder 和 Decoder,即 Encoder-Decoder,而 OpenAI 的 GPT,Meta 的 LLaMA、Stanford 的 Alpaca、UC Berkerly 的 Vicuna,还有一众兄弟都只采用了 Decoder,即 Decoder-Only。而且,在输出第 1 个单词“I”的时候和输入的“我”的相关性最高,和其他词的相关性比较小;它是一种特殊的注意力,而注意力的提出又是为了解决上面所提到的 RNN 的问题,
2025-02-14 23:19:55
998
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅