自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【JiChat】基于Netty打造百万级用户IM平台:探索可扩展和高性能通信的威力

不久前,笔者学习了《System Design Interview》中关于即时通讯(IM)系统设计的内容。为了更深入地理解和应用这些概念,我决定亲手实现一个名为 'JiChat' 的IM系统。该项目不仅支持多客户端登录,还实现了历史消息同步、消息顺序一致性和零消息丢失的特性。为确保系统的可扩展性,整个架构按照百万级用户流量的标准进行设计,并支持无缝的横向扩展。在这篇博客中,我将分享这个IM项目的设计和实现过程,希望能够为大家提供有价值的经验和启发。

2024-01-29 19:23:55 1913

原创 密码学之美——密码学总结和对外开放接口实现

在实现具体功能前,先对密码学做个简要介绍。密码学一共分成:对称密码(AES)、公钥密码(RSA,椭圆曲线密码)、单向散列函数(MD5,SHA256) 、随机数生成器实际上会对以上密码分类混合扩展出以下两个分类:消息认证码(HMAC):单向散列函数+密钥,数字签名:单向散列函数+公钥密码以上就是对密码学的接口以及开放接口验签和加密的实现,这边写这边博客其一是对密码学做个总结方便加深印象。其二是将开放接口实现公开,可以让大家看看是否有安全漏洞。

2023-12-24 13:56:15 2027 1

原创 揭开 Docker 容器的神秘面纱:深入理解容器原理

以上是对容器的一些介绍,书中知识来源于《深入剖析Kubernetes》、《每天5分钟玩转Docker容器技术》 大家有时间可以查阅这两本书籍。

2024-06-13 15:59:18 1059 1

原创 数据结构之图——探索图论的奥秘

以上简单介绍了,图论知识。对于图论中用的比较多最短路和k短路用Java实现了。实际图论是比较难的问题,这边只是做了简单的介绍,抛砖引玉。

2024-05-11 16:32:42 1048

原创 探索计算机的小数世界:从二进制到无限精度

