巨人的肩膀
文章平均质量分 88
转载
我永远吹着泡泡
这个作者很懒,什么都没留下…
展开
-
【巨人的肩膀】谈谈技术能力+技术架构的设计方法
浅谈技术能力转载 2022-07-03 17:36:50 · 594 阅读 · 0 评论 -
【巨人的肩膀】通透~~ThreadLocal夺命11连问
ThreadLocal转载 2022-06-27 17:50:20 · 95 阅读 · 0 评论 -
【巨人的肩膀】缓存和数据库一致性问题,看这篇就够了
缓存一致性转载 2022-06-24 14:07:30 · 138 阅读 · 0 评论 -
【巨人的肩膀】后端思维之数据库性能优化方案
数据库转载 2022-06-23 15:49:28 · 136 阅读 · 0 评论 -
【巨人的肩膀】如何判断单向链表有环
前言链表在开发过程中属于出现频次十分高的一种数据结构,在 java 中,比如我们熟知的 LinkedList、HashMap 底层结构、LinkedHashMap、AQS 等都使用到了链表关于单向链表有几个经典问题如何判断链表有环如果有环,找出入环的节点环的长度是多少问题一:如何判断单向链表有环?首先我们来画一个普通的单向链表和环状链表的结构图可以看出在环形单向链表的 EFGH 形成了一个环状,那么如何用程序判断它成环呢?这里要借助一个跑道的思想:假如有一个环形的跑道,跑道上有两个人转载 2022-02-06 15:04:22 · 150 阅读 · 0 评论 -
【巨人的肩膀】Spring bean生命周期验证
BeanFactory接口尊重源码,以下摘自 BeanFactory 源码注释翻译:BeanFactory 是获取 spring bean 容器的顶级接口。该接口被持有一系列 bean definitions 的对象所实现。依赖 bean definitions,工厂返回一个原型实例或者一个单例实例通常,BeanFactory 将加载存储在配置中的 bean definitions 资源(例如XML文档)。这些定义没有限制何种方式存储:LDAP, RDBMS, XML,properties file等转载 2022-02-06 14:05:16 · 177 阅读 · 0 评论 -
【巨人的肩膀】Spring事务详解
引子很多 coder 在不理解事务的原理甚至连基本概念都不清楚的情况下,就去使用数据库事务,是极容易出错,写出一些自己不能掌控的代码。网上很多文章要不就是概念,或者一点源码,或者一点测试验证,都不足以全面了解事务,所以本文出现了全文基于 Mysql innodb 引擎。Mysql 官方文档 ,推荐书籍:《Mysql技术内幕-InnoDB存储引擎》1. 拜神Spring 事务领头人叫 Juergen Hoeller,于尔根·糊了…先混个脸熟哈,他写了几乎全部的 spring 事务代码。读源码先拜神,掌转载 2022-02-03 16:05:24 · 1222 阅读 · 0 评论 -
【巨人的肩膀】AbstractQueuedSynchronizer框架源码剖析
1 拜神Java.util.concurrent 包都是 Doug Lea 写的,来混个眼熟是的,就是他,提出了 JSR166(Java Specification RequestsJava 规范提案),该规范的核心就是 AbstractQueuedSynchronizer 同步器框架(AQS)。这个框架为构造同步器提供一种通用的机制,并且被 j.u.c 包中大部分类使用包结构如下图,其中 AbstractOwnableSynchronizer 是其父类,而 AbstractQueuedLongSy转载 2022-02-06 02:38:17 · 176 阅读 · 0 评论 -
【巨人的肩膀】 JUC同步器框架
论文简介闲来无事,看看源码,发现了一篇JDK作者的论文《The java.util.concurrent Synchronizer Framework》主要描述了作者对 AbstractQueuedSynchronizer 同步器框架的设计和实现。权威性毋庸置疑!自然需要拜读一下,配上中文翻译,希望大家能有所收获原文链接论文英文版原文链接老李头的主页中文翻译在 J2SE 1.5 的 java.util.concurrent 包(下称j.u.c包)中,大部分的同步器(例如锁,屏障等等)都是基于 A转载 2022-02-01 15:02:33 · 259 阅读 · 0 评论 -
【巨人的肩膀】CQRS架构
命令查询的责任分离 Command Query Responsibility Segregation (简称CQRS)模式是一种架构体系模式,能够使改变模型的状态的命令和模型状态的查询实现分离。这属于DDD应用领域的一个模式,主要解决 DDD 在数据库报表输出上处理方式Greg Young 在 infoQ 的采访中 “State Transitions in Domain-Driven Design” 谈到了 CQRS,Greg 解释了把领域模型分为两种:状态校验,以及状态转换,维持当前状态的一个视图转载 2022-02-01 11:37:10 · 282 阅读 · 0 评论 -
【巨人的肩膀】DDD领域驱动设计落地实践
引子不知今年吹了什么风,忽然 DDD 领域驱动设计进入大家视野。该思想源于 2003 年 Eric Evans 编写的 “Domain-Driven Design领域驱动设计” 简称 DDD,Evans DDD 是一套综合软件系统分析和设计的面向对象建模方法。刚好公司领导强力推荐这个,抱着学习的心态,耗时 5 个月,体验了一把:“DDD从入门到弃坑”思想学习网站服务器后端发展三个阶段服务器后端发展三个阶段:面向过程脚本:初始简单,业务复杂后,维护难度指数上升。–>基本不为主流使用面向转载 2022-02-01 11:07:17 · 532 阅读 · 0 评论 -
【巨人的肩膀】阿里技术专家详解DDD
导读对于一个架构师来说,在软件开发中如何降低系统复杂度是一个永恒的挑战,无论是 94 年 GoF 的 Design Patterns , 99 年的 Martin Fowler 的 Refactoring , 02 年的 P of EAA ,还是 03 年的 Enterprise Integration Patterns ,都是通过一系列的设计模式或范例来降低一些常见的复杂度。但是问题在于,这些书的理念是通过技术手段解决技术问题,但并没有从根本上解决业务的问题。所以 03 年 Eric Evans 的 D转载 2022-01-27 23:40:15 · 1714 阅读 · 1 评论 -
【巨人的肩膀】领域驱动设计(DDD)编码实践
Martin Fowler 在《企业应用架构模式》一书中写道:I found this(business logic) a curious term because there are few things that are less logical than business logic.初略翻译过来可以理解为:业务逻辑是很没有逻辑的逻辑的确,很多时候软件的业务逻辑是无法通过推理而得到的,有时甚至是被臆想出来的。这样的结果使得原本已经很复杂的业务变得更加复杂而难以理解。而在具体编码实现时,除了应付转载 2022-01-24 12:35:17 · 327 阅读 · 0 评论 -
【巨人的肩膀】Spring 事务失效的 8 大场景
用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景不知道小伙伴们有没有这样的经历,在自己开心的编写业务代码时候,突然某一个方法里的事务好像失效了。然后 debug 跟踪代码时发现,自己第一步的 insert 或者 update 的数据在语句执行完毕后,数据库中并没有立即出现更改或保存完的新数据。所以一度怀疑 spring 的事务失效了。那么这篇文章就来总结一下,大家给大家造成 “spring事务失效”错觉的 几个常见场景,然后对症下药以本人的经历中遇到的问题,大概分有以下转载 2022-01-23 12:24:05 · 100 阅读 · 0 评论 -
【巨人的肩膀】工作中常用到哪些设计模式
前言平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了。如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己的业务代码。今天跟大家聊聊日常工作中,我都使用过哪些设计模式策略模式业务场景假设有这样的业务场景,大数据系统把文件推送过来,根据不同类型采取不同的解析方式。多数的小伙伴就会写出以下的代码if(type=="A"){ //按照A格式解析 }else if(type=="B"){ //按B格式解析}else{ //按照默认格式解转载 2022-01-22 22:42:01 · 106 阅读 · 0 评论 -
【巨人的肩膀】CDN是什么?使用CDN有什么优势?
起因在知乎看到的问答,下边的淘系的回答阿里巴巴淘系技术的答案淘宝的图片访问,有 98% 的流量都走了 CDN 缓存。只有 2% 会回源到源站,节省了大量的服务器资源但是,如果在用户访问高峰期,图片内容大批量发生变化,大量用户的访问就会穿透 cdn,对源站造成巨大的压力CDN工作原理内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络CDN 应用广泛,支持多种行业、多种场景内容加速,例如:图片小文转载 2022-01-13 07:52:42 · 257 阅读 · 0 评论 -
【巨人的肩膀】实践出真知:全网最强秒杀系统架构解密
很多小伙伴反馈说,高并发专题学了那么久,但是,在真正做项目时,仍然不知道如何下手处理高并发业务场景!甚至很多小伙伴仍然停留在只是简单的提供接口(CRUD)阶段,不知道学习的并发知识如何运用到实际项目中,就更别提如何构建高并发系统了!究竟什么样的系统算是高并发系统?今天,我们就一起解密高并发业务场景下典型的秒杀系统的架构,结合高并发专题下的其他文章,学以致用电商系统架构在电商领域,存在着典型的秒杀业务场景,那何谓秒杀场景呢。简单的来说就是一件商品的购买人数远远大于这件商品的库存,而且这件商品在很短的时间转载 2022-01-10 21:31:14 · 185 阅读 · 0 评论 -
【巨人的肩膀】LVS+NGINX为什么会被同时使用
最初的理解(也可以每个 nginx 都挂在上所有的应用服务器)nginx 大家都在用,估计也很熟悉了,在做负载均衡时很好用,安装简单、配置简单、相关材料也特别多lvs 是国内的章文嵩博士的大作,比 nginx 被广泛接受还要早7年,并且已经被红帽作为了系统内置软件,可谓很牛了。lvs 相对于 nginx 来说配置上就要相对复杂一些但是,有时候我们会看到大牛们分享的经验里面是 lvs+nginx 作为负载均衡了,一直想不明白这是个什么道理为什么会出现两者被同时使用呢?其实,这要从两者的各自优势来说了转载 2022-01-09 22:28:40 · 277 阅读 · 0 评论 -
【巨人的肩膀】关于 MYSQL 的事务隔离级别
为什么MySQL选择Repeatable Read作为默认隔离级别ANSI/ISO SQL定义的标准隔离级别有四种,从高到底依次为:可序列化(Serializable)、可重复读(Repeatable Reads)、提交读(Read Committed)、未提交读(Read Uncommitted)RU 隔离级别下,可能发生脏读、幻读、不可重复读等问题RC 隔离级别下,解决了脏读的问题,存在幻读、不可重复读的问题RR 隔离级别下,解决了脏读、不可重复读的问题,存在幻读的问题Serializable转载 2022-01-07 13:07:20 · 163 阅读 · 0 评论 -
【巨人的肩膀】进程调度和阻塞
进程调度计算机中有一个设备,叫定时器,准确说叫可编程定时/计数器而这个滴答将会给 CPU 产生一个时钟中断信号而这个中断信号会使 CPU 查找中断向量表,找到操作系统写好的一个时钟中断处理函数 do_timerdo_timer 会首先将当前进程的 counter 变量 -1,如果 counter 此时仍然大于 0,则就此结束但如果 counter = 0 了,就开始进行进程的调度进程调度就是找到所有处于 RUNNABLE 状态的进程,并找到一个 counter 值最大的进程,把它丢进 swit转载 2022-01-06 07:52:07 · 263 阅读 · 0 评论 -
【巨人的肩膀】如果让你来设计网络,你会把它弄成啥样?
起因看完《网络是怎样连接的》之后,再看这篇文章,对书里前两章内容理解的更加深刻清晰了。果然动图大法好~~通信你是一台电脑,你的名字叫 A很久很久之前,你不与任何其他电脑相连接,孤苦伶仃直到有一天,你希望与另一台电脑 B 建立通信,于是你们各开了一个网口,用一根网线连接了起来用一根网线连接起来怎么就能"通信"了呢?我可以给你讲 IO、讲中断、讲缓冲区,但这不是研究网络时该关心的问题如果你纠结,要么去研究一下操作系统是如何处理网络 IO 的,要么去研究一下包是如何被网卡转换成电信号发送出去的,转载 2022-01-06 07:27:33 · 60 阅读 · 0 评论 -
【巨人的肩膀】你管这破玩意叫 IO 多路复用?
为了讲多路复用,当然还是要跟风,采用鞭尸的思路,先讲讲传统的网络 IO 的弊端,用拉踩的方式捧起多路复用 IO 的优势为了方便理解,以下所有代码都是伪代码,知道其表达的意思即可阻塞 IO服务端为了处理客户端的连接和请求的数据,写了如下代码listenfd = socket(); // 打开一个网络通信端口bind(listenfd); // 绑定listen(listenfd); // 监听while(1) { connfd = accept(listenfd)转载 2022-01-05 07:56:45 · 121 阅读 · 0 评论 -
【巨人的肩膀】最多能创建多少个 TCP 连接?
创建 TCP我是一个 Linux 服务器上的进程,名叫小进老是有人说我最多只能创建 65535 个 TCP 连接我不信这个邪,今天我要亲自去实践一下我走到操作系统老大的跟前,说:“老操,我要建立一个 TCP 连接!”老操不慌不忙,拿出一个表格递给我,“小进,先填表吧”我一看这个表,这不就是经典的 socket 四元组嘛。我只有一块网卡,其 IP 地址是 123.126.45.68,我想要与 110.242.68.3 的 80 端口建立一个 TCP 连接,我将这些信息填写在了表中源端口号填什转载 2022-01-05 07:13:08 · 125 阅读 · 0 评论 -
【巨人的肩膀】多个线程顺序打印问题,一网打尽
https://www.cnblogs.com/lazyegg/p/13900847.html大家在换工作面试中,除了一些常规算法题,还会遇到各种需要手写的题目,所以打算总结出来,给大家个参考第一篇打算总结下阿里最喜欢问的多个线程顺序打印问题,我遇到的是机试,直接写出运行。同类型的题目有很多,比如三个线程分别打印 A,B,C,要求这三个线程一起运行,打印 n 次,输出形如“ABCABCABC…”的字符串两个线程交替打印 0~100 的奇偶数通过 N 个线程顺序循环打印从 0 至 100多线程按转载 2021-10-08 20:41:41 · 101 阅读 · 0 评论 -
【巨人的肩膀】-烂大街的 Spring 循环依赖问题,你觉得自己会了吗?
前言循环依赖问题,算是一道烂大街的面试题了,解毒之前,我们先来回顾两个知识点:初学 Spring 的时候,我们就知道 IOC,控制反转么,它将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理,不需要我们手动去各种 new XXX尽管是 Spring 管理,不也得创建对象吗,Java 对象的创建步骤很多,可以 new XXX、序列化、clone() 等等,只是 Spring 是通过反射 + 工厂的方式创建对象并放在容器的,创建好的对象我们一般还会对对象属性进行赋值,才去使用,可以理解是分转载 2021-10-08 20:41:05 · 152 阅读 · 0 评论 -
【巨人的肩膀】何为虚拟化技术
1961 年 IBM709 机实现了分时系统,计算机历史上首个虚拟化技术实现于 1961 年,IBM709 计算机首次将 CPU 占用切分为多个极短 (1/100sec) 时间片,每一个时间片都用来执行着不同的任务。通过对这些时间片的轮询,这样就可以将一个 CPU 虚拟化或者伪装成为多个 CPU,并且让每一颗虚拟 CPU 看起来都是在同时运行的。这就是虚拟机的雏形容器的功能其实和虚拟机类似,无论容器还是虚拟机,其实都是在计算机不同的层面进行虚拟化,即使用逻辑来表示资源,从而摆脱物理限制的约束,提高物理资源转载 2020-08-24 14:42:01 · 143 阅读 · 0 评论 -
【巨人的肩膀】Spring Boot–最佳实践
转载起因本文是我们老大推给我的,原因在于我自己建项目时包结构太混乱了…看这哥们写文章就觉得这哥们代码肯定写得好,你看看文章里各种引用玩的那么666,接口复用、设计模式啥的肯定写得好…下边正文开始!Spring Boot – Best PracticesSpring Boot 是用于开发微服务的最受欢迎的 Java 框架。在本文中,我将与您分享自 2016 年以来在专业开发中使用 Spring Boot 的最佳实践,这些经验基于我的亲身经历和知名的 Spring Boot 专家的著作而定在本文中,我翻译 2020-09-14 19:45:09 · 295 阅读 · 0 评论 -
【巨人的肩膀】Spring Rest 调用的异常处理
概述本文将说明如何对使用 REST API 的 Spring 实现异常处理Spring在不同版本中对异常处理的支持Spring 3.2 之前,在 Spring MVC 应用程序中处理异常的两种主要方法是 HandlerExceptionResolver 或 @ExceptionHandler 注解。两者都有明显的缺点Spring 3.2 开始,增加了 @ControllerAdvice 注解,以解决前两个解决方案的局限性,并在整个应用程序中促进统一的异常处理Spring 5 引入了 Resp翻译 2020-10-23 09:29:06 · 738 阅读 · 0 评论 -
【巨人的肩膀】JAVA对象布局之对象头(Object Header)
#【学习笔记】JAVA对象布局之对象头(Object Header)由于 Java 面向对象的思想,在 JVM 中需要大量存储对象,存储时为了实现一些额外的功能,需要在对象中添加一些标记字段用于增强对象功能 。在学习并发编程知识 synchronized 时,我们总是难以理解其实现原理,因为偏向锁、轻量级锁、重量级锁都涉及到对象头,所以了解 java 对象头是我们深入了解 synchronized 的前提条件,以下我们使用 64 位 JDK 示例对象布局的总体结构获取一个对象布局实例首先在 m转载 2021-02-01 17:09:27 · 212 阅读 · 0 评论 -
【巨人的肩膀】ROBBIN谈领域模型
分类为了补大家的遗憾,在此总结下 robbin 的领域模型的一些观点和大家的补充,在网站和演讲中,robbin 将领域模型初步分为 4 大类:失血模型贫血模型充血模型胀血模型那么让我们看看究竟有这些领域模型的具体内容,以及他们的优缺点失血模型失血模型简单来说,就是 domain object 是只有属性和属性的 getter/setter 方法的纯数据类,所有的业务逻辑完全由 business object 来完成(又称TransactionScript),这种模型下的 domain o转载 2021-09-09 18:08:11 · 174 阅读 · 0 评论 -
【巨人的肩膀】JVM内部细节之一:synchronized关键字及实现细节(轻量级锁Lightweight Locking)
JVM内部细节之一:synchronized关键字及实现细节(轻量级锁Lightweight Locking)在 C 程序代码中我们可以利用操作系统提供的互斥锁来实现同步块的互斥访问及线程的阻塞及唤醒等工作。然而在 Java 中除了提供 Lock API 外还在语法层面上提供了 synchronized 关键字来实现互斥同步原语。那么到底在 JVM 内部是怎么实现 synchronized 关键子的呢?一、synchronized的字节码表示:在 java 语言中存在两种内建的 synchronize转载 2021-09-27 18:21:22 · 123 阅读 · 0 评论 -
【巨人的肩膀】Java OOM 都有哪些
起因今天突然被同事拉去处理 OOM 异常,异常信息如下:OutOfMemoryError: GC Overhead limit exceeded。咱表示这个 OOM 还真没见过,不清楚异常信息在表述什么。再加上不是自己负责的系统,系统出问题之后重启了多次,也没有 GC 日志只能临时方案加 -Xms 和 -Xmx…虽然临时解决了问题,我还是好奇这个问题产生的原因以及 OOM 到底都有哪些…于是乎我又来问我度娘了…Key TakeAways本文基于 Java 15StackOverflowErro转载 2021-03-11 18:00:15 · 183 阅读 · 0 评论