- 博客(45)
- 问答 (1)
- 收藏
- 关注
原创 FlinkCDC实战:将 MySQL 数据同步至 ES
CDC (Change Data Capture) 是 变更数据获取的简称。核心思想是监测并捕获数据库的变动(数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整地记录下来,写入到消息中间件中以供其他服务进行订阅并消费。Flink 社区开发了 flink-cdc-connectors 组件,这个一个可以直接从 MySQL、PostgreSQL等数据库直接读取全量数据和增量变更数据的source 组件。
2024-12-09 10:46:19 1978
原创 代码整洁之道第九期:测试并发代码的艺术
并发代码的问题往往在生产环境中才暴露,而这对用户和开发者来说都是一场灾难。本期将探讨如何通过测试来提前发现并发问题,保证代码的稳定性。并发代码的正确性是系统稳定运行的基石。通过合理的测试策略,我们能够在问题进入生产环境之前解决它们。某电商平台在促销高峰期出现订单重复提交问题。原因是多个线程在同时更新库存时未正确加锁。使用专门的工具(如 FindBugs、CheckThread)静态分析并发问题。将测试运行多次,增加发现问题的可能性。确保并发测试覆盖了所有可能的逻辑分支。
2024-12-09 09:41:27 369
原创 代码整洁之道第八期:并发编程的挑战与防御之道
随着多核处理器的普及,并发编程已成为现代软件开发的重要部分。然而,并发代码的维护和调试却充满挑战。本期从《代码整洁之道》的第13章中提取精华,探讨并发编程中的难点与防御原则。并发编程的关键在于限制复杂性,而不是试图彻底消除并发带来的问题。通过遵循上述防御原则,我们可以构建更加健壮的并发系统。使用消息队列(如 Kafka)实现线程之间的异步通信,解耦线程依赖。在多线程环境下,上述代码可能导致数据不一致,因为。每个线程只做一件事,避免复杂的线程间交互。使用不可变对象和并发集合(如。
2024-12-09 09:39:04 419
原创 JVM 性能调优以实现高吞吐量和低延迟(内附相对较优调优参数)
在 NUMA 系统中,处理器连接到本地内存,并且每个处理器可以比连接到其他处理器的内存更快地访问自己的本地内存。与所有处理器对所有内存的访问时间相同的统一内存访问 (UMA) 系统相反,NUMA 系统由于本地内存与远程内存的延迟不同而具有不对称内存访问。NUMA 架构通常用于具有多个处理器(或插槽)的大型服务器,通过确保尽可能在本地访问内存可以提高性能。
2024-12-07 09:31:17 1224
原创 代码整洁之道第七期:解耦与高内聚
解耦和高内聚是代码设计的黄金法则。模块之间独立性越强,系统越易于维护;模块内部协作性越高,功能越完整。本期探讨如何通过解耦和高内聚,编写灵活、可扩展的模块化代码。如果需要大范围改动,解耦可能不足。将庞大的接口拆分为更小、更专注的接口,减少依赖冗余。将相关功能打包到一个模块内,避免分散在多个地方。每个模块只负责一项职责,减少逻辑混杂的风险。通过模块组合简化复杂逻辑,提升代码可维护性。依赖抽象而非具体实现,提升模块间的灵活性。如果模块过于复杂,考虑拆分为更小的子模块。检查模块是否彼此引用,可能需要重构。
2024-12-07 09:13:06 336
原创 代码整洁之道第六期:持续集成与交付(CI/CD)
在现代软件开发中,手动测试和部署已经难以满足快速迭代的需求。持续集成(Continuous Integration, CI)与持续交付(Continuous Delivery, CD)通过自动化流程,帮助开发团队快速发现问题、缩短发布周期。包括单元测试、集成测试、端到端测试等,确保代码符合预期。每次代码推送到仓库时,触发 CI 工具运行构建流程。自动化替代手动流程,减少代码提交到上线的等待时间。将部署包推送到目标环境(测试、预发布或生产)。将通过测试的代码打包为可部署的应用。
2024-12-07 09:09:59 466
原创 使用 Vue 和 Canvas-Confetti 实现烟花动画特效
弹出一个对话框,加载基于用户等级的 Lottie 动画。配合对话框的展示,启动烟花特效(),模拟庆祝场景。用户关闭对话框时,清除动画和特效。对话框弹出时加载用户特定的动画。使用模拟烟花特效,持续 15 秒。对话框关闭时清理资源,避免性能问题。这种效果非常适用于用户晋级、任务完成等场景,希望本文能对你有所启发!
2024-12-06 09:42:09 1158
原创 代码整洁之道第五期:测试驱动开发(TDD)的魅力
测试驱动开发”(Test-Driven Development, TDD)是一种以测试为核心的开发方法,通过先编写测试,再开发功能代码,不断循环迭代,让代码从一开始就具备高质量和高可靠性。TDD 的核心在于覆盖所有需求,但如果需求不明确或漏写测试,容易出现遗漏。TDD 让开发者从使用者的视角出发,思考功能需求,避免陷入实现细节。有了完善的测试保障,开发者可以大胆重构代码,而无需担心意外问题。的实现,比如引入用户数据库查询逻辑,同时确保测试继续通过。与团队协作时,确保需求文档清晰,列出所有可能的测试场景。
2024-12-06 09:31:29 687
原创 代码整洁之道第四期:注释与代码风格
编写代码时,注释和风格常常被忽视,但它们却是软件开发中至关重要的沟通工具。注释能帮助解释代码逻辑,而良好的风格则能让代码更清晰易懂。本期我们深入探讨如何正确地使用注释和维护一致的代码风格,让代码与读者无缝对话。如果需要过多注释解释一段代码,可能意味着代码本身过于复杂或命名不当。在团队项目中,代码注释不一致或风格杂乱无章导致代码审查效率低下。注释的作用是解释代码中看不出来的背景信息,而不是重复代码内容。一致的代码风格可以提高团队协作效率,降低代码审查和维护成本。
2024-12-06 09:27:28 991
原创 代码整洁之道第三期:函数设计的艺术
函数是代码的基本单位,优秀的函数设计直接影响代码的可读性、可测试性和可维护性。然而,许多开发者在实现功能时往往倾向于堆砌逻辑,使得函数变得冗长复杂。实际项目中,经常遇到难以维护的长函数。例如,一个用户注册函数可能包含输入验证、存储数据库、发送邮件等多个职责。在一个项目中,遇到了一个负责处理日志的函数,功能包含了日志记录、格式化、以及写入文件的操作。每个函数只完成一个明确的职责。副作用是指函数在执行时,除了返回值,还改变了外部的状态或环境。短小的函数便于阅读和理解,让开发者一眼就能掌握其核心意图。
2024-12-05 09:45:27 792
原创 代码整洁之道第二期:命名的重要性
命名不仅仅是给变量、函数和类取个名字,它直接决定了代码的可读性和维护成本。本期,我们从多个维度探讨如何提高命名的质量。在日常编程中,不妨多花一分钟思考命名,用高质量的命名提升代码的可读性。多次出现相似名称导致覆盖变量,后来通过规范命名解决。这样的临时变量,后来调试发现根本不知所云。改进:即使是临时变量,也要清晰命名,如。编写整洁代码的第一步是学会如何。
2024-12-05 09:41:36 303
原创 代码整洁之道读后感第一期:编写整洁代码,从理念开始
在《代码整洁之道》中,作者罗伯特·C·马丁深入探讨了整洁代码的本质与方法,本期文章将带你了解整洁代码的核心理念。技术债务是因为短期快速开发而产生的隐患,它可能表现为糟糕的命名、不良的结构设计或混乱的依赖关系。整洁代码是一个追求的过程,不是一蹴而就的结果。代码应该是“测试友好”的,复杂的依赖应通过注入或模拟进行隔离。“整洁的代码看起来像是由某个懂得它在做什么的人写出来的。最糟糕的代码是连作者自己三个月后都看不懂的代码。如今,我会用更小的粒度分解问题,并注重代码的。编写代码是开发者的日常工作,但编写。
2024-12-05 09:37:58 205
原创 Spring Boot 实现 MySQL 单表百万数据分库分表实战指南
通过本文,我们用 Spring Boot 和 ShardingSphere 实现了一个实际的分库分表案例。分库分表能有效提升系统的性能和扩展性,但需要根据业务场景灵活选择。
2024-12-04 10:01:00 550
原创 使用 EasyExcel 实现高效的 Excel 读写操作
EasyExcel 是一个功能强大且高效的 Excel 操作工具。它通过简化代码结构、优化性能和丰富的功能支持,成为 Java 开发者处理 Excel 文件的首选库。通过本篇博客的讲解,相信你已经掌握了 EasyExcel 的基本用法和高级功能,能够在实际项目中高效处理 Excel 文件。
2024-12-04 09:48:23 1141
原创 Java 虚拟线程
虚拟线程是由 JVM 管理的轻量级线程,通过将 Java 线程与操作系统线程解耦来实现高并发。与受系统资源限制的传统线程(称为平台线程)不同,虚拟线程在用户空间中管理,可以在不压垮系统的情况下实现数百万个并发操作。
2024-12-04 09:36:27 1275
原创 Spring Boot 3.4.0 发布:功能概览与示例
Spring Boot 3.4.0 带来了许多增强功能,使现代应用开发更加高效、便捷和强大。以下是最新功能的完整概述,以及一些帮助您快速入门的代码示例。启用 JSON 或结构化日志记录时,Spring Boot 的启动横幅会自动禁用,以减少日志混乱。Spring 现原生支持虚拟线程,可用于任务调度和异步处理,无需再添加。支持多个 Docker Compose 文件,适用于不同环境的配置合并。支持 Hibernate 的本机属性,提升了兼容性和配置灵活性。,支持自定义配置的运行和测试。
2024-11-29 11:16:30 1458
原创 Java 23 的新功能
JEP 是 Java 开发的一部分。它定义了功能增强和变更的提案。点击这里查看完整介绍。目录JDK 23 的新功能概述JEP 455:模式中的原始类型、instanceof和switch(预览)JEP 466:Class-File API(二次预览)JEP 467:Markdown 格式的文档注释JEP 469:Vector API(第八次孵化)JEP 473:Stream Gatherers(二次预览)JEP 471:弃用的内存访问方法JEP 474:ZGC 默认采用分代模式。
2024-11-28 10:12:39 658
原创 产品设计 —— SKU SPU
从运营角度出发,多个 SPU 可关联 相同的 SKU,如现货速发的 Iphone14 和 24期免息Iphone14 手机,两个不同的 SPU 商品,但是关联着相同的 SKU,库存公用。同一个 SKU,不同渠道或投放不同活动,可设置不同价格与库存。组合SKU,把不同的 SKU 商品组合成一个商品。通过规格属性组合成不同的 SKU,具体到商品最小可售卖单位、库存、价格。流程:开始发布→发布商品 → 选择渠道 → 设置渠道单价 → 设置渠道库存 → 发布渠道 → 完成发布。商品类型:实物商品、虚拟商品…
2024-11-28 09:53:42 1287
原创 产品设计 —— 商品属性库
定义:描述商品的特征信息。分为属性项及对应属性值,如手机品牌为属性项,苹果、华为为属性值。属性可用于商品搜索和商品列表筛选。
2024-11-27 11:09:33 403
原创 产品设计—— 商城分类
后台类目是将商品进行统一和标准化管理,主要是商家和平台运营的使用。商家在发布商品时,他们第一步要选择先对应的后台类目,要注意的是。然后再填写商品的组合好的基本属性和销售等信息。因为这些属性都是挂在类目上,不同类目下挂载的属性可能都不一样。运营同学则负责类目的日常管理,包含类目的增删改查、基础属性挂载、销售属性挂载、品牌挂载,设置继承关系等等。运营同学在配置类目过程中,尽量考虑周全,避免后期的频繁修改和删除类目,尤其是已在叶子类目下挂有商品的就更不能随便被删除了。前台类目面向用户,方便用户筛选查找商品。
2024-11-26 17:24:49 937
原创 Linux系统安装
第一节:VMware虚拟机的安装与使用 VMware是一个虚拟PC的软件。可以在现有的操作系统上虚拟出一个新的硬件环境(相当于模拟一个新的PC) VMware的主要特点: ①不需要分区或者重新启动就能在同一台PC机上使用两种以上的操作系统。
2017-01-27 14:45:25 334
原创 (算法)求最大公约数和最小公约数
最大公约数定义: 最大公约数(最大公因数)就是几个数公有的因数中最大的一个.最小公倍数定于: 最小公倍数就是几个数公有的倍数中最小的一个.求最小公倍数的算法:(两个数的乘积/最大公约数)求最大公约数的算法:1.辗转相除法 有两个整数a,b
2017-01-18 21:10:25 1317
原创 java之集合基础学习
集合继承体系图集合框架 由来:数组的长度是固定的,当添加的元素超过数组的长度时,需要对数组重新定义,太麻烦,Java内部给我们提供了集合类,能存储任意对象, 长度是可变的,随着元素的增加而增加,元素的减少而减少。 数组和集合之间的区别: 区别1:a:数组
2017-01-12 00:37:53 479
原创 SQL Server 中行转列 列转行
行转列:Create database Teston primary ( name='Test.mdf', fileName='D:\\project\Test.mdf', size=10mb, fileGrowth=15%)log on( name='Test.ndf', fileName='D:\\project\Te
2016-12-28 00:06:07 618
原创 匿名内部类
匿名内部类(内部类的简化写法):前提:存在一个类或者接口(这里的类可以是具体类或者抽象类)格式:new 类名或者接口名(){ 重写方法; }本质:是一个继承了该类或者实现了该接口的子类匿名对象匿名内部类在开发中的应用: public static void main(String[] args) { //怎么调用Person中的method的方法呢
2016-12-18 23:40:42 253
原创 内部类概述
内部类的访问特点: a:内部类可以直接访问外部类的成员 包括私有 b:外部类要访问内部类的成员 必须创建对象class Outer { class Inner{ public void print(){
2016-12-18 22:20:04 207
原创 java实现定时关机
public static void main(String[] args) { //定时关机 //显示当前时间 Calendar c1=Calendar.getInstance(); //创建当前时间的日历类对象 Date nowDay=c1.getTime(); //获取当前日期对象 SimpleDateFormat sdf=ne
2016-12-18 20:46:06 1945
转载 java反编译
eclipse安装JAVA反编译插件 前言:在实际的开发中几乎都会使用到一些框架来辅助项目的开发工作,对于一些框架的代码我们总怀有一些好奇之心,想一探究竟,有源码当然更好了,对于有些JAR包中的代码我们就需要利用反编译工具来看一下了,下面是我常使用的一种安装JAVA反编译工具的方法,操作比较简单,不过时间长了也容易忘记,还是在此小记一笔吧!毕竟好记性不如烂笔头(插件市场中有好多好
2016-12-18 18:47:00 240
原创 正则表达式(Regex)
定义:是指一个用来描述或者匹配一系列符合某个语法规则字符串的字符串 ,其实就是一种规则。、字符类: []代表单个字符 [abc] a 或b或c其中的某一个字符 [^abc] 任何字符 除了 a,b,c [a-zA-Z] a到z或A到Z 两头的字母
2016-12-16 00:33:33 494
原创 21种设计模式之——单例模式
单例模式 使用场合:适合一个类中只有一个实例的情况。比如任务管理器。 单例模式的必要要素:a)私有的构造函数 b)私有的静态静态字段 c)以自己为返回值静态公共的方法 单例在使
2016-11-13 10:35:44 311
原创 静态类和非静态类的区别
静态类:被static修饰符修饰非静态类:不被static修饰符修饰 调用方法:静态类是类名.静态成员 非静态类就是先创建对象 再对象名.实例成员一个静态类中不能出现实例成员,因为静态类不能实例化对象一个非静态当中可以包括实例成员 也可以包含静态成员静态成员是随着类的加载而加载的,而实例成员是通过创建对象的时候才被
2016-11-12 09:59:30 327
原创 c#中的访问修饰符
c#访问修饰符public公共访问,不受任何限制private私有访问,只限于本类成员访问,子类和实例都访问不到,类中成员没写修饰符,默认为privateprotected受保护的,只能在本类或是子类中访问,实例不能访问internal内部访问,只限于在此项目中访问,其他都访问不到 如果类没写访问修饰符,默认为internal
2016-11-12 09:38:33 311
原创 基本控件
基本控件 Label 用于显示用户不能编辑的文本或图像 常使用他对窗体上的其他各种控件进行标注和说明 属性:Image 在标签上显示的图像 Text 在标签上显示的文本 TextBox 用于获取用户输入的信
2016-11-10 21:40:19 197
原创 部分类
部分类 关键字:Partial 在C#中为了方便对代码的管理和编辑,可以使用partial关键字将同一个类中的代码分开放在多个文件中。每个文件都是类的一部分代码,叫做分布类。代码编译时,编译器会把再将各个分布类的代码合并到一起进行处理。 好处:分离关注点,就是用分布类把程序员不需要关心的那些自动生成的代码剥离出去,可以使程序员
2016-11-10 20:37:34 292
原创 初识Winform
WinForm 解决方案管理器组成 a)Form1.cs 窗体文件 代码放在这里面 b)Form.Designer.cs 窗体设计文件 c)Form1.resx资源文件 d)Program.cs主程序文件 包含Main()方法代码分
2016-11-10 20:26:31 278
原创 多态
多态 里氏转换原则: a)子类可以赋值给父类(如果有一个地方需要一个父类作为参数,那么可以拿一个子类来代替) b)如果父类中装的是子类,那么这个父类可以强转成子类
2016-11-10 14:42:52 156
原创 继承
继承 定义:我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员单独封装到一个类中 作为这些类的父类 所有类都继承于obJect类。 子类会继承父类的属性和方法 但是父类的私有字段子类继承不了继承的两大特性: 1)单根性 。一个子类只能继承一个父类 2 ) 传递性。隐藏
2016-11-09 23:56:16 227
原创 欢迎使用CSDN-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2016-11-09 23:36:05 162
原创 记录基础学习第二_小项目_飞行棋小游戏
飞行棋项目: 1.游戏头(要求每一个句子显示不同的颜色 ) //这里用到了Console类中的ForegroundColor属性 取值是枚举类型ConsoleColor中的值 eg:Console.ForegroundColor=ConsoleColor.Black;
2016-10-15 12:17:44 354
Flutter框架下构建跨平台应用程序的全面指南
2024-12-04
Java开发者指南:使用OpenAI ChatGPT进行文本分析与多模态应用
2024-12-04
图神经网络在高光谱遥感图像特征提取与分类中的应用
2024-12-04
Spring 6框架实战指南:解决企业级问题的技术方案
2024-12-04
Java 21实用方法论:构建健壮高效的应用程序
2024-12-04
SqlServer中添加默认约束
2016-12-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人