- 博客(40)
- 资源 (2)
- 收藏
- 关注
原创 Java面试——一分钟搞懂限流算法
令牌桶算法类似上面的漏桶算法,它相当于有个管理员按照限流的大小,定速地向令牌桶扔令牌。运营网站,经常会遇到各种挑战:某黑客发起DoS攻击、网络爬虫网页抓取、商品秒杀活动、双十一与618等场景,会使流量突然激增,如果不限制流量的访问就会使系统宕机。:漏桶算法无法应付突然激增的流量,如果流量突增,因为算法本身的限制,只能按照固定的速度去处理请求。最简单的一种限流算法,我们可以通过原子操作类累积一秒内的请求次数,如果超过设定阈值,拒绝请求访问。:令牌桶算法是针对漏桶算法的优化,能够应对突增的流量。
2023-08-13 17:00:46 218
原创 一文读懂分布式熔断与服务降级
分布式系统都是由多个微服务构成,一个接口调用过程会存在很长的服务调用链。一旦调用链上某服务挂掉或者响应时间很长,会导致整个调用链响应缓慢,严重点的话,就可能导致系统全面崩溃,这就是服务雪崩。为了防止服务雪崩,在被调用的服务出现故障时,调用方主动停止调用,这种行为成为服务熔断。服务降级是在高并发情况下,应对服务器压力剧增的情况,对某些边缘服务与页面进行停用或者屏蔽,释放计算机资源用来确保核心服务的平稳运行。举个栗子,公司总共四台服务器,两台用来进行下单业务,另外两台用来进行服务评价、商品推荐。
2023-08-11 17:18:45 298
原创 浅谈JavaWeb(一)—— Servlet
Servlet其实就是Java提供的一个接口,同时也是处理网络请求的规范,是Java Web程序的基础。
2023-07-31 22:32:35 105
原创 Java基础——一文读懂Fork/Join框架
如图一个规模为T的任务划分成12个子任务,分别有4个线程在执行。如果当前线程没有可执行任务时,会从其他线程的任务队列中窃取任务来执行。工作窃取算法保证了cpu不会处于空闲状态。fork/Join框架的思想是将一个规模为n的大任务,fork成几个规模较小的K个子任务,最后合并所有子任务的结果,返回最终结果。由此我们可以看出,Java8的Stream并行流底层代码,确实采用了Fork/Join框架来实现。如下所示代码,利用Java8的并行流,对1到5的数进行相乘。接口TerminalOp。
2023-07-24 18:06:20 483
原创 聊一聊JVM性能调优
上线前,可以通过Jmeter进行压测,然后进行性能调优。上线后,通过JDK自带的这些性能调优工具,进行监测后续情况。性能调优没有捷径,也没有统一的参数,只能自己设置参数后,使用压测工具与监测工具,一遍遍查看效果。
2023-07-22 17:24:06 80
原创 聊一聊微信登录与QQ登录的底层实现
我们打开微信登录与QQ登录的开发文档,就能清楚看到,它们都使用了同一个东西叫做OAuth2.0,那么OAuth2.0是什么东东呢?(‧_‧?微信登录OAuth2.0是一种授权协议,用户授权第三方网站,允许他们访问用户存储在服务器上的信息,而不需要将用户名和密码提供给第三方网站,并可以控制第三方网站能访问的数据范围。
2023-07-16 23:32:44 145
原创 1分钟了解MySQL的用户权限
我们经常能在网上看见删库跑路的段子,直接使用root用户来操作数据库无疑危险的。实际生产环境中,一般由DBA掌握root用户权限,给其他人都是一个赋予只读的普通用户权限。下面就让我们来看看MySQL的用户权限的设计吧。
2023-07-12 23:37:47 86
原创 一文解读MySQL查询优化技巧
根据官方的测试,开启缓存后针对一个表进行简单查询,每次查的都不一样,结果性能降低13%。如果查询的所有字段都是索引字段,称为覆盖索引,覆盖索引的查询速度与效率是非常高的。原SQL,会查询10020条数据,再抛弃前面的10000条数据,只保留20条。不要在重复性过高的字段上使用索引,比如性别这个字段,加上索引的作用不大。第二条SQL,加了limit 1之后,找到第一条匹配的数据之后,直接返回结果,停止匹配工作。第一条SQL找到第一条匹配数据之后,继续扫描下一条数据,直到所有数据表的数据扫描一遍。
2023-07-10 23:49:52 83
原创 一文读懂MySQL执行计划
在日常开发中,我们经常会碰到一些复杂的多表联查的SQL,进行性能优化的问题。这时候了解SQL的执行过程就尤为重要。通过在SQL语句前面添加Explain关键字,MySQL就会为我们揭示执行的流程。
2023-07-08 22:45:01 74
原创 一文读懂MySQL的日志体系
默认关闭,只记录数据表结构与数据表的数据变更SQL, 不会记录SELECT与SHOW语句。它是开发与运维中非常重要的日志,可以用它进行数据恢复,msql的主从数据复制。我甚至见过通过监控数据库binlog的变动,自动同步数据到缓存与ES的处理。默认关闭,记录了所有CRUD操作日志,生产环境下不建议开启,在高并发下会导致频繁的IO操作,影响mysql的性能。生产环境可以开启,找出对应业务执行的慢SQL,后续进行SQL优化,提升执行效率。默认开启,记录了系统启动、运行以及停止过程中遇到的一些问题。
2023-07-06 23:37:31 84
原创 Netty的设计架构
上一篇文章一文读懂NIO中,我们介绍了NIO, Java的NIO类库与API都相当复杂,想要写好一个高质量的NIO的程序,你必须精通网络编程与多线程的知识。在这个背景下Netty诞生了,只要进行简单的编码就能开发出一个可靠、高性能的NIO程序。
2023-07-02 23:23:14 113
原创 Java网络编程(三)一文读懂NIO
NIO被称作是 New IO或者Non block IO。它是Jdk1.4开发引入的类库。NIO与BIO的最大不同是,BIO是面向流,而BIO是面向缓冲区buffer。Java的IO数据流向是固定的,要么读,要么写。但是NIO则可以同时支持读写。
2023-06-30 22:50:09 100
原创 Java网络编程基础(一)3分钟了解linux网络IO模型
NIO比起上面的BIO就变聪明了,它不会一直傻等,它开启了轮询,每隔一段时间,就会找内核问下:你好了没有?所以一次网络IO的读取,远程的服务器发送过来的数据,到达网卡后,网卡先拷贝到内核缓冲区,内核缓冲区再拷贝到用户空间的内核缓冲区。网络的IO的写入恰好相反,数据从用户空间的缓冲区拷贝到内核空间的缓冲区,然后内核缓冲区再通过网卡发送出去。你(应用程序)告诉京东快递(内核)快递柜自取,快递员在快递柜塞好你的快递后,然后给你发取货码(SIGIO)。在京东快递员(内核)给你打电话之前,你是自由的,想干啥就干啥。
2023-06-27 22:57:29 80
原创 一文读懂分布式事务原理
我们讲到了CAP理论的特点,三者中只能存两。而基于分布式系统的特点,分区容错性是必要的选择。所以我们只能在CP与AP两者之间做权衡。而BASE理论在此之上进行了扩展,放宽了强一致性的保证,通过最终一致性来尽可能提高服务的可用性。
2023-06-25 23:11:55 70
原创 RocketMQ使用浅析(二)
上篇文章介绍了RocketMQ的构成与消息发送方式,接下来我们继续RocketMQ的消费模式、事务消息与持久化。
2023-06-23 23:13:45 63
原创 3分钟读懂分布式CAP理论
现在企业招聘开发,基本都会要求有分布式系统的开发经验,许多面试题也是针对分布式环境下会出现的问题提出。想要在Java开发的道路走上去,熟悉分布式系统可以说是必须的。而CAP理论是业界进行分布式系统设计的一种重要思想,下面就让我们来看看吧。CAP是由美国计算机科学家Leslie Lamport在1974年提出的一种理论,他指出一个分布式系统不可能同时满足以下3点情况:假如你有N份冗余备份的数据,那么同一时刻,无论你读取哪一份数据,都必须确保数据是相同的,我保证每一份数据都是最新的。你的系统必须每周007不间断
2023-06-20 23:13:20 85
原创 Java基础—IO浅析
IO流用来处理设备之间的数据传输。这个设备是指任何能够创造出数据或者从外界接收数据的东西。可以是你的鼠标、硬盘、内存、文件、视频等等。
2023-06-19 23:09:00 74
原创 一文读懂Spring的事务机制
厨房没有酱油了,妈妈叫你去商店买一瓶回来。买酱油的过程,你给分成三个步骤:1.去妈妈那拿钱2.去商店挑好酱油3.把钱给收银员这3个步骤,只要其中一个步骤完不成,买酱油失败。只有全部完成,买酱油成功。这种一组操作,要么全部成功,要么全部不成功,就叫做事务。Spring支持声明式事务和编程式事务两种方式。
2023-06-18 23:10:01 113
原创 Docker网络模型—那些年踩过的坑
之前的一篇文章,我讲过了Docker的基本使用,今天继续讲讲Docker的四种网络,以及配置时,会遇到的坑,以及解决办法。如果对Docker的基本概念与使用感兴趣的可以看我另一篇文章3分钟读懂docker使用。
2023-06-17 23:12:44 71
原创 Java高级—3分钟读懂Spring事件机制
在日常开发过程中,提到发送消息,我们很自然的联想到RabbitMQ、RocketMQ。但是你知道Spring框架本身的事件机制吗?你知道Java的事件机制吗?今天我们就从与来聊聊。
2023-06-16 23:04:12 82
原创 Java高阶—代理设计模式从抢银行开始说起
Java的设计模式多达23种,这二十三般绝艺,绝大多数人都是样样精通,样样疏松,咋一看猛如虎,定眼一瞧,只会用在main函数。大家都用Mybatis框架,增删改查都不怕,若要问你只见接口不见实现是为啥,你脑袋一拍,得去找真专家。今天我从代理设计模式出发结合Mybatis框架给大家讲解一下。
2023-06-15 23:09:50 59
原创 Java基础-Maven浅析01
在Java开发过程中,为了实现功能,我们往往要引用大量外部的库与框架,如mybatis、mysql-connector.jar, Springboot等待。管理这些外部库与框架,是一件非常让人头疼的事情,而Maven是一个构建自动化与项目管理的工具,它简化了我们编译、运行、打包步骤,让开发人员更关注于编写代码而不是处理一些复杂的构建脚本。
2023-06-14 22:50:13 58
原创 Java高级特性01-怎么使用自定义注解
注解Annotation是以元数据的形式在Java5中引入,它添加到Java代码里,如Java类(class)、方法、属性甚至是其他注解。它们给代码提供了额外的信息,在三方框架和库用于生成代码、执行验证或在运行时应用某些行为时进行使用。自定义注解顾名思义,是你自己定义的注解。它们允许你根据自己的需求,扩展Java现有的注解集合。用于其他注解的注解称为元注解。在java.lang.annotation中定义了几种元注解类型。
2023-06-11 22:41:14 161
原创 Java基础-反射机制的简单使用
学习Java的同学,反射是一个熟悉又陌生的概念,熟悉是知道反射是Java的一种机制,面试也会经常碰到,说陌生是平常很少用到。今天我带大家来认识一下Java的反射。
2023-06-10 23:25:06 70
原创 redis面试篇-02三分钟搞懂Redis架构模式
这个问题还真的被问到过,不知道的,可以看看下面这个回答对于客户端发送的key,redis会通过crc16算法进行hash计算,映射到具体的槽位,crc16算法会产生16bit的hash值,2^16能产生65536个数值,值是分布在0~65536之间,但是作者在做取模运算时,不是mod65536,他的公式是:HashSlot=crc16(key) mod 16384。因为两个redis节点之间心跳检测会发送ping,pong消息,消息头里面定义了一个char数组,大小为(cluster_slot/8)。
2023-06-09 22:03:08 120
原创 redis面试篇-01一文搞懂雪崩、穿透、击穿、预热
日常开发中,为了节省内存空间,redis的key值会设置过期时间。一旦大量的redis缓存过期,所有的请求全部怼到数据库(mysql默认最大连接数,看版本),就会把数据库搞挂掉(如下图所示),这就是缓存雪崩。怎么解决缓存雪崩呢?1.设置热点数据永不过期2.数据访问加互斥锁,每次只允许一个用户访问3.缓存降级策略,比如:redis缓存失效,还有本地缓存,本地缓存之后才是mysql4.缓存失效时间分散化,防止集中失效:将缓存的key值先罗列到纸上,然后对key值时间进行规划,分散开来。
2023-06-08 22:06:30 55
原创 别人用开源项目赚钱,我却吃上牢饭?
faker.js一个github上著名的开源项目,上万的star,上亿次的下载量,一夜之间被原作者删除。tiktok突然砍掉了一整个功能模块,这背后到底是人性的扭。。咳,串词了。github是全球最大代买开源平台,里面充斥着各种的开源项目,今天给大家说道说道开源协议。
2023-06-07 21:21:37 500
原创 轻松搞懂Java类加载与SPI机制
你知道Java的类加载机制吗?你了解双亲委派模型吗?你知道怎么打破双亲委派模型吗?这些都是面试经常出现的问题,今天我带大家从类加载机制出发,帮助大家快速掌握Java的SPI机制与Spring的SPI机制。
2023-06-06 21:52:55 566
原创 Java多线程那些事儿(一)
进程是操作系统资源分配的最小单位,如下任务管理器中的都是进程,PID是进程id。通俗点就是win10、Mac、linux这些电脑操作系统都是以进程为单位进行资源分配(磁盘空间,内存空间等)。操作系统调度执行的最小单位,进程得到系统分配的资源后,需要调用执行任务,每个任务都是以线程的方式去执行的。如上图中的任务管理器,PID14436,这个进程有3个线程在执行。
2023-06-05 21:37:22 56
原创 JVM学习笔记一(线程私有的内存区域)
Jvm运行时,内存区域可以划分为两大部分1.线程私有(程序计数器,虚拟机栈,本地方法栈)2.线程共享(堆与方法区)程序计数器:因为cpu会划分为时间片给多个线程执行,所以需要程序计数器记录下指令执行到具体的位置,当下次线程切换时,从记录的位置继续执行,同时它也是唯一不会发生OOM错误的。本地方法栈与虚拟机栈在某些jvm虚拟机中合并成一个栈,有些是分开成两个。虚拟机栈在线程运行时...
2020-03-04 16:43:32 1379
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人