自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 去专科当老师 VS 程序员

本人是一名南昌大学硕士研究生,本科和硕士阶段的专业都是软件工程,主要学习方向是Java后端开发。现在有两条路可以走1. 去公办专科高校当老师2. 去做程序员下面是对这两种选择的一些对比。

2024-04-23 16:57:46 283

原创 Lua调用函数的方式汇总

在Lua脚本语言中,调用函数是一种基本的操作,它允许代码执行在函数定义中封装的操作。Lua 提供了几种灵活的方式来调用函数,以适应不同的场景和需求。

2024-04-23 13:40:50 380

原创 游戏中的伤害类型

了解和利用不同的伤害类型是提高游戏表现的重要方面。通过有效地管理和选择合适的攻击类型来应对不同的敌人,玩家可以在游戏中占据优势,无论是在单人游戏中还是在多人在线竞技中。

2024-04-19 17:22:08 329

原创 前摇和后摇

前摇和后摇是游戏设计中用来增加战斗深度和复杂性的机制,它们不仅影响玩家的游戏体验,还是平衡和战术决策的重要因素。理解和掌握这些概念可以帮助玩家更好地策略规划和执行战斗动作,同时也是游戏设计师在设计角色和技能时需要仔细考虑的方面。

2024-04-19 16:34:10 300

原创 Protobuf概述

一个简单的.proto// 指定使用Proto3语法// 定义一个消息// 字段编号为1// 字段编号为2// 字段编号为3这个例子中定义了一个名为Personnameid和email。每个字段都分配了一个唯一的标签号,这些标签在消息的二进制格式中使用,而不是字段名,从而减少了序列化数据的大小。

2024-04-19 08:37:39 171 1

原创 Netty在游戏开发中的用途

Netty 是一个高性能的 Java 网络应用程序框架,它支持快速开发可靠的网络服务器和客户端。

2024-04-18 16:27:45 303

原创 Lua与Java的交互方案

不同的项目需求和运行环境可能需要不同的交互方案。在选择最合适的方案时,需要考虑到性能需求、开发和维护的复杂性、平台兼容性以及团队的经验。通常,LuaJ 和 JNLua 是比较流行的选择,因为它们提供了平衡的性能和易用性。如果你的项目需要最大限度的性能,并且团队有处理本地编程的经验,那么考虑使用 JNI 可能是一个好的选择。

2024-04-18 16:23:29 431

原创 volatile 的原理

volatile关键字在 Java 中是一种轻量级的同步机制,用于确保变量在多线程环境下的可见性和部分顺序性,但它不保证操作的原子性。当一个字段被声明为volatile时,它可以告诉 JVM 和编译器不要对这个字段的读写进行重排序,并确保每次读取该字段时都从主内存中获取,每次写入时也都写到主内存中。

2024-04-18 08:43:24 279

原创 ConcurrentHashMap为什么是线程安全的?

是 Java 中包的一部分,设计用于提供一个线程安全的HashMap实现。它通过若干策略来确保多线程环境中的线程安全,同时力求减少锁的争用,以提高性能。以下是。

2024-04-18 08:39:29 926

原创 实习学习内容-帧同步

帧同步是一种在多人在线游戏(尤其是实时策略游戏和战斗游戏)中常见的网络同步技术,用于确保所有玩家的游戏状态完全一致。帧同步的目的是在所有参与的玩家之间提供一个统一的、无差异的游戏体验,即使他们分布在不同的地理位置。

2024-04-17 17:59:15 199

原创 实习学习内容-Lua语法

Lua是一种轻量级的脚本语言,以其简单、灵活和高效的特点被广泛应用于嵌入式系统、游戏开发和服务器端编程中。Lua语言的设计目标是为了嵌入应用程序中,提供灵活的扩展和定制功能。下面,我将简要介绍Lua的基本语法和特点。

2024-04-16 13:48:43 686

原创 实习学习内容-WS协议

