JVM GC 知识点

JVM 中常见的垃圾收集器主要包括 Serial、Parallel、ParNew、CMS、G1 以及 ZGC 等。不同收集器在 并发能力、停顿时间、吞吐量以及适用场景 上各不相同。下面对常见的几种垃圾收集器进行整理说明 Serial 收集器 (-XX:+UseSerialGC -XX:+UseSerialOldGC) Serial 收集器是 JVM 中最基础、历史最悠久的垃圾收集器,它采用 单线程方式执行垃圾回收。在进行垃圾回收时,JVM 会触发 STW(Stop The World),即暂停所有用户线程,直到垃圾回收完成后才恢复业务线程运行。 在算法实现上,Serial 收集器在 新生代使用标记-复制算法(Copying),而在 老年代使用标记-整理算法(Mark-Compact)。由于整个回收过程只有一个 GC 线程,因此实现简单且稳定,
9 min read

Zookeeper 可视化UI工具

推荐几款常用的 Zookeeper UI 工具,以帮助我们提高工作效率。 1、Zookeeper Assistant (收费) ZooKeeper Assistant - ZooKeeper可视化管理与监控工具适用于Windows的ZooKeeper管理GUIZooKeeper Assistant1402752916qq.com [http://www.redisant.cn/za] 对于收费来说,个人感觉是没必要的,ZK的功能并不复杂,主要就是Znode节点信息的CRUD,不过看得出来他们的UI界面是用心做了的,对于这点就值得点赞。 2、PrettyZoo (开源免费) 这款本人也在使用,免费,UI又比较耐看。 github地址:vran-dev/PrettyZoo: 😉 Pretty nice Zookeeper GUI, Support Win / Mac / Linux Platform (github.com) [https://github.com/vran-dev/
2 min read

Zookeeper 集群搭建

部署环境 操作系统 Debian 11.5.0 运行环境 OpenJDK-1.8.0_332 64-Bit Server VM Zookeeper版本:3.8.0 官方介绍 Zookeeper官方文档地址(下载的zip压缩包中\docs目录也自带文档):ZooKeeper: Because Coordinating Distributed Systems is a Zoo (apache.org) ZooKeeper 是一种用于分布式应用程序的分布式开源协调服务。它公开了一组简单的基元,分布式应用程序可以基于这些基元来实现更高级别的同步、配置维护以及组和命名服务。它被设计为易于编程,并使用根据文件系统熟悉的目录树结构设置样式的数据模型。它以 Java 运行,并具有 Java 和 C 的绑定。 ZooKeeper 的实施非常重视高性能、高可用性、
11 min read

JUC复习篇(二)锁的认识

锁的基本概念: 通过锁机制,能够保证在多线程环境中,在同一时间空间中,只能有一个线程进入临界区代码,从而保证临界区中操作数据的一致性。 公平锁: 防止某个线程出现饿死现象,也就是防止某个线程分配不到CPU时间片导致指令一直无法执行。保证公平需要额外维护线程状态,更多的线程上下文切换,开销更大,吞吐量有所下降。ReentrantLock 可用设置初始化参数设置为公平锁,Synchronized默认是非公平锁并且不能变为公平锁。 非公平锁: 直接进行计算资源抢夺,容易出现线程饿死现象。但吞吐量更高,线程切换不那么频繁,谁先抢到CPU时间片即可执行。 可重入锁: 又称为递归锁,可以再次获取已经获取到的锁对象,可以一定程度的避免死锁现象。ReentrantLock和Synchronized都是可重入锁。 不可重入锁: 线程在运行中获取到锁之后,在同步代码块种再次获取这把锁将会导致死锁,不可重入锁只允许在同步代码块中被获取一次。 互斥锁: 当一个线程占用资源时,其他线程会被挂起,不会占用CPU资源,锁被释放时,CPU去调度挂起的线程,适合不会被高频操作的资源,否则频繁调度线程的效率会较
8 min read

JUC复习篇(一)线程基础

前言 Java JUC章节的知识点繁多,为了更好的整理我掌握的知识点,故此通过书写博客的方式,其中从底层原理开始梳理,从而总结出自己对并发编程的理解。 什么是并发编程 原因还得从目前的计算机发展历史说起,根据摩尔定律,计算机CPU算力随着时间越来越高,但摩尔定律很快达到物理极限,单核心CPU算力遇到瓶颈,而人们为了追求更高的算力,使用了多核心CPU架构设计,多核心与超线程技术使得CPU算力大幅度提高。原理相当于有多个人同时执行不同的指令,整体效率当然比一个人执行得更高。(注意是整体效率更高,不意味着使用多线程就一定比单线程应用执行指令效率更高) 为了更好的运用多核心CPU的计算资源(压榨CPU),于是产生了多线程开发。虽然使用多线程在某些场景下确实提高了程序整体效率,但多线程也并不是银弹,使用多线程开发随之而来的也有诸多问题,例如:线程安全问题、锁机制、死锁、线程上下文切换带来的开销等问题。 那么说了这么多线程的描述,到底什么是线程呢? 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程
12 min read

关于Serverless架构

背景 Serverless(无服务器架构)近年来逐渐成为云计算领域的一个热门方向。它的核心理念是:开发者无需关心服务器的部署、运维和扩容,只需要专注于业务逻辑的开发。 在传统架构中,一个系统上线通常需要准备服务器、部署环境、配置网络、监控资源以及处理扩容问题,这些工作都需要额外的运维成本。而在 Serverless 架构中,这些基础设施全部由云厂商负责管理,开发者只需要编写函数代码并部署即可运行。 Serverless上云 Serverless 通常以 云函数(Function as a Service,FaaS) 的形式提供。例如阿里云函数计算(FC)、AWS Lambda、腾讯云 SCF 等。开发者只需要上传代码,当有请求触发时,平台会自动运行函数,并根据实际的调用次数和运行时间进行计费。 这种模式带来的最大变化是:应用可以按需运行,而不是长期占用服务器资源。 例如在一些业务场景中: * 定时任务处理 * Webhook 事件触发 * 图片处理 * 数据转换 这些任务并不需要持续运行的服务器,
4 min read

Java 逻辑引擎的构思

在工作中多年之后,深知设计模式的重要性,设计模式的合理使用可以让我们复杂的业务逻辑实现得更加的灵活,更好的支持多态性,易扩展,易维护等好处。 那么可不可以设计一款专门为后端java开发人员量身定制一款本身就具备了设计模式的UI逻辑引擎。开发人员只需要进行逻辑组件的组合,然后再双击组件书写SQL或JAVA代码,把组件的成员变量进行传递,并最终入库。 原理类似于目前的kettle工具。 如果有这样的逻辑引擎我们java开发势必能够大幅度减少工作量。 其中的灵感来至于我在工作中使用的,工厂模式,代理模式,策略模式,装饰模式与SPI构思思想组合而成的。 通过UI组件生成的配置文件,告诉代理策略类,调用其中对应组件逻辑单元.class文件。在系统启动时加载所有的逻辑策略,确保spring bean都可以正常加载入内存。 后续执行全部通过代理策略类进行逻辑处理。组装每一个单独的bean,从而完成一个复杂的业务逻辑。 这样的的实现也符合单一职责原则与开闭原则。 可能在目前市场上对应的项目就是低代码平台或者零代码平台了吧。
2 min read

IntelliJ IDEA 2020 JRebel破解

IDEA 安装好最新版的JRebel之后。 点击激活页面 选择在线服务器授权激活。 输入服务器授权URL地址 URL地址为:https://jrebel.qekang.com/ [https://jrebel.qekang.com/5d45985a-26e1-4172-95ad-e75e551605a2]{GUID} 其中的GUID需要生成(生成地址): Generate GUIDs onlineGuidGen - webbased tool for generating GUIDs. [https://www.guidgen.com/]进入网站后生成GUID之后填写入URL地址中。 勾选同意协议,点击激活。 至此JRebel破解成功。
1 min read

开发IDEA插件记录

之前一直在使用一款插件叫 mybatis log plugin,它里面的 sql log 参数补全这个功能我比较喜欢,之前低版本好像并没有进行收费,但高版本之后它开始收费了。于是我打算自己开发一个类似的功能插件,取名叫 mybatis log analysis , 1.0.0版本的话首先会完成sql log 解析并自动参数补全,sql美化等简单功能。 之后待时间充裕之后将会把其他的使用功能也开发出来,如xml java 链接跳转,一键生成 controller,service,entity,mapper,xml等功能点。 目前已经开发完成1.0.0版本 并提交到了 IDEA PLUGIN 库中。 在开发插件的时候,简单的功能实现起来很简单, 但想要实现比较复杂的功能就必须要对IDEA 提供的API 等方法有个比较深层次的了解,可是我在官方插件文档上并没有找到比较完善的API 文档。只有一些官方给出的demo代码。这样的话就不得不花点时间去看demo代码并阅读理解才行。感觉会将是一个不太友好的学习曲线。 贴上已经开发出来的插件地址:https:
1 min read

Java后台架构理解

最近自己搭建了一些系统架构,因此整理了一下对于后台架构的一些理解和思考。 在实际开发中,我们经常会思考:什么样的项目结构才算是一个合理的架构? 有人认为,一个好的架构应该能够: * 减少开发人员的重复工作 * 结构清晰,易于理解 * 具备良好的稳定性 * 方便扩展与维护 但实际上,这只是项目层面的架构。 随着业务的发展,系统往往会从单机项目逐渐演进为集群架构,最终发展为分布式系统。在这个过程中,会不断引入各种组件,例如: * 注册中心 * 配置中心 * API网关 * 服务熔断与降级 * 分库分表 * 容灾机制 * 各种中间件 同时系统部署也会逐渐演进为 Docker + K8S 的容器化体系。 服务器数量也可能从最初的一两台,逐渐增长到几十台甚至上百台。此时系统已经不再是简单的项目,而是一个完整的 系统架构体系。 架构设计既包含宏观层面的系统设计,也包含微观层面的代码设计。 代码层面的架构设计 在代码层面,架构设计需要统一开发规范,并提高开发效率。 例如: * DTO 自动参数校验(AOP) * Result 统一返回对象 *
6 min read

web项目部分框架技术

以下技术都是平时工作中和自己学习中所了解并尝试使用的部分技术,作为记录。 SpringBoot ,Spring-cloud,Spring-cloud-alibaba,Spring全家桶。 MyBatis-Plus (乐观锁,自动分页,代码生成器,生成service,mapper,entity,controller,自定义生成模板)。 JOOQ:JavaORM框架。 Uid-generator : 百度uid生成器 (分布式雪花算法全局唯一标示,Long型UID)。 Xxl-job:分布式任务调度中心。 Apache-Shiro, Spring-Security :登录安全框架。 Druid ali , HikariCP :常用数据连接池。 Bcrypt :数据库用户密码加密方式,保证密码安全。 JWT:临时令牌生成策略/规范。 Undertow ,Tomcat,Jboss,Weblogic  :Servlet容器。 Eolinker,Swagger,Knife4j,Yapi : 在线api文档 自动化测试工具。 MySQL 8.0
2 min read

随心笔记

技术无止境 创新不停驻