自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 模拟交易异步缓存问题故障排除总结

问题背景: 在项目中存在两个需求。查询撤单列表,和 对列表中的订单进行撤单操作。出现的问题是,用户执行完撤单操作之后接着刷新列表,拿到了撤单之前的老数据,问题为偶发,但是偶发次数也较多。注:这一块是做了Redis缓存的。问题初步定位:1.初步分析有可能是缓存问题,查看日志显示缓存成功查看Redis缓存数据,得知缓存中的数据的确为老历史数据。2.由上可分析,是否是...

2020-01-19 16:04:33 445 2

原创 JavaIO(五)-NIO选择器和多路复用详解

之前的一篇文章中,我们的代码其实已经实现了简单的多路复用,由一个线程来管理多个连接和通道数据,但是我们同时也看到了自己实现的程序的缺陷,无用轮询过多,导致响应和数据接收过慢。所以才有了选择器Selector。这一篇可能更偏理论。什么是选择器?先分析字面意思,首先它是一个容器,作用是选择。这么理解没毛病吧,那么既然是容器,那么就相当于是一个集合,我们需要将东西放进去,然后根据条件拿出我们想要的,这样才叫做选择。而操作系统提供的选择器提供了选择执行已经就绪的任务的能力,这使得多元 I/O 成为可能。所以牛的

2021-03-23 22:27:13 504

原创 JavaIO(四)-NIO通道详解

什么是通道?通道是访问 I/O 服务的导管。可以在通道上传输“源缓冲区”与“目的缓冲区”要交互的数据,NIO 技术中的数据要放在缓 区中进行管理,再使用通道将缓冲区中的数据传输到目的地,那么Channel就是缓冲区和缓冲区之间的传输管道。public interface Channel extends Closeable { public boolean isOpen(); public void close() throws IOException;}最顶层的Channel

2021-03-23 22:19:23 331

原创 JavaIO(三)-NIO缓冲区详解这一篇就够了

BIO一个线程对应一个连接和其阻塞的本质,已经无法适应当下的互联网环境。那NIO为什么就能?NIO三件套:缓冲区(Buffer),通道(Channel),选择器(Selector)。缓冲区是工具,通道是桥梁,选择器是核心。缓冲区(Buffer):之前我们说过,所谓“I/O”讲的无非就是把数据移进或移出缓冲区。而NIO为我们提供了专门针对各种缓冲区的专业API。所以我开头才说,Buffer只是工具,重点是会用。所谓Buffer可以暂时理解为一个数组对象,具有数组的属性定长、类型一致、索引。一个

2021-03-23 22:06:58 480

原创 JavaIO(二)-BIO详解

