- 博客(123)
- 资源 (2)
- 收藏
- 关注

原创 【持续更新】别人总结好的图图图图
Java线程状态转换线程池执行SynchronizedJVM 创建对象Java 锁的8个原子操作HTTPS 加密、解密、验证及数据传输过程OKHTTP类加载传统IO系统迭代
2022-01-28 14:26:51
615

原创 陆奇——百度内部Engineering Leadership Talk
起因很早的一篇文章了,是我来北京时候(大概在17年)看到的。过了这么久,重新看看这篇文章对自己还是有很大益处的Believe in 技术首先要相信技术,我刚才已经讲了,整个我们工业界,特别是像百度这样的公司,对技术坚定的、不动摇的信念特别重要我也分享一下,盖茨提到微软公司的宗旨就是:写软件代表的是世界的将来为什么?未来任何一个工业都会变成软件工业。盖茨是对的,因为任何工业任何行业自动化的程度会越来越高,最后你所处理的就是信息和知识但现在软件的做法又往前提了一次,因为在人工智能时代,不光是写代码,
2021-02-19 10:28:10
209
原创 【工作笔记】Lombok版本变化导致的反序列化异常
而我们的这些是通过 Lombok 注解实现的,巧的是,Lombok 的版本也升级了…**【好的点】**这次处理问题的思路挺好,没有使用自己丰富的想象力天马行空一同胡思乱想,而是一直专注在:(1)问题是什么,(2)是什么变化导致这个问题,这两个点上。**【坏的点】**处理旧系统之前,虽然没那么多时间完全了解旧系统,但既然要删除三方不安全的依赖,就该提前排查和记录现有的依赖都是什么版本,方便后续的问题追踪。那就是这里了,错不了,依赖的版本变化导致反序列化出现问题了。抓耳挠腮,苦思冥想…测了下,嗯,问题解决…
2024-12-10 10:30:42
1170
转载 【巨人的肩膀】一文搞懂Base64编码原理
Base64是最常见的用于传输8Bit字节码的编码方式之一,它是一种基于64个可打印字符来表示二进制数据的方法。
2024-11-15 11:38:21
191
1
转载 【巨人的肩膀】我在系统设计上犯过的14个错
服务发布方经常会碰到一个问题,就是一个服务里的某些方法是比较耗资源的,另外的一些可能是不太耗资源,但对业务非常重要的方法,有些场景下会出现由于耗资源的方法被请求的多了些导致不太耗资源的方法受影响,这种场景下如果要去拆成多个服务,会导致开发阶段还是挺痛苦的,因此服务框架这边决定提供一个按方法做七层路由的功能,服务的发布方可以在一个地方编写一个规则文件,这个规则文件允许按照方法将生产环境的机器划分为不同组,这样当服务调用方调用时就可以做到不同方法调用到不同的机器。
2024-11-15 10:51:18
36
转载 【巨人的肩膀】如何避免成为井底之蛙
最简单的方法是通过对应的领域的顶级学术大会的论文来了解情况,例如像操作系统领域顶尖的OSDi/SOSP这种(怎么知道领域对应的顶级学术大会,充分借助google),通过翻翻这些顶级大会上的论文,可以很好的了解这个领域学术界在探索的前沿都是什么,同时也可以通过论文的作者来看看是哪些大学的哪些教授在研究这个领域,如果你对论文能有所观点,又或者你所在的公司所在做的项目有学术合作的诉求,那就更好了,那样可以直接和论文的作者们做些交流探讨,就会更加清楚情况。
2024-11-15 10:50:34
32
转载 【巨人的肩膀】系统设计的一个思考框架
系统设计的第一步,就是分析清楚系统建设的目的。作为系统设计的第一步,重要性毋庸置疑,如果连系统建设的目的都没搞清楚,后面所有的步骤都会错误,但如果我们去看很多的系统设计,会发现压根就没有系统建设的目的的仔细分析。当需要做系统设计时,意味着需要建设一套新系统,或者对原有的系统进行比较大的架构的改造升级,而这一定是因为什么原因才要去做的,之所以要分析好系统建设的目的,一方面是为了避免出发点有问题,系统建设的目的应该是充分反映出解决业务层面临的挑战,或者系统用户层面面临的问题的,而不是出于个人诉求,另一方面是为了
2024-11-15 08:52:55
112
转载 【巨人的肩膀】华为二面:什么是零拷贝技术?mmap和sendfile如何实现零拷贝,它们是否真正实现了零拷贝?
说到零拷贝,首先需要介绍一下传统的IO拷贝是怎么样执行的。以下是对该流程的详细阐述:传统的IO拷贝执行流程主要涉及用户空间、内核空间以及硬件之间的数据交互。在这个过程中,数据通常需要从硬盘(或其他存储设备)读取到内核缓冲区,然后再复制到用户缓冲区,最后根据需要将数据发送到网络或其他外部设备。当用户进程需要读取文件时,它会通过系统调用(如read())向操作系统发起读请求。此时,用户进程的上下文从用户态切换到内核态。
2024-11-12 14:25:44
140
转载 【巨人的肩膀】BIO、NIO、AIO 详解!
I/O 描述了计算机系统与外部设备(磁盘)之间通信的过程。为了保证操作系统的稳定性和安全性,一个进程的地址空间划分为用户空间(User space)和内核空间(Kernel space )。用户进程(应用程序)想要执行 IO 操作的话,必须通过 系统调用 来间接访问内核空间。内核等待 I/O 设备准备好数据——阶段①内核将数据从内核空间拷贝到用户空间——阶段②。
2024-11-12 10:27:50
57
转载 【巨人的肩膀】三万字,提炼出 Spring 的 9 个核心功能
本节主要讲了实现 IOC 的几个核心的组件BeanDefinitionReader 和 ClassPathBeanDefinitionScanner:读取资源,生成 BeanDefinitionBeanDefinitionRegistry:存储 BeanDefinitionDefaultListableBeanFactory:IOC 容器,同时实现了 BeanDefinitionRegistry 接口。
2024-05-14 10:55:40
77
原创 IT界常说的六大名言
Stay hungry, stay foolish.You build it, you run it.Talk is cheap. Show me the code.Go big or go home.Done is better than perfect.Eat our own dog food.
2024-05-11 10:50:53
271
转载 【巨人的肩膀】MongoDB常用28条查询语句
默认每页显示 20 条记录,当显示不下的情况下,可以用 it 迭代命令查询下一页数据。注意:键入 it 命令不能带 “;当然 name 也可以用 true 或 false,当用 ture 的情况下和 name:1 效果一样,如果用 false 就是排除 name,显示 name 以外的列信息。skip(), limilt(), sort() 三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()注意多条件间用中括号 [] 包围。
2023-05-06 11:37:03
583
原创 【工作笔记】Http响应头过长
突然有测试小伙伴反馈进公司官网主页会白屏,但只是个例不是普遍现象查监控发现没监控到异常问题查了很久(这个很久单指对于线上问题来说)才定位是请求的异常,因为这套系统的异常用的是 @ExceptionHandler,这也导致问题排查多绕了不少圈子第一次修复不就是响应头嘛,先紧急修复下,直接无限大,再说。。。第二次修复改完紧急发布发现没生效。。。不用说肯定掉坑里了。。。看看代码才发现,-1 这个无限大是 tomcat 的玩法,我 Spring 可不惯着你Spring 底层是根据是不是为 0 做更新的
2023-02-27 16:06:19
789
原创 【操作系统】死锁的四个必要条件
存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被链中下一个进程所请求。, n-1),Pn等待的资源被P0占有,如图2-15所示。因此,虽然Pn、P0和其他 一些进程形成了循环等待圈,但PK不在圈内,若PK释放了输出设备,则可打破循环等待, 如图2-16所示。进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放(只能是主动释放)
2023-01-24 15:20:50
329
原创 【读书笔记】重构 改善既有代码的设计
重构(refactoring)是这样一个过程:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构
2022-05-31 22:15:55
578
原创 【工作笔记】supervisord.d 中 ‘%t‘ 问题
起因最近新项目上线,通过监控服务发现线上频繁出现 Full GC 情况。于是找运维同学下载 GC 日志。拿来日志才发现 GC 日志只保留了最新启动后的日志从一个 bug 展开无数个 bug 的套路。。。一番探究,新项目通过 supervisor 启动。项目启动命令配置在 supervisord.d 目录下。而 supervisord.d 启动是使用 python 执行的。python 不支持 -Xloggc:/alidata1/admin/logs/hqins-iboss-extracter/hqi
2022-04-18 14:49:17
1044
1
转载 【巨人的肩膀】如何判断单向链表有环
前言链表在开发过程中属于出现频次十分高的一种数据结构,在 java 中,比如我们熟知的 LinkedList、HashMap 底层结构、LinkedHashMap、AQS 等都使用到了链表关于单向链表有几个经典问题如何判断链表有环如果有环,找出入环的节点环的长度是多少问题一:如何判断单向链表有环?首先我们来画一个普通的单向链表和环状链表的结构图可以看出在环形单向链表的 EFGH 形成了一个环状,那么如何用程序判断它成环呢?这里要借助一个跑道的思想:假如有一个环形的跑道,跑道上有两个人
2022-02-06 15:04:22
178
转载 【巨人的肩膀】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
205
转载 【巨人的肩膀】AbstractQueuedSynchronizer框架源码剖析
1 拜神Java.util.concurrent 包都是 Doug Lea 写的,来混个眼熟是的,就是他,提出了 JSR166(Java Specification RequestsJava 规范提案),该规范的核心就是 AbstractQueuedSynchronizer 同步器框架(AQS)。这个框架为构造同步器提供一种通用的机制,并且被 j.u.c 包中大部分类使用包结构如下图,其中 AbstractOwnableSynchronizer 是其父类,而 AbstractQueuedLongSy
2022-02-06 02:38:17
207
转载 【巨人的肩膀】Spring事务详解
引子很多 coder 在不理解事务的原理甚至连基本概念都不清楚的情况下,就去使用数据库事务,是极容易出错,写出一些自己不能掌控的代码。网上很多文章要不就是概念,或者一点源码,或者一点测试验证,都不足以全面了解事务,所以本文出现了全文基于 Mysql innodb 引擎。Mysql 官方文档 ,推荐书籍:《Mysql技术内幕-InnoDB存储引擎》1. 拜神Spring 事务领头人叫 Juergen Hoeller,于尔根·糊了…先混个脸熟哈,他写了几乎全部的 spring 事务代码。读源码先拜神,掌
2022-02-03 16:05:24
1348
转载 【巨人的肩膀】 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
293
转载 【巨人的肩膀】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
312
转载 【巨人的肩膀】DDD领域驱动设计落地实践
引子不知今年吹了什么风,忽然 DDD 领域驱动设计进入大家视野。该思想源于 2003 年 Eric Evans 编写的 “Domain-Driven Design领域驱动设计” 简称 DDD,Evans DDD 是一套综合软件系统分析和设计的面向对象建模方法。刚好公司领导强力推荐这个,抱着学习的心态,耗时 5 个月,体验了一把:“DDD从入门到弃坑”思想学习网站服务器后端发展三个阶段服务器后端发展三个阶段:面向过程脚本:初始简单,业务复杂后,维护难度指数上升。–>基本不为主流使用面向
2022-02-01 11:07:17
599
转载 【巨人的肩膀】阿里技术专家详解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
1857
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
360
转载 【巨人的肩膀】Spring 事务失效的 8 大场景
用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景不知道小伙伴们有没有这样的经历,在自己开心的编写业务代码时候,突然某一个方法里的事务好像失效了。然后 debug 跟踪代码时发现,自己第一步的 insert 或者 update 的数据在语句执行完毕后,数据库中并没有立即出现更改或保存完的新数据。所以一度怀疑 spring 的事务失效了。那么这篇文章就来总结一下,大家给大家造成 “spring事务失效”错觉的 几个常见场景,然后对症下药以本人的经历中遇到的问题,大概分有以下
2022-01-23 12:24:05
122
转载 【巨人的肩膀】工作中常用到哪些设计模式
前言平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了。如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己的业务代码。今天跟大家聊聊日常工作中,我都使用过哪些设计模式策略模式业务场景假设有这样的业务场景,大数据系统把文件推送过来,根据不同类型采取不同的解析方式。多数的小伙伴就会写出以下的代码if(type=="A"){ //按照A格式解析 }else if(type=="B"){ //按B格式解析}else{ //按照默认格式解
2022-01-22 22:42:01
138
转载 【巨人的肩膀】CDN是什么?使用CDN有什么优势?
起因在知乎看到的问答,下边的淘系的回答阿里巴巴淘系技术的答案淘宝的图片访问,有 98% 的流量都走了 CDN 缓存。只有 2% 会回源到源站,节省了大量的服务器资源但是,如果在用户访问高峰期,图片内容大批量发生变化,大量用户的访问就会穿透 cdn,对源站造成巨大的压力CDN工作原理内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络CDN 应用广泛,支持多种行业、多种场景内容加速,例如:图片小文
2022-01-13 07:52:42
295
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人