自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 学术贴 | FPGA 加速图数据库查询执行

在系统运行时,主机通过分析输入的 SPARQL 查询,将其解析成相应的操作符图,检测其是否可以用配置在 FPGA 上,如果有不支持的操作符存在,那么会直接 CPU 端执行查询,如果所有操作符都支持,那么 ICAP 会选择对应操作符的 RM 配置在 FPGA 的半静态操作符图上。除此之外,LUPOSDATE 还维护一个 ISTree 和一个 SITree,用于 RDF 字符串和整数 id 之间的映射,这有利于 FPGA 模块的设计,因为 FPGA 无法处理不定长度的字符串。

2023-02-22 12:25:36 335 1

原创 在Java语言中 ,集合中的排序算法浅析

通过该方法注释,查看到有三项值得关注的信息,大概意思是该方法实现了稳定且默认升序排序的功能。进入sort,代码进入到List类的sort方法,发现方法将入参list先转为了数组Object[],之后利用Arrays.sort进行排序。i.next();首先在这里思考一个问题为什么要转为数组,问题答案已经在方法的英文注释中说明白了。是为了避免直接对List的链表进行排序,从而耗费O(n2logn) 时间复杂度。

2023-02-20 14:06:16 276

原创 MySQL 性能优化浅析及线上案例2023

1、 如果链接长时间被占用,新的请求无法获取到新的连接,就会影响到业务。,由于 order by 后边没有索引,就看 where 条件中是否有合适的索引,查询选择器选定 rx_status 这个单列索引,而 rx_status=5 这个条件下限制的数据行在索引中是连续,即使需要的 rx_id 不在索引中,再回主键聚簇索引也来得及,由于 order by 后边没有索引,所以走磁盘级别的排序 filesort,高峰积压的时候处方就 1 万到 2 万,跑到了 100ms, 白天低谷的时候几百单也就 20ms。

2023-01-24 12:06:09 294

原创 聊一聊到底什么是 REST,顺便再来看下 Spring HATEOAS 的用法

说起 REST API,小伙伴们多多少少都有听说过,但是如果让你详细介绍一下什么是 REST,估计会有很多人讲不出来,或者只讲出来其中一部分。今天松哥就来和大家一起来聊一聊到底什么是 REST,顺便再来看下 Spring HATEOAS 的用法。

2023-01-09 23:44:18 170

原创 Netty基于事件驱动的网络应用框架编程入门

正常断开时,服务器端的 channel.read (buffer) 方法的返回值为 - 1,所以当结束到返回值为 - 1 时,需要调用 key 的 cancel 方法取消此事件,并在取消后移除该事件。类型和长度已知的情况下,就可以方便获取消息大小,分配合适的 buffer,缺点是 buffer 需要提前分配,如果内容过大,则影响 server 吞吐量。固定消息长度,数据包大小一样,服务器按预定长度读取,当发送的数据较少时,需要将数据进行填充,直到长度与消息规定长度一致。

2023-01-02 10:04:04 174

原创 带领新手学习 Redis 内存模型

redis,对于一个 java 开发工程师来讲,其实算不得什么复杂新奇的技术,但可能也很少人去深入了解学习它的底层的一些东西。下面将通过对内存统计、内存划分、存储细节、对象类型 & 内部编码这四个模块来学习学习 redis 的内存模型,手字笔录,潜心修行。

2023-01-02 10:00:45 215

原创 关系型数据库设计三大范式

百度百科:设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。人类语言:范式可以理解为设计一张数据表的表结构,符合的标准级别、规范和要求。而通常我们用的最多的就是第一范式(1NF)、第二范式(2NF)、第三范式(3NF),也就是本文要讲的 “三大范式”。范式的优点采用范式可以降低数据的冗余性。为什么要降低数据的冗余性?十几年前,磁盘很贵,为了减少磁盘存储。

2022-12-21 23:18:34 332

原创 探秘Linux C++ 程序内存管理--ptmalloc

ptmalloc 是开源 GNU C Library (glibc) 默认的内存管理器,当前大部分 Linux 服务端程序使用的是 ptmalloc 提供的 malloc/free 系列函数,而它在性能上远差于 Meta 的 jemalloc 和 Google 的 tcmalloc。服务端程序调用 ptmalloc 提供的 malloc/free 函数申请和释放内存,ptmalloc 提供对内存的集中管理,以尽可能达到:用户申请和释放内存更加高效,避免多线程申请内存并发和加锁。

