自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小湘西的博客

技术与问题的汇总

  • 博客(172)
  • 收藏
  • 关注

原创 Apache Spark 文件拆分机制

Spark 的文件拆分机制高度依赖于底层存储系统和 Hadoop 的输入格式。通过处理记录边界、允许分片重叠、任务重试、事务性写入和检查点等机制,Spark 能够在并行处理大规模数据集时保证数据的完整性。

2024-04-18 12:48:56 651

原创 Apache Hadoop 输入格式示例

和是 Hadoop 中常见的两种输入格式,分别适用于处理文本数据和二进制数据。它们都能够处理大文件的分片,并且保证数据的完整性。在 MapReduce 编程模型中,选择合适的输入格式对于作业的性能和可靠性至关重要。

2024-04-18 12:47:26 178

原创 关系数据库设计的基本步骤及其产物

数据库设计分为需求分析、概念结构设计、逻辑结构设计、物理结构设计、应用程序设计和运行维护6个阶段。

2024-04-17 12:46:44 372

原创 数据类型分类:什么是结构化数据、半结构化数据、非结构化数据

结构化数据指的是按照一定格式排列,便于机器读取和搜索的数据。这类数据通常存储在关系型数据库中,如SQL数据库,它们有明确的数据模型和结构,例如表格,其中定义了行和列。每一列都有确定的数据类型,每一行都是一个数据记录。

2024-04-17 12:41:40 196

原创 第一章:从工程师到系统架构设计师的职责及演化

总之,关于如何在专业领域内提升,有个著名的“10000小时定律”,简单来说要成为某个领域顶尖的专业人才,需要10000小时持续不断的练习,例如小提琴、足球、国际象棋、围棋等领域,无一例外都遵循这个定律,而技术人员的成长也基本遵循这个定律。系统架构设计师的成长其实最关键的还是技术人员对技术的热情以及持续不断地投入,包括学习、实践、思考和总结等

2024-04-16 12:50:17 1014

原创 ZooKeeper临时有序节点生成过程以及序号超过最大值的处理思路

当客户端向ZooKeeper请求创建节点时,需要指定节点类型。对于临时有序节点,应使用标志。这告诉ZooKeeper创建的节点是临时的,并且应该有一个唯一的、递增的序号。ZooKeeper在每个父节点下维护一个计数器,每当创建一个新的有序节点时,ZooKeeper会取出当前计数器的值,将其作为序号附加到节点名称后面,并将该计数器的值加1。最终的节点名称由客户端提供的基本名称和ZooKeeper生成的序号组成。例如,如果客户端请求创建名为的临时有序节点,ZooKeeper可能会创建一个名为的节点。

2024-04-15 23:22:29 410

原创 Zookeeper和Redis分别实现分布式锁的原理

分布式锁是一种在分布式系统中用来同步多个进程对共享资源访问的机制。它可以保证在同一时刻,只有一个进程能够获取锁并访问共享资源,从而避免并发冲突。

2024-04-15 23:17:33 742 2

原创 第一章:如何衡量一名优秀架构设计师

一名好的软件架构设计师需要明白,作为领导者并不一定要告诉开发人员做什么。相反,好的架构设计师就像一个导师,能够带领开发团队向同一个技术愿景前进。好的架构设计师会借助讲故事、影响力、引导冲突和构建信任等领导技能,将他们的架构愿景变成现实。一个好的领导者,同时也是一个好的架构设计师。他/她会仔细听取每个参与者的意见,通过与团队的互动调整他们的愿景。

2024-04-15 23:07:11 777

原创 第一章:系统架构设计师概述

架构设计师是负责系统架构的人、团队或组织(IEEE1471-2000)。架构设计师是系统或产品线的设计责任人,是一个负责理解和管理并最终确认和评估非功能性系统需求(如软件的可维护性、性能、复用性、可靠性、有效性和可测试性等),给出开发规范,搭建系统实现的核心构架,对整个软件架构、关键构件和接口进行总体设计并澄清关键技术细节的高级技术人员。

2024-04-14 00:02:48 1079 1

原创 第一章:系统架构概述之软件架构的常用分类及建模方法

