- 博客(48)
- 资源 (9)
- 收藏
- 关注
原创 docker和k8s
container有自己的ip,它的ip映射到主机的docker0这个虚拟网卡上,它们能访问外网,外网不能访问它们(外网要访问,可以加通过端口映射,将容器端口映射到主机端口上)。原理:当 Docker 守护进程启动时,会在主机上创建一个名为docker0的虚拟网桥。容器在使用bridge模式时,会创建一对虚拟网卡,一端在容器内,通常命名为eth0;另一端在主机的docker0网桥上。容器通过docker0网桥与外部网络通信,主机充当容器与外部网络之间的桥梁。
2025-02-26 11:28:01
1308
原创 事务的原理
锁定少:一阶段不强锁定,通过数据前后镜像来回滚,RM锁定粒度和时长与传统2PC不同。无侵入:对业务代码无侵入,开发者无需关心事务的具体实现细节,只需关注业务逻辑本身。高性能:可以把2阶段异步化,这样只处理了一阶段就返回响应,然后异步慢慢处理二阶段。
2024-09-08 17:39:34
892
原创 redis
当AOF文件很大之后,会在一个子进程里进行rewrite,相当于做了压缩,rewrite的同时会正常write,这样会产生两个文件:rewrite的压缩小文件和正常write的文件,当rewrite完成后,就把正常write的文件覆盖,新的日志写入到rewrite完后的文件中。redis的“网络请求+kv处理”一直是单线程,因为redis的瓶颈在内存而不是CPU,用多线程帮不了忙,还需要处理线程同步的问题,用单线程的话,还不用考虑上下文切换的性能开销。redis4可以用unlink来异步删除缓存的大对象。
2024-09-06 20:09:23
1428
原创 Cookie/session/token/jwt
1. cookie长度有限制,一般最大4k,存储在浏览器在中,受同源策略限制,不能跨域访问。 一般是明文传输,容易被篡改,不要在里面放用户名、密码等敏感信息。 每次请求,浏览器会自动带上cookie。2. session存储在服务端,占用服务端的资源。 客户端通过cookie中的会话id与服务端的session关联,也可以把sessionId放到url、隐藏表单中传给服务端。 相对安全,因为关键信息都存储在服务器端。3. token客户端每次请求都带上token,服务器通过一定的规则
2024-09-04 13:09:43
501
原创 缓存读写策略
我看到过两种分类方式,其实大同小异,都是按DB和缓存先处理谁(或者说以谁为主)来分的,只是角度不同,为了加深理解,都记下来吧。读的时候,如果缓存里读到了,就直接返回读到的结果,这一步是通用的,下面就不赘述“读”时“从缓存读到”的情况了。
2024-09-01 20:44:44
540
原创 Spring Bean的生命周期
1. bean的作用域singleton:单例模式,spring bean默认就是这个模式。 prototype:每次请求都会创建一个新的bean。 request:每次http请求都会创建一个新的bean,该bean在当前http request内生效。 session:每次http请求都会创建一个新的bean,该bean在当前http session内生效。 globle-session:全局session作用域。2. bean生命周期实例化 属性赋值 初始化 销毁2.1. 实
2024-08-31 14:12:31
372
原创 IO多路复用
需要处理较多文件描述符,但又不想受到select最大数量限制的场景下可以使用。高并发的网络服务器、分布式系统等需要同时处理大量连接的应用程序。适用于低并发场景,或者对性能要求不高的小型应用程序。
2024-08-30 12:51:12
382
原创 跨域请求和同源策略
一个网页中的脚本尝试向不同源的服务器发起请求时,就称为跨域请求。例如,网页http://a.com中的脚本向http://b.com发起的请求就是跨域请求。
2024-08-27 19:44:30
319
原创 Java类加载器
开发人员可编写自己的类加载器,以实现灵活的类加载策略,如加解密字节码、热部署(运行时替换类)、远程加载(加载网络上的类)、隔离类(避免冲突和安全)。若未指定,自定义类加载器的父加载器默认是应用程序类加载器。可以指定自定义类加载器是扩展、应用程序、其他自定义类加载器作为父加载器。不能指定启动类加载器作为父加载器。启动核心无法动,扩展加载扩展类。应用加载开发类,自定灵活随便搞。启动:超市仓库,存放核心货物,对应加载核心类库,神秘不可见。扩展:进口商品区,带来特色商品,如加载扩展类库增添功能。
2024-08-24 14:27:11
611
原创 Java的强软弱虚引用
JVM宁愿死,都不会回收。如果堆内存被强引用占满,JVM会OOMError、甚至崩溃,但就是不会去回收强引用。强引用就是这么强。
2024-08-22 14:50:17
431
原创 理解零拷贝
零拷贝(Zero-copy)是一种旨在减少数据在计算机里复制次数的方法,以提高数据传输的效率。下面用从硬盘读取一个文件,通过网络发送出去的场景来介绍零拷贝。
2024-08-22 10:26:15
395
原创 JVM内存区域和GC
由于JVM的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。它可以在满足短停顿时间的同时,保持较高的吞吐量,能够有效地处理大内存和多处理器环境下的垃圾回收问题。它的目标是达到一个可控制的吞吐量,即运行用户代码的时间与垃圾回收时间的比例。进行垃圾回收时,会暂停所有用户线程,使用多个线程进行垃圾回收操作,比Serial的垃圾回收时间短。一个较小的内存空间,是当前线程所执行的字节码的行号指示器。
2024-08-21 11:25:13
1252
原创 Java动态代理
静态代理就是B类中用A类去真正地做。正式点说就是,手动创建代理类,实现与目标对象相同的接口,并在代理类中调用目标对象的方法,同时可以在调用前后添加额外的逻辑。这里主要介绍动态代理,有两种常见的动态代理方式。Spring的AOP中,如果目标对象实现了接口,则用JDK动态代理,否则采用CGLIB动态代理。
2024-08-18 11:54:48
737
原创 常见Java集合
TreeMap的key不能空,value可为空;TreeSet是包了TreeMap且只用它的key,所以TreeSet的元素不能为空;HashMap的key、value都可以为空;HashTable包了HashMap,但它为了线程安全,key、value都不能为空;HashSet包了HashMap且只用它的key,所以HashSet的元素可以为空;ConcurrentHashMap的key、value为了线程安全,都不能为空;
2024-08-16 08:23:09
1000
原创 Java IO
上面表中为了简单,只写了输入的,输出的流与输入是一一对应的(input对应output、reader对应writer)。DataInputStream读取基本类型(如int、float等);ObjectInputStream读取复杂对象,也就是用于序列化/反序列化的场景。FilterInputStream/FilterReader 可用于数据进行加密、压缩、转换,Buffered的那几个类就是继承了Filter的这些类来实现的。
2024-08-15 13:47:40
625
原创 操作系统内存管理
操作系统中的进程空间,也称为进程地址空间,是指为每个进程分配的独立的虚拟内存区域。进程空间为每个进程提供了一种隔离和保护的机制,使得不同进程之间不会相互干扰。每个进程都认为自己拥有整个地址空间,但实际上是通过操作系统的内存管理机制实现的虚拟映射。打个比方,进程空间就像每个进程自己的“独立房间”,房间里有不同的“区域”用来存放各种东西,而且每个房间之间是相互隔开的,保证了各自的“隐私”和“安全”。例如,进程 A 不能直接访问进程 B 的内存空间,避免了数据混乱和错误。
2024-08-14 12:30:00
415
原创 进程和线程
进程:资源分配的最小单位,这里的资源指内存。线程:调度和执行的最小单位,即CPU隔离。协程:用户态的轻量级线程。纤程是Windows系统对协程的一个具体实现,而协程是一个更广泛的概念,由编程语言或运行时库支持。一个线程可以有多个纤程。用户态:是指程序运行时的普通状态。在用户态下,程序只能访问有限的资源和执行受限的操作,比如进行一些基本的计算、访问自身的内存空间等。这是为了保证系统的稳定性和安全性,防止用户程序对系统造成破坏或非法访问关键资源。内核态:则具有更高的权限。
2024-08-12 19:28:46
720
原创 VPC虚拟私有云
VPC即虚拟私有云(Virtual Private Cloud)是在公有云上创建的一个逻辑隔离的网络。VPC是对网络资源的一种抽象,提供类似于操作系统的虚拟内存的功能,让每个用户在云上像是在独占地使用整个网络,无需担心IP地址冲突等问题。
2024-08-11 14:43:10
489
原创 TCP和UDP
此时,客户端进入TIME_WAIT状态,等待一段时间后(通常是2MSL,即报文段最大生存时间的两倍),确保服务器收到ACK报文后关闭连接,客户端也关闭连接。因为要保证可靠传输,建立链接的时候必须要双方知道对方的序列号,所以我带上序列号喊你一声,你应(确认),你带上序列号喊我一声,我应(确认),这样才确保双方知道对方的序列号,如果只有2次,就最多一方知道对方序列号。3.第三次挥手:服务器发送完剩余的数据后,发送一个FIN报文给客户端,表示服务器也已完成数据的发送,想要关闭连接。
2024-08-09 09:12:32
683
原创 分布式事务
事务的基本结构开启事务执行业务逻辑提交/回滚事务分布式事务是指在多个系统上进行的事务,目的是保证在一个过程中对这些系统操作的数据的一致性。分布式事务实现的思路:要执行事务的各个系统准备好后,再统一提交或回滚。
2024-03-27 09:19:45
410
1
原创 分布式锁的实现方式
开启不自动提交事务select xx for update //上锁手动提交事务 //释放锁一般不使用这种方式,因为如果数据库异常,数据库释放锁的时间会相对较长,且数据库压力会比较大。当然也可以用其他排他锁,如update语句、insert语句等。
2024-03-25 21:38:07
241
1
原创 mysql索引合并
mysql最终会走那种索引合并策略,是根据查询优化器计算估计后决定的,不是满足以上某种情况就一定会走对应的索引合并方式。注意,没有sort-intersection。因为sort-union从索引获取的记录数少,即使排序,成本也不会太高。而intersection是从索引中获取的记录较多,排序成本太高。
2024-02-23 18:20:28
606
1
原创 数据库的锁
共享锁也叫s锁(share),写法上S锁后,其他事务可读,不可改。排他锁也叫x锁(exclusive),写法insert update delete都是排他锁。上X锁后,其他事务不可读和改。在同一个事务中:用了x再用x会阻塞用了x再用s会阻塞用了s再用x会阻塞用了s再用s不会阻塞。
2024-02-20 17:54:10
396
1
linux0.11版内核,学习用
2012-08-14
Code Reading: The Open Source Perspective
2012-07-26
C++语言的设计和演化
2012-07-26
The C++ Standard Library
2012-07-26
C++ Common Knowledge
2012-07-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人