自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 通俗易懂讲G1垃圾回收器

此时不会对所有老年代区进行回收,而且根据暂停时间目标,优先回收价值高(村对对象少)的区域,这也是G1(Gabage first的由来)。3.当Eden需要进行垃圾垃圾回收时,会挑出一个空闲区域来作为幸存者区,用复制算法复制未被回收的对象,需要暂停用户线程,因为幸存者对象相对来说比较少,所以暂停时间很短。5.将Eden区以及之后的幸存者区的存活对象,采用复制算法,复制到新的幸存者区,其中较老的对对象晋升到老年代。如果出现垃圾回收的速度小于对象生成的速度,会触发FullGC,速度较慢,影响性能较大。

2023-06-11 11:30:00 829

原创 通俗易懂讲Java垃圾回收器

为了防止在并发标记阶段,业务线程持续运行,有被标记为垃圾的对象被重新引用,或者出现未被标记为垃圾对象不在被引用的情况发生,所以需要做并发的重新标记。Serial和SerialOid串行垃圾收集器,是指使用但线程进行垃圾回收,适合于个人电脑,堆内存较小的情况,不适合企业。垃圾回收时,只有一个线程在工作,并且java应用中的所有线程都要暂停(STW),等待垃圾回收完成。垃圾收集时,多个线程在工作,并且java应用中的所有线程都要暂停(STW),等待垃圾回收完成。1.Serial 作用于新生代,采用复制算法。

2023-06-11 08:30:00 210

原创 通俗易懂讲JVM分代回收机制

如果from中的A对象一直存活,超过了15次的垃圾回送都没有被释放掉的话,那么A对象会被复制到Old区。这时会标记出Eden区的存活对象,存活对象和to区的存活对象一起复制到from区,然后释放,如下图。FullGC:新生代和老年代完整垃圾回收,内存严重不足时,暂停时间长(STW)应尽力避免。3.将存活对象采用元复制算法复制到to中,复制完毕后,Eden和from内存都得到释放。2.当Eden区内存不足,标记Eden与from(现在阶段是没有的)的存活对象。3.Eden区,from区,to区(8:1:1)

2023-06-10 17:30:00 389

原创 通俗易懂讲垃圾回收算法

1.标记清除算法2.复制算法3.标记整理算法。

2023-06-10 11:30:00 108

原创 通俗易懂讲Java垃圾回收GC

垃圾回收主要是针对堆内存的,堆内存存放了类的对象和数据,随着工程的不断增加对象会不断增多,如果不进行及时的垃圾回收,会造成堆内存溢出。引用计数法:一个对象呗引用一次,在当前对象头上递增一次引用计数,如果这个对象的引用次数为0,代表该对象是可以回收的。如果一个对象没有任何的引用指向它,那这个对象就被认定为垃圾,需要被垃圾回收器进行及时的回收才可以。2.扫描堆中的对象,看是否能够沿着GCRoot对象为起点的引用链找到对象,找不到,表示可以回收。1.虚拟机栈中(栈帧中的本地变量表)引用的对象。

2023-06-10 08:30:00 70

原创 通俗易懂讲Java双亲委派机制

加载某一个类,先委托上一级的加载器进行加载,如果上级加载器也有上级,则会继续向下委托,如果该类委托上级没有被加载,子加载器尝试加载该类,简单来说就是让有上级用上级,没上级用下级,比如要加载自定义。3.但是因为Student类不在扩展类和启动类的目录,所以加载不成功,由应用加载器进行加载。1.通过双亲委派机制可以避免某一个类被重复加载,当父类已经加载后则无需重复加载,保证唯一性。2.先使用上级扩展类加载器,因为还有上一层启动类加载器,所以使用启动类加载器。Java双亲委派机制。

2023-06-09 20:30:00 106

原创 通俗易懂讲Java类加载器

4.自定义类加载器(CustomizeClassLoader):自定义类继承ClassLoader,实现自己的类加载规则。1.启动类加载器(BootStrap ClassLoader):加载JAVA_HOME/jre/lib目录下的库。2.扩展类加载器 (ExtClassLoader):主要加载JAVA_HOME/jre/lib/ext目录中的类。3.应用类加载器(AppClassLoader):用于加载classPath下的类,用户自己使用的类。

