【巨人的肩膀】我在系统设计上犯过的14个错 服务发布方经常会碰到一个问题,就是一个服务里的某些方法是比较耗资源的,另外的一些可能是不太耗资源,但对业务非常重要的方法,有些场景下会出现由于耗资源的方法被请求的多了些导致不太耗资源的方法受影响,这种场景下如果要去拆成多个服务,会导致开发阶段还是挺痛苦的,因此服务框架这边决定提供一个按方法做七层路由的功能,服务的发布方可以在一个地方编写一个规则文件,这个规则文件允许按照方法将生产环境的机器划分为不同组,这样当服务调用方调用时就可以做到不同方法调用到不同的机器。
【巨人的肩膀】如何避免成为井底之蛙 最简单的方法是通过对应的领域的顶级学术大会的论文来了解情况,例如像操作系统领域顶尖的OSDi/SOSP这种(怎么知道领域对应的顶级学术大会,充分借助google),通过翻翻这些顶级大会上的论文,可以很好的了解这个领域学术界在探索的前沿都是什么,同时也可以通过论文的作者来看看是哪些大学的哪些教授在研究这个领域,如果你对论文能有所观点,又或者你所在的公司所在做的项目有学术合作的诉求,那就更好了,那样可以直接和论文的作者们做些交流探讨,就会更加清楚情况。
【巨人的肩膀】系统设计的一个思考框架 系统设计的第一步,就是分析清楚系统建设的目的。作为系统设计的第一步,重要性毋庸置疑,如果连系统建设的目的都没搞清楚,后面所有的步骤都会错误,但如果我们去看很多的系统设计,会发现压根就没有系统建设的目的的仔细分析。当需要做系统设计时,意味着需要建设一套新系统,或者对原有的系统进行比较大的架构的改造升级,而这一定是因为什么原因才要去做的,之所以要分析好系统建设的目的,一方面是为了避免出发点有问题,系统建设的目的应该是充分反映出解决业务层面临的挑战,或者系统用户层面面临的问题的,而不是出于个人诉求,另一方面是为了
【巨人的肩膀】华为二面:什么是零拷贝技术?mmap和sendfile如何实现零拷贝,它们是否真正实现了零拷贝? 说到零拷贝,首先需要介绍一下传统的IO拷贝是怎么样执行的。以下是对该流程的详细阐述:传统的IO拷贝执行流程主要涉及用户空间、内核空间以及硬件之间的数据交互。在这个过程中,数据通常需要从硬盘(或其他存储设备)读取到内核缓冲区,然后再复制到用户缓冲区,最后根据需要将数据发送到网络或其他外部设备。当用户进程需要读取文件时,它会通过系统调用(如read())向操作系统发起读请求。此时,用户进程的上下文从用户态切换到内核态。
【巨人的肩膀】BIO、NIO、AIO 详解! I/O 描述了计算机系统与外部设备(磁盘)之间通信的过程。为了保证操作系统的稳定性和安全性,一个进程的地址空间划分为用户空间(User space)和内核空间(Kernel space )。用户进程(应用程序)想要执行 IO 操作的话,必须通过 系统调用 来间接访问内核空间。内核等待 I/O 设备准备好数据——阶段①内核将数据从内核空间拷贝到用户空间——阶段②。
【巨人的肩膀】三万字,提炼出 Spring 的 9 个核心功能 本节主要讲了实现 IOC 的几个核心的组件BeanDefinitionReader 和 ClassPathBeanDefinitionScanner:读取资源,生成 BeanDefinitionBeanDefinitionRegistry:存储 BeanDefinitionDefaultListableBeanFactory:IOC 容器,同时实现了 BeanDefinitionRegistry 接口。
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.
【巨人的肩膀】MongoDB常用28条查询语句 默认每页显示 20 条记录,当显示不下的情况下,可以用 it 迭代命令查询下一页数据。注意:键入 it 命令不能带 “;当然 name 也可以用 true 或 false,当用 ture 的情况下和 name:1 效果一样,如果用 false 就是排除 name,显示 name 以外的列信息。skip(), limilt(), sort() 三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()注意多条件间用中括号 [] 包围。
【工作笔记】Http响应头过长 突然有测试小伙伴反馈进公司官网主页会白屏,但只是个例不是普遍现象查监控发现没监控到异常问题查了很久(这个很久单指对于线上问题来说)才定位是请求的异常,因为这套系统的异常用的是 @ExceptionHandler,这也导致问题排查多绕了不少圈子第一次修复不就是响应头嘛,先紧急修复下,直接无限大,再说。。。第二次修复改完紧急发布发现没生效。。。不用说肯定掉坑里了。。。看看代码才发现,-1 这个无限大是 tomcat 的玩法,我 Spring 可不惯着你Spring 底层是根据是不是为 0 做更新的
【操作系统】死锁的四个必要条件 存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被链中下一个进程所请求。, n-1),Pn等待的资源被P0占有,如图2-15所示。因此,虽然Pn、P0和其他 一些进程形成了循环等待圈,但PK不在圈内,若PK释放了输出设备,则可打破循环等待, 如图2-16所示。进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放(只能是主动释放)