自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 百度智能业务部java实习一面

百度智能业务部java实习一面

2022-09-07 21:02:17 474 1

原创 Spring如何解决循环依赖?从基础到源码讲解

我们再回顾一下 3 级缓存的作用:为“Spring 的单例属性”而生,就是个单例池,用来存放已经初始化完成的单例 Bean;为“解决 AOP”而生,存放的是半成品的 AOP 的单例 Bean;为“打破循环”而生,存放的是生成半成品单例 Bean 的工厂方法。如果你能理解上面我说的三条,恭喜你,你对 Spring 的循环依赖理解得非常透彻!关于循环依赖的知识,其实还有,因为篇幅原因,我就不再写了,这篇文章的重点,一方面是告诉大家循环依赖的核心原理,另一方面是让大家自己去 debug 代码。

2022-09-07 20:34:09 352

原创 Bean 生命周期详解

IoC,控制反转,想必大家都知道,所谓的控制反转,就是把 new 对象的权利交给容器,所有的对象都被容器控制,这就叫所谓的控制反转。IoC 很好地体现了面向对象设计法则之一 —— 好莱坞法则:“别找我们,我们找你”,即由 IoC 容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。理解好 IoC 的关键是要明确 “谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”。谁控制谁,控制什么?

2022-09-07 15:43:55 4178 4

原创 超全Redis面试题,谈笑间对付面试官

Redis 在当今的计算机行业,可以说是使用的最为广泛的内存数据库,几乎所有的后端技术面试都会涉及到 Redis 相关的知识,正所谓知己知彼,百战百胜。小白今天精心整理的超全的 Redis 面试题,希望可以帮助到在路上的你们~Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的,它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向Redis 除了做缓存之外

2022-09-06 20:52:26 477

原创 什么时候不要采用微服务架构

你有更多可供帮助的资源,比如你有可供查阅的代码,你可以与使用和维护系统的人员交流讨论,你也知道一个“好”的系统是什么样的——基于当前稳定运作的系统进行改变,让你更容易知道你在哪里做错了,你的决策是否过于激进。应用非常脆弱,新的代码会产生许多意想不到的影响。如果你没有把握设计好最初的方案,就采用了微服务,那么你的启程之路将更加困难,因为重构微服务比重构单体应用要困难得多。如果没有认真地定义好模块,我们要么陷入传统的分层式单体(大泥球),或者更差的结果,成了分布式单体应用,它同时具备单体和微服务两者的缺点。

2022-09-06 19:48:39 1012 1

原创 如何做好分布式任务调度——Scheduler 的一些探索

无论是互联网应用或者企业级应用,都充斥着大量的任务。我们常常需要一些任务调度系统帮助我们解决问题。随着微服务化架构的逐步演进,单体架构逐渐演变为分布式、微服务架构。在此的背景下,很多原先的单点式任务调度平台已经不能满足业务系统的需求。于是出现了一些基于分布式的任务调度平台。Scheduler 是飞书内的分布式任务调度平台。分布式任务调度能力主要包括:分布式:平台是分布式部署的,各个节点之间可以无状态和无限的水平扩展(保证可扩展);

2022-09-06 19:27:57 1516

原创 网关技术选型

网关,很多地方将网关比如成门, 没什么问题, 但是需要区分网关与网桥的区别,网桥工作在数据链路层,在不同或相同类型的LAN之间存储并转发数据帧,必要时进行链路层上的协议转换。可连接两个或多个网络,在其中传送信息包。网关是一个大概念,不具体特指一类产品,只要连接两个不同的网络都可以叫网关,网桥一般只转发信息,而网关可能进行包装。

2022-09-06 15:52:12 638

原创 如何保证数据库和缓存双写一致性?

数据库和缓存(比如:redis)双写数据一致性问题,是一个跟开发语言无关的公共问题。尤其在高并发的场景下,这个问题变得更加严重。我很负责的告诉大家,该问题无论在面试,还是工作中遇到的概率非常大,所以非常有必要跟大家一起探讨一下。今天这篇文章我会从浅入深,跟大家一起聊聊,数据库和缓存双写数据一致性问题常见的解决方案,这些方案中可能存在的坑,以及最优方案是什么。