2023-06-09 13:00:00 56

原创 通俗易懂讲Java直接内存

并不属于JVM的内存结构,不由JVM进行管理。是虚拟机的系统内存,和方法区/元空间都存储在本地内存中,常见于NIO操作时,用于数据缓冲区,它分配回收成本较高,但读写性能也高,简单来说就是很用着不错,但是想弄到手和扔掉都不容易。在系统内存中划分出直接内存,直接内存系统和JVM都可以访问,避免了Java堆内存和系统内存直接的拷贝,所以IO效率有了很大的提高。常规IO设计到CPU用户态和内核态的转换,拷贝也涉及到系统内存和Java堆内存的拷贝,为了较少这次拷贝,所以就有了NIO。

2023-06-09 08:30:00 135

原创 通俗易懂讲Java方法区

可以看作是一张表,虚拟机指令根据这张常量标找到要执行的类名、方法名、参数类型、字面量等信息,通过javap -v Application.class,查看字节码的结构可以看到三部分内容,类基本信息、常量池和方法定义。看下图,方法的机器指令是#2,#3,#4,需要到对应的常量池中查找具体的底层方法。

2023-06-08 18:30:00 340

原创 通俗易懂讲堆和栈的区别

1.栈内存一般会用用来存储局部变量和方法调用,堆内存主要用来存储类对象和数组的。栈不需要内存垃圾回收,堆内存需要内存垃圾回收。栈空间不足:java.lang.StackOverFlowError。2.栈内存是线程私有的,一个线程对应一个栈,而堆内存是线程共享的。堆内存不足:java.lang.OutOfMemoryError。3.两个异常错误不同,如果堆或者栈内存不足时都会抛出异常。

2023-06-08 12:30:00 26

原创 通俗易懂讲Java虚拟机栈

一般默认栈内存是1024K,如果把栈内存提升到2048K的话,总内存是512M假设都被栈内存使用的情况下,那么活动线程数就从512个降低为256个了,所以活动线程数就减少了。栈帧1未活动栈帧时,先压栈,因为栈帧1调用了方法2,所以栈2压栈,栈帧2又调用了方法3,所以栈帧3压栈,如下图。1.每个线程运行时所需要的内存,称为虚拟机栈,先进后出,每个线程都会创建自己的虚拟机栈,所以说是线程安全的。不是的,因为每个栈对应着一个线程,如果栈分配过大,会导致可启用的线程数的减少。全部弹栈,即完成整个方法调用,如下图。

2023-06-08 08:30:00 43

原创 通俗易懂讲java堆

如下图,java8把java7中在堆中的方法区/永久代转到了本地内存中,并更名了元空间,为什么要做这个调整呢?原因很简单,就是元空间主要存储了java的类和常量,项目不断增大,类和常量也会不断增加,堆空间会占用的越来越大,从而容易造成oom,为了避免这种情况的发生,转到了本地内存。java 堆:线程共享区域,主要用来存储对象实例,数组等,当堆中内存空间即将耗尽时,会抛出OutOfMemoryError异常。老年代主要保存生命周期长的对象,一般是一些老的对象。

2023-06-07 09:32:19 49

原创 通俗易懂讲程序计数器

程序计数器是线程私有的,内部保存的java字节码的行号,用于记录正在执行的字节码指令的地址。

2023-06-07 09:19:12 458

原创 通俗易懂讲JVM

Java Virtual Machine java程序的运行环境(java二进制字节码的运行环境)1. 运行数据区是jvm的主要区域,主要包括元空间,堆,程序计数器,虚拟机栈,本地方法栈。第三个阶段 :字节码翻译为底层系统指令进行执行。2.jvm的运行流程,主要分为4个阶段。第一个阶段:将java代码转化为字节码。第4个阶段:处理java本地方法。2.自动内存管理,垃圾回收机制。第二个阶段:把字节码加载到内存。1.一次编写,到处运行。

2023-06-07 09:01:54 47

原创 通俗易懂讲Threadlocal

1.使用JDBC操作数据库时,会将每一个线程的Connection放入各自的Threadlocal中,从而保证每个线程都在各自的Connection上操作数据库,避免A线程关闭了B线程的连接。a.调用set方法,就是以Threadlocal自己作为key,资源对象作为value,放入当前线程的ThreadlocalMap集合中。1.可以实现资源对象的线程隔离,让每个线程各自用自己的资源对象,避免争用引发的线程安全问题,简而言之就是资源各自用各自的,谁也别打扰谁。

