自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TCP流量控制、拥塞控制、粘包

TCP流量控制、拥塞控制、粘包

2022-08-04 10:52:37 499 1

原创 如何设计一个可靠的秒杀系统

秒杀一般出现在商城的促销活动中,指定了一定数量的商品,以极低的价格,让大量用户参与活动,但只有极少数用户能够购买成功。这类活动商家绝大部分是不赚钱的,说白了是找个噱头宣传自己。虽说秒杀只是一个促销活动,但对技术要求不低。我们在设计秒杀系统时可以做以下优化...

2022-07-22 11:25:45 1088 1

原创 归并排序(java递归实现)

import java.util.Arrays;/** * @Author: A mao * @Date: 2022/5/19 15:52 */public class Test02 { public static void main(String[] args) { //归并排序 int[] test = {4,7,2,9,10,12,6,5,13}; merge_sort(test,0,test.length-1); .

2022-05-19 17:02:49 304 1

原创 背包问题(动态规划)

背包问题:有一个背包可以承受固定的重量,承受重量自己输入现在有很多物品,每个物品有自己的价值和价格,物品的个数,质量和价值可以自己输入求:在背包的承受重量范围内,放置哪些物品到背包才能使得背包中物品的总价值最大。二维动态规划:我们这样想象,物品是一个一个到来的,当这个物品来时,我们仅有两种选择,装入背包或者不装入背包。假设,现在有 i 个物品,这 i 个物品选择放入背包(承重为10kg)中已经达到了价值最大值(也就是结果)。那么 第 i 个物品肯定要么装入背包,要么不装入背包

2022-05-14 15:37:35 245

原创 布隆过滤器

1.布隆过滤器布隆过滤器是很长一段的一段二进制,主要用于判断一个元素是否在一个集合中。当一个对象经过过滤器的时候,会经过多个不同函数的Hash运算,算出不同的Hash值,把这些位置的二进制位置1.那么在查询的时候,就可以再次通过多次Hash运算判断对应的Hash位是不是全是1,如果不全是1证明查询的这个对象肯定不在布隆过滤器中,如果全是1 那么代表很有可能存在布隆过滤器中,但不是绝对的。比如说对象A经过2个Hash运行得到1,3.对象B经过两个Hash运算得到2,4. 现在想要查询对象C,由多个

2022-05-13 11:18:34 173

原创 AQS加锁解锁过程

当第一个线程来的时候,会用CAS的方法把AQS中的state状态改为1,说明这个锁,如果此时第二个线程来了,那么就会尝试获取锁,尝试失败,会初始化双向链表(节点中的主要内容有当前线程、WaitState【初始为0】),初始化时实际上时new了两个node,第一个node中的线程为null,WaitState为默认值0,第二个node是这个抢锁失败的线程、WaitState默认为0,然后第二个node会接着抢锁,判断能不能获取锁,如果还不能获取,就把前一个node的WaitState设置为 -1,再尝试获取锁

2022-05-12 17:33:02 233

原创 非对称加密、数字签名、数字证书

非对称加密:每人包含一个公钥和私钥。注意:公钥可以解开私钥,私钥可以解开公钥。公钥不能解开公钥,私钥不能解开私钥。A与B用非对称加密的方式通信:A首先把要发送的内容用B的公钥加密,那么只有B的私钥能解密,保证了数据的保密性(A在向B发送内容的途中,别人看不到A发的是啥)上面看似安全,实则有问题,A可也给B发消息,C也可以假装是A给B发消息,因为C也有B的公钥。B很难去辨别谁发的消息。数字签名:A向B发送消息,首先用A的私钥加密,B收到以后用A的公钥验证一下,就知道是不是A发送的了。数字签名和非对

2022-05-11 17:55:28 1540 2

原创 ConcurrentHashMap为什么不能添加null值

首先看hashMap为什么能为null:首先hashMap的设计是为单线程设计的,我们知道hashMap的get方法中传入的参数如果hashMap中不存在的话就会返回null,假设hashMap中有一个key是null1存在返回的是null,2不存在返回的也是null,这样不就有两重含义了吗但是hashMap可以解决这个问题,hashMap中有一个方法containsKey这样是不是就可以区分了。然后看ConcurrentHashMap:有人想问了,ConcurrentH

2022-05-05 23:03:29 2120

原创 一文搞懂偏向锁状态、轻量级锁状态、重量级锁状态

首先需要一些前置知识。我们知道对象是存在堆中的,实际上在为这个对象分配的内存中还存在着对象头,对象头中有很多信息,其中包括这个对象的状态。偏向锁状态:当一个锁被一个线程占有的时候,这个锁的状态就变成了偏向锁,线程ID就是持有这个锁的线程。下次又有线程来访问的话,如果发现访问的线程和偏向锁中的线程一样,就直接进入到同步块了。通俗来讲就是:假设A线程要使用m对象这个锁,那么B对象的对象头就会记录下来现在是A在使用,下次A再来,直接进入了,不用再获取锁了。这样做的好处是,如果一直是线程A来访问的话

2022-05-03 15:15:51 278

原创 依赖注入和自动装配有什么区别?

2.Bean的三种依赖注入方式首先我们要理解概念,IOC是什么,就是创建对象和注入属性(DI)首先我们看看DI是什么。DI简单的来说就是为一个对象的属性赋值,假设我们没有Spring我们应该怎样对一个对象的属性赋值呢?有两种方法:假设我们要对Student的一个实例对象s1的Name属性赋值,我们是不是可以进行以下操作:1.s1.setName() 也就是调用set方法2.Student s1 = new Student("张三"); 这种方式是调用构造函数这就叫依赖注入

2022-05-01 22:51:40 1418

原创 Synchronized的实现

1.Synchronized1.1 加了synchronized的字节码指令和java源代码synchronized(new Object()){ int a = 1;int b = 2; System.out.println(add(a,b)); }由上图:被Synchronized修饰过的代码块,会生成monitorenter(监视器)字节码指令和monitorexit(监视器退出)字节码指令,当虚拟机执行到监视器指令的时候,就要...

2022-05-01 14:55:48 413

原创 了解拓扑排序

拓扑排序是针对于AOV网,AOV网(Activity On Vertex Network)是指在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网。我们进行拓扑排序就是每次选择一个入度为零的出来就好了。例如上图,我们可以选择C1和C2,我们任意选择一个就好。比如我们选择C1,就把C1的出度抹去。重复操作即可。所以拓扑排序的结果不止一种。...

2022-04-19 16:42:00 55

原创 数据库GROUP BY 怎么用

group by 我们都知道是用来分组的,但是有的时候,为了做一条查询,我们不能真正理解gruop by,只能试错试出来,这样面试的时候是不允许的。现在,我们假设有一个课程表给你下面有关group by 的语句,你觉得哪些是正确的语句呢?答案是只有第四条和第六条是不能运行的。那么我们来看一下为什么,分组到底是个什么概念呢?我们以分数进行分组后,应该是如下图所示:首先gruop by只能返回每组一行!!!!!对于第一条sql语句来说,因为现在有三个分组,就是取三个...

2022-04-01 09:36:57 2388

原创 快速理解快速排序递归

选择排序

2022-03-25 13:24:48 820 1

原创 回字型输出(java版本)

字节跳动面试算法

2022-03-23 13:36:05 649

空空如也

空空如也

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

TA关注的人

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