2022-12-21 23:18:12 493

原创 Dubbo 架构设计与源码解析--架构设计

Dubbo 提供了 Triple (Dubbo3)、Dubbo2 协议, 第三方协议进行了集成,包括 gRPC、Thrift、JsonRPC、Hessian2、REST 等。:Dubbo 的核心模型,其它模型都向它靠拢,或转换成它,它代表一个可执行体,可向它发起 invoke 调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。(5)服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

2022-12-21 23:16:28 421

原创 GaussDB (DWS) 资源管理排队原理与问题定位

为方便迅速定位问题,根据现网实践经验对以上常见视图进行组合,整合了三个问题定位过程中的常用视图:资源池监控视图、用户监控视图以及作业监控视图。与上面内置视图相比,这几个视图依据现网定位经验与分布式数据库特点,对查询结果做了针对性优化,同时优化了字段显示,用户更易理解,可以作为常规监控视图使用。具体视图定义可参考附件。

2022-12-21 23:16:11 538

原创 通过 Go 语言自制安装 openGauss 二进制程序

巧妙利用 go 语言自制 openGauss 安装二进制程序,经测试 15s 即可安装完成。复杂好用的程序往往都是简单的逻辑一步一步累加的,通过考虑多样的场景,多样的使用环境,使代码趋于完善。

2022-12-21 23:15:07 163

原创 Apache Pulsar 基于不同部署策略和配置策略的容灾保障

MQ 运营过程中会发现一个非常棘手的问题是,如果一个业务滞后非常多,哪怕 Pulsar 是读写分离的,但是由于线程、内存等是共享的,大量的滞后读还是要导致写入时延变高,在非 SDD 盘变现更为明显,这时候就可以用 GEO 模拟出多份数据,做到业务的隔离,让那些不关心滞后的业务放在 GEO 的一个集群,做到数据隔离。在广告业务中,部署了两套三地 GEO 集群,在运管过程中,一套由于机器故障,或者业务滞后导致使用不当,完成不会影响业务的使用,这个过程业务写入虽然可以失败,但是消费端确是需要去重。

2022-12-21 23:14:20 528

原创 Clickhouse 表引擎探究 - ReplacingMergeTree

如果数据存在在相同分片,且相同分区,绝对可以实现合并去重。如果数据存储在不同分片,不同分区,将不会进行合并去重。如果数据存储在不同分片,但同一分片内保证在相同分区,会进行此分片下的 merge 去重。如果数据存在在相同分片,但不同分区,不会进行 merge 去重,但通过 final 关键字可以在 CK 内存中对相同分区、相同分片的数据进行去重。

2022-12-21 23:13:19 550

原创 Chaos 测试下的若干 NebulaGraph Raft 问题分析

Raft 是一种广泛使用的分布式共识算法。NebulaGraph 底层采用 Raft 算法实现 metad 和 storaged 的分布式功能。Raft 算法使 NebulaGraph 中的 metad 和 storaged 能够集群化部署、实现了多副本和高可用,同时 storaged 通过 multi-raft 模块实现了数据分片,分散了系统的负载,提升系统的吞吐。

2022-12-17 18:44:37 268

原创 使用 Svelte 来构建 Web Component

在本文中,我们学习了如何使用 Svelte 创建通用卡片和按钮组件,生成捆绑文件,拆分它们,甚至在单独的 HTML 页面中重用此组件。

2022-12-17 18:42:23 717

原创 多线程安全问题原理和 4 种解决办法

单窗口卖票一个窗口 (单线程) 卖 100 张票没有问题单线程程序是不会出现线程安全问题的多个窗口卖不同的票3 个窗口一起卖票,卖的票不同,也不会出现问题多线程程序,没有访问共享数据,不会产生问题多个窗口卖相同的票3 个窗口卖的票是一样的,就会出现安全问题多线程访问了共享的数据,会产生线程安全问题。

2022-12-17 18:40:52 413

原创 Go 语言性能剖析利器 --pprof 实战

关于 pprof 的文章在网上已是汗牛充栋,却是千篇一律的命令介绍,鲜有真正实操的,本文将参考 Go 社区资料,结合自己的经验,实战 Go 程序的性能分析与优化过程。

2022-12-17 18:39:34 515

原创 Flutter for Web 首次首屏优化 ——JS 分片优化

