自定义博客皮肤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)
  • 收藏
  • 关注

原创 美团一面面经:Threadlocal(线程局部变量的原理)->内存泄漏问题->垃圾回收机制

把所有的引用关系看作是一张图,从一个节点GC ROOT(线程栈的本地变量、静态变量、本地方法栈的变量等等)开始,寻找对应的引用节点,找到这个节点后,继续寻找这个节点的引用节点,当所有的引用节点寻找完毕之后。剩余的节点则被认为是没有被引用到的节点,既可以当作垃圾。在我们的ThreadLocal类有一个静态内部类,叫做ThreadLocalMap,用键值对的形式存储每一个线程的变量副本,ThreadLocalMap中元素的key为当前ThreadLocal对象,而value对应线程的变量副本。

2024-05-16 16:05:59 937

原创 集合-精讲

该图片来源于互联网,博主实在难得画我们可以从实现接口进行出发。

2024-05-28 11:32:59 954

原创 美团一面面经:线程池->事务

在实际使用中 线程是很占系统资源的,因此大多数并发框架都会使用线程池来管理线程1.使用线程池可以重复利用已有的线程执行任务,避免线程在创建时造成消耗2.由于没有线程创建和销毁时的消耗,可以提高系统响应速度3.通过线程可以对线程进行合理的管理,根据系统的承受能力调整可运行数量的大小等首先我们可以大致的了解一下线程池的主要核心原理首先 就是创建一个池子,里面是空,提交任务的时候,池子会创建新的线程对象,任务执行完毕,线程归还给池子。下次再次提交任务时,不需要创建新的线程,直接复用已有的线程即可。

2024-05-16 17:51:44 467

原创 美团一面面经:索引:数据结构B+树->索引失效->索引的设计原则

索引是存储在内存中,为服务器存储引擎为了快速找到记录的一种数据结构。索引的主要作用是加快数据查询速度,提高数据库的性能,核心思想 空间换取时间1.创建唯一性索引,保证数据库表中每一行数据的唯一性2.大大加快数据的检索速度,这也是创建索引的最主要原因3.加速表与表之间的连接,特别是在实现数据的参考完整性方面特别有意义4.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

2024-05-16 17:00:31 662

原创 美团一面面经:Spring生命周期的具体详细过程,三级缓存的设计原理

问的是三级缓存原理 但是此处文章扩展了总的来说 我们springbean 的生命周期无非就四步实例化、属性赋值(也叫依赖注入)、初始化、销毁我们本文在上篇的基础上进行简略概述 并且把重点放在bean是如何进入单列池的。也就是初始化阶段。

2024-05-16 15:25:10 731

原创 Redis之双写一致性篇

!本文章为学习笔记问题:redis作为缓存,mysql的数据如何与redis进行同步?双写一致性:当修改了数据库的数据同时更新redis缓存的数据,缓存和数据库必须要保持一致性(强一致性或者最终一致性都行反正就是一致即可)如果是写操作,我们先把缓存中的数据删除,然后更新数据库,最后再延时删除缓存中的数据可以通过两次删除缓存来控制脏数据,但是延迟的时机很难把握,所以无法完全杜绝脏数据,不能做到强一致性。

2024-04-17 17:27:28 225

原创 异常处理机制原理剖析

配置了自定义的异常处理器后,默认的异常处理器就不会被加载,当配置了<mvc:annotaion-driven/>或配置了注解@EnableWebMvc后,默认的异常处理器和自定义的处理器异常解析器都会被注册 这意味着在启动注解驱动的springmvc后,不仅会启用默认的异常处理器还会注册你自定义的异常处理器(当然你必须自定义了异常处理器),这确保你同时享有默认的异常处理机制和你自己定制的异常处理。HandlerExceptionResolver接口:完成自己自定义的异常处理器。在学习本文章时需了解。

2024-04-16 08:52:07 379

原创 SpringMVC的异常处理机制

异常分为编译时异常和运行时异常,编译时异常我们try-cache进行捕获,捕获后自行处理,而运行时异常是不可预期的,就需要规范编码来避免,在SpringMVC中,不管是编译异常还是运行时异常,都可以最终由SpringMVC提供的异常处理器进行统一处理,这样就避免了随时随地捕获异常的繁琐性。当然除了繁琐之外,我们在进行前后端分离异步开发时,往往返回统一格式的结果给客户端,例如:{"code":200,"message":"","data":{"username":"haohao","age":null}},即

2024-04-16 08:36:33 592

原创 SpringMVC的组件原理剖析

前置知识。

2024-04-15 15:19:31 1146 1

原创 spring boot的自动配置原理

EnableAutoConfiguration又组合了注解@Import(AutoConfigurationImportSelector.class) (该类是importSelector接口的实现类) 该类重写了 String[] selectImports(...)方法,经过层层调用最终得到配置文件。spring boot就能帮我们自动注入一个DispatcherServlet ,并且在方法上为我们声明了@Bean注解 最后将方法的返回值自动注入到IOC容器中。注解,这个注解聚合了。

2024-04-15 09:03:47 527 2

原创 SpringMVC关键组件浅析

匹配映射路径对应的Handler,返回可执行的处理器链对象HandlerExecutionChain对象常用组件:RequestMapping HandlerMapping。

2024-03-15 12:26:30 172 1

原创 Redis的哨兵机制

监控故障转移通知。

2024-03-15 10:30:40 649 1

原创 Sentinel解决雪崩问题的四种常见方式

微服务调用调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。如上图所示,由于某种原因发生故障,而其它依赖于该服务(服务D)的服务无法正常工作,从而导致这些服务也出现故障,这种连锁反应就称为雪崩效应。

2024-03-12 10:25:02 476 1

原创 Spring Bean的生命周期

Spring Bean的生命周期是从Bean实例化之后,即通过反射创建出对象之后,到Bean成为一个完整对象,最终存储到单例池中,这个过程被称为Spring Bean的生命周期。Bean创建之后还仅仅是个"半成品",还需要对Bean实例的属性进行填充、执行一些Aware接口方法、执行BeanPostProcessor方法、执行InitializingBean接口的初始化方法、执行自定义初始化init方法等。该阶段是Spring最具技术含量和复杂度的阶段,AOP增强功能,后面要学的Spring注解功能等等。

2024-03-11 23:10:38 1019 1

原创 三级缓存的设计原理

这时Spring会先从三级缓存中获取到创建B的工厂,利用这个工厂先创建一个原始状态的B的Bean,并把它提前暴露给A使用,这样就解决了循环依赖的问题。4.UserDao属性注入,需要UserService,从三级缓存获取UserService,UserService从三级缓存移入二级缓存。三级缓存(singletonFactories):单例Bean的工厂池,缓存半成品对象,对象未被引用,使用时在通过工厂创建Bean。3.UserDao实例化对象,但尚未初始化,将UserDao存储到三级缓存;

2024-03-11 22:58:55 539 1

空空如也

空空如也

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

TA关注的人

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