自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 问答 (5)
  • 收藏
  • 关注

原创 字节十年程序员分享Spring AOP介绍及源码分析

软件开发经历了从汇编语言到高级语言和从过程化编程到面向对象编程;前者是为了提高开发效率,而后者则使用了归纳法,把具有共性的东西进行归类并使之模块化,达到便于维护和扩展的目的;如果说面向对象编程可以对业务需求进行很好的分解使之模块化;那么面向切面编程AOP(Aspect-Oriented Programming)则可以对系统需求进行很好的模软件开发经历了从汇编语言到高级语言和从过程化编程到面向对象编程;

2023-06-04 16:16:41 196

原创 面试官亲述|如何优雅地介绍自己的项目经历?

其实可能会过犹不及,面试官就会重点考察你说的每个细节,因为怀疑你说的都是你从网上看的,而不是你项目中用到的。不管怎样,一旦回答简单,不主动说出你的擅长点,或没有条理很清楚地说出你的亮点,就算我让你通过面试,也不会写上“框架细节了解比较深,数据库应用比较熟练”等之类的好评语,你即使通过技术和后面的综合面试,工资也是比较低的。在做项目介绍的时候,你可以穿插说出一些你的亮点,但请记得,不论在介绍项目还是在回答问题,你当前的职责不是说明亮点而是介绍项目,一旦你详细说,可能会让面试官感觉你跑题了。

2023-06-04 11:17:53 502

原创 Java 自带的性能调优神器!!你还没用过吗?

VisualVM 是 Netbeans 的 profile 子项目,已在中自带,能够监控线程,内存情况,查看方法的 CPU 时间和内存中的对 象,已被 GC 的对象,反向查看分配的堆栈(如 100 个 String 对象分别由哪几个对象分配出来的)。在(默认是)目录下面,有一个文件,双击打开,从 UI 上来看,这个软件是基于 NetBeans 开发的了。VisualVM 提供了一个可视界面,用于查看 Java 虚拟机上运行的基于 Java 技术的应用程序的详细信息。VisualVM 对。

2023-06-04 11:11:13 205

原创 MyBatis 中用了哪些牛逼的设计模式?

通过梳理,MyBatis 大约运用了 10 种左右设计模式。可以说,复杂且优秀的 ORM 框架源码在设计和实现的过程中都会使用大量的设计模式。在解决复杂场景的问题时,需要采用分治、抽象的方法,运用设计模式和设计原则等相关知识,把问题合理切割为若干子问题,以便加以理解和解决。学习源码远不是只是为了应付面试,更重要的是学习优秀框架在复杂场景下的解决方案。通过学习这些优秀的方案技术,可以提高对技术设计和实现的理解,扩展编码思维,积累落地经验。只有经过这样长期的积累,我们才更有可能成为优秀的高级工程师和架构师。

2023-06-04 10:21:44 227

原创 大家都来看一看吧,Java面试真卷的离谱。。。

为了帮大家节约时间,特意找腾讯的大佬要来了一些面试相关的资料,内容非常的全面,真的可以好好补一补,希望大家在金三银四都能拿到理想的薪资和offer!很多时候,面试官问的问题会和自己准备的“题库”中的问题不太一样,即使做了复盘,下次面试还是不知道该从何处下手。大家好,最近有不少小伙伴在后台留言,今年面试实在是太卷了,不知道从何下手!并且,你最好还要时不时自测一下,对着一些面试常见的问题进行自问。MQ+Kafka+Zookeeper(40页)设计模式+项目+高并发(41页)另外,准备面试的小伙伴,

2023-06-04 10:05:46 79

原创 教你打通Git的任督二脉

什么是版本控制?我真的需要吗?版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。什么是分布式版本控制系统分布式版本控制系统( Distributed Version Control System,简称 DVCS )。在这类系统中,像 Git,Mercurial,Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜 像出来的本地仓库恢复。

2023-06-04 10:00:29 62

原创 圆梦!顺利拿到字节、淘宝、拼多多等大厂 offer!

面经部分都是拿到 offer 或者谈薪阶段主动终止的公司,其他小公司或创业公司都是为了练手,面试题没有普遍性的都没有列举出来,面试问题写的少的都是问项目、业务比较多的。算法题只在 leetcode 上找原题,没有贴出链接的就是 leetcode 上没有的。

2023-06-02 15:27:04 255

原创 8年美团程序员教你9大性能优化经验总结,强烈建议收藏!