WS协议,即WebSocket协议,是一种网络通信协议,提供了一种在单个长连接上进行全双工、双向交互的通信渠道。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就可以直接创建持久性的连接,并进行双向数据传输。WebSocket协议的连接过程包括一个名为“握手”的阶段,这实际上是一个HTTP升级请求,告诉服务器客户端想要建立WebSocket连接。:在WebSocket协议中,服务器与客户端之间的通信头部信息较小,这使得WebSocket非常适合于频繁和高速的数据交换场景。

2024-04-16 13:16:46 312

原创 MySQL主从同步原理

通过这个类比,我们可以看到MySQL主从同步基本上是一个“学习和模仿”的过程。“大脑”(主服务器)记录下所有的学习经历,然后“学生”(从服务器)通过学习这些经历来获得知识。通过这种方式,我们可以确保“学生”的知识总是更新且和“大脑”一致,同时也能在“大脑”需要休息的时候,让“学生”来回答问题(处理读取请求)。

2024-04-03 10:51:59 612

原创 Linux系统常见命令

Linux操作系统提供了大量的命令,用于完成各种任务,从文件管理到系统监控和网络操作。这些命令仅仅是Linux命令海洋中的一小部分,但它们是进行日常任务时最基本和最常用的。每个命令都有一系列的选项和参数,可以通过在命令后面添加。- 显示目录或文件的磁盘使用情况。- 移动或重命名文件或目录。- 改变文件或目录的所有者。- 显示实时的系统进程信息。- 改变文件或目录的权限。- 显示磁盘空间使用情况。- 从网络上自动下载文件。- 显示当前目录的路径。- 在目录树中查找文件。- 显示当前运行的进程。

2024-04-03 10:42:05 608

原创 延迟任务(Redis实现)

延迟任务是当我们提交一件事情后,在未来的某个时间点自动执行另外一件事情。例如:12306购票系统,当我选择购买一张火车票后,点击下单,在没有付款的情况下,30分钟后会自动取消订单。

2024-03-30 09:31:03 281

原创 基于策略模式实现不同的搜索分发

定义一个策略接口,它包含一个search。

2024-03-28 09:57:38 458

原创 三色标记算法

现在,你的目标是找出所有你仍然需要的玩具,并整理出那些不再需要的玩具来进行“清理”。:当你检查完一个灰色标签的玩具,并确认它确实是需要的(包括它关联的所有玩具都被检查过了),你就把它的标签换成黑色。这时,所有的黑色标签玩具都是你确认需要的,而白色标签的玩具就是那些不再需要的,可以被“回收”或清理掉。你给这些玩具贴上灰色的标签,灰色代表这些玩具正在被检查,以及它们可能关联到的其他玩具也需要被检查(比如玩具套装的其他部分)。:一开始,你把所有的玩具都标记为白色,代表这些玩具的状态还未知,不确定是否还需要它们。

2024-03-25 09:41:04 341

原创 安全点安全区的通俗理解

想象一下,JVM(Java虚拟机)是一个忙碌的工厂,而Java程序中的线程就像是工厂里的工人。在这个工厂中,有时需要进行一些大规模的清理工作,比如垃圾回收,来确保工厂运行得更加高效。但是,如果在清理过程中所有的工人都继续他们的工作,可能会引发一些问题,比如有些工人可能正在使用一些即将被清理的资源。为了避免这类问题,JVM引入了“安全点(Safepoint)”和“安全区(Safe Region)”的概念。

2024-03-25 09:34:34 462

原创 N+1问题

"N+1问题"是数据库操作中常见的性能问题,特别是在使用ORM(Object-Relational Mapping,对象关系映射)框架时。这个问题发生在获取一个对象及其相关联的多个子对象时,由于不恰当的查询策略,导致执行了N+1次数据库查询:首先是1次查询获取主对象,然后是N次查询,每次获取与主对象关联的一个子对象。这种情况下,如果关联的子对象数量很多,会大幅降低应用程序的性能。

2024-03-24 10:50:59 220

原创 构造器注入和Autowired注入的区别

在Spring框架中,和是两种常用的依赖注入方法。

2024-03-24 09:43:11 370

原创 如何实现JWT Token的自动续期

访问令牌通常有较短的有效期,而刷新令牌有较长的有效期。当访问令牌接近过期时,可以使用刷新令牌来获取一个新的访问令牌,而不需要用户重新登录。

