0%

消息队列

目前企业中比较常见的消息队列产品主要有 Kafka、ActiveMQ、RabbitMQ、RocketMQ 等。在大数据场景主要采用 Kafka 作为消息队列,而在 JavaEE 开发中主要采用 ActiveMQ、RabbitMQ、RocketMQ。

消息队列的优势

  • 解耦 - 允许独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束

阅读全文 »

前言

本文适用于在 Centos/Debian/Ubuntu 等 Linux 发行版系统上,使用多台物理机器(至少三台)搭建 Kafka 集群。

Zookeeper 集群搭建

本文的 Kafka 集群搭建依赖于 Zookeeper,因此生产环境需要将 Zookeeper 集群提前搭建起来。值得一提的是,从 Kafka 2.8.0 版本开始,Kafka 自身实现了 Raft 分布式一致性机制,这意味着 Kafka 是可以脱离 ZooKeeper 独立运行的。

集群规划

节点 IP 地址端口版本号
Zookeeper 节点 1192.168.1.121813.4.10
Zookeeper 节点 2192.168.1.221813.4.10
Zookeeper 节点 3192.168.1.321813.4.10
阅读全文 »

前言

本文适用于在 Centos/Debian/Ubuntu 等 Linux 发行版系统上,使用单机搭建 Kafka 集群。

Zookeeper 集群搭建

本文的 Kafka 集群搭建依赖于 Zookeeper,因此需要将 Zookeeper 单机集群提前搭建起来。值得一提的是,从 Kafka 2.8.0 版本开始,Kafka 自身实现了 Raft 分布式一致性机制,这意味着 Kafka 是可以脱离 ZooKeeper 独立运行的。

集群规划

节点 IP 地址端口版本号
Zookeeper 节点 1127.0.0.121813.4.10
Zookeeper 节点 2127.0.0.121823.4.10
Zookeeper 节点 3127.0.0.121833.4.10
阅读全文 »

前言

在企业级开发中,我们经常会有编写数据库文档的时间付出,关于数据库文档的状态:要么没有、要么有但都是手写、后期运维开发都需要手动对文档进行维护,很是繁琐。如果忘记一次维护就会给以后的工作造成很多困扰,这无形中留了很多坑给自己和后人。screw 是一款简洁好用的数据库文档生成工具,专为解决这一开发痛点而生。

screw 介绍

特色功能

  • 灵活扩展
  • 支持自定义模板
  • 支持多种数据库
  • 支持多种格式的文档
  • 简洁、轻量、设计良好
阅读全文 »

stack 容器

stack 容器的概念

stack 是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口。stack 容器允许新增元素、移除元素、取得栈顶元素,但是除了最顶端的元素外,没有任何其他方法可以存取 stack 中的其他元素。stack 没有迭代器,容器中所有元素的进出都必须符合 “先进后出” 的规则,只有 stack 最顶端的元素,才有机会被外界取用。换言之,stack 不提供遍历功能,也不提供迭代器。deque 是双向开口的数据结构,若以 deque 为底部结构并封闭其头端开口,便轻而易举地形成一个 stack。因此,SGI STL 便以 deque 作为缺省情况下的 stack 底部结构。由于 stack 以底部容器完成其所有工作,而具有这种 “修改某物接口,形成另一种风貌” 的性质者,称为 adapter(配接器),因此,STL stack 往往不被归类为 container(容器),而被归类为 container adapter(容器配接器)

阅读全文 »

vector 容器

vector 容器的概念

vector 的数据存储以及操作方式,与 Array 非常相似,两者的唯一差别在于空间运用的灵活性。Array 是静态空间,一旦配置了就不能改变,要换大一点或者小一点的空间,可以,一切琐碎的细节得由自己来实现;首先配置一块新的空间,然后将旧空间的数据搬往新空间,再释放原来的空间。Vector 是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新元素。因此 vector 的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也不必害怕空间不足而一开始就初始化一个大的 Array 了。Vector 的实现技术,关键在于其对大小的控制以及重新配置时的数据移动效率,一旦 vector 旧空间满了,如果客户每新增一个元素 vector 内部只是扩充一个元素的空间,实为不智,因为所谓的扩充空间(不论多大),一如刚所说,是 “配置新空间 - 数据移动 - 释放旧空间” 的大工程,时间成本很高,应该加入某种未雨绸缪的考虑。

vector 容器的数据结构

阅读全文 »

一、日期处理

1. 时间格式化

该方法可以用于将时间转化为 hour:minutes:seconds 的格式:

1
2
3
4
5
const timeFromDate = date => date.toTimeString().slice(0, 8);

timeFromDate(new Date(2021, 11, 2, 12, 30, 0)); // 12:30:00
timeFromDate(new Date()); // 返回当前时间 09:00:00
复制代码

2. 检察日期是否有效

该方法用于检测给出的日期是否有效:

1
2
3
4
const isDateValid = (...val) => !Number.isNaN(new Date(...val).valueOf());

isDateValid("December 17, 1995 03:24:00"); // true
复制代码
阅读全文 »

前言

VuePress v1.x 博客建议安装 vuepress-plugin-readmore-popular 插件,将 TechGrow 的免费微信公众号导流工具整合到博客中,用户扫码关注微信公众号后可以解锁全站文章,让微信公众号的粉丝数躺着增长。

提示

  1. TechGrow 开放平台的 官方文档
  2. vuepress-plugin-readmore-popular 插件只支持 VuePress v1.x,不支持 VuePress v2.x
  3. 若希望实现 VuePress v2.x 的公众号导流,建议使用 vuepress-plugin-readmore-popular-next 插件

特色功能

  • 支持随机为博客添加导流功能
  • 支持关闭某篇文章的导流功能
  • 支持查询用户解锁文章的历史记录
  • 支持自定义或者动态计算文章内容的预览高度
  • 支持自定义 CSS 样式,轻松适配不同风格的博客
阅读全文 »

前言

Rsync 是一个增量备份工具,可压缩数据传输,速度快且增量备份,占用流量少。

准备工作

创建用户

1
2
3
4
5
# 创建用户组
# groupadd www

# 创建用户
# useradd -g www www -s /bin/false
阅读全文 »