业务发展到一定阶段时,缓存会承担大部分数据访问的压力,数据库已经习惯了有缓存的日子,所以当缓存服务器崩溃时,数据库会因为完全不能承受如此大的压力而宕机,进而导致整个网站不可用,这种情况被称作缓存雪崩,发生这种故障,甚至不能简单地重启缓存服务器和数据库服务器来恢复网站访问。HTTP协议是无状态的应用层协议,意味着每次HTTP请求都需要简历通信链路,进行数据传输,而在服务器端,每个HTTP都需要启动独立的线程去处理,这些通信和服务的开销都很昂贵,减少HTTP请求的数目可有效提高访问性能。

2023-06-02 11:27:03 177

原创 10万字200道Java经典面试题总结(附答案)

当线程 A 持有独占锁a,并尝试去获取独占锁 b 的同时,线程 B 持有独占锁 b,并尝试获取独占锁 a 的情况下,就会发生 AB 两个线程由于互相持有对方需要的锁,而发生的阻塞现象,我们称为死锁。

2023-06-02 10:58:56 137

原创 京东架构师教你Spring 如何解决 Bean 的循环依赖问题

以及。

2023-06-02 10:26:46 76

原创 SpringBoot可以同时处理多少请求?你知道吗?

前两天面试的时候,面试官问我:一个ip发请求过来,是一个ip对应一个线程吗?我突然愣住了,对于SpringBoot如何处理请求好像从来没仔细思考过,所以面试结束后就仔细研究了一番,现在就来探讨一下这个问题。

2023-06-02 10:09:31 201

原创 京东十年老架构:MySQL——GROUP BY详解与优化

以下是GROUP BY子句的基本语法:sql复制代码其中,col1col2, ...是要分组的列名,是用于聚合数据的函数,如SUMAVGMAXMIN等。table_name是要从中检索数据的表的名称,condition是可选的查询条件。

2023-06-01 16:09:43 455

原创 Redis内存兜底策略——内存淘汰及回收机制

Redis内存淘汰机制是指在Redis的用于缓存的内存不足时,怎么处理需要新写入且需要申请额外空间的数据Redis提供了八种内存淘汰策略,分别是:noeviction:不会淘汰任何键,达到内存限制后返回错误allkeys-random:在所有键中,随机删除键volatile-random:在设置了过期时间的键中,随机删除键allkeys-lru:通过LRU算法淘汰最近最少使用的键,保留最近使用的键volatile-lru:从设置了过期时间的键中,通过LRU算法淘汰最近最少使用的键。

2023-06-01 15:31:47 715

原创 教你使用Feign替换RestTemplate

类型作用说明修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象请求参数编码将请求参数编码,便于通过http请求发送支持的注解格式默认是SpringMVC的注解失败重试机制请求失败的重试机制,默认是没有,不过会使用Ribbon的重试一般情况下,默认值就能满足我们使用,如果要自定义时,只需要创建自定义的@Bean覆盖默认Bean即可。下面以日志为例来演示如何自定义配置。

2023-06-01 15:29:11 341

原创 面试必问之缓存击穿、穿透、雪崩及常用解决方案

本文介绍了缓存击穿、缓存穿透和缓存雪崩三种问题及解决方案。缓存击穿:先击后穿缓存击穿的解决方案有:设置热点数据永不过期、定时更新、分布式缓存穿透:将缓存穿了个洞缓存穿透的解决方案有:业务层校验、缓存空值、布隆过滤器缓存雪崩:大量失效Key缓存雪崩的解决方案有:设置不同的过期时间、缓存预热、多级缓存、限流熔断、集群和负载均衡结尾金九银十快到了很多朋友对面试不够了解,不知道如何准备,对面试环节的设置以及目的不了解,尤其是面试题还很难,自己看解析都有点不明白。

2023-06-01 15:12:55 479

原创 你知道MySQL中字符串的查询效率吗?

通过对字符串加索引,可以提高查询效率,但需要注意指定长度,无法使用覆盖索引通过使用CRC32,需要额外存一个字段,将字符串转为整数存储,节省空间,效率提升并不是很大,但存在碰撞问题,可以加多字符串筛选条件-对于CRC32存在碰撞问题,可以使用CRC64减少碰撞,但需要安装 common_schema database函数库。

2023-06-01 14:45:15 245

原创 实际开发中Oracle 定时任务job实际应用

Oracle定时任务是在oracle系统中一个非常重要的子系统,运用得当,可以大大提高我们系统运行和维护能力。oracle定时任务的功能,可以在指定的时间点自行执行任务。那么在实际工作中,什么样的场景会用到定时任务呢?下面是在实际工作中用到的真实业务场景举例在生成环境中,有时候需要在表中记录一些业务日志,系统运行时间长了之后,表中日志会越来越多,导致系统性能下降,这时候就需要用到定时任务,定时去删除表中一些时间年代比较久远垃圾数据。

