- 博客(224)
- 收藏
- 关注
原创 字节跳动平台的智能体搭建
智能体=AI代调教:用来补齐用户不会表达的部分;:用来让智能体有更多能力;:用来让智能体的工作流程更严谨;:用来让我们的智能体知道更多知识(比如公司内部的信息)。
2025-01-04 15:28:53
402
原创 springcloud篇2-feign、gateway
说明:(1)日志级别NONE-没有日志BASIC-记录请求的开始和结束时间HEADERS-记录请求的开始和结束时、请求头和响应头FULL-记录请求的开始和结束时、请求头和响应头、请求体和响应体但该方式不推荐,会导致紧耦合。之前的微服务允许任何的访问,不安全,需要添加一个网关(功能包括身份认证和权限校验、服务路由、负载均衡、请求限流)。
2024-12-27 11:38:01
1228
原创 springcloud篇1(微服务技术栈、服务拆分与远程调用、Eureka、Nacos)
另外,为了监控,还有“分布式日志服务”和“系统监控链路追踪”:最后,利用Jenkins技术对微服务进行自动化编译,再利用docker进行打包形成镜像,再基于k8s或者rancher去实现自动化的部署,这一套机制称为持续集成。微服务技术栈包括微服务技术和持续集成。
2024-12-26 10:01:14
1974
原创 Redis分布式锁
Redisson是封装好的实现Redis分布式锁的依赖,可以直接使用(意思是前面实现锁的代码其实都不用自己写)。使用方法如下。
2024-12-02 22:36:38
661
原创 redis缓存
缓存存在数据一致性问题,如数据库里的数据改变,缓存中的数据未及时更新。这需要在代码中解决该问题。对于低一致性需求的数据可以选择“内存淘汰”和“超时剔除”策略,对于高一致性需求的数据可以选择“主动更新”策略,并以“超时剔除”为兜底方案。主动更新策略又可以有以下三种实现方式:企业中使用的最多的是01Cache Aside Pattern。
2024-11-30 13:26:54
670
原创 Java的LinkedList、HashSet与TreeSet
LinkedList是Java集合框架中的一个重要类,它实现了List接口。与ArrayList不同,(1)LinkedList是基于双向链表的数据结构,因此它在进行插入、删除操作时通常比ArrayList更快,但在随机访问元素时可能会比较慢。(2)LinkedList 不是线程安全的。如果需要在多线程环境中使用,可以使用 Collections.synchronizedList 方法来创建一个同步的列表。add(E e): 在链表末尾添加元素。
2024-11-29 19:04:09
1243
原创 redis实战:集群的session问题
以用户登录为例。用户登录时的信息保存在tomcat内存的session中(session都有一个sessionId,用户发送请求时的cookie携带sessionId帮助找到对应的session)。但是,这不适用于集群模式,会存在session共享问题。:多台tomcat并不共享session存储空间,当请求切换到不同tomcat服务器时会导致数据丢失的问题。需要找到一个替代session的东西,session的替代方案应该满足:(1)数据共享;(2)内存存储;(3)key、value结构。
2024-11-29 10:55:24
512
原创 Redis(配置文件属性解析)
tcp-backlog是一个TCP连接的队列,主要用于解决高并发场景下客户端慢连接问题。配置文件中的“511”就是队列的长度,对联与TCP的三次握手有关,不同的linux内核,backlog队列中存放的元素(客户端连接)类型是不同的。linux内核2.2版本之前:队列中存放的是已完成第一次握手的所有客户端连接。linux内核2.2版本之后:TCP系统中维护了两个队列。一个存放未完成三次握手的队列,一个存放已完成三次握手的队列。
2024-11-28 18:08:39
1112
原创 Redis(概念、IO模型、多路选择算法、安装和启停)
关系型数据库是典型的行存储数据库,存在的问题是,按行存储的数据在物理层面占用的是连续存储空间,不适合海量数据存储。Redis在生产中使用的最多的是用作数据缓存。服务器先在缓存中查询数据,查到则返回,查不到则到DB中查找。
2024-11-27 21:36:21
1103
原创 Docker与Kubernetes
Docker是一个用于构建运行传送应用程序的平台,即把一个个运用程序打包成集装箱并传输到任何需要的地方。有了Docker,就可以把运用程序与它运行时需要的各种依赖包和第三方软件库、应用程序与环境变量、配置文件和启动命令打包在一起,以便在任何环境种都可以正确的运行。
2024-11-05 18:29:20
1784
1
原创 Go语言基础语法
因此,这里的索引是指字节在字符串中的位置,而不是字符在字符串中的位置(对于多字节字符,后者可能更有用,但 Go 的 range 在字符串上不提供这种索引)。在 Go 语言中,chan 关键字用于创建通道(channel),通道是一种用于在 goroutine 之间进行通信的类型化管道。关闭通道后,无法再向通道发送数据,但可以继续从通道接收数据,直到通道为空。在上面的例子中,index 是元素的索引,而 value 是对应索引的元素值。在这个例子中,key 是映射的键,而 value 是与键关联的值。
2024-11-03 14:30:09
1159
原创 微服务架构(Dubbo+Zookeeper)
而且,对于服务提供方和服务消费者来说,还有可能兼具这两种角色,即需要提供服务,又需要消费服务,通过统一管理起来,可以有效地优化内部应用对服务发布/使用的流程的管理,服务注册中心可以通过特定协议来完成服务对外的统一。RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。对于服务消费方,最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。
2024-04-17 17:07:26
1427
原创 java的volatile
并且当一个线程读取一个volatile变量时,它会从主内存中读取,而不是从自己的工作内存中读取(当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值立即刷新回主内存中。在Java中,线程之间对内存写入操作的可见性是一个重要的问题,因为每个线程都有自己的工作内存,并且线程之间共享主内存。此外,synchronized还确保了内存可见性,即当一个线程释放锁时,它会将修改后的共享变量的值刷新到主内存中,使得其他线程在获取锁并读取共享变量时,能够看到最新的值。但是,volatile并。
2024-04-16 16:50:54
541
原创 vue一些知识补充(标签的ref属性、computed和watch的区别、vuex、css中的transform属性、Javascript的setInterval())
vuex是一个专门为vue.js应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态。scale(x,y):定义2D缩放,x表示水平缩放的倍数,y表示垂直缩放的倍数 ,y是一个可选参数,如果没有设置y值,则表示x,y两个方向上的缩放倍数是一样的,并以x为准。
2023-09-26 17:24:57
416
转载 流程图(FlowChart)
页面=操作+内容,操作是需要用户触发的,包括链接、按钮、表单等等。用户通过这些操作,看到同一个页面上不同的内容,或者跳转到其他的页面。页面也有分类:注意有些操作可能不会跳转到一个实际的页面,而是有可能发个短信、发个邮件等,这些也需要被表现出来。(3)同一流程图中,符号大小需要保持一致,同时连接线不能交叉,连接线不能无辜弯曲;俗称为泳道图,在样子上像个泳道,可以有横向的泳道,也可以有纵向的泳道。页面流程图的目标:表现用户的不同的操作指令下不同页面流转关系。常见的流程图有业务流程图和页面流程图。
2023-07-23 14:49:46
2591
原创 java的线程池
例如,自定义一个线程池,核心线程有3个,临时线程有3个,阻塞队列长度为3。当有8个任务提交时,线程池现创建3个线程执行前3个任务,第4,5,6个任务阻塞队列中排队等待,线程池再创建2个临时线程取处理任务7和任务8。当有10个任务提交时,线程池现创建3个线程执行前3个任务,第4,5,6个任务阻塞队列中排队等待,线程池再创建3个临时线程取处理任务7、8、9,任务10会触发任务拒绝策略。核心线程数量,线程池中最大线程数量、空闲时间(值)、空闲时间(单位)、阻塞队列、创建线程的方式、要执行的任务过多时的解决方案。
2023-06-16 14:35:44
652
原创 java中的时间
JDK8解决了这一问题,JDK8的时间日期对象都是不可变的,如果想修改时间,原来对象的时间不会改变,而是返回一个新的对象。计算机中的时间原点为1970年1月1日00:00:00.中国(东八区)的时间原点为1970年1月1日08:00:00.currentTimeMillis()方法的返回值是指从时间原点开始到现在经过的毫秒的值。注意上图中的横线上的类是JDK7的类,上图展示了JDK7的时间相关类与JDK8的时间相关类之间的关系。(1)数组中的月份范围为0~11,如果取出来的是0,那么实际上是1月。
2023-06-16 13:50:38
4844
原创 java的网络编程
原因:“你好”.getBytes()使用的是默认的GBK编码方法,二在Server的socket.getInputStream中使用的是字节流的读取方式,一次读一个字节,再转成char就会乱码。特殊IP地址127.0.0.1,也可以是localhost,是回送地址也称回环地址,也称本机IP,永远只会寻找当前所在本机。TCP协议通信之前要保证连接已经建立,在通信的两端各建立一个Socket对象,通过Socket产生IO流来进行网络通信。注意把接收端的端口号去掉,令其随机获得一个端口号,否则端口冲突会报错。
2023-06-15 19:35:15
641
原创 java的生产者消费者代码实现(使用wait()、notify()、notifyAll())、阻塞队列实现
可以看到,运行结果显示阻塞队列大小为1,生产者却可以连续生产,其实并不是这样。出现这种状况的原因如下图,生产者放产品和打印输出语句并不一定一次性执行完,由于多个线程并发执行导致这种错觉。阻塞队列相当于连接生产者和消费者之间的通道,相当于缓冲池,可以理解为缓冲区大小大于1,且是一个队列。例如,设生产者消费者问题中的缓冲池大小为1。接口不能直接定义对象,需要用上图中两个蓝色框中的两个实现类定义阻塞队列的对象。生产者消费者问题也是等待唤醒机制,是一个十分经典的多线程协作的模式。二、阻塞队列实现等待唤醒机制。
2023-06-15 17:24:22
1173
原创 java中的多线程、同步代码块、同步方法、锁
说明:上述代码中实现了Runnable接口的类是放在了新建的Thread类中的,可以理解为实现了Runnable接口的类里面是线程要执行的任务,将任务交给执行线程。还需要注意,为了区分线程,需要给线程取名setName(),但是在实现了Runnable接口的类的run()方法不能直接使用getName()来获取线程名字,它是Thread类中的方法,解决方式是使用Thread的静态方法currentThread()来获取执行run()的当前线程,然后再使用getName()方法。创建子类的对象,并启动线程。
2023-06-14 20:11:03
1773
原创 java的转换流、压缩流、序列化流、打印流
而序列化流存储java对象打开文件是看不懂的,而无法直接修改,这样可以防止暂时存储在文件中的数据被用户修改。序列化流(ObjectOutputStream,也称对象操作输出流)与反序列化流(ObjectInputStream,也称对象操作输入流)属于字节流,也是高级流,是对基本流的包装。注意:可以看出实现了Serializable接口不用重写方法,因为Serializable接口中没有抽象方法,是标记型接口,一旦实现了这个接口,就表示当前的类可以被序列化。再例如,运用序列化流和反序列化流读写多个对象。
2023-06-14 11:40:14
972
原创 java的缓冲流
注意:缓冲流并不能直接关联文件操作文件中的数据,它还是要关联基本流的(InputStream,OutputStream)。注意:readline()方法在读取时一次读一整行,遇到回车换行结束。但是它不会把回车换行读到内存中。字节缓冲流底层自带了长度为8192的缓冲区提高性能。
2023-06-13 19:47:05
194
原创 java的字符流
FileReader对象的空参的read()方法默认是“一次读一个字节,遇到中文一次读三个字节”,在读取之后还会进行解码转为十进制,十进制的数字也表示字符集上的数字。例如:英文二进制文件里的数据为“01100001”,read()方法进行读取解码后结果为97;说明:上述代码,害后面隐藏两个字符"\r\n",所以“害\r”为一组输出,‘\r’没有显示出来;注意上述代码中的细节,new String()指定后面两个参数,读到几个字节就使用几个字节,因为最后可能字节不够填充byte数组。字符流的底层也是字节流。
2023-06-13 19:18:58
1478
原创 字符集和java的编码与解码
不同国家长度不同,只需记住ASCII码用一个字节(第一位为0),简体中文用3个字节(第一个字节前4为固定为1110,第二个字节前两位固定为10,第三个字节前两位固定为10)。例如,存储字符’a’,查询ASCII得到为97,二进制为1100001B,计算机进行编码,ASCII编码规则为“前面补0,补齐8位”,所以’a’存储位01100001B。GBK读取字节流时,遇到以0开头的字节则表示英文的一个字符,遇到以1开头的字节,则表示这个字节与后面的一个字节组合起来表示一个汉字。(2)汉字用两个字节存储。
2023-06-13 18:31:42
1294
原创 java的IO
(1)write()方法的参数是整数,但是实际上写到本地文件中的是整数在ASCII上对应的字符。字节流可以操作所有类型的文件,字符流只能操作纯文本文件。mac的换行为\r。java在windows中写\r,\n或\r\n都行,最后都会自动补全即为\r\n。(2)如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的。操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来。FileOutputStream:操作本地文件的字节输入流。操作本地文件的字节输出流,可以把程序中的数据写到本地文件中。
2023-06-13 15:59:08
984
原创 java的File
实参为FilenameFilter的匿名内部类,方法accept()的第一个参数dir表示调用list()方法的File对象,第二个表示dir指定目录下的每一个文件或文件夹的路径,方法返回值为true表示获取该文件到数组中,为false则不获取该文件到数组中。注意:length()方法只能获取文件的大小,若参数是文件夹则无法获取文件夹的大小,返回值为0或4096(不同操作系统下不一样)无意义。注意,上图中的accept()参数是File对象中每一个文件的路径。这个路径可以是存在的,也可以是不存在的。
2023-06-13 11:54:20
857
原创 java的StringBuilder、Stringjoiner
上述代码中,s1的内容为"aaabbbcccddd",在这个过程中,是先创建了"aaa"字符串,再创建"aaabbb"字符串,再创建"aaabbbccc"字符串,再创建"aaabbbcccddd"字符串,虽然最终s1的内容为"aaabbbcccddd",但却产生了很多用不到的字符串,占用内存空间。StringJoiner和StringBuilder一样,也是一个容器,创建之后里面的内容是可变的。作用是提高字符串的操作效率,而且代码编写特别简洁,是在JDK8之后出现的,市场上很少有人用。(2)字符串的反转。
2023-06-12 09:46:33
983
原创 java的内部类
补充:private修饰的成员只能在该类中使用(该类的方法使用),无修饰符(default)的成员可以被该类所在包中的类使用,protected修饰的成员可以被该类所在包中的类及其子类使用,public修饰的成员可以被任意类使用。当方法的参数是接口或类时,以接口为例,可以传递这个接口的实现类对象,如果实现类只要使用一次,就可以用匿名内部类简化代码。分为成员内部类、静态内部类、局部内部类和匿名内部类,前三个能看懂即可(方便看源码),匿名内部类必须掌握。(2)外部类要访问内部类的成员,必须创建对象。
2023-06-09 20:33:26
698
原创 java的逻辑运算符与短路逻辑运算符
&与&的区别是,再短路逻辑运算符&&所连接的表达式中,如果左边为假,则右边不进行运算,直接得出结果。在逻辑运算符&所连接的表达式中,左右两边的条件都会执行。实际应用中常用的逻辑运算符为&&、||、!
2023-06-09 17:02:22
275
原创 ajax--XML、AJAX简介、express框架使用、AJAX操作的基本步骤
AJAX不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式。最开始AJAX进行数据交换的格式是XML,服务器端给客户端返回的结果就是XML格式的字符串,前端的JS在接到这个结果后对其内容进行解析,把数据提取出来并对数据进行处理。现在AJAX不用XML,而是JSON,JSON更加简洁,在数据转换方面更加容易。,比如服务器端将数据使用XML的形式传给客户端(前端),而HTML的作用是在。{“name”:“孙悟空”,“age”:18,“gender”:“男”}XML与HTML类似,不同的是HTML中。
2023-06-08 19:50:00
1168
原创 Java匿名内部类、invoke方法、动态代理
Proxy.newProxyInstance()方法的第一个参数了解书写形式即可,第二个参数为执行被代理的接口的字节码,第三个参数的作用是对被代理的接口的方法增加功能,注意代理类是可以对接口中所有的方法增加功能,当通过代理类对象调用被代理类的方法时,该方法就传给invoke()方法里的method,代理类对象调用被代理类的方法时的参数传给args。一般是通过“自定义的代理类”来管理“指定类”(被代理类)的方法的执行,这里的“管理方法的执行”实质是在方法执行前添加一些代码,表现为方法执行的功能增加了。
2023-06-07 17:21:34
1505
2
原创 MySQL-3-创建表、删除表、增删改、约束、索引
注意:索引虽然可以提高检索效率,但是不能随意地添加索引,因为索引也是数据库中地对象,也需要数据库不断地维护。比如,表中地数据经常被修改这样就不适合添加索引,因为数据一旦修改,索引需要重新排序,进行维护。注意:(1)insert语句可以颠倒表中字段地顺序,也可以不包含全部的字段(此时未插入的字段若有默认值则为默认值,否则为null)。(2)也可以只写表名,省略括号与其中的字段序列,此时values后的括号的值的顺序与个数必须与表一致。注意:模糊查询时,第一个通配符为“%”时,这个时候索引是失效的。
2023-05-23 17:42:54
1969
原创 MySQL2-多表查询、子查询、union、limit机制
/emp表的别名为e,dept表的别名为d,使用表的别名是为了在select时区分不同表的同名字段。避免笛卡尔积现象的方法是加条件进行过滤,但是要注意,加条件进行过滤不会减少记录的匹配次数,只不过显示的是有效记录(即最开始的连接还是笛卡尔积连接,再在笛卡尔积连接的基础上进行过滤)。内连接:表A和表B进行连接,使用内连接,凡是A表与B表能够匹配上的记录查询出来,A、B两张表没有主副之分,两张表是平等的。可以看出,如果使用内连接的自连接,上图中的empno为7839的记录会被去除,因为mgr无法匹配。
2023-05-23 15:13:18
1724
原创 MySQL-1-SQL语句的分类、MySQL命令、SQL查询语句
having子句是作用在group by子句的执行结果的多个记录上,没有group by子句就不能有having子句。解释:分组函数不能直接在where子句中是因为group by在where子句之后执行,而分组函数在group by子句之后执行。执行顺序为:先from,再where,再group by,再having,再select,最后order by输出。注意:多个字段同时排序时,从左到右考虑(越靠前的字段越起主导作用),只有前面的字段相同时才接着考虑后面的字段。
2023-05-22 10:53:52
1173
原创 redis介绍4--配置文件、持久化、事务、消息的发布与订阅、集群、哨兵模式、Jedis
redis客户端订阅频道(频道可以理解为对于某些数据的关注,比如对于某个数据的修改的情况为一个频道,所有想要关注该数据修改情况的客户端订阅该频道,当该数据被修改时将消息发送到订阅了该频道的客户),消息的发布者往频道上发布消息,所有订阅此频道的客户端都能够接受到该消息。重启6379服务,可以发现6379还是主机,有两个从机。redis中默认有16个数据库(database),编号为0~15,redis也是一个应用对应一个数据库,与mysql数据库不同的是,redis的数据库由它自身创建,程序员不能手动创建。
2023-03-28 20:14:37
371
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人