多年来,“架构〞概念经过不断演化,日前己形成了满足不同用途的架构模式,比较典型的架构模型包括。当然,像等架构也是被广泛使用的软件架构,本节简要说明典型架构内涵。有的项目在和之间加了一个服务层(Service)或领域层,提供不同业务逻辑需要的一些通用接口。用户的请求将依次通过这四层的处理,不能跳过其中任何一层。对于简单的项目,事件队列、分发器和事件通道可以合为一体,整个软件就分成事件代理和事件处理器两部分。

2024-04-13 15:07:18 1129 1

原创 第一章:系统架构概述之系统架构的定义以及发展

架构是体现在组件中的一个系统基本组织、它们彼此的关系与环境的关系及指导它的设计和发展的原则。系统是组织起来完成某一特定功能或一组功能的组件集。系统这个术语包括了单独的应用程序、传统意义上的系统、 子系统、 系统之系统、产品线、整个企业及感兴趣的其他集合。系统用于完成其环境中的一个或多个任务。环境或者上下文决定了对这个系统的开发、 运作、政策以及会对系统造成其他影响的环境和设置。任务是由一个或者多个利益相关者通过系统达到一些目标的系统的一个用途或操作。

2024-04-13 12:04:53 807 1

原创 订单状态及其转换

创建是订单生命周期的一个初始状态,通常表示为“新建状态(Created)”或“待处理(Pending)”。订单状态的转换会根据不同的电商平台和业务流程有所差异,但上述状态和转换逻辑提供了一个基本的框架。各个电商平台可能会根据自身业务特点进行相应的调整和优化。

2024-04-12 23:48:12 462

原创 CREATE TABLE ... AS SELECT 与 CREATE TABLE ... LIKE 的相同点和不同点

目录相同点不同点 数据复制:索引和表选项:默认值和约束:自定义能力:使用场景:性能: 综上所述,和虽然都用于创建新表,但根据是否需要复制数据、保留索引和表选项以及自定义表结构的需求,会选择不同的语句来满足特定的场景。

2024-04-10 07:47:25 332

原创 MySQL 建表语句详解

列是主键并自动递增,起始值为 1001。在这个示例中,创建了一个名为。,并且有一个表级注释。

2024-04-09 23:17:56 703

原创 Git 命令及示例

【代码】Git 命令及示例。

2024-04-09 12:57:02 364

原创 线程池与垃圾回收(GC)

总之,只有当线程池不再被引用,且内部线程都已经停止或完成了任务,线程池对象才会成为垃圾回收的目标。正确管理线程池的生命周期是防止资源泄露和内存溢出的关键。为了使线程池对象成为垃圾回收的候选对象,应当在不再需要线程池时正确关闭它。如果线程池对象不再被引用,且内部线程都已经停止,垃圾回收器在其下一次运行时将会考虑回收线程池对象。只要线程池对象被应用程序所引用,并且它内部的工作线程还在运行或等待任务,它就不会被垃圾回收器回收。这些方法会启动线程池的关闭序列,停止接收新任务,并尝试终止正在执行的任务。

2024-04-09 12:52:18 382

原创 服务限流的算法及其实现

目录1. 固定窗口计数器算法2. 滑动窗口日志算法3. 漏桶算法4. 令牌桶算法5. 限流算法的具体实现结论

2024-04-06 10:32:07 252

原创 不同系统锁库存的实现方式

每个系统根据自身的业务需求、系统架构和技术栈的不同,会选择最适合自己的库存锁定实现方式。在选择时,需要考虑到实现的复杂度、系统的可靠性、性能要求以及维护成本等因素。

2024-04-06 10:28:55 252

原创 在订单流程中锁定库存的最佳时机

被认为是较为合适的时机,因为这时用户已经表明了购买意图,而且系统可以在订单生成后立即进行库存扣减,以防止同一商品被重复销售。这个阶段的锁库存可以有效平衡用户体验和库存管理的效率。

2024-04-06 10:25:29 143

原创 在订单流程中实现扣减库存或锁定库存的常用方法

各种实现方式都有其适用场景,通常需要根据实际业务需求和系统架构来综合考虑,选择最合适的实现方案。

2024-04-06 10:15:59 353

原创 秒杀场景避免超卖和少卖的思路