2023-06-01 14:03:37 486

原创 阿里老架构教你如何解决Oracle 死锁与慢查询

按模式6等待TX:当会话等待另一个会话已持有的行级锁时发生该事件,即某个用户正在更新、删除另一个会话希望更新、删除的行时,会发生这种情况。做GROUP BY(SQL_TEXT是完整SQL文本前1000个字符,存在截断的可能,按在这个统计可能不准确),就针对每条SQL(不管是否相同)单独统计,当然,也可以考虑按。这是因为即便相同的SQL,每次执行耗时也可能不一样,所以,考虑求平均值,所以需要对SQL分组统计,相同,大概率为同一条SQL,所以考虑从按。

2023-06-01 13:56:30 790

原创 【MySQL速通篇】5000字吃透MySQL部分重要知识点

4、主键可以被其他表引用为外键,而唯一索引不能。在我们浏览器搜素想要的内容时,返回的结果通常是很多的,如果一次将结果全部显示给你,那么电脑可能会崩溃,这时浏览器就会默认返回结果的前几十条,这种对想要查询结果的条数的限制我们在数据库中也可以使用l。2)数据库主键,指的是一个列或多列的组合,其值能唯一地标识表中的每一行,通过它可强制表的实体完整性。所谓唯一索引,就是在创建索引时,限制索引的字段值必须是唯一的。SqlServer:自增步长:是基础表级别的:可以单独的对某一张表的步长进行设置,而不改变全局的步长;

2023-06-01 11:04:52 41

原创 带你三天吃透Mysql八股文(带你精通Mysql)

索引是存储引擎用于提高数据库表的访问速度的一种数据结构。它可以比作一本字典的目录,可以帮你快速找到对应的记录。索引一般存储在磁盘的文件中,它是占用物理空间的。如果 SQL 语句中用到了组合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个组合索引去进行匹配。当遇到范围查询(betweenlike)就会停止匹配,后面的字段不会用到索引。对(a,b,c)建立索引,查询条件使用 a/ab/abc 会走索引,使用 bc 不会走索引。对(a,b,c,d)建立索引,查询条件为。

2023-06-01 10:24:49 88

原创 十年老架构亲自出品:Spring Boot 自动配置一篇概览

自动配置类通过添加 @AutoConfiguration 注解实现。因为 @AutoConfiguration 注解本身是以 @Configuration 注解的,所以自动配置类可以算是一个标准的基于 @Configuration 注解的类。@Conditional 注解可以用于声明自动配置启用条件,通常,我们可以使用 @ConditionalOnClass、@ConditionalOnMissingBean 注解。

2023-05-31 16:55:02 465

原创 跳槽必会!:MySQL百万数据深度分页优化思路分析

我们现在知道了LIMIT 遇到后面查询的性能越差,性能差的原因是因为要回表,既然已经找到了问题那么我们只需要减少回表的次数就可以提升查询性能了。

2023-05-31 16:06:05 83

原创 业务场景题——秒杀系统如何避免库存超卖?

官方介绍:Redisson是一个基于Redis的Java驻留内存数据网格(In-Memory Data Grid)。它封装了Redis客户端API,并提供了一个分布式锁、分布式集合、分布式对象、分布式Map等常用的数据结构和服务。Redisson支持Java 6以上版本和Redis 2.6以上版本,并且采用编解码器和序列化器来支持任何对象类型。Redisson还提供了一些高级功能,比如异步API和响应式流式API。它可以在分布式系统中被用来实现高可用性、高性能、高可扩展性的数据处理。

2023-05-31 16:01:06 1398

原创 15-20K的技术点之:JENKINS基础使用

HTML Publisher Plugin 插件在新的Jenkins版本中会导致打开的网页中无法加载CSS以及无法点击按钮的情况,由于CSP导致,可在Jenkins控制台中执行:System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")以解决此问题。其他由于CSP原因导致的html插件也可用此方法解决。

2023-05-31 15:50:37 33

原创 总算搞懂了!困扰我的Redis缓存与DB一致性问题

使用缓存的时候,我们需要关注Redis与DB数据的一致性。如果Redis缓存与DB数据不一致,就可能导致用户一直只能获取到数据错误的缓存,严重影响用户体验。那如何让Redis与DB数据一致性呢?

2023-05-31 15:30:10 412

原创 十年老架构带你深入学习Redis(5):集群

集群,即Redis Cluster,是Redis 3.0开始引入的分布式存储方案。集群由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制。集群的作用,可以归纳为两点:1、数据分区:数据分区(或称数据分片)是集群最核心的功能。集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;

