自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(124)
  • 收藏
  • 关注

原创 Server-Sent Events (SSE)

有一个需求,这个需求希望如果用户触发了下单操作,就对b端的管理员发送一次弹窗,如果想让前端源源不断的接受到后端发送的实时数据,这种需求可以使用什么技术来实现可以采用以下几种技术方案:1,WebSocket:WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它允许网页和后端进行双端通信2,Server-Sent Events (SSE):SSE 是一种让服务器向浏览器推送更新的技术。它基于 HTTP 协议,只需要服务器端发送一个特殊的 HTTP 响应头即可建立连接。

2024-10-16 17:52:41 1008

原创 jave2、ffmpeg 的安装以及实现音频切分功能

背景是需要在 java 项目中实现一个音频切分的功能,比如用户上传了一个100分钟的视频,我们需要将该音频的前10分钟和最后10分钟切出来,需要切的音频格式包含 mp4、mp3、wav 等常见的压缩文件格式经过调研发现 ffmpeg 比较适合处理这个,在 java 中有提供对应的封装库 javacv、ffmpeg-platform,当然 java 中也提供了其他的组件去切音频,但是他们的泛用性不如 ffmpeg。

2024-08-12 19:03:20 776

转载 关于音频文件的采样率&位深&码率&无损压缩&有损压缩

外界的声音都是模拟信号,在数字设备中A/D转化成为了由0、1表示的数字信号后被储存下来。数字信号都是离散的,所以采样率是指一秒钟采样的次数,采样率越高,还原的声音也就越真实。由于人耳听觉范围是20Hz~20kHz,根据香农采样定理(也叫奈奎斯特采样定理),理论上来说采样率大于40kHz的音频格式都可以称之为无损格式。但在40kHz采样率下得到的声音已没有细节可言,所有频率都是只采样了一个波峰一个波谷。现一般的专业设备的采样频率为44.1kHz。

2024-08-12 16:52:24 246

原创 操作系统 IO 相关知识

IO 就是计算机内部与外部进行数据传输的过程,比如网络 IO 与磁盘 IO所有 IO 都需要系统调用,由操作系统代理执行,并经历从 IO 设备拷贝到内核空间拷到用户空间的环节在内核收到调用请求之后,会有数据准备、数据就绪、数据拷贝的阶段每一个程序员面试的时候或多或少都会被问到相关知识,了解一下相关概念是非常重要的。

2024-08-07 20:46:03 1286

原创 NLP 相关知识

在全监督学习中,算法的目标是从给定的输入数据(特征)和对应的正确输出(标签)中学习一个函数或模型,使得该模型能够在新的未知数据上准确预测标签。这样,在微调时,模型只需要少量的标记数据就能达到较好的性能,尤其对于那些标记数据稀缺的任务来说,预训练极大地提高了效率和效果。向量库:将一段文本、图像、音频拆分成多个纬度的数据,根据用户传入,锚定坐标然后选择最近的点做返回,这大概就是向量数据库在 LLM 工程(langchain)中的使用,简单来说就是做缓存。其实就是指基于语言模型的应用程序设计和开发的架构。

2024-06-25 15:47:15 1024

原创 流程编排框架 LiteFlow

这样我们可以重写组件的 isAccess 方法并将组件的执行状态记录在数据库中,每次执行到该组件的时候,根据状态判断是否需要执行。利用 LiteFlow,你可以将瀑布流式的代码,转变成以组件为核心概念的代码结构,这种结构的好处是可以任意编排,组件与组件之间是解耦的,组件可以用脚本来定义,组件之间的流转全靠规则来驱动。在流程执行的过程中可能有很多上下文对象,在不同的流程模块中调用,因此在创建流程的时候,我们可以封装一个 Context 对象,里面可以存放很多的上下文数据。flow.el.xml 文件。

2024-06-05 17:34:57 403

原创 韭菜的自我总结

