自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (2)
  • 收藏
  • 关注

原创 你知道【查找附近的人】是怎么实现的吗

我们在App上,经常能看到【查找附近的人】这么个功能,但是你知道它是怎么实现的吗?

2023-08-15 17:24:58 172

原创 Java面试——一分钟搞懂限流算法

令牌桶算法类似上面的漏桶算法,它相当于有个管理员按照限流的大小,定速地向令牌桶扔令牌。运营网站,经常会遇到各种挑战:某黑客发起DoS攻击、网络爬虫网页抓取、商品秒杀活动、双十一与618等场景,会使流量突然激增,如果不限制流量的访问就会使系统宕机。:漏桶算法无法应付突然激增的流量,如果流量突增,因为算法本身的限制,只能按照固定的速度去处理请求。最简单的一种限流算法,我们可以通过原子操作类累积一秒内的请求次数,如果超过设定阈值,拒绝请求访问。:令牌桶算法是针对漏桶算法的优化,能够应对突增的流量。

2023-08-13 17:00:46 187

原创 一文读懂分布式熔断与服务降级

分布式系统都是由多个微服务构成,一个接口调用过程会存在很长的服务调用链。一旦调用链上某服务挂掉或者响应时间很长,会导致整个调用链响应缓慢,严重点的话,就可能导致系统全面崩溃,这就是服务雪崩。为了防止服务雪崩,在被调用的服务出现故障时,调用方主动停止调用,这种行为成为服务熔断。服务降级是在高并发情况下,应对服务器压力剧增的情况,对某些边缘服务与页面进行停用或者屏蔽,释放计算机资源用来确保核心服务的平稳运行。举个栗子,公司总共四台服务器,两台用来进行下单业务,另外两台用来进行服务评价、商品推荐。

2023-08-11 17:18:45 188

原创 浅谈JavaWeb(一)—— Servlet

Servlet其实就是Java提供的一个接口,同时也是处理网络请求的规范,是Java Web程序的基础。

2023-07-31 22:32:35 80

原创 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 429

原创 聊一聊JVM性能调优

上线前,可以通过Jmeter进行压测,然后进行性能调优。上线后,通过JDK自带的这些性能调优工具,进行监测后续情况。性能调优没有捷径,也没有统一的参数,只能自己设置参数后,使用压测工具与监测工具,一遍遍查看效果。

2023-07-22 17:24:06 53

原创 谈谈基于Github的OAuth2第三方登录实现

上篇文章介绍了,这篇文章将介绍怎么通过github来实现OAuth2.0第三方登录。

2023-07-19 21:11:27 190 1

原创 聊一聊微信登录与QQ登录的底层实现