2023-06-07 08:47:27 34

原创 通俗易懂讲redolog和undolog

是主内存的一个空间,专门为数据库的增删改开辟使用的空间,会用于存储增删改的数据(如果在读取数据时,先读取bufferpool的缓存区,如果数据没有再从磁盘中加载)bufferpool的数据会以一定的时间频率来刷盘到磁盘空间,进行数据的持久化,从而减少磁盘IO,提升效率。回滚日志,主要记录数据修改前的信息,undolog是实现回滚和MVCC的主要依据,和redolog记录数据的物理日志不同,redolog记录的是数据的逻辑日志。可以实现数据库事务的一致性和原子性。可以实现数据库事务的持久性。

2023-06-06 15:16:26 249

原创 通俗易懂讲MVCC

大家都知道数据库在读写过程中为保证事务的正确可靠,所必须具备的四大特性ACID,其中redolog可以实现数据库事务的持久性,undolog可以实现原子性和一致性。但是在delete和update操作中,事务提交过后,undolog日志不会立刻删除,因为undolog不仅可以回滚日志,为实现事务的隔离性,MVCC也是需要的。那么隔离性主要就是有数据库的排他锁和MVCC机制来保证的,可以实现事务的RC(读可提交),RR(重复读)的隔离级别,从而避免出现脏读,幻读和不可重复读的问题。快照读和当前读的区别。

2023-06-06 14:41:52 45

原创 关于分布式系统的高可用总结(不限于某个中间件)

纵观现在使用的分布式架构,不管服务于什么业务形式,高可用都是绕不开的一个话题,我把高可用分为自己业务应用的高可用(业务开发同学来保证)和中间件(nosql数据库,关系型数据库,消息中间件)的高可用,高可用方案是互通的,可以相互借鉴。

2023-06-06 12:05:14 310

原创 为了进阿里需要做哪些准备(个人项目篇)

目录个人项目一、一站到底1、如何设计排行榜2、如何解决重复答题3、一个题目被多个人抢答4、如何管理昵称重复5、如何管理出题定时任务6:如何解决客户端断连二、秒杀项目技术选型1、如何解决超卖?2、如何解决重复下单?3、如何防刷?4、热key问题如何解决?5、应对高并发的读请求6、应对高并发的写请求7、如何保证数据一致性8、可靠性如何保障**9、秒杀系统瓶颈-日志10、池化技术三、即时通信1、单聊消息可靠传输2、群聊

2023-04-24 18:21:10 924

原创 详谈“三地五中心”数据部署架构

数据库部署架构是从容量、可用性、性能、成本等多方面权衡的结果,网商银行基础架构从建行之初满足快速业务响应的分布式架构,到单元化架构的落地,再到云原生时代,其中伴随着业务的快速发展,数据库的部署架构也经过多个版本的迭代发展。容灾方面,从最初的“两地三中心”,具备机房级容灾,不具备全部的城市级容灾,经过扩容建设发展到现在的“三地五中心”。具体部署方式如图 3-1-1 所示,采用 3-2-1 的部署方式,任意一个城市的故障,通过选主(选择主库)实现主库的切换完成容灾。图 3-1-1 “三地五中

2023-04-19 17:28:16 866

原创 为了进阿里需要做哪些准备(实战算法篇)

1.根据10MB的内存限制,确定统计区间的大小,就是第二次遍历时的bitArr大小。2.利用区间计数的方式,找到那个计数不足的区间,这个区间上肯定有没出现的数。3.对这个区间上的数做bit map映射,再遍历bit map,找到一个没出现的数即可。

2023-04-18 11:10:33 113

原创 为了进阿里需要做哪些准备(LEETCODE篇)

四、LEETCODE【Python语法】reduce(function, iterable[, initializer]) reduce(lambda x,y:x * y,ns) # 数组之乘积 (ns[0] * ns[1]) * ns[2] reduce(lambda x,y:x + y,ns) # 数组之和# 记忆化搜索@functools.lru_cache(None)res = helper(0,N,0)helper.cache_clear()tupl