2024-03-23 11:01:26 617

原创 JVM面试题

Java虚拟机(JVM, Java Virtual Machine)是运行所有Java应用程序的抽象计算机。它是一个软件实现的平台,被设计成能够执行编译为Java字节码的程序,使Java程序能够在任何支持JVM的平台上不加修改地运行。JVM是Java技术的核心部分,使得Java能够实现其“一次编写,到处运行”(Write Once, Run Anywhere, WORA)的理念。

2024-03-20 11:24:21 1165

原创 Seata中四种模式的适用场景

Seata 是一个开源的分布式事务解决方案,用于确保在微服务架构下进行分布式事务时的一致性。它提供了四种模式来处理分布式事务,分别是:AT模式、TCC模式、SAGA模式和XA模式。

2024-03-17 15:32:34 460

原创 空回滚和业务悬挂

在分布式事务处理中,特别是使用Seata这样的分布式事务框架时,“空回滚”(Empty Rollback)和"业务悬挂"(Hanging Transaction)是两个需要特别注意的场景。它们都可能导致事务处理不正确或不一致的状态。让我们来详细了解它们各自的含义和对策。

2024-03-17 15:12:19 362

原创 RocketMQ的事务消息

RocketMQ是一款开源的分布式消息中间件,由阿里巴巴团队开发并贡献给Apache软件基金会。它提供了高性能、高吞吐量、可扩展和高可用性的消息和流处理服务。RocketMQ支持多种消息模式,包括发布/订阅模式、点对点模式等,并且支持事务消息,这是其重要特性之一。

2024-03-16 15:04:57 465

原创 Raft算法

Raft算法是一种为了更易于理解而设计的一致性算法,主要用于管理一个分布式系统中的日志复制。它通过选举一个领导者,然后在领导者的管理下,所有的更改都会被复制到集群中的其他成员,从而确保数据的一致性和系统的高可用性。Raft算法被广泛应用于分布式系统的开发中,如分布式数据库、分布式文件系统等。接下来,我们将详细介绍Raft算法的工作原理,并通过一个例子来辅助理解。

2024-03-16 11:09:10 414

原创 RocketMQ的两种消费模式

集群消费模式更适合处理业务数据,确保消息的稳定和高效处理,支持负载均衡和故障转移。广播消费模式适合于那些需要每个消费者都获得完整消息的场景,例如系统警告、配置更新等。选择合适的消费模式,可以根据你的具体需求和消息的特点来决定。RocketMQ的灵活性让它能够适应各种不同的应用场景,从而提供高效、可靠的消息服务。

2024-03-13 19:24:04 255

原创 RocketMQ的Reblance机制

RocketMQ的Rebalance机制是一种动态的消费者负载均衡策略,它确保了消息在消费者之间的均衡分配。这一机制特别重要,因为它允许系统在消费者数量变化时动态调整,优化资源利用率和提高消息消费的效率。

2024-03-13 17:36:30 937

原创 RocketMQ中CommitLog文件的结构

此外,为了支持快速的消息查找和消费队列的管理,RocketMQ使用了额外的索引和消费队列文件。是一个简单的顺序写入文件,RocketMQ通过将所有主题的消息都追加到同一个。:包含了一些额外的属性,如消息键、标签等,这些属性以键值对的形式存储。:用于表示消息的属性和状态,比如是否是事务消息、是否是批量消息等。:这部分存储了整个消息条目的长度,包括消息头和消息体的总长度。文件是其存储设计的核心,用于持久化所有主题的消息数据。文件中的物理位置,即消息的起始字节在文件中的偏移量。:消息所属的主题名称。

2024-03-13 12:17:46 205

原创 Kafka吞吐量高的原因

Apache Kafka能够实现高吞吐量的原因归结于其独特的设计和架构选择。

2024-03-12 15:10:59 450

原创 RocketMQ的存储机制

RocketMQ的存储机制是高效且为分布式环境设计的。

2024-03-12 11:21:25 357

原创 RocketMQ中的CommitLog与ConsumeQueue

