分类: 未分类

25 篇文章

涉及多数据源的双写问题
在协作空间的场景中,当用户使用 Excel 协作文档的编辑功能,会涉及到一个并发控制的问题。目前,我在设计上采用乐观锁,即使用 CAS + 版本号(Version)来规避这个读写冲突的问题。但是其中,还有很多问题值得讨论。 Excel 文件存在哪里?如何管理? 它是一个半结构化的数据,其文件本身存储在 MinIO 管理的对象桶中,元数据(数据项 I…
监控组件
这是一组配置 Prometheus + Grafana + Exporters + Alloy(kube-state-metrics) 的监控组件。 使用 shell 脚本配置。 设计: 基本组件由 systemd 守护进程统一管理自启动和生命周期。 gpu_exporter 由于一些库的历史原因,用 docker 管理; alloy + kube…
设计共享工作空间协作模块
永远不要试图用战术上的勤奋,去掩饰你战略上的懒惰。 ——雷军 背景 在设计团队协作存储模块时,我遇到了很多问题。 许多想法在我脑海中打架: 我想到非结构化的存储在 MinIO 中的文件,它们需要 MySQL 中涉及一个元数据表来进行维护吗? 如果需要,那么涉及到文件夹,文件夹这个抽象的概念又怎么引入这个表呢? 文件从属文件夹的设计又要怎么实现?在代…
最基础的传输控制
考虑至少要实现一个简单的并发控制吧亲! 使用的架构: Java 21 Redis MySQL 使用到的包: Hutool SecureUtil MD5 Java Spring Framework MutilPartFile/TransactionTemplate Redission Lock 使用的协议: HTTP 协议 对于一个使用最基础的 HT…
八股何以成其所是?
对于很多八股题来说,我现在考虑到,那么其实这是一个⌈场景⌋。 什么是场景?这是什么意思呢? 我想表达的是,虽然说现在大家都知道,如果要准备面试,肯定要先准备八股。而八股中会涉及到一些知识点的考察。 例如: MySQL 数据库可能会发生索引失效。为什么?怎么应对? Java 中的线程池有哪些核心参数?它如何调度任务?基于什么数据结构? Redis 的…
Spring Bean 加载顺序控制
Spring 框架中控制 Bean 的加载主要有以下几种管理手段。 以什么方式可以比较直观地看到具体的加载日志呢?
the King of 锁
麻雀虽小,五脏俱全。 多线程情况下。 基本锁升级 默认的锁升级情况如下: 无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁 为什么要有锁升级?这是应对不同的并发场景的策略。因为 Java 设计团队通过研究后认为:大多数锁修饰的对象,生命周期中大多只有一个线程在竞争。在默认修饰了 synchronized 的情况下,如果资源竞争并不激烈,在一个线程…
当我们在谈论优化时,我们在谈论什么?
预留。非常重要的一篇需要讨论的文章。 现实世界,衡量工程代码写得好不好,公认的标准是什么? 我不能说,单例模式一定比频繁创建实例好,这不是凭意志去理解的。而是要用数据去做支持的。因为资源是有限的,我们需要趋向于靠 trade-off 缩减成本。 量化指标: 执行效率: CPU 使用率 响应时间 内存状况 堆内存占用 GC 频率 并发压力 线程池活跃…
通过 Spring Redisson 访问 Redis 集群进行分布式实验
环境: docker 的伪分布式 Redis 集群。主从分离,配备哨兵模式。 使用 Redisson 框架时,配置类的加载顺序问题 在 Spring 框架中,由于 IOC 的核心设计原则,我们理应将类的实例化生命周期管理交付给 Spring 进行管理。但是,对于 Spirng 自身的操作,我们也需要有一个比较清晰的认识。 在使用 redisson-…
树的数据结构与递归
传递局部变量进行递归 示例代码 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val…
怎么快速写一个接口
为了节约我的认知资源,避免过度的消耗,我需要非常快地把一些工作总结成方法论。否则按照我的性格来说,很容易在混乱的情况中不断内耗,直到先把自己燃烧殆尽。 先看需求。 我需要哪些出参?我需要哪些入参? 首先定义出参和入参。
数据中台
最近要开展新的项目了。预留出这个文档。 首先来讲一下 数据中台是由于微服务逐渐兴起而出现的一种新的数据 qData 项目 qData 项目 API 鉴权 在 qData 中,外部应用要访问发布的 API,要使用应用管理模块。也就是说,把注册和上线了的 API 进行发布管理。通过官方手册可知,首先我们需要通过应用编号(client_id)和应用密钥(…
谈论云原生
实际上,地方国企和互联网企业的使用的技术是大不相同的。在这里,我们强调的是一个项目的闭环,面对用户时细节上的准确性和专业性,这当然是非常重要的。但是在互联网企业里面有一个我在当前环境完全接触不到的一整块核心技术——⌈云原生⌋、⌈高并发⌋、⌈架构设计⌋。 也许在我没有来到这里之前,这个词语对我来说还是术语层面的,但是在实际的开发学习过程中,我发现了为…
杂谈-原型设计
我突然有了一种⌈啊哈⌋的感觉。 我突然知道为什么非关系型数据库现在为什么如此受欢迎了。首先是不断变更的业务需求,对快速产出原型的急迫,也因此学习掌握一门非关系型数据库的应用方法是非常重要的。 程序设计也许应该跑在数据库后面,这是我的今天的一点感叹。当然同样重要。只是我发现单纯产出产品原型时,也就是主要只写前端的一些页面的时候,实际上大部分内容就是围…
办件生命周期论
水35公升、碳20公斤、氨4公升、石灰1.5公斤、磷800克、盐250克、硝石100克、氟7.5克、铁5克、硅3克,还有其余15种微量元素……这就是一个成年人身体的组成物质。 即使是小孩,只要有这些材料,花不了几个钱就能在市场上买齐。人这种生物,原来是可以用这么便宜的价格买到的吗? ——《钢之炼金术师》 了解一个软件,作为认识者而不是创造者,先入为…
Java 反射
阿莱夫的直径可能只有一英寸,但所有的空间都在那里。我从宇宙的每一个角度清楚地看到了它。我看到了地球上所有的镜子,但没有一个能映照出我;我看到了一只手精致的骨骼结构;我看到了自己黑色血液的循环;我看到了爱的结合和死亡的改变。我从各个点和角度看到了阿莱夫,在阿莱夫中我看到了大地,在大地中又看到了阿莱夫。我感到头晕目眩,流泪了,因为我的眼睛看到了那个秘密…
术语和逻辑
Die Grenzen meiner Sprache bedeuten die Grenzen meiner Welt. 语言的边界就是思想的边界。 ——《逻辑哲学论》 维特根斯坦(德国哲学家,1889-1951)
在 Java 建构、映射一个实体
这一篇会主要围绕一些技术细节展开,核心任务是构建一个完整的、自洽的且具有完整生命周期的实体类。 本篇内容为⌈设计人员的增删改查功能⌋。 在本 Spring Boot 框架中,主要使用的包为: Mybatis-plus Lombok Web 开发核心注解 按照主要负责的功能,分为多个层次来认识这些: 启动与配置 @SpringBootApplicat…
面向开发者的 RPC 指南
If I have seen further than others, it is by standing upon the shoulders of giants. 如果我看得比其他人更远,那是因为我站在巨人的肩膀上。 ——艾萨克·牛顿(英国物理学家,1643-1727) 术语解释 RPC(Remote Procedure Call,远程过程调用…
芋道代码解析-后端篇(0)
江畔何人初见月?江月何年初照人? 人生代代无穷已,江月年年望相似。 不知江月待何人,但见长江送流水。 ——唐·张若虚《春江花月夜》 先不看所有的租户管理、安全管理和框架部分,先从一个完整的前端请求链路来看芋道中一个最典型的请求的完整后端行为。 Controller 部分 Controller 监听来自客户端的请求,也就是来自前端的 HTTP 请求(…
AI,它就像闪电一样!
A state without the means of some change is without the means of its conservation. 一个没有变革手段的国家,是无法维护自身存在的。 ——英国政治家,艾德蒙·伯克(1729-1797) 现在关于编程的学习路径,人们常常众说纷纭。 有人认为,AI Coding 如此发达,…
醒来吧,朋友!走出山洞吧!
⌈……慢慢地,他的眼睛适应了太阳光线。起初他只能看到影子,后来逐渐可以看到水中人和物体的倒影,然后再看到人和物体本身。他能够在晚上看到星星和月亮,最终可以看到太阳本身。⌋ ——柏拉图《理想国(512b)》  你知道的,现在 AI 趋势 算是 所有人都能看见的了。 虽然我先前总是告诉自己,没事的,肯定还有我的岗位的,但是我现在发现我不能装作…
世界,您好!
Hey,希格斯!这是您的第一篇文章。编辑或删除它,然后开始写作吧!