保存成功
订阅成功
保存失败,请重试
提交成功
当前位置 > 首页 > 架构 > Chat
架构
一文掌握 Java 线程池核心原理及基于 Spring Boot 的最佳实践
日常开发中我们经常使用线程池去提升程序的性能。通过池化的思想进行线程复用、管理,可以降低系统资源消耗、提升系统响应速度、减少系统处理耗时。 熟悉服务器端开发的同学都知道,Web 服务器在接收客户端请求时,通常不会采取来一个请求就新建一个线程处理的方式。虽然这种方式实现起来简单易懂,但是如果并发的请求数非常多,并且每个请求的实际处理耗时又非常短,那么就会导致频繁地创建和销毁线程,这将大大降低系统的性能。因为线程切换是有成本的,CPU 需要保存当前执行线程的上下文,并且后期还要恢复执行线程的上下文,即所谓的“上下文切换开销”。 线程池则为多线程创建的开销和资源不足问题提供了解决方案。通过多任务下线程的重用,将线程创建的开销摊薄到了多任务上,取得了高并发环境下系统性能上的提升。 在本场 Chat 中将会讲到如下内容: - Java 中线程池的基本概念和原理以及使用案例 - Java 中的线程池调优,参数配置详解 - 使用 Spring 内置的各种线程工具类创建线程池 - 在 Spring Boot 采用优雅的方式使用线程池 - 线程池的监控与管理以及线上动态调优实践 **适合人群**:Java 前后端开发人员。想深入理解、掌握线程池的使用、配置,在项目中需要自定义线程池的开发人员。
行梭渔人 · 攻城狮||程序猿
123 人已加入
架构
Spring Boot Validation 参数校验及统一异常处理最佳实践
在后端开发中,我们常常需要对接口的请求参数进行“参数合法性性”校验。比如我们要进行入参的判空、格式检查等来避免程序出现异常。首先想到的实现方式是采用 if(){...} else{...} 方式逐个对参数进行判断,这种方式功能上没有问题,能够达到目的。但是在入参很多的场景下,代码中将会充斥着大量的 if else 判断,降低了代码的美观性和可读性,显然不够优雅。那么有没有更好的方式来做这件事呢? 回答上述问题前我们再来看看另一个问题。 在后端开发中,还有个常见的问题。就是在程序中,我们不可避免地需要处理各种异常。代码中常常会看到大量的 try {...} catch {...} finally {...}。这同样造成了代码冗余,降低了可读性。那么有没有更优雅的方式来处理程序中的异常呢? 好了,带着上述问题,我们来引出本文的主要内容。在本场 Chat 中,将会讲述下列内容: - Bean Validation 概述及其具体实现介绍 - Spring Boot 中 Validation 的使用入门 - RequestBody/RequestParam/PathVariable 参数校验 - 分组校验、嵌套类校验、集合元素校验 - 自定义注解式规则校验、编程式校验 - 在 Service 接口中使用参数校验 - 后端接口统一数据格式响应 - 后端接口统一异常处理 **适合人群:** 本文篇幅较长,适合日常开发中使用 Spring Boot、Spring Cloud 微服务架构,需要经常面向 API 接口编程的开发人员。
行梭渔人 · 攻城狮||程序猿
175 人已加入
架构
当 DDD 遇上 DSL
在`领域驱动设计峰会 2019`上,作者应邀参加了 InfoQ 的架构专访。在交流过程中,作者阐述了 DDD、DSL 和 DCI 的关系,同学们可以通过学习专访文章 [DDD:架构思想的旧瓶新酒](https://www.infoq.cn/article/K6AfHfMlx6IZqKwmpXcu)来了解它们之间的关系。《当 DDD 遇上 DCI》是作者在全球架构师峰会 2019 深圳站分享的一个话题,后来发布了[一篇 Chat](https://gitbook.cn/new/gitchat/activity/5d5393ac40552e73266d04b6) 来传播。《当 DDD 遇上 DSL》可以看作是《当 DDD 遇上 DCI》的姊妹篇,是作者在`领域驱动设计峰会 2019`上分享的一个话题,受到了很多同学的认可和肯定。为了将该话题的核心知识点和实践经验传播给更多有意愿提升自己 DDD/DSL 建模能力的同学,作者决定写一篇 Chat 来详细阐述。 DDD(领域驱动设计) 是一种主流的软件设计方法,DSL (领域专用语言)是一种针对某一特定领域且具有受限表达性的计算机设计语言,当 DDD 遇上 DCI 会擦出什么样的火花?我们将结合典型案例一起探讨,共同成长,从而有效降低开发成本。命令/查询式 API 是一种常见的领域模型的组装方式,但在复杂场景下,内部或外部 DSL 是一种更好的选择。DSL 可以看作是在领域模型之上的一层外壳,能显著增强领域模型的能力。DSL 既可以提升开发人员的生产力,又可以增进开发人员与领域专家的沟通。 本场 Chat 的主要内容为: 1. DSL 简介 - 命令式与声明式 - DSL 是什么 - DSL 的价值 - DSL 的分类 2. DDD 与 DSL 融合 - 面向领域 - 模型组装的方式 - 分层架构 3. 三个典型案例 - 内部 DSL 案例:gomonkey API - 外部 DSL 案例:流程契约 - 横切面 DSL 案例:事务模型
张晓龙 · 架构师,DDD实践布道者
298 人已加入
架构
多种高并发设计让你的业务耗时飞起来
在实际的开发过程中,我们有很多耗时的业务去处理,比如我们方法内部不但执行了本地的很多业务代码并且还要去远程调用别的服务,导致整个方法响应太慢;又比如数据处理,需要往数据库中插入大量的数据,怎么使用 Java 程序快速批量执行呢?比如我们的 Excel 导出,因数据量太大并且多 Sheet 而出现了网络超时,这种问题该怎么去解决?又比如列表查询太慢了, SQL 调优已经是极限,用程序怎么去加快响应?等等问题都是实际开发中经常遇到的,说到这里,大家应该能想到,没错——那就是用多线程,对于优秀的 Java 技术人员来说,我们要掌握它,只有掌握了它,以上问题的才能迎刃而解,本场 Chat 就是帮大家使用多线程去解决以上的这些问题,同时在不同场景中选择最合适的并发设计,然后举一反三,类似的问题那还会是问题吗?本场 Chat 您值得拥有。 在本场 Chat 中,会讲到如下内容: - 当远程调用服务时,怎么使用多线程技术提升方法的响应速度,文章内容将会用三种程序设计来分别讲解,并分析他们的优缺点。 - 大量的数据怎么使用任务切分批量插入数据库中。 - Excel 导出怎么使用多线程技术提升响应,文章内容将会用两种程序设计分别讲解,并分析他们的优缺点。 - 使用模板设计模式实现并行分页,加快查询列表的响应速度。 - 再次使用模板设计模式编写模拟异步发送消息的实例。 - 操作系统之纤程,在操作系统层面分析纤程与线程的区别,使你在面试过程之中出类拔萃。 - 做最后的总结。 - 温馨提示:以上实例程序都是在 SpringBoot 环境下运行的。 适合人群: 对多线程高并发感兴趣、系统响应上要求提升更快的 Java 技术人员
清然 · 高级软件工程师
470 人已加入
架构
调用链监控:微服务时代每个程序员必须点亮的技能点
工作三五年了,你觉得自己翅膀硬了,偷偷去大厂面试。面试官问你项目采用什么架构设计,你说是微服务架构。面试官又问了,微服务架构里面服务众多,服务调用链路错综复杂,你们是如何监控你们的服务调用链的,哪些是热门服务,QPS 峰值是多少,服务 GC 的频率是咋样的,你有服务性能优化经验吗,调优前后的性能指数分别是怎样的。面对面试官的疯狂追问,你顿时懵掉了。是啊,平时只顾着撸代码,对自己服务的性能一无所知,虽然代码确实优化过不少,但是从来没有准确度量过自己服务的质量,也不知道服务的瓶颈在哪里。平时工作节奏快,只顾着 CV 来快速完成领导分配的 CRUD 任务,这已经成为大多数程序员的工作常态。 如果你想摆脱这个困境,就得不断的学习,思考,研究。那么今天我们就来一起探讨一下微服务调用链监控系统的里里外外,当你再次面对大厂面试官绝情的 N 级连环炮时,不再是一个礼貌而又不失尴尬的微笑,而是一个自信又坦然微笑,伴随着一个肯定的回答:这方面的技术在下颇有研究! 本 Chat 将会涉及到以下内容: 1. 为什么要做调用链监控 2. 调用链监控原理 3. 调用链监控的前世今生 4. 开源调用链监控产品 CAT 简介 5. CAT 报表功能介绍 6. CAT 告警功能介绍 7. CAT 的架构设计 8. CAT 实战应用 9. 网关集成 CAT 监控 10. CAT 生产环境实践 11. Spring Cloud Sleuth 简介 12. 学习资料推荐 适用人群:具有一定的编程实战经验。
毛毛虫流鼻涕 · 高级技术专家
511 人已加入
架构
Redis 面试题全解析
在找工作的过程中,对于 Redis 技术知识的掌握已经成为必须的技能。本 Chat 针对 Redis 大部分知识点梳理出来常见的面试题目,提供给大家进行有针对性的学习。 本 Chat 详细覆盖了: 1. Redis 的概念理解 2. Redis 基本数据结构详解 3. Redis 高并发问题策略 4. Redis 集群结构以及设计理念 5. Redis 持久化机制 6. Redis 应用场景设计 部分涉及到的题目如下: - 什么是 Redis? - Redis 的特点有哪些? - Redis 支持的数据类型 - 为什么 Redis 需要把所有数据放到内存中? - Redis 适用场景有哪些? - Redis 常用的业务场景有哪些? - Memcache 与 Redis 的区别都有哪些? - Redis 相比 Memcached 有哪些优势? - Redis 常用的命令有哪些? - Redis 是单线程的吗? - Redis 为什么设计成单线程的? - 一个字符串类型的值能存储最大容量是多少? - Redis各个数据类型最大存储量分别是多少? - Redis 持久化机制有哪些? 区别是什么? - 请介绍一下 RDB、AOF 两种持久化机制的优缺点? - 什么是缓存穿透?怎么解决? - 什么是缓存雪崩? 怎么解决? - Redis 支持的额 Java 客户端有哪些? 简单说明一下特点。 - 缓存的更新策略有几种?分别有什么注意事项? - 什么是分布式锁?有什么作用? - 分布式锁可以通过什么来实现? - 介绍一下分布式锁实现需要注意的事项? - Redis 怎么实现分布式锁? - 常见的淘汰算法有哪些? - Redis 淘汰策略有哪些? - Redis 缓存失效策略有哪些? - Redis 的持久化机制有几种方式? - 请介绍一下持久化机制 RDB、AOF 的优缺点分别是什么? - Redis 通讯协议是什么?有什么特点? - 请介绍一下 Redis 的数据类型 SortedSet(zset) 以及底层实现机制? - Redis 集群最大节点个数是多少? - Redis 集群的主从复制模型是怎样的? - Redis 如何做内存优化? - Redis 事务相关命令有哪些? - 什么是 Redis 事务?原理是什么? - Redis 事务的注意点有哪些? - Redis 为什么不支持回滚? - 请介绍一下 Redis 集群实现方案 - 请介绍一下 Redis 常见的业务使用场景? - Redis 集群会有写操作丢失吗?为什么? - 请介绍一下 Redis 的 Pipeline (管道),以及使用场景 - 请说明一下 Redis 的批量命令与 Pipeline 有什么不同? - Redis 慢查询是什么?通过什么配置? - Redis 的慢查询修复经验有哪些? 怎么修复的? - 请介绍一下 Redis 的发布订阅功能 - 请介绍几个可能导致 Redis 阻塞的原因 - 怎么去发现 Redis 阻塞异常情况? - 如何发现大对象 - Redis 的内存消耗分类有哪些?内存统计使用什么命令? - 简单介绍一下 Redis 的内存管理方式有哪些? - 如何设置 Redis 的内存上限?有什么作用? - 什么是 bigkey? 有什么影响? - 怎么发现 bigkey? - 请简单描述一下 Jedis 的基本使用方法? - Jedis连接池链接方法有什么优点? - 冷热数据表示什么意思? - 缓存命中率表示什么? - 怎么提高缓存命中率? - 如何优化 Redis 服务的性能? - 如何实现本地缓存?请描述一下你知道的方式 - 请介绍一下 Spring 注解缓存 - 如果 AOF 文件的数据出现异常, Redis服务怎么处理? - Redis 的主从复制模式有什么优缺点? - Redis sentinel (哨兵) 模式优缺点有哪些? - Redis 集群架构模式有哪几种? - 如何设置 Redis 的最大连接数?查看Redis的最大连接数?查看Redis的当前连接数? - Redis 的链表数据结构的特征有哪些? - 请介绍一下 Redis 的 String 类型底层实现? - Redis 的 String 类型使用 SSD 方式实现的好处? - 设计一下在交易网站首页展示当天最热门售卖商品的前五十名商品列表? 等等...... 通过本 Chat 详细大家能够轻松的应对 Redis 相关的面试挑战,同时也可通过全面的面试题目来学习和巩固自己的知识。
驰骋 · 高级技术经理
1772 人已加入