2023-05-31 15:14:38 98

原创 十年老架构带你深入学习Redis(4):哨兵

哨兵系统的搭建过程,有几点需要注意:(1)哨兵系统中的主从节点,与普通的主从节点并没有什么区别,故障发现和转移是由哨兵来控制和完成的。(2)哨兵节点本质上是redis节点。(3)每个哨兵节点,只需要配置监控主节点,便可以自动发现其他的哨兵节点和从节点。(4)在哨兵节点启动和故障转移阶段,各个节点的配置文件会被重写(config rewrite)。(5)本章的例子中,一个哨兵只监控了一个主节点;实际上,一个哨兵可以监控多个主节点,通过配置多条sentinel monitor即可实现。

2023-05-31 15:08:18 47

原创 十年老架构带你深入学习Redis(3):主从复制

在使用读写分离之前,可以考虑其他方法增加Redis的读负载能力:如尽量优化主节点(减少慢查询、减少持久化等其他情况带来的阻塞等)提高负载能力;使用Redis集群同时提高读负载能力和写负载能力等。如果使用读写分离,可以使用哨兵,使主从节点的故障切换尽可能自动化,并减少对应用程序的侵入。下面回顾一下本文的主要内容:1、主从复制的作用:宏观的了解主从复制是为了解决什么样的问题,即数据冗余、故障恢复、读负载均衡等。2、主从复制的操作:即slaveof命令。

2023-05-31 15:05:26 324

原创 十年老架构带你深入学习Redis(2):持久化

持久化的功能:Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;当下次Redis重启时,利用持久化文件实现数据恢复。除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置。Redis持久化分为RDB持久化和AOF持久化:前者将当前数据保存到硬盘,后者则是将每次执行的写命令保存到硬盘(类似于MySQL的binlog);

2023-05-31 15:02:40 43

原创 十年老架构带你深入学习Redis(1):Redis内存模型

关于Redis数据存储的细节,涉及到内存分配器(如jemalloc)、简单动态字符串(SDS)、5种对象类型及内部编码、redisObject。在讲述具体内容之前,先说明一下这几个概念之间的关系。下图是执行set hello world时,所涉及到的数据模型。图片来源:https://searchdatabase.techtarget.com.cn/7-20218/

2023-05-31 14:57:55 109

原创 原京东架构师一步步教你如何搭建K8S集群(保姆级教程)

这个命令我在主节点上执行了三次,第一次是工作节点还没加入前,第二次是工作节点加入后,可以看到 node01 状态是 NotReady,过了几分钟后,我又执行了一次,node01 的状态变成了 Ready。此时我再在工作节点执行该命令,还是会发生上面的报错。上面说是 Docker 和 kubelet 的 cgroup driver 不一样,kubelet 的是 systemd,docker 的是 cgroupfs。很遗憾的是我的虚拟机上的主节点突然宕机了,并且之后换了一个 IP,然后我又立马给它起起来了。

2023-05-30 16:26:44 157

原创 kafka集群是如何选择leader,你知道吗?

kafka集群是由多个broker节点组成,这里面包含了许多的知识点,以下的这些问题你都知道吗?你知道topic的分区leader是怎么选举的吗?你知道zookeeper中存储了kafka的什么信息吗?起到什么做呢?你知道kafka消息文件是怎么存储的吗?如果kafka中leader节点或者follower节点发生故障,消息会丢失吗?如何保证消息的一致性和可靠性呢?如果你对这些问题比较模糊的话,那么很有必要看看本文,去了解以下kafka的核心设计,本文主要基于kafka3.x版本讲解。

2023-05-30 16:13:16 388 1

原创 (差点失业了!)记录一次缓存雪崩的灾难复盘

这是一个典型的数据查询,大概过程如下左侧,访问用户基本信息的时候会先去Redis中查一下,如果不存在,就把大约2W左右的用户数据一次性取出来,保存在Redis中,因为用户基本信息在同一张表上,用户信息表的数据量也很少,所以一直也没什么问题。新发布的系统,缓存池是空的,在早上10点高峰期的时候,大量的人员到IM上进行访问,系统开始初次建立每个人的缓存信息,大量的请求查询不到缓存,直接透过缓存池投向数据库,造成瞬时DB请求量井喷。我们IM原有的一个功能,当鼠标移动到用户头像的时候,会显示出用户的基本信息。

2023-05-30 16:06:42 38

原创 你的Mysql很慢?MySQL慢查询分析和性能优化