Flutter for Web(FFW)从 2021 年发布至今,在国内外互联网公司已经得到较多的应用。作为 Flutter 技术在 Web 领域的有力扩充,FFW 可以让熟悉 Flutter 的客户端同学直接上手写 H5,复用 App 端代码高效支撑业务需求;在 App 侧 FFW 也可作为 Flutter 动态下发的兜底方案。总的来说在业务和技术上 FFW 都具有相当的价值。然而在使用 FFW 时有一个明显的问题:其编译产物。

2022-12-17 18:37:18 1183

原创 时序数据库 DolphinDB 线程简介

本文基于 DolphinDB server 最新版 2.00.X,从几个方面,为大家简单介绍 DolphinDB 在运行中可能使用到的各种线程,及其相关的配置项和函数,以便用户掌握 DolphinDB 的线程运行情况。

2022-12-17 18:36:45 571

原创 Shell 标准输入和输出

无论是要交给程序处理的数据,还是控制脚本的简单命令,都少不了输入和输出。程序要做的第一件事就是处理如同一阴一阳的 “输入与输出”。

2022-12-17 18:35:56 1181

原创 基于 KubeSphere 的运管系统落地实践

在接触容器化之前,我们团队内部的应用一直都是基于虚拟机运管,由开发人员自行维护。由于面向多开发部门服务,而开发人员运维能力参差不齐,所以每次部署新的环境时往往都要耗费大量时间。针对部署难的问题,我们将部分组件、服务容器化,采用 Docker 发布管理解决了部分问题,但仍未降低对开发人员的运维技能要求。下面是我们基于虚拟机管理开发环境的流程:下发虚机由各部开发人员管理,虚机安全问题难以维护、保障;基于shell运维,专业性过强;基于手动打包、发布,耗时耗力且不可靠。

2022-12-17 18:30:10 682

原创 APISIX Ingress 如何支持自定义插件

本篇主要介绍了 Ingress 资源相关的语义,以及如何对 Ingress 资源进行能力的扩展。在 Ingress-NGINX 中可以通过 Annotations 的方式进行能力的扩展,但在 Apache APISIX Ingress 中可以通过三种模式进行配置。且其中两种对于用户自己开发的自定义插件而言,是无需进行任何二次开发的,进而满足用户更多的场景和需求。

2022-12-17 18:29:15 979

原创 openGauss 数据库逻辑备份与恢复

之前的数据库迁移系列中,是将其他类型的数据库数据迁移到 openGauss 中。实际使用中,还存在不同的 openGauss 数据库之间的迁移或者数据的备份。数据在同类型数据库迁移或者数据备份时,需要进行数据导出导入。openGauss 提供了 gs_dump 工具导出指定数据,gs_restore 工具将其恢复到数据库中。工具在安装包中已经携带,不需要额外安装。

2022-12-17 18:22:38 914

原创 React 组件设计理念 Headless UI

Headless UI 目前社区还在探索实践阶段,这里我对它做了个简单定义:Headless UI一套基于 React Hooks 的组件开发设计理念,强调只负责组件的状态及交互逻辑,而不管标签和样式。其本质思想其实就是关注点分离:将组件的 “状态及交互逻辑” 和 “UI 展示层” 实现解耦。那么,以上就是关于 headless 设计理念的全部内容。通过 Headless UI,我们可以快速复用组件的状态以及交互逻辑,对于布局和样式实现完全自定义。另外,

2022-12-14 23:32:06 308

原创 Chaos 测试下的若干 NebulaGraph Raft 问题分析

Raft 是一种广泛使用的分布式共识算法。NebulaGraph 底层采用 Raft 算法实现 metad 和 storaged 的分布式功能。Raft 算法使 NebulaGraph 中的 metad 和 storaged 能够集群化部署、实现了多副本和高可用,同时 storaged 通过 multi-raft 模块实现了数据分片,分散了系统的负载,提升系统的吞吐。

2022-12-14 23:31:08 153

原创 使用 Svelte 来构建 Web Component

每个开发人员都应该关注代码中的可重用性以及代码的业务隔离,这样可以让业务逻辑与应用架构分离,提升系统的扩展性。而 Web Component 就是这样一个技术,可以让我们创建一个独立的可重用组件。本文将介绍使用 Svelte 创建通用的 Web Component 的完成过程。『通用』指的是该组件不局限于 Svelte 应用,还可以用于任何 JavaScript 应用程序(如 Vue、React 等),同时还将介绍使用 Svelte 创建 Web Component 的一些局限性。什么是 Web C

