- 博客(298)
- 资源 (76)
- 收藏
- 关注
原创 微服务架构 | SpringBoot 元数据配置实践
Spring Boot jar 包含元数据文件,提供所有支持的配置属性的详细信息。该文件旨在让 IDE 开发者提供上下文相关的帮助和“代码完成”。总结本篇文章希望对从事相关工作的同学能够有所帮助或者启发。
2022-01-14 13:17:41
383
原创 码农架构 | Spring Boot 实现通用 Auth 认证的 4 种方式
文章介绍了 spring-boot 中实现通用 auth 的四种方式,包括 传统 AOP、拦截器、参数解析器和过滤器,并提供了对应的实例代码,最后简单总结了下他们的执行顺序。
2022-01-11 15:10:57
440
2
原创 微服务架构 | 如何让接口权限继续继承下去?
在访问系统某个或者某类接口后进行一系列权限校验,但在后续接口中我们想让访问权限一直授权下去改如何处理呢?总结本篇文章希望对从事相关工作的同学能够有所帮助或者启发。
2022-01-05 21:02:06
2193
2
原创 RandomAccessFile 解决多线程下载及断点续传
在针对文件处理当网络环境不好,出现上传失败的时候,可以对失败的 Part 进行独立的重试,而不需要重新上传其他的 Part;中途暂停之后,可以从上次上传完成的 Part 的位置继续上传。或者要上传到 OSS 的本地文件很大的时候,可以并行上传多个 Part 以加快上传;再或者面对一些文件比较大时,我们需要对大文件进行切割分批上传完后再合并处理。
2021-12-29 14:56:05
1484
1
原创 微服务架构 | 怎样解决超大附件分片上传?
当我们的文件特别大的时候,上传是不是需要很长的时间啊,这么长时间的长连接,如果网络波动了呢?中间网络断开了呢?在这么长时间的过程中如果出现不稳定的情况,本次上传的所有内容就全部失败了,又要重新上传。分片上传、断点续传,这两个名词对于做过或者熟悉文件上传的朋友来说应该不会陌生,总结本篇文章希望对从事相关工作的同学能够有所帮助或者启发。
2021-12-26 12:02:13
2758
2
原创 微服务架构 | 如何利用日志链路追踪程序执行的慢 SQL?
查看 SQL 的执行效率,不难想到使用 explain 分析慢查询,但是前提是你需要非常了解业务背景。否则很难精准定位到。
2021-12-22 10:50:33
522
3
原创 微服务架构 | 如何利用好日志链路追踪做性能分析?
做性能分析听到最多的歪理就是,服务做水平、垂直扩容、分表分库、读写分离、XX中间件、资源静态化等等但是归根到底这些方案都是为了尽可能减少对数据库的访问以及堆栈的释放,提高数据库IO的读写速度和程序的运行效率。
2021-12-14 13:57:54
2101
3
原创 微服务架构 | 服务之间跨域问题怎么解决?
导读:跨域资源共享(cors)可以放宽浏览器的同源策略,可以通过浏览器让不同的网站和不同的服务器之间通信。一、背景当前微服务拆分已经成为趋势,大部分公司都对其软件产品做微服务架构调整。对产品先进行业务、模块拆分,大部分也进行前后端分离的业务调整。服务拆分不能避免的问题那就是:请求跨域问题,针对跨域问题,先前专门做了资料整理 什么是跨域? 请求跨域会影响? 跨域资源共享(cors)到底解决了什么? 针对这些问题可以查看《SpringCloud 中跨域资源共享(..
2021-11-15 14:09:33
6330
3
原创 微服务架构 | Hystrix 熔断降级需要注意哪些点?
导读:Hystrix的资源隔离策略有两种,分别为:线程池和信号量。说到资源隔离,那我们在实战中需要注意哪些点呢?一、背景对于Hystrix熔断器的隔离策略分别为:线程池和信号量,前面一篇已经做了详细说明《微服务架构 | Hystrix的资源隔离策略该如何选择?》具体使用哪种策略,需根据业务场景综合评估。一般情况下,推荐使用线程池隔离。尽但是实战中对于Hystrix熔断器需要还需要注意哪些点呢?二、Hystrix 实战经验分享在线程池隔离策略下,线程池大小及超时时间的设置至关重要..
2021-11-04 10:24:27
409
1
原创 微服务架构 | Hystrix的资源隔离策略该如何选择?
导读:Hystrix中文含义是豪猪,因其背上长满棘刺,从而拥有了自我保护的能力。是Netlifx开源的一款容错框架,防雪崩利器,具备服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard)等功能。一、背景Hystrix是Netlifx开源的一款容错框架,防雪崩利器,具备服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard)等功能。尽管说Hystrix官方已不再维护,且有Alibaba Sentinel等新框架选择,但从组件成熟度和应用案例等方面看,其实还.
2021-10-09 10:49:08
801
1
原创 Spring Boot集成Swagger2构建强大的RESTful API文档
导读:Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API。而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端。本文将介绍RESTful API的重.
2021-09-30 13:36:40
289
原创 SpringCloud 跨域资源共享(cors)到底解决了什么?
跨域资源共享(cors)可以放宽浏览器的同源策略,可以通过浏览器让不同的网站和不同的服务器之间通信。同源策略同源策略在浏览器安全中是一种非常重要的概念,大量的客户端脚本支持同源策略,比如JavaScript。同源策略允许运行在页面的脚本可以无限制的访问同一个网站(同源)中其他脚本的任何方法和属性。当不同网站页面(非同源)的脚本试图去互相访问的时候,大多数的方法和属性都是被禁止的。这个机制对于现代web应用是非常重要的,因为他们广泛的依赖http cookie来维护用户权限,服务器端会根.
2021-09-20 14:10:18
381
原创 微服务的架构下,如何根据业务抽象出适合自己系统的组件?
导读:基础SpringBoot/SpringCloud微服务的架构下,我们或多或少会根据业务抽象出适合自己系统的组件或SDK,来应对对内、对外的拓展。在SpringBoot/SpringCloud先前介绍了一些,如:@Conditional 来指定指定条件的时候才将某个 bean 加载到应用上下文中。 @FunctionalInterface 函数式接口申明 @JsonTypeInfo 在Java类继承的情况下如何实现父类及子类的JSON序列化与反序列化。等等其他的注解标识,极大简化了...
2021-09-01 14:14:35
499
2
原创 Spring Cloud中如何保证各个微服务之间调用的安全性?
导读:在微服务的架构下,系统会根据业务拆分为多个服务,各自负责单一的职责,在这样的架构下,我们需要确保各api的安全性,也就是说服务不是开放的,而是需要授权才可访问的,避免接口被不合法的请求所访问。但是在在微服务集群中服务之间暴力的接口,或者对于第三方开放的接口如果不做及安全和认证,后果可想而知。阅读下文之前思考几个问题:如何在restTemplate远程调用请求增加添加统一认证? 服务认证如何规范加密和解密? 远程调用统一什么协议比较合适?如下图,三个服务注册到同一个注册中心.
2021-08-19 15:53:43
5277
22
原创 ☕️【系统设计】如何设计出优雅且实用的 API 接口
记得最开始的时候在设计接口的时候规范还没有那么多,因为前后端还没分离。不管是前端还是后端都是一个人开发,为了追求"效率"。所谓的接口规范百花齐放,各有各自的一套。后来前后端分离,哪些为了追求"效率"而写的代码,重构起来的代码也是头疼。所以到了现在已经基本固定基本的机构体系,针对业务得不同还可以垂直拓展。如何构建这几个部分每个公司要求都不同,没有什么“一定是最好的”标准,但一个优秀的后端接口和一个糟糕的后端接口对比起来差异还是蛮大的,其中最重要的关键点就是看是否规范!在设计接口时,有很多因素要考虑
2021-08-02 11:14:01
726
1
原创 对象在内存中的内存布局是什么样的?
一个Java对象的存储结构。在Hotspot虚拟机中,对象在内存中的存储布局分为 3 块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)Java 对象实例Hotspt 采用了 OOP-Klass 模型。 它是描述 java 对象实例的模型,可分为两部分:OOP (Ordinary Object Pointer)指的是普通对象指针,它包含 MarkWord 和Klass 指针。MarkWord 用于存储当前对象运行时的一些状态数据;Klass 指针则
2021-07-26 13:30:54
301
原创 稍等,我手机帮你远程调试下代码!
Teamviewer目前市面上远程办公软件各式各样,但是Teamviewer可能是陪伴我们最早的远程办公软件了,最开始实习想查看公司电脑的备份资料、代码等一些加密文件(公司统一配置电脑并且加密处理)。Teamviewer 确实陪伴了我一段很长的时间。到了后来用Teamviewer主要是为了解决线上问题,因为阿里云线上服务器设置的白名单只有公司那几个,所以!最痛苦的莫过于,明明知道问题出在那里!却没有无服务的登录权限。只能跑到公司去解决,后来同意安装了Teamviewer,周六日就开始慢慢解放,当然就
2021-07-19 10:45:05
2058
14
原创 架构上如何设计领域模型和数据模型?
依稀记得我第一次设计一个系统的时候,画了一堆UML(Unified Modeling Language,统一建模语言)图,面对Class Diagram(其实就是领域模型),纠结了好久,不知道如何落地。因为,如果按照这个类图去落数据库的话,看起来很奇怪,有点繁琐。可是不按照这个类图落库的话,又不知道这个类图画了有什么用。扪心自问,你有多久没有画数据模型和领域模型了?现在回想起来,我当时的纠结源自于我对领域模型和数据模型这两个重要概念的不清楚,先前看过DDD(领域驱动设计),里面一句话我觉得讲的很不错
2021-07-16 09:42:13
835
3
原创 记一次线上OOM问题分析与解决,涨知识了!
导读:以前写过几篇篇关于线上服务器cpu 100%了,该如何排查问题?一些粉丝私信说能不能结合案例来讲解。大好的周日被钉钉消息疯狂@,然后钉钉电话就开始轰炸,同事开发的一程序爆出内存溢出,压测环境居然被通过了,然后就是大型救火现场。我将线上的dump文件和核心的错误日志整理出来,这是问题的复盘总结分享。查看日志看到这个报错java.lang.OutOfMemoryError我相信很多人都会先拷贝谷歌一下,但是真的没用必要!开发这么久或多或少见过不少这种错误。内存溢出~这里
2021-07-07 11:29:54
487
原创 线上服务器cpu 100%了,该如何排查问题?
cpu使用率是如何统计出来的?这里的cpu使用率与linux 命令top-H-p<pid> 的线程%CPU类似,一段采样间隔时间内,当前JVM里各个线程的增量cpu时间与采样间隔时间的比例。工作原理说明:首先第一次采样,获取所有线程的CPU时间(调用的是java.lang.management.ThreadMXBean#getThreadCpuTime()及sun.management.HotspotThreadMBean.getInternalThreadCpuTimes().
2021-06-16 16:12:39
1764
8
原创 阿里人都在使用的在线诊断工具—Arthas
导读:虽然已经有很多分析工具 jvisualvm,jstat,jmap,jstack,Memory Analyzer等。但可能不是大杂烩,或者线上无法分析等。所以看看arthas的功能,好用就用它了
2021-06-13 09:54:01
572
4
原创 阿里巴巴为什么不建议直接使用Async注解?
导读:对于异步方法调用,从Spring3开始提供了@Async注解,该注解可以被标在方法上,以便异步地调用该方法。调用者将在调用时立即返回,方法的实际执行将提交给Spring TaskExecutor的任务中,由指定的线程池中的线程执行。...
2021-06-08 16:25:59
298
原创 深入源码,CompletableFuture 简单与链式的区别?
导读:从 JDK 8 开始,在 Concurrent 包中提供了一个强大的异步编程工具 CompletableFuture。在 JDK8 之前,异步编程可以通过线程池和 Future 来实现,但功能还不够强大。CompletableFuture 的出现,使 Java 的异编程能力向前迈进了一大步。在探讨 CompletableFuture 的原理之前,先详细看一下 CompletableFuture 的用法,从这些用法中,可以看到相较之前的 Future 有哪些能力得到了提升。提交给 Complet.
2021-05-27 18:23:39
1193
8
原创 如何快速定位当前数据库消耗CPU最高的SQL语句?
这里用一个简单例子说明下,主要是了解如何定位的思路,具体看官网介绍:参考:https://www.percona.com/blog/2020/04/23/a-simple-approach-to-troubleshooting-high-cpu-in-mysql/主要意思是针对定位CPU的问题,Percona增加了对通过信息的TID列将processlist ID映射到OS线程ID的支持,而MySQL在5.7版本后在PERFORMANCE_SCHEMA.THREADS表加了一个THREAD_OS
2021-05-15 15:23:36
180
原创 ThreadLocal的Entry为什么要继承WeakReference?
导读:ThreadLocal的Entry为什么要继承WeakReference?弱引用GC的时候会回收?那么回收了,数据不会丢失吗?首先得看一眼WeakReference的代码,它继承自Reference,这里有个get()方法,代码如下:注意这一句:If this reference object has been cleared, either by the program or by the garbage collector, then this method r..
2021-05-14 10:48:22
911
2
原创 Kafka 2.8.0 正式发布,增加了哪些新特性?
导读:目前 Kafka 已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。目前越来越多的开源分布式处理系统如 Cloudera、Storm、Spark、Flink 等都支持与 Kafka 集成。2021年4月19日,Kafka官方发布了2.8.0版本,包含了很多新特性!其中,我觉得最感兴趣的是提到的第一条特性-Kafka用自管理的Quorum代替ZooKeeper管理元数据。之前Kafka使用ZooKeeper来存储有关分区和代理的元数.
2021-05-02 15:41:55
3322
7
原创 如何规范你的Git commit?
导读:commit message应该如何写才更清晰明了?团队开发中有没有遇到过让人头疼的git commit?本文分享在git commit规范建设上的实践,规定了commit message的格式,并通过webhook在提交时进行监控,避免不规范的代码提交。背景Git每次提交代码都需要写commit message,否则就不允许提交。一般来说,commit message应该清晰明了,说明本次提交的目的,具体做了什么操作……但是在日常开发中,大家的commit message千奇百怪,中...
2021-04-23 20:42:03
661
8
原创 MySQL 表列数和行大小有哪些限制?
列数限制MySQL对每个表有4096列的硬限制,但是对于给定的表,有效最大值可能会更少。确切的列限制取决于几个因素:表的最大行大小限制了列的数量(可能还有大小),因为所有列的总长度不能超过该大小 个列的存储要求限制了给定最大行大小内的列数。某些数据类型的存储要求取决于存储引擎,存储格式和字符集等因素 存储引擎可能会施加其他限制表列计数的限制。例如, InnoDB每个表的限制为1017列 功能键部分被实现为隐藏的虚拟生成的存储列,因此表索引中的每个功能键部分都计入表的总列数限制。行大小限制
2021-04-20 16:39:42
3256
原创 Spring条件注解@Conditional,SpringBoot中组合条件你知道吗?
导读:当我们构建一个 Spring 应用的时候,有时我们想在满足指定条件的时候才将某个 bean 加载到应用上下文中, Spring 4提供了一个更通用的基于条件的Bean的创建方式,即使用@Conditional注解,我们可以通过 @Conditional 注解来实现这类操作。@Conditional 元注解源码Conditional 接口源码我们看到 @Conditional 注解接收的参数是 extends Condition 接口的泛型类,也就是说,我们要使用 @Condit.
2021-04-15 10:17:03
233
原创 BigDecimal一定不会丢失精度吗?
导读:我们基本已经形成了常识,需要用到金钱的地方要用BigDecimal而不是其他,而我们也都知道浮点型变量在进行计算的时候会出现丢失精度的问题。那么,你知道其实BigDecimal也会丢失精度吗?而使用BigDecimal的背后又有什么值得去探究的地方吗?今天,告诉你,知其然,也知其所以然。如下一段代码:输出:可以看到在Java中进行浮点数运算的时候,会出现丢失精度的问题。那么我们如果在进行商品价格计算的时候,就会出现问题。很有可能造成我们手中有0.06元,却无法购买..
2021-04-13 10:42:25
575
1
原创 MySQL什么时候才考虑分表分库?
前面写过一篇文章介绍分库分表会带来哪些棘手问题?但是如果在我们业务遇到瓶颈时候还是会采用分表分库的方案。1. 什么时候考虑切分?1.1 能不切分尽量不要切分并不是所有表都需要进行切分,主要还是看数据的增长速度。切分后会在某种程度上提升业务的复杂度,数据库除了承载数据的存储和查询外,协助业务更好的实现需求也是其重要工作之一。不到万不得已不用轻易使用分库分表这个大招,避免"过度设计"和"过早优化"。分库分表之前,不要为分而分,先尽力去做力所能及的事情,例如:升级硬件、升级网络、读写分离、索引优化
2021-03-19 13:27:19
1124
2
转载 重磅:Java 16 正式发布了!
2020 年是值得纪念的一年,这一年中我们庆祝了 Java 的 25 岁生日。经过二十多年的持续创新,Java 一直在: 通过适应不断变化的技术格局来保持灵活性,同时维持平台独立性。 通过保持向后兼容性来保证可靠性。 在不牺牲安全性的前提下加速创新来保持优势。 Java 凭借自身不断提高平台性能、稳定性和安全性的能力,一直是开发人员中最流行的编程语言。IDC 的最新报告“Java Turns 25”显示,超过 900 万名开发人员(全球专职开发人员中的 69%)在使用 Java
2021-03-18 10:18:42
978
2
原创 MySQL要分表分库怎么进行数据切分?
数据库分布式核心内容无非就是数据切分(Sharding)以及切分后对数据的定位、整合。数据切分就是将数据分散存储到多个数据库中,使得单一数据库中的数据量变小,通过扩充主机的数量缓解单一数据库的性能问题,从而达到提升数据库操作性能的目的。数据切分根据其切分类型,可以分为两种方式:垂直(纵向)切分和水平(横向)切分。1.垂直(纵向)切分垂直切分常见有垂直分库和垂直分表两种。1.1 垂直分库就是根据业务耦合性,将关联度低的不同表存储在不同的数据库。做法与大系统拆分为多个小系统类似,按业务分类进行.
2021-03-16 16:01:42
256
2
原创 为什么ConcurrentHashMap的读操作不需要加锁?
ConcurrentHashmap在jdk1.7中是采用Segment + HashEntry + ReentrantLock的方式进行实现的,而1.8中放弃了Segment臃肿的设计,取而代之的是采用Node + CAS + Synchronized来保证并发安全进行实现 JDK1.8的实现降低锁的粒度,JDK1.7版本锁的粒度是基于Segment的,包含多个HashEntry,而JDK1.8锁的粒度就是HashEntry(首节点) JDK1.8版本的数据结构变得更加简单,使得操作也更加清
2021-03-11 13:34:54
353
原创 mac下chrome快捷键大全
1. 标签页和窗口快捷键⌘-N 打开新窗口。 ⌘-T 打开新标签页。 ⌘-Shift-N 在隐身模式下打开新窗口。 按⌘-O,然后选择文件。 在 Chrome 浏览器中打开计算机中的文件。 按住⌘的同时点击链接。或用鼠标中键(或鼠标滚轮)点击链接。 从后台在新标签页中打开链接。 按住⌘-Shift的同时点击链接。或按住Shift键的同时用鼠标中键(或鼠标滚轮)点击链接。 在新标签页中打开链接并切换到刚打开的标签页。 按住Shif...
2021-03-10 13:34:39
1172
原创 Kafka 架构中 ZooKeeper 以怎样的形式存在?
在基于 Kafka 的分布式消息队列中,ZooKeeper 的作用有 Broker 注册、Topic 注册、Producer 和 Consumer 负载均衡、维护 Partition 与 Consumer 的关系、记录消息消费的进度以及 Consumer 注册等。1.Broker 在 ZooKeeper 中的注册为了便于大家理解,我首先解释下“注册”一词。ZooKeeper 是一个共享配置中心,我们可以将一些信息存放入其中,比如 Broker 信息,本质上就是存放一个文件目录。这个配置中心是共享的,
2021-03-08 16:38:52
1601
3
原创 Kafka 中所谓的 ‘零拷贝’ 技术到底是什么?
文章收录地址:Java-Bang专注于系统架构、高可用、高性能、高并发类技术分享除了消息顺序追加、页缓存等技术,Kafka 还使用零拷贝技术来进一步提升性能。所谓的零拷贝是指将数据直接从磁盘文件复制到网卡设备中,而不需要经由应用程序之手。零拷贝大大提高了应用程序的性能,减少了内核和用户模式之间的上下文切换。对 Linux 操作系统而言,零拷贝技术依赖于底层的 sendfile() 方法实现。对应于 Java 语言,FileChannal.transferTo() 方法的底层实现就是 sendfi.
2021-02-26 17:36:29
2942
4
原创 Kafka 是怎么存储的?为什么速度那么快?
文章收录地址:Java-Bang专注于系统架构、高可用、高性能、高并发类技术分享Kafka 依赖于文件系统(更底层地来说就是磁盘)来存储和缓存消息。在我们的印象中,对于各个存储介质的速度认知大体同下图所示的相同,层级越高代表速度越快。很显然,磁盘处于一个比较尴尬的位置,这不禁让我们怀疑 Kafka 采用这种持久化形式能否提供有竞争力的性能。在传统的消息中间件 RabbitMQ 中,就使用内存作为默认的存储介质,而磁盘作为备选介质,以此实现高吞吐和低延迟的特性。然而,事实上磁盘可以比我们预想的要快.
2021-02-24 13:37:20
1165
7
原创 深入理解Java虚拟机是怎么实现synchronized的?
文章收录地址:Java-Bang专注于系统架构、高可用、高性能、高并发类技术分享在 Java 程序中,我们可以利用 synchronized 关键字来对程序进行加锁。它既可以用来声明一个 synchronized 代码块,也可以直接标记静态方法或者实例方法。当声明 synchronized 代码块时,编译而成的字节码将包含 monitorenter 和 monitorexit 指令。这两种指令均会消耗操作数栈上的一个引用类型的元素(也就是 synchronized 关键字括号里的引用),作为.
2021-02-23 09:55:36
167
2
原创 聊一聊Java垃圾回收与卡表技术
文章收录地址:Java-Bang专注于系统架构、高可用、高性能、高并发类技术分享在读博士的时候,我曾经写过一个统计 Java 对象生命周期的动态分析,并且用它来跑了一些基准测试。其中一些程序的结果,恰好验证了许多研究人员的假设,即大部分的 Java 对象只存活一小段时间,而存活下来的小部分 Java 对象则会存活很长一段时间。(pmd 中 Java 对象生命周期的直方图,红色的表示被逃逸分析优化掉的对象)之所以要提到这个假设,是因为它造就了 Java 虚拟机的分代回收思想。简单来说,就.
2021-02-21 12:47:23
1183
4
微信小程序源码.zip
2020-08-13
ELK(ElasticSearch, Logstash, Kibana)
2018-01-10
kafka_2.10-0.8.2.0
2018-01-02
Advanced Rest Client 4.0
2016-06-13
Java源码 SpringMVC Mybatis Shiro Bootstrap Rest Webservice
2016-06-07
Linux系统 安装Nginx 所需包
2016-01-20
阿里巴巴-Java开发手册(嵩山版) .pdf
2021-03-11
阿里巴巴-Java 开发手册(泰山版).pdf
2021-03-11
Java 开发手册-华山版(阿里).pdf
2021-03-09
IntelliJ Idea for Mac 默认快捷键布局中文版
2020-11-03
微信小程序源码-合集4.rar
2020-09-04
算法图解(高清版).rar
2019-07-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人