2,左侧交易者的核心逻辑是,虽然投资者无法有效的高精确度同时高正确率的去判断市场的最高点和最低点,但是有一件事在股票市场中是一定的,那就是跌多了要涨,涨多了要跌。根据这个理论,有一些聪明的朋友可能就会动脑筋了,我手里有大量的现金流并且有大量的该股股票,我可以一个人大量的买进并且卖出这只股票造成一种量增的错觉,放出利好信号吸引其他的韭菜朋友过来购买这只股票,然后我再在一个高点去卖出股票以获取利益。,并在自己想象的底部进场买股。所以,在这种游戏里,最终,决定输赢的不是运气,而是实力,场外实力,你赚钱的实力。

2024-05-25 17:21:20 710

原创 Protobuf 通信协议

在移动互联网时代,手机流量、电量是最为有限的资源,而移动端的即时通讯应用无疑必须得直面这两点解决流量过大的基本方法就是使用高度压缩的通信协议,而数据压缩后流量减小带来的自然结果也就是省电:因为大数据量的传输必然需要更久的网络操作、数据序列化及反序列化操作,这些都是电量消耗过快的根源当前即时通讯应用中最热门的通信协议无疑就是 Google 的 Protobuf 了。

2024-04-30 14:47:04 742

原创 数据库分库分表

如果存储的数据过多,查询效率会大大降低,如何去解决这个问题?1,限定数据的范围:禁止不带任何限制数据范围条件的查询语句,这样就不用查询整个数据库2,范式优化(垂直拆表):优化为 BC 范式,删除重复数据,或者单纯的拆字段3,水平拆表:保持数据表结构不变,通过某种策略将存储的数据分片。这样每一片数据分散到不同的表或者库中4,读写分离:主读副写,配置一下来实现 mysql 的主从复制今天介绍的重点就是垂直拆表(拆字段)和水平拆表(拆数据)

2024-03-24 13:35:55 274

原创 抽象方法与设计模式

真正的屎山不是初级程序员写的巨量胶水代码,而是没学明白抽象的程序员写的大量设计模式耦合形成的。你甚至不理解为什么当初的创作者需要使用到这个设计模式,不知道从哪开始读之前的代码,甚至在心中咒骂之前的作者无数遍。为了不让我们的后者觉得我们的水平很差,学好设计模式是很重要的设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决本文会列出几个常用框架以及 jdk 中使用的设计模式。

2024-02-20 21:20:22 1389

原创 权限系统设计

普通的系统无非 CRUD,那系统如何控制一个用户该看到哪些数据、能操作哪些功能?日常开发中最常用到 RBAC 和 OAuth2 这两种访问控制和授权方案。

2024-02-13 14:21:27 705

原创 Java 语法糖

语法糖指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用带有语法糖的代码一般不能直接翻译为汇编语言,JDK 需要将语法糖先翻译成直接支持的编程语言,然后执行正常的转换为汇编语言的操作。在 java 中,翻译语法糖的任务被交给了前端编译器。

2024-02-07 17:46:25 924 1

原创 Java 序列化

序列化机制可以让对象地保存到硬盘上,减轻内存压力的同时,也起了持久化的作用;也可以让 Java 对象在网络传输。一般我们可以使用 java 自带的序列化机制和 json 来就行序列化。以下讲解一下序列化相关概念。

2024-01-24 20:24:07 891

原创 excel 各种用法

函数的第四个参数填 TURE 或者 FALSE,意思为模糊查找和精确查找,这里选择 FALSE,点击回车即可实现两个表格关联。函数第一个参数设置成 sheet1 中的 A 列(如果数据很多,可以直接选中 A 列)函数的第三个参数填需查找条件所在列数,实例中查找名字,但返回的城市在第二列,所以就填2。实现两个 sheet 间的关联需要用 vlookup 函数实现。函数的第二个参数选中 sheet2 中的 A 列和 B 列。

2024-01-18 17:43:18 1277

原创 Java 图片文件上传下载处理

做这玩意给我恶心坏了。

2023-12-18 22:05:23 1031

原创 分布式 id