2022-12-14 23:30:25 186

原创 基于 EasyCV 加速 BEVFormer

BEVFormer 是一种纯视觉的自动驾驶感知算法,通过融合环视相机图像的空间和时序特征显式的生成具有强表征能力的 BEV 特征,并应用于下游 3D 检测、分割等任务,取得了 SOTA 的结果。我们在 EasyCV 开源框架()中,对 BEVFomer 算法进行集成,并从训练速度、算法收敛速度角度对代码进行了一些优化。同时,我们进一步使用推理优化工具 PAI-Blade 对模型进行优化,相比于原始模型在 A100 配置下能取得 40% 的推理速度提升。

2022-12-14 16:09:25 500

原创 SpringAop 与 Cglib字节码增强技术

类来设置的,Enhancer 是一个用于产生代理对象的类,作用类似 JDK 的 Proxy 类,因为 CGLib 底层是通过继承实现的动态代理,因此需要传递目标对象的 Class,同时需要设置一个回调函数对调用方法进行拦截并进行相应处理,最后通过 create () 创建目标对象的代理对象。方法,类似 JDK 动态代理的 InvocationHandler 接口,也是理解为回调函数,同理每次调用代理对象的方法时,intercept 方法都会被调用,利用该方法便可以在运行时对方法执行前后进行动态增强。

2022-12-14 16:06:03 538

原创 SpringBoot + openGauss3 开发入门

openGauss 对业界知名的 spring 支持还算友好,直接用传统的 postgresql 驱动就可以接入使用,也有自己的 opengauss 驱动。如果使用顺利,还可以支持分布式配置、服务路由、负载均衡、熔断限流、链路监控这些功能,事实上在微服务的技术框架上也是支持的。

2022-12-14 16:03:15 1482

原创 使用 Svelte 来构建 Web Component

每个开发人员都应该关注代码中的可重用性以及代码的业务隔离,这样可以让业务逻辑与应用架构分离,提升系统的扩展性。而 Web Component 就是这样一个技术,可以让我们创建一个独立的可重用组件。本文将介绍使用 Svelte 创建通用的 Web Component 的完成过程。『通用』指的是该组件不局限于 Svelte 应用,还可以用于任何 JavaScript 应用程序(如 Vue、React 等),同时还将介绍使用 Svelte 创建 Web Component 的一些局限性。什么是 Web C

2022-12-14 16:01:55 420

原创 怎么区分Docker,containerd,CRI,CRI-O,OCI,runc

在本篇中,我们看到 Docker 只是容器生态系统中的一个小部分。另外还有一堆开放的标准,这就使得不同的实现互相之间是可替换的。这就是为什么有 CRI 和 OCI 标准,以及 containerd、runc 和 CRI-O 等项目存在的原因了。现在你知道了关于容器这个有趣而又略显复杂的世界的一切,下次和别人讨论时,不要说你在使用 "Docker 容器"

2022-12-12 10:56:12 741

原创 SpringBoot框架内置的tomcat 启动过程及原理

SpringBoot 的启动主要是通过实例化 SpringApplication 来启动的,启动过程主要做了如下几件事情:配置系统属性、获取监听器,发布应用开始启动事件、初始化参数、配置环境、创建应用上下文、预处理上下文、刷新上下文、再次刷新上下文、发布应用已经启动事件、发布应用启动完成事件。而启动 Tomcat 是刷新上下文 这一步。Spring Boot 创建 Tomcat 时,会先创建一个上下文,将 WebApplicationContext 传给 Tomcat;

2022-12-12 10:54:15 913

原创 OpenGL入门,Python 图像处理教学

OpenGL (Open Graphics Library,译为 “开放式图形库”) 是用于渲染 2D、3D 矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近 350 个不同的函数调用组成,用来绘制从简单的图形元件到复杂的三维景象。OpenGL 常用于 CAD、虚拟现实、科学可视化程序和电子游戏开发。OpenGL 可用于设置所需的对象、图像和操作,以便开发交互式的 3 维计算机图形应用程序。

2022-12-12 10:52:57 1192

原创 Redis 的数据被删除,占用内存咋还那么大?