2022-09-05 21:20:49 168

原创 java应用提速(速度与激情)

什么是速度?速度就是快,快有很多种。有小李飞刀的快,也有闪电侠的快,当然还有周星星的快:(船家)"我是出了名够快"。(周星星)“这船好像在下沉?” (船家)“是呀!沉得快嘛”。并不是任何事情越快越好,而是那些有价值有意义的事才越快越好。对于这些越快越好的事来说,快的表现是速度,而实质上是提效。今天我们要讲的java应用的研发效率,即如何加快我们的java研发速度,提高我们的研发效率。提效的方式也有很多种。但可以分成二大类。我们使用一些工具与平台进行应用研发与交付。当一小部分低效应用的用户找工具与平台负责人时

2022-09-05 21:15:57 179

原创 实战:10 种实现延迟任务的方法,附代码

顾明思议,我们把需要延迟执行的任务叫做延迟任务。延迟任务的使用场景红包 24 小时未被查收,需要延迟执退还业务;每个月账单日,需要给用户发送当月的对账单;订单下单之后 30 分钟后,用户如果没有付钱,系统需要自动取消订单。等事件都需要使用延迟任务。手动无线循环;DelayQueue;Redis zset 数据判断的方式;Redis 键空间通知的方式;Netty 提供的 HashedWheelTimer 工具类;RabbitMQ 死信队列;

2022-09-05 21:13:48 242

原创 23道 K8S 面试题

Kubelet:负责维护容器的生命周期,同时也负责Volume和网络的管理,一般运行在所有的节点,是Node节点的代理,当Scheduler确定某个node上运行pod之后,会将pod的具体信息(image,volume)等发送给该节点的kubelet,kubelet根据这些信息创建和运行容器,并向master返回运行状态。Pod:是k8s集群里面最小的单位。在上面的配置文件中,探测机制为在容器运行5秒后,每隔五秒探测一次,如果cat命令返回的值为“0”,则表示健康,如果为非0,则表示异常。

2022-09-04 20:32:17 2236 1

原创 Kafka 万亿级消息实践之资源组流量掉零故障排查分析

Kafka 服务端我们按照资源组的方式做了 Kafka broker的逻辑隔离且从Grafana监控上可以看出有一些topic的流量并没有严重掉零的情况,那么我们暂时将分析问题的目光转移到 Kafka client端,去分析 Kafka producer的发送消息的过程是否存在有资源隔离地方没有做隔离导致了整体的雪崩效应。创建 topic,创建 topic 时使用 Kafka 平台提供的接口进行创建,严格遵守 topic 的分区分布只能在项目绑定的资源组管理的 broker 节点上。

2022-09-04 20:22:45 142

原创 小白也能懂的Nacos服务模型

一般在注册中心场景下,会使用临时实例。上述的例子中,并没有出现 Namespace、Group、Cluster 等前文提及的服务模型,我会在下面一节详细介绍,这个例子主要是为了演示 Nacos 支持的一些缺省配置,其中 Service 和 Instance 是必不可少的,这也验证了前文提到的服务和实例是 Nacos 的一等公民。即 Nacos 用户视角看到的服务模型和 Nacos 开发者设计的内核模型可能是完全不一样的,而今天的文章,是站在用户视角观察的,旨在探讨 Nacos 服务发现的最佳实践。

2022-09-04 16:58:10 271

原创 阿里面试:Nacos配置中心交互模型是 push 还是 pull ?原理+源码分析

对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服务发现、配置管理,非常好用的一个工具。然而这样的技术用的人越多面试被问的概率也就越大,如果只停留在使用层面,那面试可能要吃大亏。比如我们今天要讨论的话题,Nacos在做配置中心的时候,配置数据的交互模式是服务端推过来还是客户端主动拉的?这里我先抛出答案:客户端主动拉的!接下来咱们扒一扒Nacos的源码,来看看它具体是如何实现的?

2022-09-04 16:08:54 509

原创 系统设计基础

