0%

前言

本部分包含《深入理解计算机系统》第三版第一部分的内容,包含程序的结构和执行的内容。

第二章 信息的表示和处理

计算机中的一切,都是由二进制来进行表示的,理由很简单,因为计算机本质上是一台机器,而对于机器来说,二值信号非常容易被用来进行表示、存储和传输的。

在这一部分我们主要研究无符号编码、补码和浮点数。(我至今想不通当年我们大学为什么要学习反码….)。在这三者之中,我感觉重要性是补码>浮点数>>无符号(因为java里面就没有无符号数2333333)

在计算机中,最容易出现的问题就是溢出问题了,这也导致了很多漏洞的发生。C和C++共用了一套数字的运算和表示机制,而java则是更进一步,完全屏蔽了各种机器上的差异。

阅读全文 »

前言

为了避免每次在牛客IDE上做题的紧张,我决定重新刷几遍《剑指offer》,记录下每次遇到的坑点。

03 重复数字

一看就知道需要调换数组中的元素使它应该到指定的位置。

这里的坑点是当进行交换的时候,不能简单进行交换,因为会进行修改,所以切记需要保存下来才可以修改。

04 二维数组查找

从右上角开始判断的题目,注意二维数组如果是空的判断。

阅读全文 »

前言

写这篇文章的目的是这样的,我自己做的项目是用到了MQ来完成最终一致性,并且我发现了我的代码的逻辑和网上的那些商城的逻辑是不同的。然后面试的时候,似乎面试官问我的都是网上的那些商城的逻辑,然后顺着他们的逻辑走,问我会出现什么问题,或者是出现了某某问题应该怎么解决,然后我在这里栽了两次跟头了,所以这篇博客就需要好好梳理下别人到底是怎么做的,然后把他们遇到的问题。

为了之后的叙述方便,下文以A服务代替下单服务,B服务代替库存服务,C服务代替优惠券服务,D服务代替积分服务。如果不使用MQ的话,正常的逻辑就是A服务会调用BCD,并且等待BCD完成之后继续执行。(注意,这里没有用到分布式事务,所以会出现一堆问题,下面来解决)

阅读全文 »

前言

我们都知道数据库有四个隔离级别,同时肯定也听过MySQL的RR的隔离级别下解决了幻读的问题,那么到底是怎么实现的呢?MySQL中的RR隔离级别下面到底有没有解决幻读问题呢?

两段锁

学过操作系统都知道,如果要为了避免死锁,我们可以选择一次性把所有的资源都上锁,然后进行操作,操作完成之后就释放锁。但是这个方法在数据库里面并不适用,因为你不知道你要用到哪些资源(当然极端点你可以把所有的资源全部上锁,但是这样并发量就太惨了),所以数据库用的是两段锁:

  • 加锁阶段:在这个阶段里,进行加锁操作。如果要读取数据,就加S锁;如果要进行写操作,就加X锁。如果加锁不成功,则事务进入等待状态(具体表现就是一条语句不返回任何值,卡在那里),直到加锁成功才继续执行。
  • 解锁阶段:当事务释放了一个封锁以后,事务进入解锁阶段,在该阶段只能进行解锁操作不能再进行加锁操作。

具体如果落实到语句中,就是insert加insert的锁,update加update的锁,delete加delete的锁,然后当你commit的时候就释放这些锁。

注意:两段锁是会发生死锁机制的,这个比如事务A想要修改第一条数据和第二条数据,它先给第一条数据加了X锁,然后另外一个事务B给第二条加了X锁,这样死锁就形成了。

阅读全文 »

前言

因为面试中可能会被面试官问到,所以我自己还是先总结一波好了。

指令简单介绍

下面的说明只是为了理解,实际上并不是非常准确

  • iconst_n:把n这个数字放入到栈中
  • istore_n:把栈顶的数字放到局部变量表中的第n位,局部变量表是从0开始计数的。
  • iload_n:将局部变量表的指定位置的相应类型变量加载到栈顶,相当于和istore_n是相反的操作。
阅读全文 »

前言

首先声明,我自己做过的所有项目,最多的一个数据库不过也就刚刚破万的数据量,根本就用不到这个分库分表,但是架不住面试官他要问啊,所以还是自己实践一下,然后记录下吧。

为什么要分库分表

首先分库和分表是两回事,可能我只分库,也可能我只分表(当然只分表可能意义没那么大);当然实际中遇到的大部分都是既分库又分表。

单表一般能支持差不多刚破千万左右,所以当你的数据量超过千万的时候,性能就会下降,为了提高性能,我们就不得不进行数据库分库和分表。

阅读全文 »

前言

网易的一位面试官问了我一下java的BIO、NIO和AIO之间的区别,感觉自己答的不够好,所以来补一补。

BIO

Blocking-IO,直译过来就是阻塞式的IO,一般配合多线程(线程池)使用。

阅读全文 »

前言

“常量池”,这个光听概念其实应该是很好理解的,就是用来存放常量的地方。常量就是无法进行改变的那些量。

但是java中有许许多多的“常量池”,有的时候乍一听还反应不过来,今天就打算梳理一下这些常量池。

class常量池

随便写一个hello world的程序,然后编译,使用javap命令查看,你会发现字节码文件中就有一个class常量池:

image-20200812125353569

可以看到里面存放了各种字面量(如Hello World,应该在#18中)和各种符号引用(如#10

显然由于每一个类是一个字节码文件,所以这个class常量池是每个类独享的。

阅读全文 »

前言

此篇博客主要针对的是《Spring揭秘》的下半部分,对应了spring的数据访问部分(包括事务)和Spring MVC的部分。

阅读全文 »

这篇文章被加密了,请输入密码查看。目前并不打算公开,日后公开
阅读全文 »