- 博客(32)
- 收藏
- 关注
原创 一篇带你快速搞定Kafka!搞不定你来打我
KafkaManager — 页面管理工具没有设置key我们的消息就会被轮训的发送到不同的分区。设置了keykafka自带的分区器,会根据key计算出来一个hash值,这个hash值会对应某一个分区。如果key相同的,那么hash值必然相同,key相同的值,必然是会被发送到同一个分区。但是有些比较特殊的时候,我们就需要自定义分区@Override@Override//获取到分区的个数 0,1,2//最后一个分区return!
2023-08-26 14:36:18
225
原创 全网最细!冲刺秋招版Java 面试八股文及答案整理(2023 最新版)
最近感慨面试难的人越来越多了,一方面是市场环境,更重要的一方面是企业对 Java 的人才要求越来越高了。基本上这样感慨的分为两类人,,虽然挂着,但肚子里货少,也没啥拿得出手的项目,自己还意识不到问题;,自身有技术追求,但欠点儿火候,多练习多吸收知识,锤炼一下问题不大。,早几年也是心比天高,觉得自己特了不起,结果往往一面试就发虚,大部分人都经历过这样一个不自知的阶段。后面见识多了,再主动多跟着大佬学习,就能相对顺利地随着经验积累增多一路涨起来。
2023-08-22 17:21:49
280
3
原创 美团面试官:Feign 第一次调用为什么会很慢?大部分人都答不上来!
首先要了解Feign是如何进行远程调用的,这里面包括,注册中心、负载均衡、FeignClient之间的关系,微服务通过不论是eureka、nacos也好注册到服务端,Feign是靠Ribbon做负载的,而Ribbon需要拿到注册中心的服务列表,将服务进行负载缓存到本地,然后FeignClient客户端在进行调用,大概就是这么一个过程。
2023-08-22 16:22:22
245
原创 字节面试官:一个 SpringBoot 项目能处理多少请求?
这篇文章是基于“一个 SpringBoot 项目能同时处理多少请求?”这个面试题出发的。但是经过我们前面简单的分析,你也知道,这个问题如果在没有加一些特定的前提条件的情况下,答案是各不一样的。比如我再给你举一个例子,还是我们的 Demo,只是使用一下 @Async 注解,其他什么都不变:再次启动项目,发起访问,日志输出变成了这样:同时能处理的请求,直接从 Tomcat 的默认 200 个变成了 8 个?因为 @Async 注解对应的线程池,默认的核心线程数是 8。之前写过这篇文章。
2023-08-22 16:15:50
391
原创 不得不说Redis的SDS 设计,真的优秀!
本文从 Redis的底层 SDS 实现分析了 String 的实现原理,可以说 SDS 是一种很优秀的设计,它即遵循了C语言的部分功能,又规避了 C语言 字符串常见的一些问题,这或许就是 Redis 优秀的一个原因。另外,SDS 为了保证读写速度,尽管做了很多节省内存的操作(比如:sdshdr8/16/32/64,int/embstr/raw),但是,还在是一定程度上采用空间换时间。
2023-08-22 15:55:58
170
原创 高能来袭!SpringBoot一键去除参数前后空格和XSS过滤实战解析
去除XSS字符串需要借助工具类 jsoup ,这里jsoup有一点需要注意的是,jsoup的功能可能有点太强大了,能把xss攻击的内容直接过滤掉了不说,也会对英文尖括号 转义,到接口里面拿到的参数就变成了 ,存库里面的就是转义后的字符串了。取出来的时候需要转一下。比如前台传的参数传的是: 123alter('11111111')455过滤处理了后,到后台接口里面就成了: [123455]如果上面的结果能接受,那么这个工具类就可以用。引入依赖 jsoup......
2022-06-20 21:15:01
2319
原创 重点来了:一套方案轻松教你搞定数据库与缓存数据不一致问题
一天,老板说「最近公司的用户越来越多了,但是服务器的访问速度越来越差的,阿旺帮我优化下,做好了给你画个饼!」。程序员阿旺听到老板口中的「画饼」后就非常期待,没有任何犹豫就接下了老板给的这个任务。阿旺登陆到了服务器,经过一番排查后,确认服务器的性能瓶颈是在数据库。这好办,给服务器加上 Redis,让其作为数据库的缓存。这样,在客户端请求数据时,如果能在缓存中命中数据,那就查询缓存,不用在去查询数据库,从而减轻数据库的压力,提高服务器的性能。1阿旺有了这个想法后,就准备开始着手优化服务器,但是挡在在他前面的是这
2022-06-20 20:58:17
1108
原创 被老板教导了!线上执行一条update语句意外导致业务干趴了
昨晚在群划水的时候,看到有位读者说了这么一件事。大概就是,在线上执行一条 update 语句修改数据库数据的时候,where 条件没有带上索引,导致业务直接崩了,被老板教训了一波这次我们就来看看:说个前提,接下来说的案例都是基于 InnoDB 存储引擎,且事务的隔离级别是可重复读。1为什么会发生这种的事故?InnoDB 存储引擎的默认事务隔离级别是「可重复读」,但是在这个隔离级别下,在多个事务并发的时候,会出现幻读的问题,所谓的幻读是指在同一事务下,连续执行两次同样的查询语句,第二次的查询语句可能会返回之前
2022-06-20 20:37:28
172
原创 前方高能!如何轻松给Spring Boot配置文件加个密?
在实践中,项目的某些配置信息是需要进行加密处理的,以减少敏感信息泄露的风险。比如,在使用Druid时,就可以基于它提供的公私钥加密方式对数据库的密码进行加密。但更多时候,比如Redis密码、MQ密码等敏感信息,也需要进行加密,此时就没那么方便了。本篇文章给大家介绍一款Java类库Jasypt,同时基于Spring Boot项目来演示一下如何对配置文件信息进行加密。我们先来创建一个简单的Spring Boot项目,构建一个加密数据运用的场景。无论通过Idea或官网等方式,先创建一个Spring Boot项目,
2022-06-20 20:04:41
482
1
原创 霸气的来了:从Jar包冲突搞到类加载机制!
接手了一套比较有年代感的系统,计划把重构及遇到的问题写成系列文章,老树发新枝,重温一些实战技术,分享给大家。【重构01篇】,给大家讲讲Jar包冲突及原理。目前市面上项目管理要么是基于Maven,要么是基于Gradle,最近接手了一套纯手动添加jar包的项目。对于纯手动添加jar包的项目已经是多年前的方式了,现在工作三五年的技术人员可能都没有经历过。就是把项目中所需的jar包挨个找出来,添加到一个lib目录中,在IDE中再将jar包依赖手动添加上。这种方式来添加jar包依赖,不仅费事,而且很容易出现jar包冲
2022-06-20 14:59:17
1322
原创 干货分享!京东亿级流量电商系统JVM模型参数预估方案
大促在即,拥有亿级流量的电商平台开发了一个订单系统,我们应该如何来预估其并发量?如何根据并发量来合理配置JVM参数呢?假设,现在有一个场景,一个电商平台,比如京东,需要承担每天上亿的流量。现在开发了一个订单系统,那么这个订单系统每秒的并发量是多少呢?我们应该如何分配其内存空间呢?先来分析一下每日亿级流量,平均一个用户点击量在20-30左右,通过这个计算出日活用户数约1亿/20=500万, 看的人多,买的人少,通常下单率不超过10%,我们按照留存率10%来计算,日均订单约50万单。这是分两种情况:对于这每秒4
2022-06-20 14:44:02
294
原创 沉浸式面试:MySQL原理
今天我们来聊聊MySQL原理基础篇主要是侧重基础知识,原理篇是有一定基础后的递进,通过学习本篇,不仅可以进一步了解MySQL的各项特性,还能为接下来的容灾调优打下坚实的基础。现在,就让我们继续跟随阿柴进行这场沉浸式面试吧。ACID与隔离级别那你先来说说MySQL的四种隔离级别吧。SQL标准定义了4类隔离级别,包括一些具体规则,用来限定事务之间的隔离性。这四种级别分别是读未提交、读已提交、可重复读、串型化。读未提交,顾名思义,就是可以读到还没有提交的数据;读已提交会读到其它事务已经提交的数据;可重复读确保了同
2022-06-20 14:34:42
220
原创 面试官:你觉得扫码登录应该怎么实现?
真实面试小场景:经过八股和算法的交锋,老三松了口气,都hold住了。只见面试官微微一笑,“其实,我真正想问的是……你觉得扫码登录应该怎么实现。”老三:“啊……这个,哦……那个,这个就这么,然后……额……嗯……”面试官:“了解了,回去等通知吧。”完……好了,铺垫结束,进入我们今天的主题,扫码登录功能该如何实现?扫码登录场景想必我们都不陌生——很多PC端的网站都提供了扫码登录的功能,无需在网页上输入任何账号和密码,只需要通过手机上的APP,如微信、淘宝、QQ等等,使用扫描功能,扫描网页上的二维码,确认登录,就可
2022-06-20 14:20:32
179
原创 面试小技巧!CURD系统该如何做出技术含量?
引子很多朋友可能会因为自己做的工作不是特别核心或者业务简单而引起面试中没有自信。但是很多公司面试的时候是可以接受面试者之前岗位的并发量、交易量低一些的。比如我们要招聘和我们交易量同等级或者以上的出来的人才,业界本来就没有多少,但我们还是要招人的。所以很多时候更偏向于考察面试者的设计底蕴、思考和解决问题的能力。我建议面试时,面试者要争取主动权,主动引导面试。一般作为面试官也很乐意被面试者引导。因为面试官的职责是发现面试者的技术特长,为此我们绞尽脑汁地从简历中、自我介绍中去发掘。如果面试者可以自己有完整清晰的思
2022-06-20 13:39:22
194
原创 重点来了!RPC和HTTP什么时候需要序列化?什么时候不需要序列化?
大家好,我是热心网友 —— 小林。有位读者问了,我这么一个问题:不管是 RPC 或者 HTTP,只要传输的内容是「对象」,要想在接收方还原出一摸一样的「对象」,那就需要序列化和反序列化。RPC 能帮助我们的应用透明地完成远程调用,即调用其他服务器的函数就像调用本地方法一样。发起调用请求的那一方叫做调用方,被调用的一方叫做服务提供方。调用方和服务提供方一般是不同的服务器,所以就需要通过网络来传输数据,并且 RPC 常用于业务系统之间的数据交互,需要保证其可靠性,所以 RPC 一般默认采用 TCP 协议来传输。
2022-06-18 21:07:02
1671
原创 Redis 为什么那么快?为了拿下打工人都会的Redis 数据结构,我挑战画了二十张图
大家好,我是小林。Redis 为什么那么快?除了它是内存数据库,使得所有的操作都在内存上进行之外,还有一个重要因素,它实现的数据结构,使得我们对数据进行增删查改操作时,Redis 能高效地处理。因此,这次我们就来好好聊一下 Redis 数据结构,这个在面试中太常见了。注意,Redis 数据结构并不是指 tring(字符串)、List(列表)、Hash(哈希)、Set(集合)和 Zset(有序集合),因为这些是 Redis 键值对中值的数据类型,并不是数据结构。这些数据类型的底层实现的方式,才是数据结构。Re
2022-06-18 20:51:17
102
原创 HashMap灵魂二十三问!面渣成功拿下阿里一面
HashMap作为我们熟悉的一种集合,可以说是面试必考题。简单的使用,再到原理、数据结构,还可以延伸到并发,可以说,就一个HashMap,能聊半个小时。JDK1.7的数据结构是数组+链表,JDK1.7还有人在用?不会吧……说一下JDK1.8的数据结构吧:JDK1.8的数据结构是数组+链表+红黑树。数据结构示意图如下:其中,桶数组是用来存储数据元素,链表是用来解决冲突,红黑树是为了提高查询的效率。红黑树本质上是一种二叉查找树,为了保持平衡,它又在二叉查找树的基础上增加了一些规则:红黑树是一种平衡的二叉树,插入
2022-06-18 20:29:58
145
原创 Github 上发现一个开源酷炫又好用的终端工具 Tabby,答应我Xshell这款终端工具不要再用了!!!
我工作中用得最多的工具之一就是「终端连接工具」了,因为经常和 Linux 服务器打交道,经常在上面跑代码、排查系统问题等等。Windows 系统最常用的就是 Xshell 这款终端工具了,但是它只能用于非商业用途,也就是说如果在公司用的话,公司就得掏钱了,当然不是大公司的话,也不会有人查你用盗版的问题。另外,如果你想和 Linux 服务器传输文件的话,还得再下载个 Xftp,挺费事,而且 Xshell 没有支持 macOS。那有没有一个,集成了文件传输功能,又支持多个系统,且是免费的终端工具呢?正好,我最近
2022-06-18 20:16:08
2455
1
原创 重量级知识点来了:值得推荐的画图工具、思维导图工具、代码贴图工具有哪些呢?
大家好,我是小林。最近很多读者私信问我,我图解文章中用到的画图工具、思维导图工具、代码贴图工具是什么?我在很早的时候提到过,不过时间有点久了,而且比较零散,可能现在大部分读者还不知道。我今天统一整理一下,我图解文章用到的各类工具吧,这些工具我用了一年多了,没发现什么问题,所以是值得推荐的。我在这里先列一下:接下来,详细聊一聊。这篇文章的封面图就是 draw.io 的开发团队。我的图解文章里的图片全是在 draw.io 这个工具画的,写了那么久的图解文章,再加上我工作中也有画图的习惯,累计也有在上面画了接近
2022-06-18 19:31:42
396
原创 离谱的来了!当对数据表中的记录进行统计时,count(*) 的效率最差?得知真相后,啪啪打脸了
大家好,我是小林。当我们对一张数据表中的记录进行统计的时候,习惯都会使用 count 函数来统计,但是 count 函数传入的参数有很多种,比如 count(1)、count(*)、count(字段) 等。到底哪种效率是最好的呢?是不是 count(*) 效率最差?我曾经以为 count(*) 是效率最差的,因为认知上 selete * from t 会读取所有表中的字段,所以凡事带有条件 * 字符的就觉得会读取表中所有的字段,当时网上有很多博客也这么说。但是,当我深入 count 函数的原理后,被啪啪啪地
2022-06-18 19:15:49
149
原创 问题来了!!!什么是循环依赖?Spring解决循环依赖的流程又会是什么呢?
我们使用Spring的时候,在一个对象中注入另一个对象,但是另外的一个对象中也包含该对象。如图:在Student中包含了teacher的一个属性;在Teacher中包含有student的属性。这样就形成了一个循环依赖。3、 测试结果#此处输出的teacher中包含有student对象,student对象中也包含有teacher对象,且包含的对象都是不为null的。在Spring创建bean的时候肯定也是一个一个去创建的。首先肯定会先去走一个(Teacher/Student)
2022-06-18 17:15:37
148
原创 速!速!速!字节面试问题来了:什么是伪共享?又该怎么避免伪共享的问题?
大家好,我是小林。周末的时候,有个读者跟我说,面试字节的时候被问到:「什么是伪共享?又该怎么避免伪共享的问题?」这个其实是考察 CPU 缓存的问题,我之前的图解系统也有提到过。今天,我再跟大家讲一下。先来认识 CPU 的架构,只有理解了 CPU 的 架构,才能更好地理解 CPU 是如何读写数据的,对于现代 CPU 的架构图如下:可以看到,一个 CPU 里通常会有多个 CPU 核心是,比如上图中的 1 号和 2 号 CPU 核心,并且每个 CPU 核心都有自己的 L1 Cache 和 L2 Cache,而 L
2022-06-18 16:32:47
86
原创 与大佬沟通,聊到四层代理和七层代理分别指的是什么这个问题时?会擦出什么火花呢
日常与大佬沟通或看文章,时不时总会遇到两个概念“四层代理负载均衡”和“七层代理负载均衡”,那么,所谓的四层代理和七层代理分别指的是什么?又在什么场景下用到呢?这篇文章就带大家聊聊这方面的知识点。要聊几层代理,需要先看一下网络分层,在之前的文章中也提到,标准的七层网络分层,也就是OSI七层模型。TCP/IP五层模型和TCP/IP四层模型是从OSI七层优化而来。这里所谈的四层代理和七层代理,便是基于OSI七层模型来划分的。OSI七层模型从下往上看,第四层为传输层、第七层为应用层。再来看看每层对应的常见协议:OS
2022-06-18 16:07:00
176
原创 惊讶!!!谁能想到一直“运行良好”的代码中深藏着这样的Bug?
在开始这篇文章之前想先说一句:如果一套系统暂时没问题,那只是因为它的并发量不够而已。上周在查看系统日志时,发现了一条与众不同的日志。日志中有一半内容是正常的报文数据,而另一半内容是0x00这样的空数据。虽然系统没抛出任何异常,但这些日志肯定是反常的。多年的经验告诉我,这其中一定有什么不对的地方,加上好奇心的驱使,终于揭开了一个隐藏非常深的Bug。有时候找到Bug,解决Bug很容易,难的是如何发现Bug,并推理出哪里出问题解决。下面就带大家来剖析一下这个Bug。一个调用外部接口的基础类,打印出类似如下的日志:
2022-06-18 14:05:36
187
转载 不吹不黑!面试前搞定RocketMQ这二十三点,大厂面试稳了
消息队列主要有三大用途,我们拿一个电商系统的下单举例:市场上几大消息队列对比如下:总结一下:选择中间件的可以从这些维度来考虑:可靠性,性能,功能,可运维行,可拓展性,社区活跃度。目前常用的几个中间件,ActiveMQ作为“老古董”,市面上用的已经不多,其它几种:我们的系统是面向用户的C端系统,具有一定的并发量,对性能也有比较高的要求,所以选择了低延迟、吞吐量比较高,可用性比较好的RocketMQ。RocketMQ优点:RocketMQ缺点:消息队列有两种模型:队列模型和发布/订阅模型。RocketMQ使用的
2022-06-17 21:54:42
443
原创 OMG!腾讯一面被问到为什么操作系统需要内存管理和虚拟内存?内存满了之后会有什么处理?
大家好,我是小林。前几天有位读者留言说,面腾讯时,被问了两个内存管理的问题: 先来说说第一个问题:虚拟内存有什么作用?然后今天主要是聊聊第二个问题,「系统内存紧张时,会发生什么?」发车!应用程序通过 malloc 函数申请内存的时候,实际上申请的是虚拟内存,此时并不会分配物理内存。当应用程序读写了这块虚拟内存,CPU 就会去访问这个虚拟内存, 这时会发现这个虚拟内存没有映射到物理内存, CPU 就会产生缺页中断,进程会从用户态切换到内核态,并将缺页中断交给内核的 Page Fault Handler (缺页
2022-06-17 21:39:30
869
原创 美团二面:Redis中哨兵机制从何而来?
话不多说,发车发车!提纲在 Redis 的主从架构中,由于主从模式是读写分离的,如果主节点(master)挂了,那么将没有主节点来服务客户端的写操作请求,也没有主节点给从节点(slave)进行数据同步了。主节点挂了这时如果要恢复服务的话,需要人工介入,选择一个「从节点」切换为「主节点」,然后让其他从节点指向新的主节点,同时还需要通知上游那些连接 Redis 主节点的客户端,将其配置中的主节点 IP 地址更新为「新主节点」的 IP 地址。这样也不太“智能”了,要是有一个节点能监控「主节点」的状态,当发现主节点
2022-06-17 21:06:50
176
原创 闪现!手把手带你写一个中高级程序员必会的分布式RPC框架不香吗?
什么是RPC?那为什么要有 RPC,HTTP 不好么?项目总体结构整体架构接下来,分别解释上述的过程服务的提供者和消费者公用一个接口,@ServiceExpose是为了暴露服务,放在生产者的某个实现类上;@ServiceReference是为了引用服务,放在消费者的需要注入的属性上。主要是加载一些rpc相关的配置类,使用SpringBoot自动装配。可以使用SPI机制加入一些自定义的类,放到指定文件夹中。这里主要就是通过反射获得对应注解的属性/类,进行服务暴露/服务引用。 这里需要关注的是什么时候进行服务暴
2022-06-17 20:52:11
102
原创 那么问题来了:在 4GB 物理内存的机器上,申请 8G 内存会怎么样呢?
大家好,我是小林。早上看到读者在群里讨论这些面试题:其中,第一个问题「在 4GB 物理内存的机器上,申请 8G 内存会怎么样?」存在比较大的争议,有人说会申请失败,有的人说可以申请成功。这个问题在没有前置条件下,就说出答案就是耍流氓。因为在 32 位操作系统和 64 位操作系统场景下,答案是不同的。另外,我们还要看申请完 8G 内存后会不会被使用,会被使用是一种情况,不会被使用又是另外一种情况了。所以,我们要分场景讨论。应用程序通过 malloc 函数申请内存的时候,实际上申请的是虚拟内存,此时并不会分配物
2022-06-17 20:34:41
347
1
原创 微信一面:使用一致性哈希算法有什么问题,使用场景,解决了什么问题?
大家好,我是小林。在逛牛客网的面经的时候,发现有位同学在面微信的时候,被问到这个问题:第一个问题就是:一致性哈希是什么,使用场景,解决了什么问题?这个问题还挺有意思的,所以今天就来聊聊这个。发车!大多数网站背后肯定不是只有一台服务器提供服务,因为单机的并发量和数据量都是有限的,所以都会用多台服务器构成集群来对外提供服务。但是问题来了,现在有那么多个节点(后面统称服务器为节点,因为少一个字),要如何分配客户端的请求呢?其实这个问题就是「负载均衡问题」。解决负载均衡问题的算法很多,不同的负载均衡算法,对应的就是
2022-06-17 19:46:38
229
原创 腾讯二面中Linux操作系统里一个进程最多可以创建多少个线程呢?
昨天有位读者被坑了,问了我这么个问题:大致意思就是,他看了一个面经,说虚拟内存是 2G 大小,然后他看了我的图解系统 PDF 里说虚拟内存是 4G,然后他就懵逼了。其实他看这个面经很有问题,没有说明是什么操作系统,以及是多少位操作系统。因为不同的操作系统和不同位数的操作系统,虚拟内存可能是不一样多。Windows 系统我不了解,我就说说 Linux 系统。在 Linux 操作系统中,虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同位数的系统,地址 空间的范围也不同。比如最常⻅的 32 位和 64 位
2022-06-17 16:48:53
178
原创 客户端拔掉网线后,会直接影响 TCP 连接状态吗?
大家好,我是小林。今天,聊一个有趣的问题:拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗?可能有的同学会说,网线都被拔掉了,那说明物理层被断开了,那在上层的传输层理应也会断开,所以原本的 TCP 连接就不会存在的了。就好像, 我们拨打有线电话的时候,如果某一方的电话线被拔了,那么本次通话就彻底断了。真的是这样吗?上面这个逻辑就有问题。问题在于,错误的认为拔掉网线这个动作会影响传输层,事实上并不会影响。实际上,TCP 连接在 Linux 内核中是一个名为 struct socket 的结构体,该结构体的
2022-06-17 16:38:20
769
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人