从上面我们知道,如同在十进制中无法精确表示1/3,在二进制中我们也无法精确表示1/5。但是在实际生活中,我们不可避免要使用1/5这个精确小数。为了满足这个需要,大家用了个方法。就是二进制整数都是精确,那么我就先把你改成整数,进行运算。那么不就是精确了,这个方式和现在后端很多金额都是用分计算,思路是一样的。BigDecimal是Java中的一个类,用于精确表示任意精度的十进制数。它的原理基于一个不可变的任意精度整数,它可以存储任意大小的整数,而不会丢失精度。我们看下BigDecimal构成/**

2024-04-11 16:45:46 953 1

原创 数据库之舞:MySQL 数据结构的美妙之旅

MySQL 客户端请求服务器的过程:连接管理:建立连接: 客户端通过 TCP / IP 协议与 MySQL 服务器建立连接。连接过程中,客户端和服务器协商通信协议版本、认证方式等信息。握手阶段: 服务器发送握手数据包,包含服务器版本、连接 ID 等信息。客户端接收握手数据包并回应,选择认证方式。认证阶段:身份验证: 客户端发送身份验证信息,通常是用户名和密码等。服务器验证信息的合法性,如果认证通过,客户端获得访问权限。

2024-03-12 10:46:35 951 1

原创 Redis悠游记:缓存技术的奇迹(二)

以上是对Redis总结,大家如果想深入理解Redis。推荐大家查阅《Redis设计与实现 》这本书。

2024-03-08 17:22:27 752 1

原创 Redis悠游记:缓存技术的奇迹——数据结构

前段时间看了《Redis设计与实现 》这本书,书中对于Redis讲解深入浅出。这边在这里写篇博客做个总结。首先我们看下Redis名称由来,从名字就能知道它是做什么的。Redis这个名称来源于Remote Dictionary Server(远程字典服务器)的缩写,远程字典服务,远程说明是单独开一个服务,没在项目内;字典说明是个key-value的字典。如果使用过Redis,知道他就是个键值服务器。Redis这个名称来源于Remote Dictionary Server(远程字典服务器)的缩写。

2024-03-06 16:06:23 553

原创 深入探索Netty:高级用法与性能优化

以上是对Netty一些特性介绍,同时介绍了操作系统相关的I/O。

2024-03-04 14:01:58 1691 1

原创 操作系统那些事

操作系统我们都知道,电脑有Windows,Linux;手机有Android,iOS,鸿蒙。我们再看下维基百科的定义操作系统(英语:Operating System,缩写:OS)是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务在我们的印象中操作系统,就是给软件分配物理资源。

2024-02-27 16:42:29 656

原创 Java学习之路:从入门到精通,掌握编程的妙技

前不久看到小伙伴发的Java学习内容,很多都是过时不再使用的技术了。**特别是jsp这个是十年前都不在使用的技术了**,像学习这种过时技术唯一的作用就是浪费时间,对于技术提升没用任何帮助。这边分享下工作中Java使用到的技术栈,笔者这边也不是大厂出身。对于下面介绍的内容仅是笔者工作中用到,仅供参考。

2024-02-20 19:15:26 710

原创 【浅谈开源】

在谈开源,我们先看看开源的定义是啥。开源软件(英语:open source software,缩写:OSS)又称开放源代码软件,是源代码可以任意获取的计算机软件,这种软件的著作权持有人在软件协议的规定下保留一部分权利并允许用户学习、修改以及以任何目的向任何人分发该软件。开源协议通常符合开放源代码的定义的要求。一些开源软件发布到公有领域。开源软件常公开和合作开发。开源软件是开放源代码开发的最常见例子,也经常与用户生成内容比较。

2024-02-02 10:32:43 929

原创 Netty实战——构建高性能、可扩展的网络应用

近期我利用 Netty 开发了一个即时通讯(IM)产品,在此分享一些对 Netty 的总结,以深化对其的理解。Netty 是一个被广泛使用的网络框架,主要用于处理 TCP 连接。让我们首先了解一下官方对 Netty 的定义。在物联网开发中,服务端与设备端之间通常通过自定义 TCP 协议进行通信。(也有使用MQTT(Message Queuing Telemetry Transport))而在 Java 中,Netty 是一个常用的选择用于实现 TCP 通信。在这篇文章中,我将介绍如何利用 Netty 实现客

2024-02-02 08:57:16 776

原创 【IM系列】IM如何实现端到端加密对话

以上是运用了非对称加密,来解决客户端之间的密钥分发问题。以上还留有几个问题(1)多客户端如何实现加密,比如一个用户可以是电脑和手机同时在线。那么密钥分配就需要发个两个客户端。目前看了主流的IM简单粗暴,就是仅支持手机端端到端加密。大家可以思考下,如果需要要满足多客户端那么要如何实现。(2)密钥失效问题,如果用户卸载APP或者换个手机,那么密钥丢失了。这时候要如何失效密钥更换。

2024-02-01 15:38:34 995 1

原创 【使用Trie树实现自动搜索完成(联想查询)】——升级搜索体验:Trie树助力智能搜索联想,助您轻松实现自动完成

以上实现思路是来自《System Design Interview》这本书里“CHAPTER 13: DESIGN A SEARCH AUTOCOMPLETE SYSTEM”实现一个自动搜索完成,为了加深印象那么就用代码实现下。刚开始想着使用倒排索引,因为中文的缘故。但是前缀搜索,倒排索引实现不是很好。

2024-01-15 14:30:22 953 1

原创 解决拦截器验签读取Request Body内容,而接口Controller无法读取内容

在Java的Servlet中,HttpServletRequest对象中的getReader()和getInputStream()方法用于读取请求体(Request Body)中的数据。一旦你调用这些方法之一,就会读取请求体的内容,并将流指针移动到末尾,这样再次读取请求体时就无法再次获取数据。这是因为HTTP请求体是一个流,而流只能被读取一次。一旦读取了流的内容,指针就指向了流的末尾,无法回到开头重新读取。这种设计有助于提高性能,因为服务器不需要在读取流的同时将其缓存下来,而是可以在读取的同时进行处理。

2023-12-24 13:21:15 683 1

原创 用手动实现一个RSA非对称加密,这样一下就理解RSA非对称加密原理

以上就是对RSA的手动实现。这边留下两个小思考(1)为什么明文不能超过模数n(2)你可以自己手动直接用你电脑试下以下的模运算结果665537mod665537mod,如果直接用表达式进行计算能否算出来。

2023-11-21 15:04:58 323 1

原创 Java手动实现一个双色球游戏,每天自己买个彩票玩

之前购买彩票时很少中奖,实际上彩票的中奖概率非常低。在多次尝试后,只中过一次。考虑到中奖机会有限,我决定尝试实现一个彩票自动购买程序,类似于机选功能。这样,我可以更加灵活地进行尝试,而不受实际彩票中奖概率的限制。

2023-11-17 14:54:24 162

原创 【Linux目录说明】

有时候我们在使用 Linux 操作系统时会遇到一些目录,一些我们熟悉而又有些陌生。我们对于常见的几个目录位置了如指掌,但是这些目录的全称和含义,如果没有特地去查一遍,对它们的理解可能并不深入。虽然我们熟悉它们的大致作用,但在需要深入探索和理解的时候,对这些目录的了解程度可能有限。

2023-11-16 17:15:32 144 1

原创 统一支付接口,无限扩展不同支付服务工具包实现。【开箱即用】(可用于生产环境中)

通过策略的封装,我们成功将支付功能解耦,摆脱了硬编码的束缚。这意味着不再需要为产品的每一个支付需求而硬编码,从而大大提高了系统的灵活性。现在,我们可以通过简单地切换策略,适应产品支付方式的变化,而不必担心影响到业务代码。这种解耦的设计使得支付模块更为可维护和可扩展,为未来的需求变更提供了更为便捷的途径。

2023-11-16 15:08:52 162

原创 java控制台实现24点游戏

24点游戏实现

2023-09-20 10:33:09 316 1

原创 【版本号比较工具-(算法版)】

算法版版本号比较工具

2022-08-29 09:48:40 288 1

空空如也

空空如也

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

TA关注的人

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