- 博客(163)
- 收藏
- 关注
原创 mini-spring|把AOP动态代理,融入到Bean的生命周期
在 Spring 框架中,Advice 都是通过方法拦截器 MethodInterceptor 实现的。环绕 Advice 类似一个拦截器的链路Advisor 承担了 Pointcut 和 Advice 的组合,Pointcut 用于获取 JoinPoint,而 Advice 决定于 JoinPoint 执行什么操作。// 切面// 具体的拦截方法// 表达式//单例模式@Override@Override。
2024-03-07 08:34:13
1094
原创 Elasticsearch面试题
系统中的数据, 随着业务的发展,时间的推移, 将会非常多, 而业务中往往采用模糊查询进行数据的搜索, 而模糊查询会导致查询引擎放弃索引,导致系统查询数据时都是全表扫描,在百万级别的数据库中,查询效率是非常低下的,而我们使用 ES 做一个全文索引,将经常查询的系统功能的某些字段,比如说电商系统的商品表中商品名,描述、价格还有 id 这些字段我们放入 ES 索引库里,可以提高查询速度。对于中文的字典树,每个节点的子节点用一个哈希表存储,这样就不用浪费太大的空间,而且查询速度上可以保留哈希的复杂度 O(1)。
2024-03-06 08:56:22
1120
原创 ES基础-ES优化
对于节点瞬时中断的问题,默认情况,集群会等待一分钟来查看节点是否会重新加入,如果这个节点在此期间重新加入,重新加入的节点会保持其现有的分片数据,不会触发新的分片分配。考虑一下 node 数量,一般一个节点有时候就是一台物理机,如果分片数过多,大大超过了节点数,很可能会导致一个节点上存在多个分片,一旦该节点故障,即使保持了 1 个以上的副本,同样有可能会导致数据丢失,集群无法恢复。浪费内存不算,更糟糕的是,更大的指针在主内存和缓存器(例如 LLC, L1 等)之间移动数据的时候,会占用更多的带宽。
2024-03-06 08:25:32
1095
原创 ES核心概念(45-48)(56-62)(101-103)
负责协调和管理其他节点的工作。在大数据处理中,协调节点通常是一个主节点,它与其他工作节点通信并分配任务。
2024-03-04 22:51:42
893
原创 订单超时取消如何实现
DelayQueue:超时作为排序条件,轮询订单头部,若超市,出队进行超时处理。方法四:定时调度(什么是任务调度)缺点:不能持久化,并发量低。
2024-03-04 22:35:40
175
原创 mini-spring|基于JDK和Cglib动态代理,实现AOP核心功能
AOP 的核心技术实现主要是动态代理的使用那么我们就需要先来实现一个可以代理方法的 Proxy,其实代理方法主要是使用到方法拦截器类处理方法的调用 MethodInterceptor#invoke,而不是直接使用 invoke 方法中的入参 Method method 进行 method.invoke(targetObj, args) 这块是整个使用时的差异。
2024-03-04 08:18:40
983
原创 Java-动态代理 JDK&cgLib
2.自定义 MethodInterceptor 并重写 intercept 方法,intercept 用于拦截增强被代理类的方法,和 JDK 动态代3.理中的 invoke 方法类似;2.自定义 InvocationHandler 并重写invoke方法,在 invoke 方法中我们会调用原生方法(被代理类的方法)并自定义一些处理逻辑;被代理类,当代理类调用方法的时候,实际调用的是 MethodInterceptor 中的 intercept 方法。: 被代理类实现的一些接口;1.定义一个接口及其实现类;
2024-03-04 07:26:08
569
原创 基于观察者实现,容器事件和事件监听器
什么是java的事件机制java的事件机制一般包括三个部分:EventObject,EventListener和Source。java.util.EventObject是事件状态对象的基类,它封装了事件源对象以及和事件相关的信息。所有java的事件类都需要继承该类。java.util.EventListener是一个标记接口,该接口内是没有任何方法的。所有事件监听器都需要实现该接口。事件监听器注册在事件源上,当事件源的属性或状态改变的时候,调用相应监听器内的回调方法。
2024-03-01 10:18:23
890
原创 mini-spring|关于Bean对象作用域以及FactoryBean的实现和使用
在 BeanDefinition 类中新增加的两个属性信息,用于把从 spring.xml 中解析到的 Bean 对象作用范围填充到属性中。i++) {// 判断元素if (!// 判断对象if (!// 解析标签// 获取 Class,方便获取类中的名称Class
2024-02-28 23:42:02
1132
原创 图论|207. 课程表 210. 课程表 II
先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi。学习课程 1 之前,你需要先完成课程 0;并且学习课程 0 之前,你还应先完成课程 1。输入:numCourses = 2, prerequisites = [[1,0],[0,1]]否则,返回 false。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1。学习课程 1 之前,你需要完成课程 0。
2024-02-28 22:08:29
461
原创 mini-spring|定义标记类型Aware接口,实现感知容器对象
Aware标记接口的存在就像是一种标签一样,可以方便统一摘取出属于此类接口的实现类,通常会有 instanceof 一起判断使用。
2024-02-27 06:38:50
856
原创 二叉树 103. 二叉树的锯齿形层序遍历 230. 二叉搜索树中第K小的元素
给你二叉树的根节点 root ,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。在Java中,没有直接内置的“双端队列”(Deque)的概念,但是我们可以使用LinkedList类来实现一个双端队列,因为LinkedList实现了Deque接口使用层序遍历加双端链表的方式。
2024-02-26 18:42:24
197
原创 spring源码概念解析-spring循环依赖
循环依赖其实就是循环引用,也就是两个或者两个以上的bean互相持有对方,最终形成闭环。解决循环依赖问题需要。
2024-02-26 08:35:06
408
原创 spring源码概念解析-spring生命周期
ApplicationContext在初始化应⽤上下⽂的时候就实例化所有单实例的Bean。Bean 的缓存器,它是⼀个⽤HashMap实现的缓存器,单实例的Bean以beanName为键保存在这。不由 Bean 本身实现,它们独⽴于 Bean,实现类以容器附加装置的形式注册到Spring容器中并通。:如调⽤ Bean 构造函数实例化 Bean,调⽤ Setter 设置 Bean 的属性值以及通。初始化容器的时候并未实例化Bean,直到第⼀次访问某个Bean时才实例化⽬标Bean。
2024-02-26 07:38:27
399
原创 mini-spring|向虚拟机注册钩子,实现Bean对象的初始化和销毁方法
*** Bean 处理了属性填充后调用InitializingBean、DisposableBean,两个接口方法还是比较常用的,在一些需要结合 Spring 实现的组件中,经常会使用这两个方法来做一些参数的初始化和销毁操作。比如接口暴漏、数据库数据读取、配置文件加载等等。在 BeanDefinition 新增加了两个属性:initMethodName、destroyMethodName,
2024-02-26 07:08:12
953
原创 二叉树|173. 二叉搜索树迭代器 129. 求根节点到叶节点数字之和
BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。否则返回 false。给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123。int next()将指针向右移动,然后返回指针处的数字。:用null标记下一个输出 处理的left变为null。计算从根节点到叶节点生成的 所有数字之和。叶节点 是指没有子节点的节点。
2024-02-24 14:18:20
348
原创 谷粒商城-nginx搭建域名访问环境&&性能压测
2.当 eden 空间填满时,将触发一个Minor GC(年轻代的垃圾回收),删除所有未引用的对象,大对象(需要大量连续内存空间的Java对象,如那种很长的字符串)直接进入老年代。当我们在浏览器输入gulimall.com的时候,就会去找我们的虚拟机,此时虚拟机中的nginx是运行的话,就可以访问到nginx,因为nginx监听的是80端口。描述的是 JAVA 方法执行的内存模型, 每个方法在执行的时候都会创建一个栈帧,用于存储局部变量表, 操作数栈, 动态链接, 方法接口等信息。
2024-02-22 07:44:48
989
原创 尚硅谷ES基础 - RESTful & JSON&基本概念&倒排索引&HTTP
需要在创建时指定: http://127.0.0.1:9200/shopping/_doc/1。
2024-02-20 18:09:00
956
原创 mini-spring 实现应用上下文,自动识别、资源加载、扩展机制
/继承ListableBeanFactoryApplicationContext,继承于 ListableBeanFactory,也就继承了关于 BeanFactory 方法,比如一些 getBean 的方法。@Override// 1. 创建 BeanFactory,并加载 BeanDefinition// 2. 获取 BeanFactory。
2024-01-31 00:01:21
908
原创 mini-spring|设计与实现资源加载器并从Spring.xml解析和注册Bean对象
getRegistry()、getResourceLoader(),都是用于提供给后面三个loadBeanDefinitions方法的工具,用于bean的注册和资源加载bean定义抽象类实现接口@Override@Override抽象类把 BeanDefinitionReader 接口的getRegistry、getResourceLoader两个方法全部实现完了,并提供了构造函数,让外部的调用使用方。
2024-01-30 22:14:47
819
原创 大模型-文本扩展&聊天机器人
我们将根据客户评价和情感撰写自定义电子邮件响应。因此,我们将给定客户评价和情感,并生成自定义响应即使用 LLM 根据客户评价和评论情感生成定制电子邮件。
2024-01-30 12:32:15
189
原创 ConcurrentHashMap源码分析
Java7 中 ConcurrentHashMap 使用的分段锁,也就是每一个 Segment 上同时只有一个线程可以操作,每一个 Segment 都是一个类似 HashMap 数组的结构,它可以扩容,它的冲突会转化为链表。3.即为当前 key 定位出的 Node,如果为空表示当前位置可以写入数据,利用 CAS 尝试写入,失败则自旋保证成功。里面需要注意的是变量 sizeCtl (sizeControl 的缩写),它的值决定着当前的初始化状态。当冲突链表达到一定长度时,链表会转换成红黑树。
2024-01-30 08:40:06
385
原创 大模型-迭代优化&&文本概括
开发者需要先尝试编写提示,然后通过迭代逐步完善它,直至得到需要的结果。关键在于拥有一种有效的开发Prompt的过程,而不是知道完美的Prompt。可以在更成熟的应用程序中测试多个Prompt在多个样本上的平均或最差性能。在编写 Prompt 以使用 LLM 开发应用程序时,首先要有关于要完成的任务的想法,可以尝试编写第一个 Prompt,满足上一章说过的两个原则:清晰明确,并且给系统足够的时间思考。然后运行它并查看结果。,以便改进想法、改进提示等等,循环多次,直到找到适合您的应用程序的 Prompt。
2024-01-29 01:43:51
328
原创 MySql45讲-08.事务到底是隔离的还是不隔离的?(结合MVCC视频)
如果你想要马上启动一个事务,可以使用start transaction with consistent snapshot 这个命令。命令并不是一个事务的起点,在。
2024-01-29 00:20:10
364
原创 二叉树|116.填充每个节点的下一个右侧节点指针 117. 填充每个节点的下一个右侧节点指针 II
其他解法:同一个父亲的节点可以通过父节点链接 不同父亲的最左子节点和最右子节点通过父节点的next链接进行连接 最终的终止条件是节点的左节点不为空(说明到达最后一层)填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。第二种解决方式 在当前层为下一层创建链表 到下一层是使用虚拟头节点->next获取下一层链表的节点 循环构建下一层的链表。给定一个完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。
2024-01-28 20:12:47
267
原创 大模型-提示词工程
第二,将摘要翻译成法语。如果模型在训练过程中接触了大量的知识,它并没有完全记住所见的信息,因此它并不很清楚自己知识的边界。是指如果用户将某些输入添加到提示中,则可能会向模型提供与您想要执行的操作相冲突的指令,从而使其遵循冲突的指令而不是执行您想要的操作。明确指导模型在做决策之前要思考解决方案 比如有一个问题和答案 先让模型自己找解决办法 然后与给出的答案进行对比来判断给出的答案是否正确 避免模型错误的将给定的答案认定为正确答案。你还可以考虑潜在的边缘情况以及模型应该如何处理它们,以避免意外的错误或结果。
2024-01-24 12:48:56
1414
原创 Java-语法糖详解
语法糖的存在主要是方便开发人员使用。但Java 虚拟机并不支持这些语法糖。这些语法糖在编译阶段就会被还原成简单的基础语法结构,这个过程就是解语法糖。
2024-01-24 00:06:07
815
原创 Java-SPI机制
SLF4J (Simple Logging Facade for Java)是 Java 的一个日志门面(接口),其具体实现有几种,比如:Logback、Log4j、Log4j2 等等,而且还可以切换,在切换日志具体实现的时候我们是不需要更改项目代码的,只需要在 Maven 依赖里面修改一些 pom 依赖就好了。4.根据获取到的全类名,先判断跟 spi 接口是否为同一类型,如果是的,那么就通过反射的机制构造对应的实例对象,将构造出来的实例对象添加到服务提供者的Providers 的列表中。
2024-01-23 22:53:10
969
原创 mini-spring-为bean填充属性&注入bean
主要作用是bean的属性填充主要关注 createBean 的方法中调用的 applyPropertyValues 方法。在 applyPropertyValues 中,通过获取 beanDefinition.getPropertyValues() 循环进行属性填充操作,如果遇到的是 BeanReference,那么就需要递归获取 Bean 实例,调用 getBean 方法。/***/@Overridetry {//为bean填充属性/*** 实例化bean。
2024-01-23 01:59:33
504
原创 Java-泛型与通配符
2中数组不能初始化是因为不知道要开辟多大的空间3 类加载是会加载静态方法 此时泛型的具体类型并没有被确定 因为对象没有被 声明或实例化1)接口中的属性都是静态的2)
2024-01-23 00:47:51
317
原创 java-HashMap&LinkedHashMap 源码分析
LinkedHashMap 是在 HashMap 的基础上为 bucket 上的每一个节点建立一条双向链表,这就使得转为红黑树的树节点也需要具备双向链表节点的特性,即每一个树节点都需要拥有两个引用存储前驱节点和后继节点的地址,尝试将前驱节点指向后继节点,若前驱节点为空,则说明当前节点 p 就是链表首节点,故直接将后继节点 a 设置为首节点,随后我们再将 p 追加到 a 的末尾。这一步则是将当前节点 p 追加到链表末端,如果链表末端为空,则说明当前链表只有一个节点 p,所以直接让 head 指向 p 即可。
2024-01-22 23:39:03
773
原创 java-BigDecimal
使用 divide 方法的时候尽量使用 3 个参数版本,并且RoundingMode 不要选择 UNNECESSARY,否则很可能会遇到 ArithmeticException(无法除尽出现无限循环小数的时候),其中 scale 表示要保留几位小数,roundingMode 代表保留规则。我们知道计算机是二进制的,而且计算机在表示一个数字时,宽度是有限的,无限循环的小数存储在计算机时,只能被截断,所以就会导致小数精度发生损失的情况。DOWN(BigDecimal.ROUND_DOWN) 向接近0的方向。
2024-01-22 08:15:53
347
原创 mini-spring-Bean含参实例化(三)
*** @param beanDefinition bean定义信息* @param beanName bean名称* @param ctor 含了一些必要的类信息,有这个参数的目的就是为了拿到符合入参信息相对应的构造函数* @param args 具体的含参信息* @return*/
2024-01-21 23:41:40
427
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人