指某个请求从发出到接收到响应消耗的时间。在对响应时间进行测试时,通常采用重复请求的方式,然后计算平均响应时间。

2022-09-02 19:38:51 171

原创 腾讯一面:Thread、Runnable、Callable、Future、FutureTask,谈谈他们的关系?

腾讯一面:Thread、Runnable、Callable、Future、FutureTask,谈谈他们的关系?

2022-08-31 20:30:11 177

原创 亿级系统的Redis缓存如何设计???

缓存设计时,有很多技巧,优化手段也是千变万化,但是我们要抓住核心要素。那就是,让访问尽量命中缓存,同时保持数据的一致性。

2022-08-31 20:26:54 129

原创 一招搞定spring面试题

一招搞定spring面试题

2022-08-30 21:40:31 112

原创 如何写出有效的单元测试

我们花了很大的篇幅讨论有效单元测试的重要性以及如何写出有效的单元测试,不得不承认单元测试有一定的成本,真正实践依然需要很多的路要走,需要我们在实践中定义好单元测试的边界,找到最适合团队的最佳实践。集成测试是对一个工作单元进行的测试,这个测试对被测试的工作单元没有完全的控制,并使用该工作单元一个或多个真实依赖,例如时间、网络、数据库、线程或随机数生成器等。关于单元测试这件事,我觉得最重要永远是写单元测试的人,优秀的团队文化非常重要,没有什么能够真正衡量单元测试做的好坏,有的只是程序员的职业操守。...

2022-08-29 21:59:51 131

原创 Java面试题「43题」

Java面试题「43题」

2022-08-29 21:36:41 167

原创 如何用java几分钟处理完30亿个数据