这边仅仅是从查询语句的角度进行分析,实际上缓存服务变慢的可能性很多,不仅仅是慢查询怎么分析(Slow Log、Explain命令)。还应该全面的分析原因,并给出处理方案,如 分析SQL脚本合理性、建立索引或优化索引、读写分离、垂直+水平分区)、多读少写/冷数据 做缓存、优化数据库的锁竞争、数据库配置调优、硬件资源升级 等等,后面几篇我们慢慢说。

2023-05-30 15:50:23 1118

原创 常见的场景优化方案:导出Excel大批量数据的优化过程

团队目前在做一个用户数据看板(下面简称看板),基本覆盖用户的所有行为数据,并生成分析报表,用户行为由多个数据来源组成(餐饮、生活日用、充值消费、交通出行、通讯物流、交通出行、医疗保健、住房物业、运动健康...),看看标红的代码,这个生成Excel的方式是对Excel中的每一个cell进行渲染,逐行的进行数据填充,效率太慢了,根据日志分析发现:基本时间都耗费在数据生成Excel上。目前遇到的主要问题是,随着行为能力逐渐的完善闭环,用户数据沉淀的也越来越多了,同时业务量的也在不断扩大。

2023-05-30 15:40:25 2105

原创 月薪15k以下都不会的——分布式锁方案分析

前面的文章我们介绍了分布式系统和它的CAP原理:一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)。参考这篇《分布式事务我们知道,一个分布式系统无法同时满足三个特性,所以在设计系统之初,就有一个特性要被妥协和牺牲,因为分区容错性的不可或缺性,一般我们的选择是AP或者CP,这就要求我们要么舍弃强一致性,要么舍弃高可用。为了达到数据的一致性,或者说至少达到数据的最终一致性,我们需要一些额外的方法来保证,比如分布式事务,分布式锁等等。

2023-05-30 15:26:06 39

原创 阿里P7大佬带你深入理解熔断、降级的Hystrix实现

前面的章节,我们学习了微服务中对熔断降级的原理,参考这篇《了解了固定窗口算法、滑动窗口算法、 漏桶原理和令牌桶原理,本文对Hystrix做进一步的分析。Hystrix是Netflix开源的一款具备熔断、限流、降级能力的容错系统,设计目的是将应用中的系统访问、多链路服务调用、第三方依赖服务的调用,通过流量资源控制的方式隔离开。避免了在分布式系中的某个服务故障沿着调用链向上传递,出现整体的服务雪崩,并以此提升系统的稳定性和健壮性。

2023-05-30 14:59:04 432

原创 美团大厂架构师带你了解MySQL索引实现和使用

表中的数据发生变更的时候,会影响其他记录地址的变化,如果辅助索引中记录数据的地址,此时会受影响,而主键的值一般是很少更新的,当页中的记录发生地址变更的时候,对辅助索引是没有影响的。也是B+树结构,MyISM使用的是非聚簇索引,如下图,非聚簇索引的两棵B+树看上去没什么不同,节点的结构完全一致只是存储的内容不同而已,主键索引B+树的节点存储了主键,根据我们之前的了解,每个磁盘块(disk)存储的内容是有限的,如果一个页中可以存储的索引记录越多,那么查询效率就会提高,所以我们可以指定索引的字段长度。

2023-05-30 14:45:02 139

原创 追求性能的极致:Redis6.0的多线程模型(附面试题)

就会明白,Redis所谓的单线程并不是所有工作都是只有一个线程在执行,而是指Redis的网络IO和键值对读写是由一个线程来完成的,Redis在处理客户端的请求时包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理。由于Redis在处理命令的时候是单线程作业的,所以会有一个Socket队列,每一个到达的服务端命令来了之后都不会马上被执行,而是进入队列,然后被线程的事件分发器逐个执行。如果并发量很高,达到万级别的 QPS,就会形成瓶颈,影响整体吞吐能力。

2023-05-30 11:09:02 365

原创 字节大佬架构师带你深入RocketMQ 顺序消费机制

同一分区内的消息保证顺序,不同分区之间的消息顺序不做要求。如上图所示,A1、B1、A2、A3、B2、B3 是订单 A 和订单 B 的消息产生的顺序,业务上要求同一订单的消息保持顺序,例如订单 A 的消息发送和消费都按照 A1、A2、A3 的顺序。顺序消息是指对于一个指定的 Topic ,消息严格按照先进先出(FIFO)的原则进行消息发布和消费,即先发布的消息先消费,后发布的消息后消费。消费者消费消息时,使用单线程消费重平衡已分配的消息队列,保证消息消费顺序和存储顺序一致,最终实现消费顺序和发布顺序的一致。

2023-05-30 10:45:24 97

空空如也

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

TA关注的人

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