工作之行
文章平均质量分 77
shengjk1
零基础转码,头部大厂程序员,努力构建 通俗易懂的、好玩的编程语言教程。关注我,习得转码经验!翱翔在编程的海洋里!只学习最值得学的内容!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
为什么按 Ctrl+D 会退出终端?—— 从电传打字机到现代OS 的完整旅程
本文揭秘终端中Ctrl+D触发EOF信号的60年技术演进史。从1960年代电传打字机的ASCII控制字符EOT(ASCII 0x04)开始,到现代伪终端(PTY)的实现原理,解释了EOF并非字符而是I/O接口语义的本质。文章通过技术演进路线,展现了Unix"一切皆文件"的设计哲学,以及内核TTY子系统如何保持对传统设备的兼容性。一个简单的按键背后,蕴含着从物理设备到现代终端模拟器的完整技术传承。(149字)原创 2025-12-12 16:43:31 · 740 阅读 · 0 评论 -
一文搞定 NTP 三大核心问题:是什么、为何不准、来自何方
本文深入解析网络时间协议(NTP)的三大核心问题。NTP作为网络时间同步的关键技术,通过复杂算法实现设备间时钟统一,精度可达0.1毫秒(LAN)或1-50毫秒(互联网)。NTP服务器可能出现时间偏差,主要受网络传输异常、硬件故障(如晶振老化)和配置错误影响。其时间源采用分层架构:Stratum 0(原子钟等终极基准)→Stratum 1(主服务器)→Stratum 2及以下(逐级扩散)。Stratum 0基于原子物理特性,具有自然恒定频率和亿年级精度,是时间同步体系的可靠基础。原创 2025-12-08 10:45:51 · 735 阅读 · 0 评论 -
当10万天分区来袭:一个让StarRocks崩溃、Kudu拒绝、HDFS微笑的架构故事
摘要 本文对比了HDFS、Kudu和StarRocks三大系统在处理10万级分区时的性能差异。HDFS采用扁平化元数据设计,仅维护目录结构和块映射,10万分区内存消耗不足1GB,且支持联邦扩展。Kudu为OLAP优化,每个tablet需存储1.5KB元数据,10万tablet需150GB内存,且Master单点受限。StarRocks因维护详细统计信息,10万分区内存消耗达950GB+,查询时需遍历所有分区元数据,导致显著延迟。核心差异在于元数据架构:HDFS保持极简无业务语义,而Kudu和StarRock原创 2025-12-03 15:47:13 · 732 阅读 · 0 评论 -
Java序列化漏洞-反射
Java反射机制放大序列化漏洞风险,攻击者通过构建可序列化的调用链(Gadget Chain),利用反射实现远程代码执行(RCE)。文章通过代码示例演示如何利用动态代理和BadAttributeValueExpException漏洞触发计算器程序,详细解析了漏洞触发过程:从readObject方法调用到动态代理转发至恶意InvocationHandler,最终执行任意命令。同时指出Proxy.newProxyInstance只能拦截接口中的普通实例方法,静态方法/default方法/final方法无法被代理原创 2025-11-20 15:17:15 · 416 阅读 · 0 评论 -
Java序列化漏洞:RCE 远程执行代码-Serializable
这篇文章主要对比了Java中Serializable和Externalizable两种序列化机制的差异,并介绍了JDK原生序列化的安全漏洞。主要内容包括: 两种序列化接口的核心区别:Serializable是自动序列化的标记接口,而Externalizable需要手动实现读写方法,提供更细粒度的控制 详细对比了两种方式在序列化控制、性能、体积、灵活性等方面的差异 通过代码示例展示了两种接口的具体用法 特别强调了Serializable在反序列化时存在的安全风险,示例中展示了如何利用readObject方法执原创 2025-11-20 13:55:32 · 222 阅读 · 0 评论 -
做架构设计必看!主从 + HA 和去中心化,到底哪种更适合你的业务?
本文对比分析了大数据领域三种架构模式:Master-Slave主从架构、HA高可用性方案和去中心化设计。Master-Slave采用中心化分工,需配合HA方案解决单点故障问题;去中心化设计通过节点平等和共识机制,天生具备高可用性;HA则是保障服务连续性的共同目标。文章从架构本质、节点关系、故障风险等维度详细比较了三者的区别,指出Master-Slave适合简单部署场景,去中心化更适合要求高容错的业务。最终强调HA是架构设计的核心目标,可通过不同技术路径实现。原创 2025-10-22 10:00:00 · 800 阅读 · 0 评论 -
序列化和反序列化:从理论到实践的全方位指南
本文详细介绍了序列化和反序列化的概念、重要性以及与普通字符编码转换的区别。重点探讨了序列化在网络传输、数据持久化和跨平台兼容性中的核心价值,并通过对比分析了不同序列化协议(如JSON、Protobuf、Thrift等)的优缺点及适用场景。同时,提供了序列化方案选择指南、协议扩展性设计原则和典型错误规避建议,帮助读者更好地理解和应用序列化技术原创 2025-05-14 17:26:51 · 767 阅读 · 0 评论 -
一文搞定 Python 装饰器
本文介绍了Python装饰器的多种使用方式及其在实际开发中的应用。装饰器是一种动态增强函数或类功能的高阶编程工具,通过包装函数或类实现代码复用。文章详细讲解了基础装饰器、带参数的装饰器、类装饰器、装饰器堆叠、保留元信息的装饰器以及内置装饰器的实现原理和代码示例。此外,还探讨了装饰器在性能测试、权限校验和缓存优化等实际场景中的应用。装饰器的核心优势在于代码复用与模块化、非侵入式代码增强,能够显著提升代码的可维护性和扩展性。通过灵活组合装饰器,开发者可以更高效地处理横切关注点,保持业务逻辑的纯净性。原创 2025-05-12 16:15:33 · 1185 阅读 · 0 评论 -
python 的 uv、pip 和 conda 对比和技术选型
本文对比了 Python 包管理工具 uv、pip 和 conda,从工具定义与核心功能、关键维度、核心特性、适用场景、技术选型建议、未来趋势与风险提示等方面进行了详细分析,为后续选择打下基础。原创 2025-05-12 14:57:10 · 1993 阅读 · 0 评论 -
没有写一行代码,上线了一个网站
本文介绍了作者利用 AI 编程实现一个个性化工作倒计时网页的过程。作者希望创建一个能设定下班时间、显示倒计时并定时提醒和鼓励的网页,通过与 AI 的多次交互,不断优化网页布局和功能,最终借助 GitHub Pages 成功部署网站。原创 2025-05-09 15:49:48 · 447 阅读 · 0 评论 -
SparkSQL Join的源码分析
本报告详细介绍了SparkSQL中Join的实现方式,包括Broadcast Join、Hash Join(包括Shuffle Hash Join)和Sort Merge Join。通过分析它们的实现原理、工作流程和适用场景,我们可以更好地理解SparkSQL中Join操作的内部机制。在实际应用中,选择合适的Join策略对于提高SparkSQL查询性能至关重要。根据表的大小、数据分布和内存资源选择合适的Join策略,可以显著提高Join操作的性能。原创 2025-04-15 19:33:07 · 673 阅读 · 0 评论 -
SparkSQL Join深度解析:三种实现方式全揭秘
本文全面剖析了SparkSQL中Join操作的三种主要实现方式:Broadcast Join、Hash Join(包括Shuffle Hash Join)和Sort Merge Join。详细阐述了每种Join的实现原理、适用场景、优缺点以及实现细节。同时,结合表大小、数据分布和内存资源等因素,给出了Join策略选择的建议,并提出了性能优化措施,包括选择合适的Join策略、使用Join提示、调整配置参数、优化数据分区、合理管理内存以及处理数据倾斜等。原创 2025-04-15 17:15:41 · 1500 阅读 · 0 评论 -
一文搞懂 Iceberg 的 branch 和 tags
本文介绍了 Apache Iceberg 的分支(Branch)和标签(Tag)功能,通过类 Git 的机制解决大数据场景下的数据版本管理和数据隔离问题,实现 ACID 事务、隔离实验和精准回溯。同时提到 Nessie 作为多表事务管理的解决方案。原创 2025-04-10 14:53:55 · 1220 阅读 · 0 评论 -
快速搞懂湖仓一体的发展历程:错过它,你将失去下一个大数据风口!
本文介绍了数据湖仓一体架构的发展历程和优势。从OLAP数据库及其限制出发,阐述了第一代数据仓库、基于Hive的数据仓库、MPP架构和其他计算引擎、数据湖、数据湖表格式以及数据湖仓的出现和发展。最后总结了数据湖仓在云环境中的优势,如存储和计算资源的解耦,提高了灵活性和成本效益。原创 2025-04-08 18:40:47 · 1115 阅读 · 0 评论 -
JuiceFS vs HDFS,最简单的 JuiceFS 入门
本文详细对比了 JuiceFS 和 HDFS 两种分布式文件系统。JuiceFS 是一种新型的云原生存储解决方案,具有 POSIX 兼容、HDFS 兼容、S3 网关支持、强一致性、高性能、数据安全等核心特性,适用于云原生环境、AI 训练和海量小文件管理等场景。其架构基于存算分离,元数据存储在独立数据库中,数据存储在对象存储中,支持弹性扩展和分布式事务。JuiceFS 在元数据操作、数据读写性能、缓存机制等方面均优于 HDFS,同时通过纠删码和加密技术降低了存储成本并提升了数据安全性。相比之下,HDFS 是传原创 2025-04-02 17:11:14 · 1268 阅读 · 0 评论 -
一文搞懂Flink 的 Materialized Table:简化数据管道的利器
Flink 的 Materialized Table 为简化数据管道的开发和管理提供了一种强大的解决方案。它通过统一流批处理、降低开发成本、提高数据处理灵活性等方式,帮助用户更高效地应对复杂的数据处理需求。虽然目前还存在一些限制,但随着技术的不断进步和社区的努力,这些问题有望得到解决。对于需要构建高效、灵活数据管道的开发者来说,Materialized Table 是一个值得深入探索和应用的技术。原创 2025-03-25 13:48:44 · 1416 阅读 · 0 评论 -
掌握 Apache Iceberg 的关键:Equality Delete 和 Position Delete 的原理与应用
Equality Delete 是一种基于字段值的删除方式。它通过指定某些字段的值来标记需要删除的行。简单来说,就是告诉系统:“所有满足这个条件的记录都要被删除。” 例如,如果你想删除所有id=3的数据,Equality Delete 就会在删除文件中记录id=3这个条件。Position Delete 是一种基于数据文件位置的删除方式。它通过指定数据文件的路径和行号来标记需要删除的行。简单来说,就是告诉系统:“在某个文件的第几行,这个记录要被删除。原创 2025-03-24 19:18:43 · 1243 阅读 · 0 评论 -
Flink 水位线全解析:从原理到实战,彻底掌握事件时间处理!
本文深入探讨了 Apache Flink 中的水位线(Watermark)机制,特别是 WATERMARK FOR event_time AS event_time 的语法及其在实际应用中的重要性原创 2025-03-17 14:48:08 · 1082 阅读 · 0 评论 -
Flink 中RocksDB 为什么将每个键和值的限制为 2^31 字节
RocksDB 的 JNI 桥接 API 对键值大小限制为 2³¹ 字节(约 2GB),其根本原因是 **JNI 接口设计中的 `jint` 类型限制**。JNI 在传递键值数据长度时使用 `jint`(32 位有符号整数),最大值为 2³¹−1,导致无法支持更大的数据。尽管 RocksDB 的 C++ 原生 API 支持更大的键值,但 JNI 桥接层出于稳定性和兼容性考虑,显式约束了键值大小。Java 数组的最大长度(`Integer.MAX_VALUE`)与此限制一致,但并非直接原因原创 2025-03-13 19:43:02 · 459 阅读 · 0 评论 -
数据湖出现的背景、现状与未来
本文介绍了数据湖(Data Lake)的概念、功能、架构、优势、挑战以及与数据湖仓(Data Lakehouse)的融合。数据湖是一种用于存储海量原始数据的架构,支持结构化、半结构化和非结构化数据的直接存储和访问,具有可扩展性强、灵活性高、成本效益好以及促进数据民主化的特点。其架构包括数据摄取层、存储层、处理层和访问层,能够支持大数据分析、机器学习等多种应用场景。然而,数据湖也面临数据治理、技能缺口和数据沼泽等挑战。文章还探讨了数据湖与数据湖仓的结合,指出数据湖仓融合了数据湖和数据仓库的优势,能够提供更好的原创 2025-03-12 11:19:04 · 895 阅读 · 0 评论 -
AI编程来了,程序员要失业了?
AI 编程被炒的火热,很多人都在鼓吹,甚至行业内的大厂,吹的最牛逼的就是某阿里 ,其他的公司就不一一列举了。在大模型领域,我不认为阿里会强过 Claude,所以我基于 Claude-3.5-Sonnet,完全沉浸式编码完成一个任务 我通过AI编程完成了第一个实用程序原创 2025-02-28 19:40:14 · 474 阅读 · 0 评论 -
我通过AI编程完成了第一个实用程序
我一直想要开发一些程序,来解决工作生活中的一些困点,但一直没有实施出来,主要是因为GUI不太熟悉,但也不想花费大量的时间来学习这个。其实之前也试图学过 pyQT但后来因为工作的原因,不了了之了。但最近 AI 编程被吹嘘的太厉害了,所以我也想借助AI 的力量来实现我想要的功能,于是乎一款对 word 和 pdf 内容搜索的工具就诞生了。原创 2025-02-28 19:25:14 · 533 阅读 · 0 评论 -
Spark Drive 端的 List 无法获取 Executor 中的数据吗?
文章探讨了在 Apache Spark 中,Driver 端 和 Executor 端 内存隔离的问题,特别是当在 Executor 端 修改 Driver 端 创建的 List 时,修改不会生效的原因。文章详细解释了 Spark 的分布式架构、数据传递机制,并提供了解决方案,如使用 collect、累加器、广播变量等方法来实现 Driver 端 和 Executor 端 之间的数据同步。原创 2025-02-14 19:19:26 · 908 阅读 · 0 评论 -
在Java中,equals()和contains()谁更快
在大多数情况下,equals()方法比contains()更快,主要得益于其快速失败机制(如长度差异或早期字符不匹配)。但需注意:场景适配:如果目标是判断子串存在性(而非完全相等),只能使用contains()。内容复杂度:若比较的字符串完全相等且较长,两者的耗时差异较小。综上,从性能角度优先选择equals()(当满足功能需求时),而contains()适用于子串匹配的特定场景。原创 2025-02-13 13:24:23 · 397 阅读 · 0 评论 -
Python 如何执行字符串代码
本文介绍了在Python中如何使用exec()和eval()函数执行字符串形式的代码,并详细解释了这两种方法的用法、注意事项以及安全性问题。文章还探讨了exec()函数的原理和关键特性,包括命名空间控制和动态性,同时也提醒了使用这些方法时可能面临的安全风险和性能开销。原创 2024-10-24 15:50:38 · 1298 阅读 · 0 评论 -
写给非机器学习人员的 embedding 入门
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益:1. 了解大厂经验1. 拥有和大厂相匹配的技术等希望看什么,评论或者私信告诉我!@[TOC](文章目录)# 一、背景目前在实现 NL2SQL 就是将人的自然语言通过 LLMs 的一系列处理,在这个过程中,会把文本向量化后存储到向量数据库中,然后通过向量搜索,这个过程中发现文本 embedding 后,通过向量化搜索效果很是惊人,就跟程序能读懂人的语言一样。于是对 emb原创 2024-08-08 20:13:11 · 1025 阅读 · 1 评论 -
解决maven java.rmi.ConnectException: Connection refused to host: 127.0.0.1 错误
本篇文章主要讲述了在使用Idea打开项目时,可能会遇到Maven加载失败的问题,造成这个问题可能是因为DNS配置错误或者防病毒软件或防火墙会阻止与本地主机的连接等原因。文章提供了详细的解决方法,即关闭防火墙或添加白名单。原创 2024-08-08 15:34:37 · 1275 阅读 · 0 评论 -
简单了解一下 CPU 和 GPU 的区别
本文介绍了CPU和GPU的历史产生背景,以及它们之间的区别和应用。此外,文章还介绍了如何利用大模型的优势,其中推荐了一个多模型可供选择的工具葫芦AI。原创 2024-08-06 19:49:45 · 1303 阅读 · 0 评论 -
解开基于大模型的Text2SQL的神秘面纱
本文介绍了NL2SQL的实现方式,包括目前比较火的开源项目Vanna、DAIL-SQL以及其他实现方式,同时总结了当前NL2SQL实现方式的优化点。此外,本文还介绍了Text-to-SQL测试集WikiSQL、Spider和BIRD,以及评估模型性能的指标Spider Exact Match和Spider Exact Execution。原创 2024-07-25 15:08:38 · 1711 阅读 · 2 评论 -
Flink 通过 paimon 关联维表,内存降为原来的1/4
本文介绍了如何通过替换维表实现FlinkSQL任务内存占用的优化。作者通过分析Iceberg lookup部分源码,发现其cache的数据会存在内存中,导致内存占用过大。作者将维表替换为paimon,通过分析paimon维表的原理,发现其cache的数据存储在rocksdb中,从而实现了内存占用的降低。原创 2024-05-28 19:59:27 · 1469 阅读 · 0 评论 -
利用java8 的 CompletableFuture 优化 Flink 程序,性能提升 50%
本文介绍了 Flink 中使用 avatorscript 脚本语言的问题,以及如何通过 CompletableFuture 优化代码来提高 Flink QPS。同时,还介绍了 avatorscript 的使用方法,包括自定义函数、从 Map 中取值、使用 Java 工具类和 AviatorScript 函数。原创 2024-05-24 16:39:02 · 692 阅读 · 0 评论 -
曲线救国:window 安装 docker
本文介绍了Docker的基本概念和在Windows系统上的安装方法,包括下载Docker Desktop、启用Hyper-V、安装Docker Desktop、验证是否安装成功等步骤原创 2024-05-14 20:06:35 · 1077 阅读 · 0 评论 -
sparksql 如何计算上一个自然周和自然月
本文介绍了如何使用SparkSQL内置函数计算上一个自然周和自然月的UV和VV,以及如何在计算时只计算指定时间段内的分区。作者分享了自己的思考过程和解决方案,并提供了详细的代码示例。原创 2024-05-13 19:55:38 · 863 阅读 · 0 评论 -
进一步分析并彻底解决 Flink container exit 143 问题
本文介绍了Java中的Metaspace,以及如何设置Metaspace的大小和增长速度等参数。同时,通过分析GC日志,发现了使用Aviator表达式引擎时可能导致Metaspace内存泄漏的问题,并提供了解决方案。原创 2024-05-09 19:43:10 · 675 阅读 · 2 评论 -
Flink container exit 143 问题排查
文章主要介绍了作者在开发一个基于状态计算各种汇总数据的Flink作业时遇到的问题排查过程。作者一开始遇到报错后尝试调大Flink参数解决问题,但仍出现FullGC严重的情况。经过查看数据量、增大内存和排查后发现是由于Metadata内存分配失败导致的FullGC,最终调大JVM metadata阈值解决了问题。原创 2024-05-08 14:13:56 · 1050 阅读 · 0 评论 -
window 安装大模型 chatglm.cpp
文章介绍了在工作中使用的电脑配置、安装组件及模型,并详细说明了安装步骤和运行方法。同时提及了模型量化的重要性和优缺点原创 2024-04-28 15:01:29 · 1054 阅读 · 0 评论 -
window 安装大模型 chatglm-6b
有大模型以来一直想尝试通过本地安装大模型,主要的原因是GPT众所众知的原因没有办法通过 API 访问,而国内的所谓的开发平台一方面要么不兼容 openai 的 api 要么就是价格不够友好,要么两者兼有,另外的话,开发平台也有所谓的隐私问题。另外公司内部虽然有已经部署好的开源大模型,但相应的服务中的 Temperautre 或者 Top 都已经被固定了,用起来特别没意思。所以想自己搞一套,喜欢自己说了算。原创 2024-04-27 10:06:49 · 1504 阅读 · 0 评论 -
IP地址 0.0.0.0 和 127.0.0.1之间的区别
文章讲解了0.0.0.0和127.0.0.1的含义及区别,以及在服务器上下文中的应用。通过实例说明了在python django代码中绑定IP时的差异,对于理解网络协议和服务器配置有启发意义。原创 2024-04-25 16:55:22 · 1443 阅读 · 0 评论 -
是时候分清楚python 包:PyCrypto 和 PyCryptodome
今天遇到了一个 python 项目用到了 pycrypto 这个库,但这个库的依赖死活装不上去,有些懵逼,随去 GOOGLE 了一番python 密码学工具包,用来做加解密的,不幸的是最新版本 released: Oct 18, 2013,可今年是 2024年呀,一个正常的 python 包,不可能这么长时间不更新。原创 2024-04-25 10:47:01 · 1079 阅读 · 0 评论 -
window Intel(R) 安装 ComfyUI时解决 Torch not compiled with CUDA enabled 问题
文章详细说明了在不支持CUDA的Intel® Iris(R) Xe Graphics系统上安装ComfyUI的过程,包括安装Anaconda、选择合适的PyTorch版本、下载ComfyUI代码,进入ComfyUI目录,以及安装依赖。接着,介绍了如何通过特定的启动选项在CPU上启动服务,特别是禁用CUDA内存分配、使用分裂跨注意力机制,并强调在CPU上执行的可能性和原因。原创 2024-04-22 20:20:54 · 3353 阅读 · 0 评论
分享