*** 按照 x坐标 来分割 字符串,如果切到的字符不为“,”, 那么把坐标向前或者向后移动一位。** @param arr 存放x1,x2坐标* @return*/}}= ',') {}if (end!

2022-08-29 21:19:13 121

原创 Java并发面试精选10题

Java并发面试精选10题,很少但必会的面试题

2022-08-28 21:33:43 111

原创 redisson中的看门狗机制总结

redis分布式锁无法自动续期,比如,一个锁设置了1分钟超时释放,如果拿到这个锁的线程在一分钟内没有执行完毕,那么这个锁就会被其他线程拿到,可能会导致严重的线上问题,我已经在秒杀系统故障排查文章中,看到好多因为这个缺陷导致的超卖了。超过这个时间后锁便自动解开了,不会延长锁的有效期。Redisson提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期,也就是说,如果一个拿到锁的线程一直没有完成逻辑,那么看门狗会帮助线程不断的延长锁超时时间,锁不会因为超时而被释放。...

2022-08-28 21:19:03 968

原创 如何优雅地记录操作日志?

有了上面的分析,已经得出一种我们期望的操作日志记录的方式,那么接下来看看如何实现上面的逻辑。实现主要分为下面几个步骤: * AOP 拦截逻辑 * 解析逻辑 * 模板解析 * LogContext 逻辑 * 默认的 operator 逻辑 * 自定义函数逻辑 * 默认的日志持久化逻辑 * Starter 封装逻辑4.2.1 AOP 拦截逻辑这块逻辑主要是一个拦截器,针对 @LogRecord 注解分析出需要记录的操作日志,然后把操作日志持久化,这里把注解命名为 @LogRecordAnnotation。...

2022-08-28 21:16:02 585 1

原创 String性能提升10倍的几个方法!(源码+原理分析)

本文通过 String 源码分析,发现了 String 的不可变特性,以及不可变特性的 3 大优点讲解;然后讲了字符串优化的三个手段:不要直接 += 字符串、善用 intern() 方法和慎重使用 Split() 方法。并且通过 StringBuilder 的源码分析,了解了 append() 性能高的主要原因,以及正则表达式不稳定性导致回溯问题,进入导致 CPU 使用过高的案例分析,希望可以切实的帮助到你。...

2022-08-28 20:39:18 223

原创 Docker基础知识点总结

本文为 Docker 的入门文章,从为什么选择 Docker 也即 Docker 的优势说起,然后描述了 Docker 中的几个相关术语——镜像、容器、镜像仓库。紧接着就向大家介绍了 Docker 的安装与卸载,最后比较重要的是掌握 Docker 中常用的一些命令。...

2022-08-26 19:18:26 235

原创 被面试官问到消息队列的丢失、重复与积压问题该如何回答

本文我们分享了 MQ 消息队列的热门问题的解决方案,无论是初中级还是高级研发工程师,希望本文对你有所帮助。另外,咱们都可以从这几点出发,与面试官进行友好的交流。咱们来总结一下今天的重点内容。如何确保消息不会丢失?要知道一条消息从发送到消费的每个阶段,是否存在丢消息,以及如何监控消息是否丢失,最后才是如何解决问题,方案可以基于“ MQ 的可靠消息投递 ”的方式。如何保证消息不被重复消费?在进行消息补偿的时候,一定会存在重复消息的情况,那么如何实现消费端的幂等性就这道题的考点。如何处理消息积压问题。...

2022-08-25 20:12:35 105

原创 RocketMQ保姆级教程

RocketMQ是阿里巴巴旗下一款开源的MQ框架,经历过双十一考验、Java编程语言实现,有非常好完整生态系统。RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等,总之就是葛大爷的一句话整篇文章可以大致分为三个部分,第一部分属于一些核心概念和工作流程的讲解;第二部分就是纯手动搭建了一套环境;第三部分是基于环境进行测试和集成到SpringBoot,因为整个过程讲的比较细,所以我称之为“保姆级教程”。好了,废话补多少,直接进入主题。...

2022-08-25 20:10:05 1528

原创 如何保证高可用,我有11 个关键技巧

除了 Redis 中间件外,其他常见的 MySQL、Kafka 消息中间件、HBase 、ES 等 ,凡是涉及到数据存储的介质,都有备份机制,一旦主节点挂了,会启用备份节点,保证数据不会丢失。比如电商大促,业务在峰值时刻,系统抵挡不住全部的流量时,系统的负载、CPU 的使用率都超过了预警水位,可以对一些非核心的功能进行降级,降低系统压力,比如把。架构,将一个复杂的业务域按DDD的思想拆分成若干子系统,每个子系统负责专属的业务功能,做好垂直化建设,各个子系统之间做好边界隔离,降低风险蔓延。...

2022-08-25 20:04:25 1632

原创 Java后端面试精选45题

Java后端面试精选45题

2022-08-25 19:56:09 1399

原创 小米面试题:讲一下Redis分布式锁

此时服务B就重新获取到了该锁,服务B开始执行他的业务,服务A在执行到第12s的时候执行完了,那么服务A会去释放锁,则此时释放的却是服务B刚获取到的锁。因为redis是一个单独的非业务服务,不会受到其他业务服务的限制,所有的业务服务都可以向redis发送写入命令,且只有一个业务服务可以写入命令成功,那么这个写入命令成功的服务即获得了锁,可以进行后续对资源的操作,其他未写入成功的服务,则进行其他处理。当主节点宕机后,主节点的数据还未来得及同步到从节点,进行主从切换后,新的主节点并没有老的主节点的全部数据。

2022-08-24 21:14:24 672

原创 京东技术面:Redis是如何保证高效查询的?

编译时,会按照性能和系统平台,选择最佳的 IO 多路复用函数作为底层实现,选择顺序是,首先尝试选择 Solaries 中的 evport,如果没有,就尝试选择 Linux 中的 epoll,否则就选择大多 UNIX 系统都支持的 kqueue,这 3 个多路复用函数都直接使用系统内核内部的结构,可以服务数十万的文件描述符。空间的申请是自动完成的,所以就避免了缓存溢出。可以通过修改配置来调整。不过需要注意的是这里的多线程仅仅是针对客户端的读写是并行的,Redis 处理事件队列中的命令,还是单线程处理的。

2022-08-24 21:11:00 57

原创 如何优雅的关闭 Java线程池

简介 在开发中使用线程池去执行异步任务是比较普遍的操作,然而虽然有些异步操作我们并不十分要求可靠性和实时性,但总归业务还是需要的。如果在每次的服务发版过程中,我们不去介入线程池的停机逻辑,那么很有可能就会造成线程池中队列的任务还未执行完成,自然就会造成数据的丢失。

2022-08-24 21:05:58 788 2

原创 Java面试丨SpringCloud 面试题分享【25题】

Java面试丨SpringCloud 面试题分享【25题】

2022-08-23 20:20:53 1217

原创 Redis 知识总结

当磁盘的 IO 负载很高,那这个后台线程在执行 AOF fsync 刷盘操作(fsync 系统调用)时就会被阻塞住, ,紧接着,主线程又需要把数据写到文件内存中(write 系统调用),但此时的后台子线程由于磁盘负载过高,导致 fsync 发生阻塞,迟迟不能返回,那主线程在执行 write 系统调用时,也会被阻塞住,直到后台线程 fsync 执行完成后,主线程执行 write 才能成功返回。并不是将集群元数据存储在某个节点上,而是不断的互相通信,保持整个集群的元数据是完整的。

2022-08-23 19:39:45 82

原创 如何实现 1 小时内完成千万级数据运算

本文详细描述如何实现:目前手上可用的资源仅剩一个 16 核剩余 4-8G 内存的机器,单点完成在 1 个小时内千万级别 feed 流数据 flush 操作(主要包括:读数据,计算综合得分,淘汰低分数据,并更新最新得分,回写缓存和数据库)。

2022-08-23 19:37:03 160

原创 消息队列基本原理和选型对比

Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性,被看作是云原生时代实时消息流传输、存储和计算最佳解决方案。:无状态 Proxy 服务,负责接收消息、传递消息、集群负载均衡等操作,它对 client 屏蔽了服务端读写流程的复杂性,是保证数据一致性与数据负载均衡的重要角色。可以扩容但不能缩容;

2022-08-23 19:32:05 71

原创 微服务架构中的10个最重要的设计模式

同样,在企业环境中,应用程序通常部署在各种运行时中(本地,开发,生产)。EventStoreDB,Apache Kafka,Confluent Cloud,AWS Kinesis,Azure事件中心,GCP发布/订阅,Azure Cosmos DB,MongoDB,Cassandra。微服务架构旨在将大型,复杂的系统垂直(按功能或业务要求)划分为较小的子系统,这些子系统属于流程(因此可独立部署),并且这些子系统之间通过与语言无关的轻量级网络通信相互通信(例如REST,gRPC)或异步(通过消息传递)方式。

2022-08-22 17:02:01 120

原创 九种方式,教你读取 resources 目录下的文件路径

方法获取流,上面的几种方式都需要获取文件路径,但是在SpringBoot中所有文件都在jar包中,没有一个实际的路径,因此可以使用以下方式。根路径下获取,SpringBoot中所有文件都在jar包中,没有一个实际的路径,因此可以使用以下方式。类获取文件流,SpringBoot中所有文件都在jar包中,没有一个实际的路径,因此可以使用以下方式。通过绝对路径获取项目中文件的位置,只是本地绝对路径,不能用于服务器获取。主要是通过设置环境变量,将文件放在环境变量中,原理也是通过绝对路径获取。

2022-08-22 16:32:29 171

原创 面试官:Spring Bean 默认是单例的,如何保证并发安全?

如果还要进一步考虑到微服务或分布式服务的影响,方式 4 便不足以处理了,所以可以借助于可以共享某些信息的分布式缓存中间件如 Redis 等,这样即可保证同一种服务的不同服务实例都拥有同一份共享信息(如当前运行中的任务列表等这类变量)。对象,并对此成员变量的值进行修改操作,因此会互相影响,无法达到并发安全(不同于线程隔离的概念,后面会解释到)的效果。有人说,单例 Bean 的成员变量这么麻烦,能不用成员变量就尽量避免这么用,在业务允许的条件下,将成员变量替换为。这种方式自然是最恰当的,本人也是最推荐。

2022-08-22 16:00:01 111

空空如也

空空如也

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

TA关注的人

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