软件设计师-第一章(计算机系统知识)
CPU的功能
程序控制
操作控制
时间控制
数据控制
CPU的组成运算器数据加工,算数运算,逻辑运算
算数逻辑单元(ALU):执行基本的算数和逻辑运算.
累加器:用于存储ALU运算的中间结果.
状态条件寄存器:记录ALU的运算结果状态.
缓冲寄存器:临时存储数据,以便ALU运算.
控制器保争指令执行,处理异常事件
指令寄存器(IR):存储当前正在执行的指令.
程序计数器(PC):存放下一条要执行指令的地址.
地址寄存器:存放要访问的地址.
指令译码器:将指令解码为控制器信号,以便其他部件执行.
寄存器组快速存储和访问数据的临时存储单元,保争程序的中间结果
通用寄存器:用于存储临时数据和中间结果.
专用寄存器:如栈指针,地址寄存器等,用于特点用途.
总线总线是CPU内部及CPU与其他部件之间传输数据的通道
数据总线:传输数据.
地址总线:传输内存地址.
控制总线:传输控制信号.
进制转换二进制转十进制按权相加法
无符号的二进制整数
从右往左一次用二进制上的位数乘以2的几次幂的合
例:1001010 = 2 + 8 + 64 = 74
带符号的二进制整数
除去最高符 ...
并发环境下,先操作数据库还是先操作缓存?
并发环境下,先操作数据库还是先操作缓存?在分布式系统中,缓存和数据库同时存在时,如果有写操作,先操作数据库还是先操作缓存呢?本文将分5种方案展开阐述对比,谢谢阅读~Java学习资料github地址,衷心感谢每一颗star
缓存维护方案一如果是一读(线程B)一写(线程A)操作,「先操作缓存,再操作数据库」。流程图如下所示:
线程A发起一个写操作,第一步del cache
线程A第二步写入新数据到DB
线程B发起一个读操作,cache miss缓存失效了。
线程B从DB获取最新数据
线程B执行set cache,把从DB读到的数据,更新到缓存。
这样看,没啥问题 。我们再看第二个流程图,如下:
线程A发起一个写操作,第一步del cache
此时线程B发起一个读操作,cache miss
线程B继续读DB,读出来一个老数据
然后老数据设置入cache
线程A写入DB最新的数据OK,酱紫,就有问题了吧,老数据入到缓存了,每次读都是老数据啦,缓存与数据与数据库数据不一致了 。
缓存维护方案二上个方案是一读一写,如果是双写操作,先操作缓存,在操作数据库 ,会怎么样呢?
线程A发起一个写 ...
Redis分布式锁
七种方案!探讨Redis分布式锁的正确使用姿势日常开发中,秒杀下单、抢红包等等业务场景,都需要用到分布式锁。而Redis非常适合作为分布式锁使用。本文将分七个方案展开,跟大家探讨Redis分布式锁的正确使用方式。如果有不正确的地方,欢迎大家指出哈,一起学习一起进步。公众号:捡田螺的小男孩
什么是分布式锁
方案一:SETNX + EXPIRE
方案二:SETNX + value值是(系统时间+过期时间)
方案三:使用Lua脚本(包含SETNX + EXPIRE两条指令)
方案四:SET的扩展命令(SET EX PX NX)
方案五:SET EX PX NX + 校验唯一随机值,再释放锁
方案六: 开源框架~Redisson
方案七:多机实现的分布式锁Redlock
什么是分布式锁分布式锁其实就是,控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性。我们先来看下,一把靠谱的分布式锁应该有哪些特征:
「互斥性」: 任意时刻,只有一个客户端能持有锁。
「锁超时释放」:持有锁超时,可 ...
Java设计模式
设计模式原则
单一职责原则,就是一个类只负责做一件事情。这样就可以做到解耦合的效果,让代码看起来比较清爽,也体现了java的封装性。还有个原则叫迪米特法则,就是一个对象对另一个对象有尽量少的了解,说的也是解耦合的事情。
里氏替换原则和依赖导致原则,说的是继承的事情。父类可以做的事情,子类都可以去做,子类可以尽量去依赖父类去做事情;但是反过来,父类不能依赖子类去做一些事情。体现了java的继承特性。
接口隔离原则,接口也应该尽可能的隔离开来。其实类写多了,的确耦合性低,为了让他们交流起来,用的最多的就是接口,毕竟只需要知道做什么,怎么做,去访问那个具体的类吧。
开闭原则,对修改关闭,对拓展开放。就是代码需要有很好的延展性,对原有代码结构不能破坏。
Java设计模式单例模式/** * 双重校验 * 对懒汉式单例模式做了线程安全处理增加锁机制 * volatile变量级 * synchronized 类级 */public class DoubleCheckSingleton { //特点一 静态私有变量,增加volatile变量级锁 private static v ...
Hexo搭建教程
Hexo系列教程使用Centos7+Nginx+Hexo+GitLab+butterfly主题搭建个人博客并自动部署-配置篇
CentOS7下安装GitLab新建tsinghua.repo'vim /etc/yum.repos.d/tsinghua.repo'
输入以下内容'[gitlab-ce] name=Gitlab CE Repository baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gpgcheck=0 enabled=1'
缓存相关内容'yum makecache'
安装依赖'yum install -y curl policycoreutils-python openssh-server'
安装gitlab-ce'yum install -y gitlab-ce'
出现如下画面证明安装成功
配置Gitlab打开gitlab配置文件'vim /etc/ ...