我们打开微信登录与QQ登录的开发文档,就能清楚看到,它们都使用了同一个东西叫做OAuth2.0,那么OAuth2.0是什么东东呢?(‧_‧?微信登录OAuth2.0是一种授权协议,用户授权第三方网站,允许他们访问用户存储在服务器上的信息,而不需要将用户名和密码提供给第三方网站,并可以控制第三方网站能访问的数据范围。

2023-07-16 23:32:44 98

原创 聊一聊MySQL的存储引擎

存储引擎是MySQL的一个组件,它能用来处理创建、读取、更新的SQL操作。

2023-07-14 23:18:59 53

原创 1分钟了解MySQL的用户权限

我们经常能在网上看见删库跑路的段子,直接使用root用户来操作数据库无疑危险的。实际生产环境中,一般由DBA掌握root用户权限,给其他人都是一个赋予只读的普通用户权限。下面就让我们来看看MySQL的用户权限的设计吧。

2023-07-12 23:37:47 49

原创 一文解读MySQL查询优化技巧

根据官方的测试,开启缓存后针对一个表进行简单查询,每次查的都不一样,结果性能降低13%。如果查询的所有字段都是索引字段,称为覆盖索引,覆盖索引的查询速度与效率是非常高的。原SQL,会查询10020条数据,再抛弃前面的10000条数据,只保留20条。不要在重复性过高的字段上使用索引,比如性别这个字段,加上索引的作用不大。第二条SQL,加了limit 1之后,找到第一条匹配的数据之后,直接返回结果,停止匹配工作。第一条SQL找到第一条匹配数据之后,继续扫描下一条数据,直到所有数据表的数据扫描一遍。

2023-07-10 23:49:52 51

原创 一文读懂MySQL执行计划

在日常开发中,我们经常会碰到一些复杂的多表联查的SQL,进行性能优化的问题。这时候了解SQL的执行过程就尤为重要。通过在SQL语句前面添加Explain关键字,MySQL就会为我们揭示执行的流程。

2023-07-08 22:45:01 50

原创 一文读懂MySQL的日志体系

默认关闭,只记录数据表结构与数据表的数据变更SQL, 不会记录SELECT与SHOW语句。它是开发与运维中非常重要的日志,可以用它进行数据恢复,msql的主从数据复制。我甚至见过通过监控数据库binlog的变动,自动同步数据到缓存与ES的处理。默认关闭,记录了所有CRUD操作日志,生产环境下不建议开启,在高并发下会导致频繁的IO操作,影响mysql的性能。生产环境可以开启,找出对应业务执行的慢SQL,后续进行SQL优化,提升执行效率。默认开启,记录了系统启动、运行以及停止过程中遇到的一些问题。

2023-07-06 23:37:31 52

原创 一文读懂分布式事务的解决方案

在中介绍了二阶段提交与三阶段提交,今天我们来聊聊市面上一些分布式的解决方案。

2023-07-04 23:25:05 43

原创 Netty的设计架构

上一篇文章一文读懂NIO中,我们介绍了NIO, Java的NIO类库与API都相当复杂,想要写好一个高质量的NIO的程序,你必须精通网络编程与多线程的知识。在这个背景下Netty诞生了,只要进行简单的编码就能开发出一个可靠、高性能的NIO程序。

2023-07-02 23:23:14 79

原创 Java网络编程(三)一文读懂NIO

NIO被称作是 New IO或者Non block IO。它是Jdk1.4开发引入的类库。NIO与BIO的最大不同是,BIO是面向流,而BIO是面向缓冲区buffer。Java的IO数据流向是固定的,要么读,要么写。但是NIO则可以同时支持读写。

2023-06-30 22:50:09 67

原创 Java网络编程(二)一文读懂BIO

上一篇文章聊到了linux的五种IO模型,这篇文章将讲解一下Java的BIO模式。

2023-06-28 22:23:56 146

原创 Java网络编程基础(一)3分钟了解linux网络IO模型

NIO比起上面的BIO就变聪明了,它不会一直傻等,它开启了轮询,每隔一段时间,就会找内核问下:你好了没有?所以一次网络IO的读取,远程的服务器发送过来的数据,到达网卡后,网卡先拷贝到内核缓冲区,内核缓冲区再拷贝到用户空间的内核缓冲区。网络的IO的写入恰好相反,数据从用户空间的缓冲区拷贝到内核空间的缓冲区,然后内核缓冲区再通过网卡发送出去。你(应用程序)告诉京东快递(内核)快递柜自取,快递员在快递柜塞好你的快递后,然后给你发取货码(SIGIO)。在京东快递员(内核)给你打电话之前,你是自由的,想干啥就干啥。

2023-06-27 22:57:29 57

原创 一文读懂Session共享

在中我们介绍了Cookie与Session,这篇文章将继续这个话题,讲述Cookie与Session的实际应用场景。

2023-06-26 23:04:48 127

原创 一文读懂分布式事务原理

我们讲到了CAP理论的特点,三者中只能存两。而基于分布式系统的特点,分区容错性是必要的选择。所以我们只能在CP与AP两者之间做权衡。而BASE理论在此之上进行了扩展,放宽了强一致性的保证,通过最终一致性来尽可能提高服务的可用性。

2023-06-25 23:11:55 46

原创 一文读懂Nginx与vpn反向代理

Nginx是俄罗斯程序员Igor Sysoev开发的轻量级Http服务器。

2023-06-24 23:08:01 970

原创 ​RocketMQ使用浅析(二)​

上篇文章介绍了RocketMQ的构成与消息发送方式,接下来我们继续RocketMQ的消费模式、事务消息与持久化。

2023-06-23 23:13:45 46

原创 RocketMQ使用浅析(一)

一款由阿里巴巴集团开发,对付双11削峰填谷的消息中间件。

2023-06-22 22:54:58 117

原创 一文读懂Cookie与Session

与是Web开发中,常见的两种技术,今天我们就来探讨一下这两种技术。

2023-06-21 22:52:09 44

原创 3分钟读懂分布式CAP理论

现在企业招聘开发,基本都会要求有分布式系统的开发经验,许多面试题也是针对分布式环境下会出现的问题提出。想要在Java开发的道路走上去,熟悉分布式系统可以说是必须的。而CAP理论是业界进行分布式系统设计的一种重要思想,下面就让我们来看看吧。CAP是由美国计算机科学家Leslie Lamport在1974年提出的一种理论,他指出一个分布式系统不可能同时满足以下3点情况:假如你有N份冗余备份的数据,那么同一时刻,无论你读取哪一份数据,都必须确保数据是相同的,我保证每一份数据都是最新的。你的系统必须每周007不间断

2023-06-20 23:13:20 69

原创 Java基础—IO浅析

IO流用来处理设备之间的数据传输。这个设备是指任何能够创造出数据或者从外界接收数据的东西。可以是你的鼠标、硬盘、内存、文件、视频等等。

2023-06-19 23:09:00 52

原创 一文读懂Spring的事务机制

厨房没有酱油了,妈妈叫你去商店买一瓶回来。买酱油的过程,你给分成三个步骤:1.去妈妈那拿钱2.去商店挑好酱油3.把钱给收银员这3个步骤,只要其中一个步骤完不成,买酱油失败。只有全部完成,买酱油成功。这种一组操作,要么全部成功,要么全部不成功,就叫做事务。Spring支持声明式事务和编程式事务两种方式。

2023-06-18 23:10:01 96

原创 Docker网络模型—那些年踩过的坑

之前的一篇文章,我讲过了Docker的基本使用,今天继续讲讲Docker的四种网络,以及配置时,会遇到的坑,以及解决办法。如果对Docker的基本概念与使用感兴趣的可以看我另一篇文章3分钟读懂docker使用。

2023-06-17 23:12:44 51

原创 Java高级—3分钟读懂Spring事件机制

在日常开发过程中,提到发送消息,我们很自然的联想到RabbitMQ、RocketMQ。但是你知道Spring框架本身的事件机制吗?你知道Java的事件机制吗?今天我们就从与来聊聊。

2023-06-16 23:04:12 61

原创 Java高阶—代理设计模式从抢银行开始说起

Java的设计模式多达23种,这二十三般绝艺,绝大多数人都是样样精通,样样疏松,咋一看猛如虎,定眼一瞧,只会用在main函数。大家都用Mybatis框架,增删改查都不怕,若要问你只见接口不见实现是为啥,你脑袋一拍,得去找真专家。今天我从代理设计模式出发结合Mybatis框架给大家讲解一下。

2023-06-15 23:09:50 36

原创 Java基础-Maven浅析01

在Java开发过程中,为了实现功能,我们往往要引用大量外部的库与框架,如mybatis、mysql-connector.jar, Springboot等待。管理这些外部库与框架,是一件非常让人头疼的事情,而Maven是一个构建自动化与项目管理的工具,它简化了我们编译、运行、打包步骤,让开发人员更关注于编写代码而不是处理一些复杂的构建脚本。

2023-06-14 22:50:13 38

原创 3分钟读懂docker使用

docker的使用

2023-06-13 22:45:22 36

原创 Java高级特性01-怎么使用自定义注解

注解Annotation是以元数据的形式在Java5中引入,它添加到Java代码里,如Java类(class)、方法、属性甚至是其他注解。它们给代码提供了额外的信息,在三方框架和库用于生成代码、执行验证或在运行时应用某些行为时进行使用。自定义注解顾名思义,是你自己定义的注解。它们允许你根据自己的需求,扩展Java现有的注解集合。用于其他注解的注解称为元注解。在java.lang.annotation中定义了几种元注解类型。

2023-06-11 22:41:14 135

原创 Java基础-反射机制的简单使用

学习Java的同学,反射是一个熟悉又陌生的概念,熟悉是知道反射是Java的一种机制,面试也会经常碰到,说陌生是平常很少用到。今天我带大家来认识一下Java的反射。

2023-06-10 23:25:06 45

原创 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 97

原创 redis面试篇-01一文搞懂雪崩、穿透、击穿、预热

日常开发中,为了节省内存空间,redis的key值会设置过期时间。一旦大量的redis缓存过期,所有的请求全部怼到数据库(mysql默认最大连接数,看版本),就会把数据库搞挂掉(如下图所示),这就是缓存雪崩。怎么解决缓存雪崩呢?1.设置热点数据永不过期2.数据访问加互斥锁,每次只允许一个用户访问3.缓存降级策略,比如:redis缓存失效,还有本地缓存,本地缓存之后才是mysql4.缓存失效时间分散化,防止集中失效:将缓存的key值先罗列到纸上,然后对key值时间进行规划,分散开来。

2023-06-08 22:06:30 46

原创 别人用开源项目赚钱,我却吃上牢饭?

faker.js一个github上著名的开源项目,上万的star,上亿次的下载量,一夜之间被原作者删除。tiktok突然砍掉了一整个功能模块,这背后到底是人性的扭。。咳,串词了。github是全球最大代买开源平台,里面充斥着各种的开源项目,今天给大家说道说道开源协议。

2023-06-07 21:21:37 395

原创 轻松搞懂Java类加载与SPI机制

你知道Java的类加载机制吗?你了解双亲委派模型吗?你知道怎么打破双亲委派模型吗?这些都是面试经常出现的问题,今天我带大家从类加载机制出发,帮助大家快速掌握Java的SPI机制与Spring的SPI机制。

2023-06-06 21:52:55 524

原创 Java多线程那些事儿(一)

进程是操作系统资源分配的最小单位,如下任务管理器中的都是进程,PID是进程id。通俗点就是win10、Mac、linux这些电脑操作系统都是以进程为单位进行资源分配(磁盘空间,内存空间等)。操作系统调度执行的最小单位,进程得到系统分配的资源后,需要调用执行任务,每个任务都是以线程的方式去执行的。如上图中的任务管理器,PID14436,这个进程有3个线程在执行。

2023-06-05 21:37:22 40

原创 JVM学习笔记一(线程私有的内存区域)

Jvm运行时,内存区域可以划分为两大部分1.线程私有(程序计数器,虚拟机栈,本地方法栈)2.线程共享(堆与方法区)程序计数器:因为cpu会划分为时间片给多个线程执行,所以需要程序计数器记录下指令执行到具体的位置,当下次线程切换时,从记录的位置继续执行,同时它也是唯一不会发生OOM错误的。本地方法栈与虚拟机栈在某些jvm虚拟机中合并成一个栈,有些是分开成两个。虚拟机栈在线程运行时...

2020-03-04 16:43:32 1342

thinking in Java(edition 4)

thinking in java第四版英文原版,java开发,Java基础

2017-10-23

SSH框架加Json数据类型整合Jar包

SSH框架加Json数据类型整合Jar包

2016-07-26

空空如也

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

TA关注的人

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