2023-04-18 11:00:51 73

原创 为了进阿里需要做哪些准备(Netty篇)

场景的内存分配与 Smalll 类似,如果请求分配内存的大小大于 arena 中的最小的 bin,但是不大于 tcache 中能够缓存的最大块,依然会通过 tcache 进行分配,但是不同的是此时会分配 chunk 以及所对应的 run,从 chunk 中找到相应的内存空间进行分配。在堆内存放的 DirectByteBuffer 对象并不大,仅仅包含堆外内存的地址、大小等属性,同时还会创建对应的 Cleaner 对象,通过 ByteBuffer 分配的堆外内存不需要手动回收,它可以被 JVM 自动回收。

2023-04-15 16:36:15 98

原创 为了进阿里需要做哪些准备(Docker&K8S篇)

如果开始无 test_volume 则会创建这个卷当然除了使用卷,也可以使用将宿主机的文件映射到容器的卷,命令类似,只不过不用提前创建卷,而且数据会映射到宿主机上注意如果宿主机上的目录可以不存在,会在启动容器的时候创建。虚拟化技术就是在操作系统上多加了一个虚拟化层(Hypervisor),可以将物理机的CPU、内存、硬盘、网络等资源进行虚拟化,再通过虚拟化出来的空间上安装操作系统,构建虚拟的应用程序执行环境。这就是我们通常说的虚拟机。镜像类似于虚拟机镜像,是一个只读的模板,是创建Docker容器的基础。

2023-04-15 16:11:08 84

原创 为了进阿里需要做哪些准备(Elasticsearch篇)

Phrase和Term由于是做倒排索引的搜索,相比较而言性能应该要低不少,应尽量控制Suggester用到的索引的数据量,最理想的状况是经过一定时间预热后,索引可以全量map到内存。分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。聚合分析是数据库中重要的功能特性,完成对一个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最大值、最小值,计算和、平均值等。分布式海量数据近实时搜索引擎。

2023-04-14 09:23:11 75

原创 为了进阿里需要做哪些准备(分布式篇)

/考虑到半数以上才作数,一个Accpter得接受多个相同v的提案P2a:如果某个v的提案被accept,那么被Acceptor接受编号更高的提案必须也是vP2b:如果某个v的提案被accept,那么从Proposal提出编号更高的提案必须也是v//如何确保v的提案Accpter被选定后,Proposal都能提出编号更高的提案呢针对任意的[Mid,Vid],有半数以上的Accepter集合S,满足以下二选一: S中接受的提案都大于Mid S中接受的提案若小于Mid,编号最大的那个值为Vid。

2023-04-12 08:50:03 81

原创 为了进阿里需要做哪些准备(SpringCloud篇)

负责 HTTP 请求执行的组件,Feign 中默认的 Client 是通过 JDK 的 HttpURLConnection 来发起请求的,在每次发送请求的时候,都会创建新的 HttpURLConnection 链接,Feign 的性能会很差,可以通过扩展该接口,使用 Apache HttpClient 等基于连接池的高性能 HTTP 客户端。灰度发布是能够平滑过渡的一种发布方式,在发布过程中,先发布一部分应用,让指定的用户使用刚发布的应用,等到测试没有问题后,再将其他的全部应用发布。

2023-04-11 09:14:18 131

原创 为了进阿里需要做哪些准备(Spring篇)

消息绑定,消息解析);简单的说就是#{}是经过预编译的,是安全的,****{}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。如果需要实现动态传入表名、列名,还需要做如下修改:添加属性**statementType="STATEMENT"**,同时sql里的属有变量取值都改成****{}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。每个线程中都有一个自己的ThreadLocalMap类对象,可以将线程自己的对象保持到其中,各管各的,线程可以正确的访问到自己的对象。

2023-04-09 20:25:33 60

原创 为了进阿里需要做哪些准备(Kafka篇)

接着,Leader 会读取底层日志文件中的消 息数据,再更新它内存中的 Follower 副本的 LEO 值,更新为 FETCH 请求中的 fetchOffset 值。Follower 副本只是采用拉(PULL)的方 式,被动地同步 Leader 副本中的数据,并且在 Leader 副本所在的 Broker 宕机后,随时准备应聘 Leader 副本。来区分已经读过的消息,从而消费消息。之前确保一致性的主要手段是高水位机制, 但高水位值无法保证 Leader 连续变更场景下的数据一致性,因此,社区引入了。