2,自增 ID:不管是数据库自增还是MP自增,分布式数据库中总是要存放一定范围的数据,使用自增策略可能会导致不同数据库存放同一id的问题。雪花算法是一个比较常见的生成分布式 id 的方式,它会生成一个 8 字节的数据,通过确保每段数据在空间与时间上唯一来确定最终数据的唯一。接下来 41bit 代表时间戳,这个是毫秒级的时间,存放时间戳的差值(当前时间-固定的开始时间),41位的时间戳可以使用69年。4,雪花算法:生成一个64bit的id,也就是long类型的数字,长度适中并且方便快捷。

2023-11-17 17:49:22 799

原创 Java Stream 的使用

它的作用就是链式的对一组元素进行操作,它的操作分为中间操作或者最终操作两种,最终操作返回一特定类型的计算结果,而中间操作返回 Stream 本身,以下是常见的操作无状态:指元素的处理不受之前元素的影响有状态:指该操作只有拿到所有元素之后才能继续下去非短路操作:指必须处理所有元素才能得到最终结果短路操作:指遇到某些符合条件的元素就可以得到最终结果Stream 可以使用串行和并行来完成操作,串行操作是用一个线程依次执行,而并行操作使用了多线程,将 stream() 改为 parallelStream(

2023-11-14 22:40:41 363

原创 ES 数据库

熟悉 es 的同学都知道 es 一般有两种查询方式1,在 java 中构建查询对象,调用 es 提供的 api 做查询2,使用 json 调用接口做查询查询语句无非是将足够的信息丢给数据库,但是它却和 SQL 不一样有自己独立的查询方式。

2023-10-18 12:33:31 505

原创 程序的机器级表示

所有的高级语言,都会被计算机翻译为机器代码,然后再根据汇编代码生成可执行的机器代码。二进制的机器代码我们人类肯定是读不懂了,但是汇编代码还是可以简单了解一下的。CPU 的 PC、寄存器、缓存都是怎么工作的,计算机是如何寻址的等等问题,都可以通过汇编代码去了解。

2023-08-16 23:49:27 156

原创 Linux 常见问题解决思路

平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。一般来说单核 CPU 的 load 不应该大于1,同理,多核的 load 不应该大于核数。我们常见的负载高一般有这几种情况引起,一个是 cpu 密集型,使用大量 cpu 会导致平均负载升高。另外一个就是 io 密集型等待 I/O 会导致平均负载升高,但是 CPU 使用率不一定很高。还有就是大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。

2023-08-16 23:48:17 208

原创 分布式架构的观测

在一个分布式应用中,如果出现了某个异常,那我们必然不可能只依靠 awk、grep 等命令来查看日志分析问题,往往分布式架构的一个异常都贯通多个节点,我们需要将多个节点联系起来排查问题。这就引出了分布式架构的可观测性,可观测性越高,排查问题越轻松

2023-08-08 22:57:59 476

原创 负载均衡 Load Balancing

对于电商平台而言,随着业务的不断发展壮大,网站访问量和数据量也随之急剧增长,该情况的产生给服务器带来了一定的负担。从用户体验层面而言,由于服务器端数据处理带来的时延,往往导致页面的响应速度过慢、操作流畅性受阻等问题。这在某种程度上甚至会潜在影响平台的成交量。提供高效率,高质量的服务成为亟待解决的问题。负载均衡策略的出现和发展成为缓解上述问题的有效途径现在的负载均衡一般被称做与,这里的四层说的是这些工作模式的共同特点都是维持一个 TCP 连接,而不是说它只工作在第四层,它只是一个统称。

2023-06-26 18:24:38 765

原创 Linux 常见命令

注意查看日志的时候不要一次性全部打印出来,可能压缩文件或者普通文件中的日志信息太多了,一次性打出来不知道要打到什么时候,而且就算打完了也没办法去看,因为太多了找不到自己需要的信息。Linux 的查看命令不能很好的支持查找想要的内容这一需求,虽然有些命令支持查找数据,比如在 more 中使用 / 加关键字可以跳转到那一行,开始这种查找不能找文件中包含关键字的全部行。他们都是Linux系统底层的机制,为了加速对磁盘的访问。Linux 中的打包文件一般是以.tar 结尾的,压缩的命令一般是以.gz 结尾的。

2023-05-09 16:44:19 777 1

原创 WebSocket 长连接

WebSocket 是一种网络传输协议,可在单个 TCP 连接上进行全双工通信,位于 OSI 模型的应用层早期,很多网站为了实现推送技术,所用的技术都是轮询(也叫短轮询)。轮询是指由浏览器每隔一段时间向服务器发出 HTTP 请求,然后服务器返回最新的数据给客户端。常见的轮询方式分为轮询与长轮询在这种情况下,HTML5 定义了 WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

2023-04-13 22:00:34 2883

原创 CORS 跨域资源共享

浏览器一般使用 CORS(跨域资源共享)来处理跨域问题。同源导致了不同源数据不能互相访问,而在开发中我们很多时候需要用第一个页面的脚本访问第二个页面里的数据,所以制定了一些允许跨域的策略。

2023-04-03 21:42:03 728

原创 访问远程服务

为了将我们的系统设计的更加复杂一点,让它的功能更加多一些,让用户的体验更好一些,我们应该将单机的服务慢慢转换成分布式的系统,而分布式的系统有一个非常重要的前提条件:各个主机之间是如何交互的。

2023-03-25 11:18:46 355

原创 Python 学习

它将检查命令行,把每个参数转换为适当的类型然后调用相应的操作.在脚本中,通常 parse_args() 会被不带参数调用,而 ArgumentParser 将自动从 sys.argv 中确定命令行参数。ArgumentParser 可以通过 add_subparsers 的方式去创建子命令,用该方法获取的子构造器可以获取更多的子 parser,子 parser 的使用方式和 ArgumentParser 类似。== ‘main’: 的作用就是控制这两种情况执行代码的过程,在 if。进而当模块被直接执行时,

2023-03-22 15:56:07 458

原创 消息队列相关概念

在之前学习阶段没有重视过这个中间件,因为之前觉得这玩意很鸡肋,在一次项目中使用到了,感觉在特定的环境下该中间件还是挺好用的,现在深入了解一下消息队列就是我们常说的 MQ,英文叫 Message Queue,是作为一个单独的中间件产品存在的,独立部署引入一个新的技术产品,肯定是要考虑为什么要用它呢?消息队列也不列外,说到为什么要用,还真是因为它能在某些场景下发挥奇效。例如:解耦,异步,削峰,这三个词你也听说过吧,那下面就就从这三个好处出发,讲讲到底什么是解耦,异步,削峰。

2023-03-15 23:31:17 124

原创 RestTemplate 相关使用

在项目中,当我们需要远程调用一个 HTTP 接口时,我们经常会用到 RestTemplate 这个类。这个类是 Spring 框架提供的一个工具类,异常好用,其他框架中提供的 rest 调用或多或少借鉴了这个思路该类提供三组接口getForObject — 这类方法是常规的 Rest API(GET、POST、DELETE 等)方法调用。

2023-02-28 16:30:50 779

原创 IDEA 插件推荐

在写 Java 代码的时候,我们可能会出现 Jar 包的冲突的问题,这时候就需要我们去解决依赖冲突了,而解决依赖冲突就需要先找到是那些依赖发生了冲突,当项目比较小的时候,还比较依靠 IEDA 的【Diagrams】查看依赖关系,当项目比较大依赖比较多后就比较难找了,这时候就需要一款 IDEA 插件实现快速解决依赖冲突了。完全的个性化定义,规则由你设置。在开发中,经常会有这样的场景,给一个 JSON 例子,然后定义成对象类,来和前端进行联调测试,如果 Json 很长,会浪费很多时间在编写对象类上。

2023-02-20 22:41:04 666

原创 对象之间的映射与转换

在开发的时候经常会有业务代码之间有很多的 JavaBean 之间的相互转化,比如 PO/DTO/VO/QueryParam 之间的转换问题,本文总结一下各种转换方法。

2023-02-01 16:10:27 486

原创 运维监控常见指标含义

在看监控指标的时候,需要额外了解一些统计分析的概念。

2022-12-28 11:38:39 1075

转载 转载:PostgreSQL 更新数据时 HOT优化

在 PostgreSQL 中,当更新一行数据时,实际上旧行并没有删除,只是插入了一行新数据。如果这个表其他列上有索引,而更新的列上没有索引,因为新行的物理位置发生变化,因此需要更新索引,这将导致性能下降。为了解决这个问题,PostgreSQL 引入了 Heap Only Tuple(HOT)技术,如果更新后的新行和旧行位于同一个数据块内,则旧行会有一个指针指向新行,这样就不用更新索引了,通过索引访问到旧行数据,进而访问到新行数据。要了解 HOT 技术,先来看一下 PostgreSQL 的数据块结构。如下图:

2022-12-05 19:39:35 405

原创 网络安全相关

在写后端代码时,公司的自动检测对某个方法报了如下警告:发现了潜在的 XSS。它可用于在客户端的浏览器中执行不需要的JavaScript易受攻击的代码:如何避免这种情况:Encode.forHtml 方法就是对 html 的元素做转义,比如 < 转义为 < 等一时兴起了解了一下 xss 的相关概念,防御 xss 攻击通常需要考虑 4 种情况: HTML、JavaScript、CSS(样式)和 URLXss 即(Cross Site Scripting)中文名称为:跨站脚本攻击。XSS的重点不在于跨站点,而

2022-12-05 11:22:27 1671

原创 XML 的使用

我们写 xml 大多是在 mybatis 的语句的时候,不可避免的会使用到小于号、与等符号,但是这些字符在 xml 中不能被正常解析,会出现以下错误以下是使用需要被转译的字符需要这么写是因为 xml 的解析器,假如您在 XML 文档中放置了一个类似 “

2022-11-17 21:18:30 454

原创 Java 中关于字符串处理的常用方法

子表达式的内容可以当成一个独立元素,即可以将它看成一个字符,可以在 () 中使用元字符。该方法用于拼接字符串,在原来的字符串中使用大括号与数字当做占位符,后面的参数可以接上若干的字符串,作为替换占位符的字符串。replaceAll() 方法使用给定的参数 replacement 替换字符串所有匹配给定的正则表达式的子字符串。我们还可以在正则中使用小括号来取字符串中原有的值,然后在替换的内容中使用 $1、$2 等等来取值。该方法在做字符串替换的时候非常方便,实际应用如下。

2022-11-07 10:45:22 1349

原创 Jackson 的各种使用

总结一下 java 中 json 的相互转换,以及 jackson 的部分底层原理。

2022-11-02 17:51:54 4212

原创 关于 boolean 类型的坑

但是包装类型都是以 get 开头。这种方式在某些时候是可以正常运行的,但是在一些 rpc 框架里面,当反向解析读取到 isSuccess 方法的时候,rpc 框架会“以为”其对应的属性值是 success,而实际上其对应的属性值是 isSuccess,导致属性值获取不到,从而抛出异常。二是所有的属性应该定义为包装类,因为基本数据类型有默认值,在数据库中,bool 类型可能有三个值,null、true、false。一是 bool 类型的属性不能使用 is 开头,二是在 POJO 中,不要使用基本数据类型。

2022-10-24 19:17:37 1758

原创 Shell 脚本

一,一定要写成 ./helloworld.sh ,而不是 helloworld.sh ,运行其它二进制的程序也一样,直接写 helloworld.sh ,linux 系统会去 PATH 里寻找有没有叫 helloworld.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 helloworld.sh 是会找不到命令的,要用./helloworld.sh 告诉系统说,就在当前目录找。

2022-10-13 21:36:39 444

原创 Redis 集群

主从复制指将主 Radis 的数据复制到其他从属 Radis 中,数据的复制只能从主机复制到从机,并且从机不可以写入数据主从复制的好处是读写分离已经容灾后快速恢复,主机读数据,从机写数据,因为大多数对数据库的操作都是读取数据,这么做可以减少服务器压力。

2022-10-12 19:28:45 847 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除