大家好,我是不才陈某在实际开发中,我们常常会用到线程池,但任务一旦提交到线程池之后,如果发生异常之后,怎么处理?怎么获取到异常信息?在了解这个问题之前,可以先看一下线程池的源码解析,从源码中我们知道了线程池的提交方式:submit和execute的区别,接下来分别使用他们执行带有异常的任务!看结果是怎么样的!我们先用伪代码模拟一下线程池抛异常的场景:publicclassThreadPoolException{publicstaticvoidmain(String...
2023-11-16 14:46:47 2392浏览 0点赞 0回复 0收藏
大家好,我是不才陈某最快的速度把10亿条数据导入到数据库,首先需要和面试官明确一下,10亿条数据什么形式存在哪里,每条数据多大,是否有序导入,是否不能重复,数据库是否是MySQL?假设和面试官明确后,有如下约束10亿条数据,每条数据1Kb数据内容是非结构化的用户访问日志,需要解析后写入到数据库数据存放在Hdfs或S3分布式文件存储里10亿条数据并不是1个大文件,而是被近似切分为100个文件,后缀标记顺...
2023-11-10 13:47:19 2017浏览 0点赞 0回复 0收藏
大家好,我是不才陈某当我们业务数据库表中的数据越来越多,如果你也和我遇到了以下类似场景,那让我们一起来解决这个问题数据的插入,查询时长较长后续业务需求的扩展在表中新增字段影响较大表中的数据并不是所有的都为有效数据需求只查询时间区间内的评估表数据体量我们可以从表容量磁盘空间实例容量三方面评估数据体量,接下来让我们分别展开来看看表容量:表容量主要从表的记录数、平均长度、增长量、读写量、总大小量进行评...
2023-11-10 13:46:52 1305浏览 0点赞 0回复 0收藏
大家好,我是不才陈某各个项目中,我们都可能需要用到签到和统计功能。签到后会给用户一些礼品以此来吸引用户持续在该平台进行活跃。签到功能,我们可以通过Redis中的BitMap功能来实现一、RedisBitMap基本用法BitMap基本语法、指令签到功能我们可以使用MySQL来完成,比如下表:用户一次签到,就是一条记录,假如有1000万用户,平均每人每年签到次数为10次,则这张表一年的数据量为1亿条每签到一次需要使用(8+8+1+1+3+1)共22字...
2023-11-10 13:46:02 1224浏览 0点赞 0回复 0收藏
大家好,我是不才陈某今天我们来聊聊缓存这个话题,看看在微服务环境下如何设计有效的多级缓存架构。主要涉及三方面内容:Web应用的客户端缓存;应用层静态资源缓存;服务层多级缓存。首先,咱们先讲解微服务架构的多级缓存设计。Java技术指南:https:javafamily.cn微服务架构中的多级缓存设计提到缓存,想必每一位软件工程师都不陌生,它是目前架构设计中提高性能最直接的方式。这里我们举个例子:假设应用程序将原始数据存储...
2023-11-10 13:45:16 3396浏览 0点赞 0回复 0收藏
3.3测试验证1)验证业务新增一个订单http:localhost:8084ordercreate对订单进行支付http:localhost:8084orderpayid2对订单进行发货http:localhost:8084orderdeliverid2对订单进行确认收货http:localhost:8084orderreceiveid2正常流程结束。如果对一个订单进行支付了,再次进行支付,则会报错:http:localhost:8084orderpayid2报错如下:2)验证持久化内存使用内存持久化类持久...
2023-11-10 12:02:19 2412浏览 0点赞 0回复 0收藏
大家好,我是不才陈某1、什么是状态机1.1什么是状态先来解释什么是“状态”(State)。现实事物是有不同状态的,例如一个自动门,就有open和closed两种状态。我们通常所说的状态机是有限状态机,也就是被描述的事物的状态的数量是有限个,例如自动门的状态就是两个open和closed。状态机,也就是StateMachine,不是指一台实际机器,而是指一个数学模型。说白了,一般就是指一张状态转换图。例如,根据自动门的运行规则,我们可以...
2023-11-10 12:01:44 3512浏览 0点赞 0回复 0收藏
大家好,我是不才陈某我们有个业务,会调用其他部门提供的一个基于http的服务,日调用量在千万级别。使用了httpclient来完成业务。之前因为qps上不去,就看了一下业务代码,并做了一些优化,记录在这里。先对比前后:优化之前,平均执行时间是250ms;优化之后,平均执行时间是80ms,降低了三分之二的消耗,容器不再动不动就报警线程耗尽了,清爽1.分析项目的原实现比较粗略,就是每次请求时初始化一个httpclient,生成一个httpP...
2023-11-10 12:01:20 1919浏览 0点赞 0回复 0收藏
大家好,我是不才陈某在SpringFramework5.0及更高版本中,RestTemplate已被弃用,取而代之的是较新的WebClient。这意味着虽然RestTemplate仍然可用,但鼓励Spring开发人员迁移到新项目的WebClient。WebClient优于RestTemplate的原因有几个:非阻塞IO:WebClient构建在Reactor之上,它提供了一种非阻塞、反应式的方法来处理IO。这可以在高流量应用程序中实现更好的可扩展性和更高的性能。函数式风格:WebClient使用函数式编程风...
2023-11-10 12:00:53 1866浏览 0点赞 0回复 0收藏
大家好,我是不才陈某在MyBatis的两万多行的框架源码中,使用了大量的设计模式对工程架构中的复杂场景进行解耦,这些设计模式的巧妙使用是整个框架的精华。经过整理,大概有以下设计模式,如图1所示。类型:创建型模式工厂模式SqlSessionFactory的结构如图2所示。工厂模式:简单工厂是一种创建型模式,在父类中提供一个创建对象的方法,允许子类决定实例对象的类型。场景介绍:SqlSessionFactory是获取会话的工厂,每次使用MyBa...
2023-11-10 11:59:07 1367浏览 0点赞 0回复 0收藏
大家好,我是不才陈某在日常开发中我们总是会与post请求打交道,一个小小的post请求也是牵扯到很多知识点的,博主在这给大家细细道来。同源策略在浏览器中,内容是很开放的,任何资源都可以接入其中,如JavaScript文件、图片、音频、视频等资源,甚至可以下载其他站点的可执行文件。但也不是说浏览器就是完全自由的,如果不加以控制,就会出现一些不可控的局面,例如会出现一些安全问题,如:跨站脚本攻击(XSS)SQL注入攻击OS...
2023-11-10 11:58:26 2152浏览 0点赞 0回复 0收藏
大家好,我是不才陈某在前面一篇文章中提到过对于业务主表读写缓慢的解决方案:冷热分离,有不了解的请看:业务主表读写缓慢如何优化?冷热分离固然是一个性价比高的解决方案,但也并不是银弹,仍然有诸多限制,比如:查询冷数据慢业务无法修改冷数据冷数据多到一定程度系统依旧扛不住此时如果需要解决以上问题,可以采用另外一种方案:使用查询分离优化业务主表数据大查询缓慢的问题什么是查询分离?查询分离从字面上...
2023-11-08 13:40:52 1562浏览 0点赞 0回复 0收藏
大家好,我是不才陈某虚拟化技术有以下几个关键概念1.主机(Host):也称为宿主机或物理机,指实际物理计算机,它上面部署了虚拟化软件的hypervisor。2.客户机(Guest):也称为虚拟机实例,指在主机上运行的虚拟环境,每个客户机都运行独立的操作系统和应用程序。3.Hypervisor:虚拟机监控器,是虚拟化软件的核心组件,负责管理和分配主机资源给客户机,并提供虚拟机的隔离性和管理功能。Hypervisor可以分为两种类型:类型1Hyp...
2023-11-08 13:39:51 2791浏览 0点赞 0回复 0收藏
大家好,我是不才陈某SpringBoot自定义线程池实现异步开发相信看过陈某的文章都了解,但是在实际开发中需要在父子线程之间传递一些数据,比如用户信息,链路信息等等比如用户登录信息使用ThreadLocal存放保证线程隔离,代码如下:author公众号:码猿技术专栏description用户上下文信息publicclassOauthContext{privatestaticfinalThreadLocal<LoginVal>loginValThreadLocalnewThreadLocal<>();publicstaticLoginValget(){return...
2023-11-08 13:39:11 2182浏览 0点赞 0回复 0收藏
大家好,我是不才陈某saas服务未来会面临数据安全、合规等问题。公司的业务需要沉淀一套私有化部署能力,帮助业务提升行业竞争力。为了完善平台系统能力、我们需要沉淀一套数据体系帮助运营分析活动效果、提升运营能力。然而在实际的开发过程中,如果直接部署一套大数据体系,对于使用者来说将是一笔比较大的服务器开销。为此我们选用折中方案完善数据分析能力。ElasticsearchvsClickHouseClickHouse是一款高性能列式分布式数据...
2023-11-08 13:37:24 3925浏览 0点赞 0回复 0收藏
大家好,我是不才陈某编译简单就是把代码跑一哈,然后我们的代码.java文件就被编译成了.class文件反编译就是针对编译生成的jarwar包里面的.class文件逆向还原回来,可以看到你的代码写的啥。比较常用的反编译工具JDGUI,直接把编译好的jar丢进去,大部分都能反编译看到源码:那如果不想给别人反编译看自己写的代码呢?怎么做?混淆该篇玩的代码混淆,是其中一种手段。我给你看,但你反编译看到的不是真正的代码。先看一张效果示...
2023-11-08 13:36:42 1626浏览 0点赞 0回复 0收藏
大家好,我是不才陈某请求合并到底有什么意义呢?我们来看下图。假设我们3个用户(用户id分别是1、2、3),现在他们都要查询自己的基本信息,请求到服务器,服务器端请求数据库,发出3次请求。我们都知道数据库连接资源是相当宝贵的,那么我们怎么尽可能节省连接资源呢?这里把数据库换成被调用的远程服务,也是同样的道理。我们改变下思路,如下图所示。我们在服务器端把请求合并,只发出一条SQL查询数据库,数据库返回后,服...
2023-11-08 13:36:10 1485浏览 0点赞 0回复 0收藏
大家好,我是不才陈某在排查线上异常的过程中,查询日志总是必不可缺的一部分。现今大多采用的微服务架构,日志被分散在不同的机器上,使得日志的查询变得异常困难。工欲善其事,必先利其器。如果此时有一个统一的实时日志分析平台,那可谓是雪中送碳,必定能够提高我们排查线上问题的效率。本文带您了解一下开源的实时日志分析平台ELK的搭建及使用。ELK简介ELK是一个开源的实时日志分析平台,它主要由Elasticsearch、Logstash...
2023-11-08 12:00:02 1970浏览 0点赞 0回复 0收藏
大家好,我是不才陈某在《千万不要再随便使用lombok的Builder了!》一文中提到Builder注解的其中一个大坑会导致默认值失效!最近阅读了《Oh!!StopusingBuilder》发现Builder的问题还不止一个,Builder会让人误以为是遵循构建器模式,实则不然,后面会介绍。总的来说,不推荐再使用Builder注解,接下来讲重点介绍其原因和替代方案。一、场景复现1.1如果不使用Builder类定义:packageio.gitrebase.demo;importlombok.AllArgsConst...
2023-11-08 11:45:45 2122浏览 0点赞 0回复 0收藏
大家好,我是不才陈某本文目录说在前面日流量200亿,携程网关的架构设计一、概述二、高性能网关核心设计2.1.异步流程设计2.2.流式转发&单线程2.3其他优化三、网关业务形态四、网关治理4.1多协议兼容4.2路由模块4.3模块编排五、总结说在最后:有问题可以找老架构取经部分历史案例日流量200亿,携程网关的架构设计方案的作者:Butters,携程软件技术专家,专注于网络架构、API网关、负载均衡、ServiceMesh等领域。一、概述类似于...
2023-11-08 11:44:05 1325浏览 0点赞 0回复 1收藏