CommitLog是RocketMQ消息存储架构的核心组件,它提供了持久化、高效率的消息存储机制。通过与索引文件(如和IndexFile)的配合使用,它支持高性能的消息读取。同时,清理机制确保了系统的稳定运行,不会因为CommitLog的无限增长而耗尽磁盘空间。通过主从复制,它还保证了消息系统的高可用性和数据的安全性。作为消息消费的索引,极大地提升了消息访问的效率,使得RocketMQ能够支持高吞吐量的消息传递。通过,RocketMQ实现了对CommitLog。

2024-03-12 11:11:00 602

原创 协同过滤算法

协同过滤算法是推荐系统中一种非常流行且广泛应用的技术。它的基本思想是基于用户或物品之间的相似性来进行推荐。协同过滤主要分为两大类:用户基于协同过滤(User-Based Collaborative Filtering)和物品基于协同过滤(Item-Based Collaborative Filtering)。

2024-03-11 22:01:49 2297

原创 常用的推荐算法

推荐系统在帮助用户发现可能感兴趣的产品、服务或信息方面发挥着重要作用。

2024-03-11 21:33:21 613

原创 Jenkins:持续集成与持续部署的利器

Jenkins是一个开源的自动化服务器,它可以用来自动化各种任务,包括构建、测试和部署软件。Jenkins由Java编写,因此它跨平台,几乎可以在任何系统上运行。Jenkins支持各种插件,使得它可以集成到几乎所有的开发、测试和部署工具中。Jenkins作为持续集成和持续部署的利器,其强大的功能和灵活性使其成为开发团队不可或缺的工具。无论是小团队的轻量级项目,还是大企业的复杂系统,Jenkins都能提供有效的支持。随着软件开发实践的不断进化,Jenkins也在不断地更新和扩展,以适应新的需求。

2024-03-11 20:04:13 401

原创 Kafka Stream入门

Kafka Streams是Apache Kafka的一个库,用于构建流式处理应用程序和微服务。它允许你以高吞吐量、可伸缩、容错的方式处理实时数据流。Kafka Streams专为易用性设计,可以直接在你的应用程序中嵌入使用,不需要单独的处理集群。它提供了一种简洁的方式,使得处理数据流和变换数据流变得容易,并且可以将结果输出到Kafka主题或其他外部系统。

2024-03-11 10:18:16 1207

原创 使用SpringBoot实现定时任务

在Spring Boot中实现定时任务非常简单,主要通过使用@Scheduled注解。Spring Boot的@Scheduled注解提供了一种简单的、声明式的方式来定义定时任务。这些任务可以按照指定的时间间隔执行,无需手动管理线程或定时器。

2024-03-11 09:54:34 352

原创 Redis事务为什么不支持原子性

在传统数据库系统中,原子性(Atomicity)指的是事务中的所有操作要么全都执行,要么全都不执行,即事务是不可分割的。因此,虽然Redis事务不能保证传统数据库中的原子性,它通过批量执行命令和隔离执行事务的方式,为开发者提供了一种执行多个操作的机制,同时保持了系统的高性能。如果事务中的某个命令失败,Redis事务会继续执行剩下的命令,而不是终止或回滚之前的操作。尽管Redis事务可以保证一系列命令被连续执行,没有其他客户端命令插入其中执行,这种机制并不提供传统意义上的原子性。

2024-03-11 08:25:25 459

原创 Kafka的分区机制

Kafka的分区机制是其核心功能之一,旨在提高可扩展性和并行处理能力。

2024-03-10 10:32:17 389

原创 Unix时间戳

值得注意的是,由于Unix时间戳是用32位整数表示的,这意味着它能表示的最大时间是2038年1月19日03:14:07 UTC。因此,为了避免这个问题,现代系统通常使用64位整数来存储Unix时间戳,这可以支持到很远的未来。Unix时间戳(Unix Timestamp),也称为POSIX时间或Epoch时间,是一种时间表示方法,定义为自1970年1月1日00:00:00 UTC(协调世界时)以来经过的秒数,不考虑闰秒。Unix时间戳的应用非常广泛,包括日志记录、时间戳标记、数据库时间记录等。

2024-03-09 19:52:54 220

空空如也

空空如也

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

TA关注的人

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