2023-04-07 17:31:03 123

原创 为了进阿里需要做哪些准备(Redis篇)

大家好,我是一名即将到40岁的程序员,就职过多家互联网大厂,忙于工作和家庭,也没有做过什么文档性总结,今天的这篇文章,主要是为了写一下当年为了进阿里背过的面试题和一些自己的经验,供大家参考。任何技术相关问题,欢迎加微信沟通 ~微信号:平台不让放,可以底部留言目录五、Redis篇WhyRedis1、简单高效2、Memcache3、Tair4、Guava5、EVCache6、ETCDRedis底层1、redis数据类型2、相关API3、redis底

2023-04-07 10:33:46 297

原创 为了进阿里需要做哪些准备(MySQL篇)

千万级别的文档对象,近10G的数据,对有索引的ID的查询 不会比mysql慢,而对非索引字段的查询,则是全面胜出。索引 | NULL | NULL | 2 | NULL |+----+-------------+-------+------+---------------+------+---------+------+------+-------+1 row in。程序数据是在一个面向对象的、灵活的网络结构下,而不是严格的表中,但具备完全的事务特性、企业级的数据库的所有好处。

2023-04-07 09:34:24 394

原创 为了进阿里需要做哪些准备(多线程篇)

并且这种循环是链表的循环,相当于 A 节点指向 B 节点,B 节点又指回到 A 节点,这样一来,在下一次想要获取该 key 所对应的 value 的时候,便会在遍历链表的时候发生永远无法遍历结束的情况,也就发生 CPU 100% 的情况。如果需要同步的操作执行速度非常快,并且线程竞争并不激烈,这时候使用cas效率会更高,因为加锁会导致线程的上下文切换,如果上下文切换的耗时比同步操作本身更耗时,且线程对资源的竞争不激烈,使用volatiled+cas操作会是非常高效的选择;乐观锁体现的是悲观锁的反面。

2023-04-06 18:43:58 171 1

原创 为了进阿里需要做哪些准备(JVM篇)

我使用 jmap 命令,导出了一份线上堆栈,然后使用 MAT 进行分析,通过对 GC Roots 的分析,发现了一个非常大的 HashMap 对象,这个原本是其他同事做缓存用的,但是做了一个无界缓存,没有设置超时时间或者 LRU 策略,在使用上又没有重写key类对象的hashcode和equals方法,对象无法取出也直接造成了堆内存占用一直上升,后来,将这个缓存改成 guava 的 Cache,并设置了弱引用,故障就消失了。第三,由于缓存的使用,有大量的弱引用,拿一次长达 10 秒的 GC 来说。

2023-04-06 18:09:32 178 1

原创 为了进阿里需要做哪些准备(基础篇)

大家好,我是一名即将到40岁的程序员,就职过多家互联网大厂,忙于工作和家庭,也没有做过什么文档性总结,今天的这篇文章,主要是为了写一下当年为了进阿里背过的面试题和一些自己的经验,供大家参考。任何技术相关问题,欢迎加微信沟通 ~一、基础篇网络基础TCP三次握手​三次握手过程:​ 客户端——发送带有SYN标志的数据包——服务端一次握手Client进入syn_sent状态​ 服务端——发送带有SYN/ACK标志的数据包——客户端二次握手服务端进入syn_rcvd​ 客

2023-04-06 16:17:10 261

原创 为了进阿里需要做哪些准备(最强java八股文和经验)

大家好,我是一名即将到40岁的程序员,就职过多家互联网大厂,忙于工作和家庭,也没有做过什么文档性总结,今天的这篇文章,主要是为了写一下当年为了进阿里背过的面试题和一些自己的经验, 1、ArrayList和LinkedList。 4、select、poll、epoll的区别。 方案1:每日一个滚动榜,当日汇聚(费时间) 2、HTTP与HTTPS之间的区别。 3、static和final关键字。 1、Innodb和Myisam引擎。 6、Recycle对象池(待补充)

2023-03-30 11:15:41 252 1

空空如也

空空如也

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

TA关注的人

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