简单计算机模型MARIE
CPUCPU中的寄存器 保存数据、地址、控制信息 常见:存储信息的寄存器、数值移位的寄存器、数值比较的寄存器、计数寄存器、存储中间结果的寄存器、控制循环的索引寄存器、管理处理堆栈的堆栈指针寄存器、保持各种工作状态和操作模式溢出进位的寄存器、和给程序员使用的通用寄存器。 CPU中的算数逻辑单元ALU 执行逻辑运算和算数运算 通过控制单元发出的信号,ALU可以执行规定的计算 在ALU执行的操作会影响状态寄存器的某些数据位(状态寄存器存放特殊的操作状态,溢出进位借位等等),指示是否有溢出等发生 CPU中的控制单元 取指令:使用程序计数器PC确定要执行哪一条指令 指令译码:确保数据适合时间出现在正确的地方 通知ALU使用哪一个寄存器,执行哪些中断服务程序 总线多条线路组成,允许多位数据并行传递 总线周期:完成总线信息传送所需的时钟脉冲间隔 总线分类有哪些? 按照对象个数分为:点对点和多点总线 按照功能分为:数据总线、控制总线、地址总线、电源线 按照传输的信息种类黑使用的设备不同分为: 处理器内存总线:比较短,告诉总线,通常是专门设计的,最大限度提高带宽 IO总线:允许多种类型的不同...
自定义通用异常处理
生产级别的通用异常处理所有的异常都抛出,统一在表现层处理,其余直接抛出就好。 spring定义的错误响应方式如图所示。 使用Java提供的异常类抛出的时候只可以传递string,所以需要自定义一个异常类,继承RuntimeException,抛出的时候同时包含信息和状态码 新建通用异常处理类相当于aop里面的通知,起到拦截的作用,要做到通用,状态码不可以写死,这里的设计不对,后面会改进 src/main/java/com/deltaqin/common/advice/CommonExceptionHandler.java 12345678910111213141516171819package com.deltaqin.common.advice;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annot...
观察者模式Observer
观察者接口:Observer接口、Listener接口、Hook、Callback 具体观察者:实现Observer接口 事件类 :不仅仅包含时间,事件,还包含事件源。这样观察者拿到事件知道是谁发的才可以做有区别的处理 事件源对象:被观察者Object, 事件源对象,新建事件对象。事件源自己会维护很多监听器。可以调用监听器接口的方法, **事件对象 **穿过 Observer的链条 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485package com.deltaqin.designPattern.d09_observer;import java.util.ArrayList;import java.util.List;/** * @author deltaqin * @date 2021/3/27 12...
计算机系统数据表示
计算机里面的基本单位有哪些? 位:bit,二进制数(binary digit)的英文缩写 字节:Byte,8位 字:计算机的字由两个或多个相邻字节构成,处理器访问和处理的时候是按照字为单位进行,即这些字节被当做一个整体处理。字的大小(Word size)表示特定架构有效处理的数据最大大小,常见大小有16位32位64位。 比如16位可以表示的有符号位的最大整数是32767,32位可以表示的无符号位最大整数4294967295即232即内存大小限制4G,毕竟是要寻址的,再大无法表示地址。 32位操作系统int类型的最大值是 2147483647。 在32位操作系统下int类型取值范围如下: Int32 //等于int, 占4个字节(-2147483648~2147483647) 半字节:8位字节可以对半分为两个4位,称为半字节, 低半字节、高半字节:包含最小值二进制数字的半字节称为低半字节,另外半个字节为高半字节。 按位计数系统是什么?positional numbering systems 数字的值可以通过增加基数(基或底radix)的幂来表示,也叫做...
访问者Visitor
在结构不变的情况下动态改变内部元素的动作 适合用在接口结构基本固定不变的 实现案例123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116package com.deltaqin.designPattern.d04_visitor;// 根据不同的访问者访问的不同商品,给不同的价格// 计算的规则定义在访问者上面,不同访问者对从商品获得的相同的信息实现自己的逻辑// 同一个被访问者传递给不同访问者的消息是一样的。public class Computer { ComputerPart cpu = new CPU(); ComputerPar...
读取了Request输入流,请求数据就不见了
HttpServletRequest 和 HttpServletResponse 中存在方法互斥。 在过滤器、拦截器中对 HTTP 请求中的数据做校验、审计是非常常见的需求 Request 输入流数据一但被读取,Controller找不到了Request 的 getlnputStream 和 getReader 都只能使用一次 请求数据解析工具: 定义拦截器: 发起请求: Request的 getlnputStream、 getReader、 getParameter 方法互斥,也就是使用了其中一个,再使用另外的两个,是获取不到数据的。 Response 也是一样的,与 Request 几乎是一样的 互斥效果的原理: getParameter 内部也会判断: 无法重复读取的原理读取完坐标没有重置: getReader 也是没有重置坐标 HttpServletRequestWrapper + Filter 解决输入流不能重复读取问题其实是包装器模式,实现对请求数据的包装。 自定义请求包装器: 每次获取数据的时候都是重新从数组里面获取 这个方法直接调用上面重写的 g...
计网思维导图总结
计网思维导图总结内容较多,浏览器建议使用大纲查看。 processon
软中断softirq的CPU使用率升高
中断是系统用来响应硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求。中断其实是一种异步的事件处理机制,可以提高系统的并发处理能 力。 由于中断处理程序会打断其他进程的运行,所以,为了减少对正常进程运行调度的影响,中 断处理程序就需要尽可能快地运行。 中断处理程序在响应中断时,还会临时关闭中断。这就会导致上一次中断处理完成 之前,其他中断都不能响应,也就是说中断有可能会丢失。 为什么有硬中断和软中断区分?为了解 决中断处理程序执行过长和中断丢失的问题,****Linux 将中断处理过程分成了两个阶段,也就 是上半部和下半部: 上半部直接处理硬件请求, 硬中断,特点是快速执行; 网卡接收到数据包后: 会通过**硬件中断**的方式,通知内核有新的数据到了。 同时把网卡的数据读到内存中,然后更新一下**硬件寄存器的状态(表示数据已经读好了),最后再发送一个软中断信号**,通知下半部做进一步 的处理。 硬中断是硬件产生的,比如键盘、鼠标的输入,硬盘的写入读取、网 卡有数据了; 下半部则是由内核触发, 软中断,特点是延迟执行。通...
责任链模式ChainofResponsibility
简单实现–实现链式调用以及调用链中断1234567891011121314151617interface Filter { boolean doFilter(Msg m);}class HTMLFilter implements Filter { @Override public boolean doFilter(Msg m) { String r = m.getMsg(); r = r.replace('<', '['); r = r.replace('>', ']'); m.setMsg(r); return true; }}// ... 其他具体的过滤器实现类 调用链也实现Filter接口,是为了可以两个链子连起来。也就是说把后面的链子当做过滤器的**List的最后一个元素。利用了多态,都实现了doFilter,但是具体的过滤器是...
输入输出和存储系统
AMDAHL定律(阿姆达尔)计算机系统整体性能的速度提升(加速比)取决于某个特定部件本身的加速率和该部件在系统中的使用率。公式表示为 式中,S为系统整体性能的加速率,f表示待替换部件完成的工作部分,k为新部件的加速率。 例如,某计算机需要70%时间执行CPU操作和30%时间等待磁盘服务,当前有两种升级方案:10000使得处理器价格提高50%,或7000使得磁盘处理能力为当前系统的250%。若选择升级处理器,则f = 0.70,k = 1.5,S = 1 / ((1-0.7)+0.7/1.5) = 1.30;若选择升级磁盘,则f = 0.30,k = 2.5,S约为1.22。由此可看出升级处理器带来的整体性能提升更高,但考虑价格因素,对提升的每个百分点,升级CPU需要333,而升级磁盘只要318。 计算加速比: A为200,B为100,A是B的2倍,A比B快2倍,A比B快100%, 加速比就是1+N/100,而不是N,CPU比当前的快了50%,则它的加速比就是1.5 阿姆达尔的应用: 通用...