- 博客(116)
- 收藏
- 关注
原创 常见算法复习
时间复杂度:最佳情况(O(n log n)),平均情况(O(n log n)),最差情况(O(n log n))时间复杂度:最好情况O(nlong(n)),最坏情况O(n^2)思路:选择一个基准,将比他小的挪到他的前边,比他大的挪到他的后边。采用分治的思想,先局部有序再整体有序。
2024-09-25 15:32:41
318
原创 Docker-compose容器编排
编写Dockerfile定义的各个容器,构建出镜像编写docker-compos.yml,定义一个完整的运行单元执行docker-compos-up,创建出能够运行的完整项目
2024-06-09 18:37:48
403
原创 Dockerfille解析
案例:将一个springboot的jar包部署到Docker上1. 打包springboot项目2. 在linux中创建一个文件夹用于保存Dockerfile文件和jar包3. 创建Dockerfile文件4. 保存文件5. 运行自定义的镜像。
2024-06-08 21:14:31
639
原创 Docker镜像加载原理(Union文件系统)
Union文件系统,是一种轻量级的分层高性能服务系统,支持对文件系统的修改来进行一层一层的叠加,同时将不同目录挂载到同一个虚拟文件系统中,Union文件系统是Docker镜像的基础,通过分层来进行集成,在外部看来是一次性加载完成,只能看到一个文件系统,但内部却是一次性加载多个文件。bootfs(boot file system)主要包含 bootloader 和 kernel,bootloader主要是引导加载 kernel,Linux刚启动时会加载bootfs文件系统。bootfs和rootfs。
2024-06-07 20:41:32
498
原创 Java中Synchronized的锁升级
如果未开启偏向锁(或者在JVM偏向锁延迟时间之前),有线程访问共享资源则直接由无锁升级为轻量级锁,开启偏向线程锁后,并且当前共享资源锁已经是偏向锁时,再有第二个线程访问共享资源锁时,此时锁可能升级为轻量级锁,也可能还是偏向锁状态,因为这取决于线程间的竞争情况,如有没有竞争,那么偏向锁的效率更高(因为频繁的锁竞争会导致偏向锁的撤销和升级到轻量级锁),继续保持偏向锁。当JVM启动后,一个共享资源对象直到有线程第一个访问时,这段时间内是处于无锁状态,对象头的Markword里偏向锁标识位是0,锁标识位是01。
2024-04-27 18:19:39
518
1
原创 Java知识点补充
场景:我们希望将三万张图片均匀的分布在三台服务器上,此时我们可以对N进行取模运算,也就是三万%3得到的结果为0,1,2,但当我们的请求增多后,我们想要新设立一个服务器,此时服务器的数量为4个,因此除数变为4,此时我们的缓存在一定时间内是失效的,这是普通hash算法的一个缺陷。负载均衡:减少单个服务器之间的压力,将流量重定向到多个服务器中常见的负载均衡算法有:轮询法(按照请求时间一个一个来),权重轮询(会进行访问数的统计),IP哈希(根据请求者的ip的hash值进行请求分发),url哈希。
2024-04-25 16:37:22
858
原创 Redis分布式锁
作为分布式锁实现过程中的共享存储系统,Redis 可以使用键值对来保存锁变量,在接收和处理不同客户端发送的加锁和释放锁的操作请求。
2024-02-29 20:59:11
386
原创 IO零拷贝
write:把数据从磁盘读取到内核缓冲区,再拷贝到用户缓冲区read:先把数据写入到socket缓冲区,最后写入网卡设备DMA:完全由硬件进行信息传输控制的方法,
2024-02-29 16:19:08
537
原创 Redis进阶篇
redis是基于内存运行的高性能k-v数据库,6.x之前是单线程, 对外提供的键值存储服务的主要流程 是单线程,也就是网络 IO 和数据读写是由单个线程来完成,6.x之后引入多线程而键值对读写命 令仍然是单线程处理的,所以 Redis 依然是并发安全的。
2024-02-23 15:15:29
1092
原创 设计模式七(策略模式)
可以将同一种功能的不同实现细节抽取到一个抽象接口中,把不同的实现让子类实现,最终我们只需选择不同的子类即可策略类 Strategy : 定义所有⽀持的算法的公共接⼝。具体策略类 ConcreteStrategy : 实现了策略接⼝,提供具体的算法实现。上下⽂类 Context : 包含⼀个策略实例,并在需要时调⽤策略对象的⽅法。
2024-01-30 20:58:03
691
原创 Mysql进阶篇
连接层: 处理客户端连接请求,对用户进行认证服务层: 可以接收sql,调用存储过程,优化sql,缓存数据....引擎层: 负责实际与文件层进行交互操作的,可以有不同的引擎选择.物理文件层: 存储表数据 以及 各种日志文件.
2024-01-30 20:49:44
1098
原创 设计模式六(模板方法模式)
模板⽅法模式将算法的不变部分被封装在模板⽅法中,⽽可变部分算法由⼦类继承实现,这样做可以很好的提⾼代 码的复⽤性,但是当算法的框架发⽣变化时,可能需要修改模板类,这也会影响到所有的⼦类。有些步骤是固定的可以抽取父类,在父类中实现各个步骤,并且在父类中定义一个流程控制方法,将某个容易发生变化的步骤定义为抽象方法,针对不同的子类实现不同的方法,最终子类调用父类的流程控制方法即可。是一种行为型的设计模式,
2024-01-28 11:16:44
969
原创 设计模式五(代理模式)
代理模式就是给对象提供一个代理,并由代理对象来控制原对象的引用,使得客户不能与真正的目标对象通信,代理对象是目标对象的代表, 其他需要与这个目标对象打交道的操作都是和这个代理对象在交涉。
2024-01-28 11:00:44
803
原创 设计模式四(适配器模式)
是一种结构性设计模式,将一个类的接口转化为客户希望的另一个接口,充当两个不同接口之间的桥梁,使得原来接口不兼容的类可以一起工作。将客户端代码和具体的类解耦,客户端不需要直到被适配者的细节。
2024-01-24 19:31:38
736
原创 设计模式三(原型模式)
在开发过程中,创建多个数据相同的对象,每次new都开销比较大,在这里可以使用对象克隆,以先创建的原型对象为模板进行对象的复制。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。
2024-01-24 19:15:59
872
原创 设计模式二(工厂模式)
本质:实例化对象不用new,用工厂代替,实现了创建者和调用者分离满足:开闭原则:对拓展开放,对修改关闭依赖倒置原则:要针对接口编程迪米特原则:最少了解原则,只与自己直接相关的类有关系。
2024-01-22 20:44:14
677
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人