秒杀场景下,避免超卖(即售出的商品数量超过实际库存)和少卖(即未能售出所有库存的商品)是电商平台技术设计的重要考虑。

2024-04-06 10:05:52 261

原创 秒杀设计思路

秒杀系统的设计和实现是一个复杂的工程,需要综合考虑多个方面的因素,并且做好充分的测试和准备工作。

2024-04-06 09:57:52 338

原创 逃逸分析(Escape Analysis)

逃逸分析是一种编译器优化技术,用于确定在程序中对象的作用域和生命周期。编译器通过这种分析可以决定是否可以将对象分配在栈上,而不是在堆上。如果一个对象在定义它的方法之外不可访问,即它不会“逃逸”出方法的范围,那么它可能是一个栈上分配的候选者。逃逸分析的目的是减少内存分配开销、减少垃圾回收的压力,以及提高程序的性能。

2024-04-06 09:43:33 250

原创 Java HashMap类各种方法的使用说明

Java中的HashMap类实现了Map接口,提供了键值对映射的存储结构。这使得数据的存取可以通过键(Key)来高效地进行。HashMap位于java.util包中。以下是HashMap。

2024-04-06 08:59:42 594

原创 Java List类各种方法的使用说明

Java中的List接口是一个有序的集合,允许我们动态地插入和访问元素。List接口在java.util包中,它有多个实现类,如ArrayListLinkedList等。以下是List。

2024-04-06 08:57:20 484

原创 AspectJ 的 5 大通知类型

总结起来,AspectJ 的通知方法参数需要根据切点表达式的需要来指定,不能随意选择参数。这样做是为了确保通知能够正确地织入到目标方法,并访问到所需的数据。在这些示例中,通知方法的参数与目标方法的参数、返回值或异常对象相关联,并且通过切点表达式来指定要绑定的参数。

2024-04-04 08:33:13 150

原创 Spring AOP 详解

使用@Aspect注解定义一个切面,并通过@Pointcut声明切入点,使用@Before@After和@Around注解声明通知。@Aspect// 前置通知内容// 后置通知内容// 其他通知...

2024-04-04 08:31:39 1553

原创 负载均衡的技术实现

目录1. LVS (Linux Virtual Server)2. Nginx3. HAProxy4. Amazon ELB (Elastic Load Balancing)5. Apache HTTP Server6. F5 BIG-IP

2024-04-03 12:51:59 570

原创 各种负载均衡技术

负载均衡技术的选择取决于应用场景、服务器性能、网络环境等因素。在实际部署时,可能需要根据具体需求和资源情况对这些技术进行组合和优化,以实现最佳的负载分配和系统稳定性。负载均衡是一种技术,用于在多个服务器、网络链接、中央处理单元或其他资源之间分配工作负载,以提高吞吐量和减少响应时间。

2024-04-03 12:49:46 795

原创 Java Collections.sort 多字段排序的现代实现

这种方式的代码更加简洁和现代,利用了Java 8引入的lambda表达式和方法引用,使得代码更加易于阅读和维护。此外,它也避免了创建匿名内部类的需要。方法添加了一个基于用户年龄的排序规则。这样,我们就创建了一个排序规则链,它首先按照姓名排序,如果姓名相同,则按照年龄排序。方法来创建一个基于用户姓名的Comparator,然后通过。在这个示例中,我们使用了。

2024-04-01 12:39:21 127

原创 如何避免公网IP安全风险

部署入侵检测系统(IDS)和入侵预防系统(IPS)来监控和分析入站和出站的网络流量,以便及时发现和响应可疑活动。确保操作系统和所有运行的服务都是最新的,并且应用了所有安全补丁。如果需要远程访问网络,使用虚拟私人网络(VPN)来加密数据传输,并隐藏真实的公网IP地址。定期进行系统和网络的安全审计,保持对事件日志的监控,这样可以快速发现并响应安全事件。确保系统上的用户和服务仅具有它们执行任务所必需的权限,不要给予不必要的系统访问权限。为所有的网站和服务配置SSL/TLS加密,确保数据在传输过程中的安全。

2024-03-29 12:49:48 788

原创 如何把自己的公网IP关联到具体域名上