啥也不说先上代码,这是一个很简单的从本地文件中读取数据的程序public class FileBioTest { public static void main(String[] args) throws Exception { BufferedReader reader = null; try { //2号参数可以指定缓冲区大小 默认8192 reader = new BufferedReader(new Fil

2021-03-23 21:52:37 438

原创 JavaIO(一)-IO与网络编程基础及TCP详解

学IO之前需要先了解几个概念,这篇文章中不说同步、非同步,阻塞、非阻塞的概念,直接说太干。对IO中计算机底层比较感兴趣,可以读一下这篇IO和DMA原理几个概念:内核空间:所有的程序都需要加载到内存中才能运行,而操作系统也是程序的一种,程序被加载到内存之后,操作系统占用的这部分内存被称为内核空间。内核空间中的指令拥有最高指令权限,可以直接访问硬件,可以执行机器能够运行的任何指令,安全性要求极高也更为复杂。用户空间:除操作系统之外的程序加载到内存中所占用的内存空间被称为用户空间。用户空间所能执行的指

2021-03-23 21:32:43 485

原创 程序是怎么装载到内存并被运行的

在后续所有内容之前,我们需要先达成一个共识,所有的程序都是被装载进内存然后才被使用的。装载器会把对应的指令和数据加载到内存里面来,让 CPU 去执行,而程序,包括操作系统就是一堆指令和数据的集合。下面开始套娃,BIOS硬件初始化并开始加载主引导扇区(多系统需要选择启动哪个系统的原因),将操作系统加载到内存;移交加载控制权给操作系统,操作系统开始装载非操作系统程序到内存。因为Linux和Windows系统的装载器不同,所以这也是为什么Windows上的一部分程序没法在Linux上跑的原因,如.exe。

2021-03-17 17:18:25 8052

原创 计算机组成原理(七)-IO,DMA原理与零拷贝机制

什么是IO?IO是输入输出的意思,也就是Input和Output,这不是重点,重点是IO是相对谁,在我们编写代码的时候也有I/O的概念。以Java为例,InputStream一般都伴随read方法,OutputStream一般对应write方法,所以所有的IO都是针对自身来说的,以CPU和主存为例,CPU要拿主存中的数据,那么对于CPU来说自己是I,但是对于主存来说那自己就是O了。IO接口:IO设备的代言人大部分的输入输出设备,都有两个组成部分。第一个是它的接口,第二个才是实际的 I/O 设备。

2021-03-13 15:22:41 1560

原创 计算机组成原理(六)-浮点数存储和浮点数计算

你的程序、打开的文本为什么老是乱码?先来认识一下世界的编码集ASCII:因为最开始计算机是美国人发明的,所以最早的编码集只为美国服务,包含95个可打印字符,33个不可打印字符(包括控制字符)一共127个,而127个只需要7个bit就可以表示,为了以后拓展方便(后续确实也扩充了),最后定为8个二进制表示一个对应的字符,这也是1byte=8bit的由来,所以ASCII表中的每个值都是一个字节表示。如阿拉伯数字1就在表中的49位,用二进制表示就是00110001。Unicode:随着互联网的普及.

2021-03-13 15:21:13 2060

原创 计算机组成原理(五)-一条指令是怎么被执行的

什么是指令:程序代码的本质就是一条一条的指令,我们需要通过编码的方式让CPU知道我们需要它干什么,最后由译码器翻译成一条条的机器指令。机器指令主要有两部分组成:操作码、地址码。地址码直接给出操作数和操作数的地址,分三地址指令、二地址指令和一地址指令,最后还有零地址指令,零地址指令在机器指令中没有地址码,用来进行空操作、停机操作、中断返回操作等。那么一条简单的指令执行,涉及到了那些组件?控制器(CU)和运算器(ALU)PC寄存器(程序计数器):用于存放下一条需要执行的指令地址信息,注.

2021-03-13 15:19:48 5387 1

原创 计算机组成原理(四)-CPU的高速缓存

当我们对各组件有了认识之后,那么我们在认识了CPU直接去访问内存的时候,需要申请总线控制权,而且一个8G的内存我们需要访问的地址也许就高达2的30次方,一次寻址访问拿到数据可能就要近百ns,而在CPU主频普遍高于3GHz的今天,内存无疑成为了拖累CPU的主要部件,而速率较快的SRAM又造价昂贵,所以早在一开始,内存速率开始拖累CPU的时候,就引入了高速缓存的机制。什么是高速缓存?我们在购买电脑时,通常查看参数时除了注意CPU的主频及核心数量,也会注意到有个缓存数量和缓存大小,一般分为L1,L2,L3

2021-03-13 15:18:58 3219

原创 计算机组成原理(三)-存储器

存储器也是计算机组成的重要部件,充分认识各存储器是一个必要的过程。存储器的分类:存储器按照存取方式进行分类分为RAM,ROM和普通磁盘RAM:随机存储器,统一特点为数据断电即失,根据构造不同又被区分为静态存储器(SRAM)和动态存储器(DRAM)SRAM:静态存储器,只要通电,里面的数据就会一直存在,由晶体管组成,6个晶体管左右才能组成一个bit的数据,电路简单,随存随取速度极快,极快,极快。但是因为成本比较高常被用作CPU高速缓存存储器。DRAM:动态存储器,动态存储器是基于电容设计的存储

2021-03-13 15:17:42 794

原创 计算机组成原理(二)-总线

认识了计算机的基本组成,那么各个组件之间是如何进行交流的呢?那就是总线。什么是总线?总线是计算机各种功能部件之间传送信息的公共通信干线,英文名Bus,跟名字一样用于信息传递,一条总线同一时间只能向一个方向传递一种信息。总线的分类:总线按照连接组件的大小可以分为片内总线、系统总线和连接外部设备的拓展总线片内总线:芯片内部用于连接控制器和运算器、运算器和寄存器、寄存器和寄存器之间等,或者存储体内部用于连接各个存储单元的组件内部的总线,被称为片内总线系统总线:CPU,主存这种组件和组件之间

2021-03-13 15:17:04 1121

原创 计算机组成原理(一)-基本组成

为什么要学习计算机组成原理?所谓“练拳不练功,到老一场空”,越早的学习计算机底层只是,可以越早的享受底层知识带来的“红利”,好多我们生产工作过程中遇到的问题,如缓存的使用、线程的使用、线程池为什么不是越大越好、volatile关键字的使用原理等,都能在计算机底层知识中找到答案。而我,深受其害,所以痛定思痛,决定重学计算机底层知识!那么我们作为软件开发人员需要学习计算机组成的哪些知识?作为软件开发人员,可能我们不太需要去直接接触硬件,所以我们应该通过硬件运行原理能对应到我们实际开发中的问题,所以我

2021-03-13 15:12:13 242

原创 本地Jar包上传到公司私库Nexus你可能遇到的坑

事件起因:公司需要兼容友盟UMeng推送,比较着急所以简单集成了一下,结果Jenkins打包的时候在私服中找不到友盟Demo的Jar包,如下图所示:一般来说,公司的私服中取寻找一些常用的包是完全没有问题的,并且会随着你的项目使用版本的更迭而更新。偏偏现在这个包不常用,这时候就需要你将包手动添加到私服中。添加方式一百度一大把,大概就是下面这样mvn -X deploy:deploy-file...

2020-03-26 18:07:10 1192

原创 模拟交易异步缓存问题故障排除总结(附文)

模拟交易异步缓存问题故障排除总结主体文章事务传播行为:事务传播行为其实就是当出现多个事务嵌套或者相互调用时,我们处理事务的方式。Spring一共定义了7种事务传播行为(事务方法B该如何运行): 传播行为 含义 PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入...

2020-01-19 17:49:27 276

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除