通过 或者在 配置文件设置 Redis 内存占用限制。当达到内存最大值值,会触发内存淘汰策略删除数据。除此之外,当 key 达到过期时间,Redis 会有以下两种删除过期数据的策略:答案是:可能依然占用了大约 5GB 的内存,即使 Redis 的数据只占用了 3GB 左右。大家一定要设置 ,否则 Redis 会继续为新写入的数据分配内存,无法分配就会导致应用程序报错,当然不会导致宕机。内存都去哪了?使用 命令获取 Redis 内存相关指标,我列举了几个重要的数据:Redis 进程内存消耗主要由

2022-12-12 10:51:48 313

原创 CTPN+CRNN 算法端到端实现文字识别的实战开发

光学字符识别(英语:Optical Character Recognition,OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。发展时间较长,使用很普遍。OCR 作为计算机视觉中较早使用深度学习技术的领域,有很多优秀的模型出现。普遍的深度学习下的 OCR 技术将文字识别过程分为:文本区域检测以及字符识别。"""CTPN文字位置检测函数:param img_path: 图片路径:return: img: 需要进行文字检测的图片。

2022-12-09 10:41:25 1699

原创 数仓GaussDB (DWS) 字符串、二进制、十六进制互转

现网中遇到很多小伙伴不清楚字符串与进制之间的转换方法,其实在 GaussDB (DWS) 中,进制转换是非常方便的。这次就来对不同的场景一一进行解析,整理出来供大家翻阅参考。二进制 & 十六进制 互转字符串 & 十六进制 互转注意事项:1,hex/unhex 是 820 版本新增的一组十六进制的编码 / 解码函数,低于 820 版本需使用 encode/decode 函数替代。hex 行为与 mysql 数据库保持一致,输出全大写的十六进制字符串;encode 输出的是全小写的

2022-12-09 10:39:48 1361

原创 基于 OpenYurt 和 KubeVela 的解决方案,巧用KubeVela 解决边缘部署难题

KubeVela 孵化于 OAM 模型,专注于帮助企业构建统一的应用交付和管理能力,为业务开发者屏蔽底层基础设施复杂度,提供灵活的扩展能力,并提供开箱即用的微服务容器管理、云资源管理、版本化和灰度发布、扩缩容、可观测性、资源依赖编排和数据传递、多集群、CI 对接、GitOps 等特性。随着万物互联场景的逐渐普及,边缘设备的算力也不断增强,如何借助云计算的优势满足复杂多样化的边缘应用场景,让云原生技术延伸到端和边缘成为了新的技术挑战,“云边协同” 正在逐渐成为新的技术焦点。这也是节点池概念的由来。

2022-12-09 10:38:20 503

原创 Redis 内存回收:通过修改配置文件来设置 Redis 的最大内存

​ LFU(Least Frequently Used),最少频率使用。会统计每个 key 的访问频率,值越小淘汰优先级越高。

2022-12-09 10:36:37 1867

原创 Redis 网络模型,浅析Redis通信协议为什么快

服务器大多都采用 Linux 系统,这里我们以 Linux 为例来讲解:ubuntu 和 Centos 都是 Linux 的发行版,发行版可以看成对 linux 包了一层壳,任何 Linux 发行版,其系统内核都是 Linux 。我们的应用都需要通过 Linux 内核与硬件交互用户的应用,比如 redis ,mysql 等其实是没有办法去执行访问我们操作系统的硬件的,所以我们可以通过发行版的这个壳子去访问内核,再通过内核去访问计算机硬件计算机硬件包括,如 cpu,内存,网卡等等,内核(通过寻址空间)可以操作

2022-12-08 11:24:21 301

原创 Redis 对象的数据结构原理 - SDS、Inset、Dict、ZipList、QuickList、SkipList、RedisObject

Redis 是用 C 语言写的,但是对于 Redis 的字符串,却不是 C 语言中的字符串(即以空字符’\0’结尾的字符数组),它是自己构建了一种名为 简单动态字符串(simple dynamic string,SDS)的抽象类型,并将 SDS 作为 Redis 的默认字符串表示因为 C 语言字符串存在很多问题:例如,我们执行命令:那么 Redis 将在底层创建两个 SDS,其中一个是包含 “name” 的 SDS,另一个是包含 “zhangsan” 的 SDS。Redis 是 C 语言实现的,其中

2022-12-07 14:26:22 663

空空如也

空空如也

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

TA关注的人

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