这通常是由你的互联网服务提供商(ISP)分配的。如果你是托管服务,如云服务器提供商,他们会提供公网IP。在相应的DNS记录类型下,输入你的公网IP地址。DNS记录更新可能需要一些时间来生效,这个过程称为DNS传播,可能需要几分钟到几小时不等。一旦DNS记录更新,你可以通过ping命令或在线DNS查找工具来测试域名是否正确解析到你的公网IP地址。使用你的域名注册账户登录到域名注册商提供的控制面板。找到DNS管理或域名管理的部分。在DNS管理界面中,你需要添加或更新DNS记录来将你的域名指向你的公网IP地址。

2024-03-29 12:48:05 545

原创 DNS 域名解析流程

DNS域名解析是互联网上将域名转换成IP地址的过程。因为计算机和网络设备使用IP地址来识别和通信,而人类则更容易记住域名。DNS解析过程是自动进行的,对用户来说是透明的。这个过程涉及多个DNS服务器,包括本地缓存、路由器、ISP的服务器、根服务器、顶级域名服务器和授权域名服务器。

2024-03-29 12:45:33 643

原创 在MySQL中字符串和整数比较的行为

在MySQL中,当进行字符串和整数的比较时,MySQL会尝试将字符串转换为数值来进行比较。这种转换遵循特定的规则:如果字符串的开头部分包含数字,那么MySQL会将这个数字部分提取出来,并将其用作比较的数值。如果字符串以非数字字符开头,则在比较时该字符串会被转换为数值0。

2024-03-26 13:00:38 445

原创 Git 的cherry-pick含义

git cherry-pick是一个Git命令,它允许你选择一个或多个其他分支上的提交(commits),并将它们复制到你当前的工作分支。

2024-03-25 12:59:41 262

原创 Redis Map数据结构中相同key不同的字段会分散多节点存储吗?

无论是单实例Redis还是Redis集群,一个Map数据类型的key对应的所有字段和值都存储在同一台机器上。在Redis集群中,这是通过哈希槽机制来保证的,确保了对同一个key的操作不需要跨节点通信,从而提高了操作的效率。

2024-03-25 12:56:18 387

原创 Eureka和Nacos的关系

Eureka和Nacos都是服务发现和注册中心,它们在微服务架构中扮演着关键角色,但它们是由不同的组织开发的,服务于类似但不完全相同的目的。

2024-03-23 22:11:27 906

原创 Redis 的BGSAVE和BGREWRITEAOF操作

AOF重写并不是简单地编辑旧的AOF文件,而是创建一个新的AOF文件,并将当前内存中的数据状态以命令的形式写入新的AOF文件。AOF是Redis中用于持久化的一种机制,它记录了所有对数据库进行修改的命令,以便在服务器重启后重放这些命令来恢复数据库的状态。它是Redis的一条命令,用于创建Redis数据的快照,并将其保存到磁盘上。BGSAVE是Redis数据持久化的重要组成部分,通过定期执行BGSAVE,可以保证数据的安全性并减少数据丢失的风险。

2024-03-22 23:19:35 1074

原创 Redis是如何避免“数组+链表”的过长问题

Redis通过动态调整哈希表的大小来解决“数组+链表”的长度问题,这涉及到两个过程:扩展(Expand)和收缩(Shrink)。在Redis集群模式下,哈希表会被分成多个分片,每个分片由不同的Redis节点管理,这样可以分散负载,减少单个链表过长的风险。对于有序数据集合,Redis使用跳跃表而不是链表来存储元素,跳跃表的平均和最坏情况下的时间复杂度都比链表要好。Redis使用MurmurHash等高质量的哈希函数来减少哈希冲突。

2024-03-22 23:13:02 543

原创 Redis 数据类型及其底层数据结构

Redis中的底层数据结构转换是自动进行的,无需人为干预。Redis为了优化性能和内存使用,会根据数据的实际使用情况自动选择最合适的底层数据结构。当数据结构的实际使用超过这些配置的阈值时,Redis就会自动进行数据结构的转换,以确保数据结构的存储效率和操作性能。这些参数可以在Redis配置文件中设置,或者通过。

2024-03-22 13:00:47 887

空空如也

空空如也

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

TA关注的人

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