
总结
文章平均质量分 79
记录自己
Ibuprofen_xx
这个作者很懒,什么都没留下…
展开
-
SpringBoot接入星火认知大模型
客户端,服务端,星火大模型均通过Websocket的方式建立连接,用户询问问题时向SpringBoot服务端发送消息,服务端接收到后,创建与星火大模型的连接,并访问大模型,获取到请求结果后发送给客户端。申请成功后可以获得对应的secret,key还有之前创建的应用的appId,这些就是我们要用到的信息。考虑到敏感信息等安全性问题,这里和大模型的交互都放到后端去做。请求参数的构建和响应参数解析参照官方文档。上根据官方的提示申请tokens。这样就简单实现了一个ai问答功能。其中用来接收响应参数相关实体类。原创 2024-11-01 17:24:26 · 672 阅读 · 0 评论 -
接口限流经典算法
为了保证系统的安全性和稳定性,防止恶意流量和突发大量流量短时间内大量请求接口,造成服务器崩溃,接口的限流是有必要的。控制水流稳定流出,进水就是向接口发起的请求,一定有时快有时慢,但是漏水的速度是一定的,只要桶装满了就拒绝请求。漏桶里面的任务是一点点执行的,令牌桶有可能一下子把令牌全用光一起执行,这样就可以很快的处理大流量的请求。如果切分越小,产生的块就多,窗口滚动越平滑,限流统计越准确,但是对服务器压力越大。把令牌以稳定的速度放入桶中,如果桶被放满了,多余的令牌就无法放入。以下是四种经典的限流算法。原创 2024-08-24 11:23:29 · 372 阅读 · 1 评论 -
nginx反向代理了解
cgi:通用网关(接口),主要解决的问题是从客户端发送请求和数据,服务端获取到请求和数据后可以调用cgi程序处理及相应结果给客户端的一种标准规范。正向代理代理的是客户端(如翻墙),反向代理代理的是服务端,用户请求代理服务器,代理服务器再将请求分发到服务端。客户端将请求发送给代理,代理再向服务端请求,并接受服务端响应,将响应返回给客户端,比如翻墙。客户端将请求发送给代理,代理将请求发送给不同的服务端,把服务端隐藏起来,降低服务端压力。设置被代理服务器地址,可以是主机名称,ip地址+端口形式。原创 2024-06-03 21:09:09 · 898 阅读 · 2 评论 -
ElasticSearch学习
拼音分词器会将词一个字一个字的转成拼音,而且没有中文,所以我们还要修改拼音分词器的配置es中的分词器组成包含三部分character filters:在tokenizer之前对文本进行处理,例如删除字符,替换字符tokenizer:将文本按照一定规则切割成词条tokenizer filter:将tokenizer输出的词条做进一步处理,例如大小写转化,同义词处理,拼音处理等可以在创建分词库时,通过setting来配置自定义的analyzer(分词器)PUT /test。原创 2024-05-19 18:32:03 · 1075 阅读 · 1 评论 -
Rabbitmq学习
如果我们向消息队列中发送Java对象,spring对消息对象的处理是由MessageConverter来处理的,而默认实现是SimpleMessageConverter,会基于jdk的ObjectOutputStream完成序列化。当一个服务完成后需要调用其他服务,这个服务不需要主动调用其他服务,可以向事件代理者(Broker)发布事件,事件代理者就会通知相应服务执行相关业务,这个服务也不需要等待其他服务执行完直接返回结果给用户即可。工作消息队列:一个队列绑定多个消费者,提高消息处理速度,避免消息堆积。原创 2024-04-28 15:47:22 · 1079 阅读 · 3 评论 -
Docker的使用
镜像是分层结构,每一层称为一个LayerBaseImage层:包含基本的系统函数库,环境变量,文件系统Entrypoint:入口,是镜像中应用启动的命令其他:在BaseImage基础上添加依赖,安装程序,完成整个应用的安装和配置。原创 2024-04-20 14:45:49 · 1241 阅读 · 2 评论 -
JVM类加载机制
同时,在堆中生成一份与方法区中数据类似的java.lang.Class对象(用来在Java代码中去获取类的信息以及存储静态字段的数据,JDK8之后·这个静态字段数据就存放在堆区)类加载器加载完类后,Java虚拟机会将字节码中的信息保存到方法区,在方法区中生成一个对象InstanceKlass,保存所有类的信息,里边包含实现特定功能,如多态的信息。扩展类加载器和应用类加载器的源码位于rt.jar包中的sun.misc.Launcher.java,是按照jar包的位置来加载字节码文件。这种方式性能比较高。原创 2024-02-02 18:13:47 · 1074 阅读 · 1 评论 -
基础算法--搜索与图论(2)
实际上是对Bellman-ford算法的优化,主要思路是记录哪些点被更新了,再将和这些点有关系的点更新。所有边权重都是正数:朴素Dijkstra算法 n^2,堆优化版Dijkstra算法 mlogn。存在负权边:Bellman-Ford算法 nm ,SPFA 算法 一般是m,最坏nm。图中不能存在负权回路,否则在回路中一直转圈,最短路就变成负无穷即不存在最短路。**单源最短路:**一个点到其他点的最短距离。**多源汇最短路:**起点和终点都是不确定的。到集合的距离:指到集合中的最近的点的距离。原创 2024-01-27 18:21:10 · 2104 阅读 · 0 评论 -
基础算法--搜索与图论(1)
对于一个序列,对应图上每条边都是起点在终点前面易知,如果存在环的话,就一定不存在拓扑序列所以,有向无环图又被称为拓扑图入度为0的点可以作为起点,所以,拓扑排序步骤如下:把所有入度为0的点入队。原创 2023-12-31 11:12:39 · 565 阅读 · 0 评论 -
Manacher算法(马拉车)
作用:在On的时间复杂度下,求出字符串每个回文中心的最长回文半径回文半径:以回文中心为起点,到回文串两端的距离如:# a # b # a #以b为回文中心,最长回文半径就是 4如果回文字符串长度为偶数,那么回文中心就无法正好落在某个字符上,所以可以在每个字符之间添加一个“#”做前置处理(包括字符串首尾)原创 2023-12-19 10:21:59 · 445 阅读 · 0 评论 -
Spring事务 过滤器和拦截器的区别
在业务层,通常在接口中(而非实现类)的要开启事务的方法上写注解@Transactional,以此来降低耦合(注解事务可以添加到业务方法上表示方法开启事务,告诉Spring,在Spring的配置类中写@EnableTransactionMangment,开启事务管理驱动。Spring事务并不是每次遇到异常都自动回滚,只有遇到error系异常和运行时异常才会自动回滚。想要其他的异常也能自动回滚,需要设置@Transactional中的。若要改变事务传播行为,可对该事务中的@Transactional中的。原创 2023-06-04 11:46:38 · 98 阅读 · 0 评论 -
动态sql MyBatis处理多对一,一对多映射关系
项目复习补充原创 2023-05-29 10:10:48 · 323 阅读 · 0 评论 -
Spring相关概念 IoC思想
spring可以降低代码书写的耦合度(因为实现业务层逻辑时,我们需手动创建service的对象,如果service发生改变,需重新创建新的对象,下面的代码也需重新调试,很麻烦)解决方案:使用对象时,在程序中不要主动使用new产生对象,转换为由提供对象。原创 2023-05-21 17:12:52 · 68 阅读 · 0 评论 -
AOP和拦截器
返回后通知:@AfterReturning底层,value属性用来存放切入点表达式,returning属性用来存放获取的返回值,所以想获取返回值,可以这样做。环绕通知中获取了参数数组后,可将这个参数传递给proceed方法,即传回给原始方法,且在传回之前,可对参数数组进行操作,操作完再传回,生效。:多个连续的任意符号,可独立出现,常用于简化包名与参数的书写。*:单个独立的任意符号,可独立出现,也可作为前缀或后缀。只有环绕通知,抛出异常后通知可以获取异常。只有返回后通知,环绕通知可以获取返回值。原创 2023-05-07 09:55:38 · 267 阅读 · 0 评论 -
SpringMVC学习
SpringMVC是一种基于Java实现的MVC模型的轻量级框架是一种表现层框架技术用于进行表现层功能开发。原创 2023-04-22 22:01:49 · 140 阅读 · 0 评论 -
JVM垃圾回收
再次创建对象,如果伊甸园区又满了,再次触发Minor GC,这时不仅会回收伊甸园垃圾,也会回收幸存区垃圾,再将可用对象(伊甸园区和幸存区from)复制到TO中,之后交换两个幸存区,并让幸存区中对象寿命+1。软弱引用还可以配合,引用队列使用,因为软引用,弱引用本身就是一个对象,当他们所引用对象被回收时,他们就会进入这个引用队列,因为他们自身也会占有一定内存,如果想对他们的内存进行释放,就需要引用队列。在对象中添加一个引用计数器,当有地方引用时计数器就加一,引用失效时计数器减一,当计数器值为0时,进行回收。原创 2023-12-10 10:30:06 · 1976 阅读 · 0 评论 -
基础算法学习
就是再定义一个长度和要存放数据的数组(a)等长的数组(s),在初始化存放数据数组时,将这个数组也初始化,每个位置存放前一个位置(s[i - 1])和 a[i] 的和。其中a数组和s数组下标最好都从1开始,这样在初始化前缀和数组时,是s[i] = s[i - 1] + a[i] 这里的i - 1,就不用单独判断。构造差分数组不是核心,差分数组的构造可以看做,将元素一个一个按照规则添加进一个全为0的差分数组中,核心是添加进差分数组的规则。快排同理,虽然每次不一定是平分的,但是期望是平分的。原创 2023-11-26 23:01:41 · 1197 阅读 · 0 评论 -
MySQL事务和Redis事务对比
批量操作在执行exec命令前被放入队列缓存中,并没有被实际执行,也就不存在事务内的查询会被看到,事务外的看不到,从而也不会出现并发事务问题。单条命令的执行是保证原子性的,而事务是不保证的,且没有回滚,事务中任意命令失败,其他命令仍会执行。因为事务的隔离性,可能会引发一系列问题。性能逐渐降低,安全性逐渐升高。原创 2023-11-06 21:13:47 · 333 阅读 · 0 评论 -
动态规划——背包问题 (1)
01背包,完全背包,多重背包原创 2023-10-29 16:08:56 · 57 阅读 · 0 评论 -
方法引用 -- java
————原创 2023-10-22 08:51:49 · 71 阅读 · 0 评论 -
MySQL内容整理(1)
本周学习原创 2023-10-15 14:28:40 · 64 阅读 · 0 评论 -
Java Web -- jsp
由于JSP不利于团队协作,不利于阅读等等,现在主流开发方式为Servlet+HTML+AJAX 或 Servlet+JSP,其中Servlet负责逻辑处理,封装数据,JSP负责获取数据,遍历展现数据,不提倡在JSP中直接写Java代码,在Servlet中书写即可。其中test为必须属性,引号包裹的是判断语句,若判断语句结果为true时,就会执行标签包裹范围内的语句,一般与EL表达式结合使用,由EL表达式获取数据,由JSTL标签来判断,从而执行相应代码。相当于增强for循环。相当于普通for循环。原创 2023-04-08 18:42:23 · 140 阅读 · 0 评论 -
Java web学习
HttpServletResponse ——> java提供的对Http协议封装的响应对象接口。HttpServletRequset ——> java提供的对Http协议封装的请求对象接口。ServletResponse ————–> Java提供的响应对象根接口。ServletRequest ————–> Java提供的请求对象根接口。ResponseFacade ———-> Tomcat定义的实现类。RequestFacade ———-> Tomcat定义的实现类。原创 2023-03-25 20:56:59 · 92 阅读 · 0 评论 -
算法学习——时间复杂度 异或
一个操作如果和样本的的数据量无关,每次都是固定时间内完成的操作,叫常数操作(如链表查找,就与样本的数据量有关,而在数组中查找,可以直接根据索引获取,无论获取哪个元素都是在固定的时间内完成的操作,与样本的数据量无关)写出常数表达式数量,不要低阶项,且忽略掉高阶项的系数,剩下的部分如果为f(n),那么时间复杂度为O(f(n)),按最差的情况来估计。**插入排序:**O(n^2),这是插入排序最差的情况,它的时间复杂度是会随着数据的改变而改变的。2.异或满足交换律 结合律。3.用异或来实现交换。原创 2023-03-11 22:21:37 · 208 阅读 · 0 评论 -
算法——排序和查找
如果是无序的,也可以先进行排序。但是排序之后,会改变原有数据的顺序,查找出来元素位置跟原来的元素可能是不一样的,所以排序之后再查找只能判断当前数据是否在容器当中,返回的索引无实际的意义。:也称为是折半查找,属于有序查找算法。将0索引的元素到N索引的元素看做是有序的,把N+1索引的元素到最后一个当成是无序的。遍历无序的数据,将遍历到的元素插入有序序列中适当的位置,如遇到相同数据,插在后面。说明:元素必须是有序的,从小到大,或者从大到小都是可以的。当数据表中的数据元素很多时,可以采用分块查找。原创 2023-03-04 21:01:14 · 140 阅读 · 1 评论 -
前端——初学
初学前端原创 2023-02-18 19:26:00 · 97 阅读 · 0 评论