
面试宝典
常见面试题目汇总
石头城程序猿
架构师的成长之旅,寂寞,孤独,与码为伴!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
面试大咖说:如何保证 redis 中的数据都是热点数据?
案例:MySQL 里有 2000w 数据,redis 中只存 20w 的数据,redis如何保障缓存中存放的是热点数据;另外再给大家普及一下redis使用场景。TODO:1、如何保证 redis中的数据都是热点数据? redis有数据过期时间时间,以及数据容量达到阈值时,根据置换策略,淘汰指定的数据。2、Redis 有哪些适合的场景? 1)会话缓存(Session Cache)最常用的一种使用 Redis 的情景是会话缓存(session cache)。用 Red...原创 2022-01-20 08:42:42 · 3893 阅读 · 0 评论 -
面试大咖说:说说对spring事务的理解
spring的事务开启方式有两种:第一种:声明式事务,声明式事务是通过添加Transaction注解的方式开启事务,一般加在类或者方法上,事务控制粒度比较大,但使用上比较方便;第二种:编程式事务,编程式事务通过TransactionTemplate,控制事务的粒度小,但是代码侵入性比较强。使用spring aop实现。spring事务提供了7中传播机制:1. REQUIRED(必须的):是默认的传播机制,如果B方法中调用A,如果B中有事务,则A无论是否开启事务都会用B的事务,任何地方出原创 2022-01-06 18:13:53 · 628 阅读 · 0 评论 -
面试大咖说:Dubbo SPI 和 Java SPI 区别
JDK SPIJDK 标准的 SPI 会一次性加载所有的扩展实现,如果有的扩展吃实话很耗时,但也没用 上, 很浪费资源。 所以只希望加载某个的实现, 就不现实了ServiceLoader<ISayHello> serviceLoader=ServiceLoader.load(ISayHello.class); System.out.println("Java SPI"); serviceLoader.forEach(ISayHello::say)原创 2022-01-05 19:19:56 · 639 阅读 · 0 评论 -
面试大咖说:Spring bean是如何创建的?
在spring中,万物都是bean对象,每一个对象都可以封装成BeanDefinition,然后去生成bean对象。第一步,spring要找到哪些bean需要实例化: 第一种是xml的方式,如果需要实例化bean就在xml中配置bean标签,找到所有需要创建的bean 第二种注解方式,扫描所有添加了spring注解的bean,把所有的bean封装成一个BeanDefinition放入一个list.第二步,循环list,通过BeanDefinition中的类全名称,通过反射进行实例...原创 2021-12-29 19:14:53 · 475 阅读 · 0 评论 -
面试大咖说:zk 节点宕机如何处理?
在高可用框架中,咱们在系统架构设计时,会尽量避免单点问题,引入冗余的副本机制,分布式CAP理论中,无论AP还是CP,Partition Tolerance分区容错的特征必须得到保障;Zookeeper也提供集群部署方式,同时提供leader选举机制,集群部署推荐配置不少于 3 个服务器。Zookeeper 自身也要保证当一 个节点宕机时, 其他节点会继续提供服务。如果是一个 Follower 宕机, 还有 2 台服务器提供访问, 因为 Zookeeper 上的数据是 有多个副本的, 数据并不会.原创 2021-12-28 11:11:32 · 4373 阅读 · 0 评论 -
面试大咖说:java对象引用,强引用、软引用、弱引用、虚引用,大家都知道多少?
java根据其生命周期的长短又将引用类型分为强引用、软引用、弱引用、虚引用;1、强引用:new一个对象就是强引用例如 Object obj = new Object();当JVM的内存空间不足时,宁愿抛出OutOfMemoryError使得程序异常终止也不愿意回收具有强引用的存活着的对象;软引用的生命周期比强引用短一些。2、软引用是通过SoftReference类实现的。当JVM认为内存空间不足时,就会去试图回收软引用指向的对象;软引用通常用在对内存敏感的程序中,比如高速缓存就有用到软引用,内原创 2021-12-22 22:44:36 · 302 阅读 · 0 评论 -
面试大咖说:垃圾回收器,CMS和G1 大家都知道多少?
1、CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。采用的是"标记-清除算法",整个过程分为4步;(1)初始标记,标记GC Roots能直接关联到的对象 Stop The World-- ->速度很快(2)并发标记,就是从GC Roots开始找到它能引用的所有其它对象的过程(3)重新标记,Stop The World 为了修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录。这个阶段的停顿时间一般会比初始标记阶段.原创 2021-12-21 10:06:50 · 431 阅读 · 0 评论 -
面试大咖说:Spring如何控制某个classA生成的对象实例数
常见的思路:一个bean的创建,通常用new或者反射,对象反序列化等等方式创建。在spring中,保障一个bean在整个Spring的IOC容器中只有一个对象,可以通过scope来控制。当然也可以通过这个属性来创建多个对象。使用详见:过scop注解来控制,在scop注解中包含4个选项,分别为:@Scope("prototype"):多实例,IOC容器启动创建的时候,并不会创建对象放在容器在容器当中,当你需要的时候,需要从容器当中取该对象的时候,就会创建@Scope("singleton"..原创 2021-12-18 09:11:25 · 464 阅读 · 0 评论 -
面试大咖说:kafka 分布式(不是单机)的情况下,如何保证消息的顺 序消费
参考上面的架构图,高可用的架构,搭建kafka集群,每个broker是一个节点,创建topic可以指定副本数,这里的详细知识不一一罗列了,回到咱们的面试问题:Kafka 分布式的单位是 partition,同一个 partition 用一个 write ahead log 组织,可以保证 FIFO 的顺序,不同 partition 之间不能保证顺序。但是绝大多数用户都可以通过 message key 来定义, 因为同一个 key 的 message 可以保证只发送到同一个 partition。..原创 2021-12-15 18:39:15 · 1770 阅读 · 0 评论 -
面试大咖说:讲讲synchronized锁升级流程
1、在 JDK 1.6之前:synchronized 还是一个重量级锁,是一个效率比较低下的锁。synchronized实现方式是 “阻塞或唤醒一个Java线程需要操作系统切换CPU状态来完成,这种状态切换需要耗费处理器时间,如果同步代码块中内容过于简单,这种切换的时间可能比用户代码执行的时间还长”,这也是在JDK6以前 synchronized效率低下的原因,JDK6中为了减少获得锁和释放锁带来的性能消耗,引入了“偏向锁”和“轻量级锁”2、在JDK 1.6后:Jvm为了提高锁的获取与释放效原创 2021-12-14 18:49:50 · 558 阅读 · 1 评论 -
事务隔离机制-Mysql版本控制MVCC
事务隔离机制默认有以下四种原创 2021-04-23 18:01:47 · 248 阅读 · 0 评论 -
数据库面试专题-MySQL如何做性能优化
前言:一般在面试数据库环节的时候,大家经常会遇到这么一个面试问题,问题比较open,考验应聘者的思维逻辑缜密性,知识积累。如果只回答出优化索引,会显得有些low。今天给大家屡一下,后续遇到该类的面试问题,我们应该如何"吊打"面试官,当然面试回答时,还是要注意语气,语速,从容的和面试官交谈。谈到性能优化,我们先看一张图,一条SQL的执行流程,需要经过哪些环节,我们通过这些环节,思考对应的优化策略: 优化策略:一、客户端...原创 2021-04-22 18:02:54 · 349 阅读 · 3 评论 -
如何保障-数据一致性
一、概述:在日常的工作场景,经常遇到数据一致性相关的问题,各路大神在应对各类问题时,也开发出了各种优秀的技术组件,接下来汇总一下,希望对大家学习有帮助.二、单机环境下,多线程并发:在单机多线程并发情况下,如何保障对共享数据的安全访问?相信有经验的开发人员,应该都能回答出来,多线程并发涉及的知识点Synchronized,ReentrantLock,CAS操作通过获取对象锁修饰代码块或者方法,来确保对共享变量的安全访问,来保障逻辑上的一致性。三、数据库事务:以mysql为例,MySQ.原创 2020-10-23 23:58:20 · 5141 阅读 · 0 评论 -
互联网限流算法-漏桶算法 与 令牌桶算法对比差异
两种算法,令牌桶的算法更具有优势,除了可以控制客户端请求的TPS,令牌桶还有冗余的令牌应对突发流量,当然应对突然流量,底层的微服务也要足够的健壮性,否则服务很容易被瞬时流量压垮;相比令牌桶,漏桶算法,访问服务的TPS比较均匀,不会超出最大的TPS,当访问第三方系统时,对方的接口并发数如果限制TPS,那么相对采用令牌桶比较合适。1、漏桶算法示例:2、令牌桶算法示例:...原创 2020-08-01 17:08:50 · 1026 阅读 · 0 评论 -
BeanFactory与FactoryBean的区别
一、这两个概念,命名比较相似,刚接触源码的时候,困惑了一票程序猿: 1)BeanFactory 是接口,提供了IOC容器最基本的形式,给具体的IOC容器的实现提供了规范,顶层接口。 2)FactoryBean 也是接口,为IOC容器中Bean的实现提供了更加灵活的方式,FactoryBean在IOC容器的基础上给Bean的实现加上了一个简单的工厂模式和装饰模式 ,我们可以在getObject()方法中灵活配置. 区别:FactoryBean是个Bean.在Spring中,所...原创 2020-05-16 23:14:41 · 17822 阅读 · 1 评论 -
JDK动态代理与Cglib的区别
一、前言:CGLIB(Code Generation Library)是一个开源项目,是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。cglib封装了asm,可以在运行期动态生成新的class,cglib用于AOP;JDK动态代理,是java反射工具包自带的工具类;简单对比:从实现机制角度出发: 1)JDK代理类需要实现InvocationHandler接口,重写invoke方法; 2)相比JDK这个特征,cglib却没...原创 2020-05-16 17:14:38 · 752 阅读 · 0 评论 -
Spring事务隔离级别详解
我们说的事务隔离级别是指并发事务,操作相同的数据,引发的问题,数据库针对这种业务场景,满足不同的业务诉求,提供四种隔离级别:1、读未提交(Read Uncommitted): 一个事务读到另一个事务还没有提交的数据。如果另一个事务失败了,回滚了,那么第一个事务读到的数据就是无效的数据。这就是脏读。 场景:屌丝A操作存款业务,一次性将工资50000都存到LP指定的账户上,LP这时刚好查看到了账户信息,心中充满喜悦;屌丝A在事务提交之前,突然发现忘记存私房钱了,于是赶紧撤销,改...原创 2020-05-11 16:38:11 · 1813 阅读 · 3 评论