springboot拦截器与过滤器详解

前言不管是传统的ssm项目,还是springboot项目,拦截器和过滤器在项目开发中都离不开,比如说对于ssm框架类的项目来说,许多登录逻辑的前置校验,黑白名单的检查,以及部分请求的数据分析等依然需要在过滤器或者拦截器中完成随着微服务的盛行,项目中开始引入网关这一层,网关可以说在某种程度上替代了拦截器或过滤器的一部分功能,但网关毕竟不能和拦截器或过滤器等同起来,毕竟它的主要作用不是在这里,微服务之下,不同的微服务自身承载着不同的业务意义,需要单独对自己的服务单元做资源的精细化管控时,过滤器和拦截器仍然能
分类: 其他 发布时间: 03-09 09:49 阅读次数: 0

kafka消息确认机制

前言ACK机制是所有消息中间件必备的特新,kafka也不例外,ACK机制可以提醒使用者消息是否成功发送到broker我们知道,kafka的一个topic中,具体负责处理消息的是分区,一个分区可能存在多个副本,因此在producer端向broker发送消息时,ACK表示消息成功发送到分区后,broker返回给发端的一种可靠性机制producerACKs参数producer端的ACK机制和副本数量有着较为密切的关系,producer配置的acks参数了,acks参数表示当生产者生产消息的时候,写入到副
分类: 其他 发布时间: 03-09 09:49 阅读次数: 0

kafka生产者消息分区策略

前言众所周知,kafka的topic具有分区的概念,生产者写入数据到kafka之后,涉及到数据到底写到哪个分区?常用的分区写入策略生产者写入消息到topic,Kafka将依据不同的策略将数据分配到不同的分区中,具体来说,kafka提供了几种常用的分区写入策略:轮询分区策略随机分区策略按key分区分配策略自定义分区策略下面就来具体看看各自分区写入策略的机制吧轮询策略kafka的默认的策略,也是使用最多的策略,可以最大限度保证所有消息平均分配到一个分区如果在生产消息时,key为nul
分类: 其他 发布时间: 03-09 09:48 阅读次数: 0

kafka消费者分区消费策略

前言在上一篇,我们谈到了从生产者一端,kafka是基于何种策略,将消息推送到集群下topic的不同分区中,可以使用kafka自带的分区策略,也可以根据自身的业务定制消息推送的分区策略而从消费者一端来看,consumer连接到kafka集群之后,是基于什么样的分区策略进行消息消费的呢?kafka消息消费原理如上图所示,kafka的设计架构让它从开始就为分布式而生,上图是一个简单的消息消费示意图,我们知道,一个topic下可以设置多个分区,每隔分区又可以设置多个副本消费者从topic拉取消息的时候,
分类: 其他 发布时间: 03-09 09:48 阅读次数: 0

redis缓存穿透,缓存击穿与缓存雪崩详解

前言在web应用开发中,redis越来越多的应用于各种需要缓存的场景中,比较经典的使用场景就是,使用redis配合mysql做二级缓存,以应对在流量高峰的时候,减少高并发请求对数据库的压力但是在这种简单的架构模式下,如果使用不慎,或者对某些问题没有做到提前的预判,在高并发或者某些特殊场景下,可能会出现缓存穿透,缓存击穿或雪崩的现象缓存穿透请求查询时,key对应的数据在数据源中不存在,从而每次请求的key从缓存中获取不到,请求都会直接打到数据库,当这种请求的量特别大的时候,可能会压垮数据源举例来说
分类: 其他 发布时间: 03-09 09:48 阅读次数: 0

jvm常用监控命令总结

前言在生产环境中,为了保证Java应用的健康运行,需要动态检测应用运转过程中的各种指标,比较常见的像CPU利用率,内存使用,堆栈是否正常等另一方面,生产环境中出现的各种问题,包括异常信息等,都可以通过一些监控指标进行呈现,通过这些指标指导运维和开发人员快速排查问题定位问题与解决问题但说到底,监控的本身离不开原始数据的采集,而JVM本身可以通过相关的命令得出许多有助于分析,排查和定位问题的源信息,本篇将介绍开发过程中常用的一些JVM监控命令,方便工作中快速查阅命令说明常用形式jp
分类: 其他 发布时间: 03-09 09:47 阅读次数: 0

JVM类加载器详解

前言在上一篇中,通过下面这幅图大致了JVM整体的内部运行结构图,在JVM的结构中,类加载子系统作为连接外部class文件与真正将class文件加载到运行时数据区,承担着重要的作用类加载器是什么?有什么作用?1、负责从文件或者网络加载class文件字节流2、读取字节码中的信息,并在运行时存储到JVM的内存区域3、检查并确保加载的class文件信息符合JVM字节码规范...
分类: 其他 发布时间: 03-09 09:47 阅读次数: 0

Java工厂设计模式详解

前言工厂设计模式在开发过程中有大量的运用,不管是spring框架,还是诸多的中间件,都有着工厂设计模式的体现比如,手机生产工厂,当提供了相关生产手机的原材料,工厂就可以按要求生产出手机工厂模式介绍工厂模式提供了一种创建对象的最佳方式,我们在创建对象的时候不会对客户端暴露具体的创建对象的逻辑,并通过使用一个共同创建的接口来指向新创建的对象工厂模式常用实现方式简单工厂模式通过传入相关的类型参数来返回相应的类,这是最简单的一种实现方式,功能相对单一,ke扩展性较差工厂方法模式通过实现类
分类: 其他 发布时间: 03-09 09:47 阅读次数: 0

mysql连接参数配置

前言mysql性能优化涉及到很多方面,在上一篇中通过explain打印出sql的执行计划可以作为指导开发人员进行sql优化是一个方面,另外,mysql自身的参数配置也很多,比如连接参数(connection),查询缓存等,合理的设置mysql参数对于性能优化也是非常重要的下面对mysql的连接参数,即connection相关的参数配置做简单的说明mysql参数设置的两种方式在实际配置mysql参数时,通常有2种做法,可以通过my.cnf(linux)进行设置(持久化设置),也可以通过命令,set g
分类: 其他 发布时间: 03-09 09:46 阅读次数: 0

mysql查询缓存参数配置

前言使用mysql对数据检索时,为了提升查询性能,引入了缓存的配置,通过设置缓存相关参数,在一定范围内可以大大提升查询效率举例来说,当同一条查询语句打到mysql服务器,如果配置了查询缓存,就会将这个结果集存放在缓存空间,下一次同一条sql过来时就直接走缓存,这样就可以提升查询效率1、查看mysql服务器缓存相关配置参数show status like 'Qcache%';Qcache_free_memory:Query Cache中目前剩余的内存大小,通过这个参数可以较为准确的观察到当前系统
分类: 其他 发布时间: 03-09 09:46 阅读次数: 0

mysql Innodb参数配置

前言作为mysql底层最重要的组件,了解Innodb的原理并掌握其基本的参数配置对于mysql性能调优具有非常重要的作用下面结合工作中和Innodb部分常用的参数配置进行说明1、innodb_buffer_pool_size该参数表示mysql 的Innodb存储引擎为优化查询性能而开辟出的一块内存缓冲区show global VARIABLES like 'innodb_buffer_pool_size'换算成M就是128M,即Innodb引擎默认开辟了128M的空间作为优化查询性能使用,
分类: 其他 发布时间: 03-09 09:46 阅读次数: 0

Java虚拟机栈详解

前言虚拟机栈也称为Java栈,每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame)栈特点基本介绍Java虚拟机栈属于线程私有,它的生命周期与线程相同(随线程而生,随线程而灭)虚拟机栈说明了线程运行时的瞬时状态每次方法调用,都会产生对应的栈帧栈帧包括局部变量表、操作数栈、动态链接、方法返回地址和一些附加信息每个方法被调用至执行完毕的过程,就对应这个栈帧在虚拟机栈中从入栈到出栈的完整过程栈的深度有限制局部变量表局部变量表(Local Variable T
分类: 其他 发布时间: 03-09 09:46 阅读次数: 0

mysql 索引原理详解

前言在mysql的性能优化中,索引优化可以算是篇幅最大的了,这是因为mysql底层的Innodb结构在对于索引的优化上面做了大量的优化和改进,如何合理的使用索引,加速查询性能,是一个值得研究的问题Innodb索引为什么要建立索引呢?拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字mysql索引的目的也是在此,数据可以以一定的物理结构存储到磁盘上,但是检索的时候,如果直接查找必然会消耗大量的时间在其他方面,而有了索引,配合合理的存储结构,就可以大大
分类: 其他 发布时间: 03-09 09:45 阅读次数: 0

Java装饰器模式详解

前言装饰器模式也叫做包装器模式,属于结构性设计模式一种,装饰器设计模式在实际的生活中也有很多体现,举例来说,某手机厂商发布了XXX标准版手机,为了吸引用户眼球,提升销量,还特别有纪念碑,青春版,至尊版等我们可以这么设想,不管是哪个版本的手机,其基本的功能是不变的,电话、短信、拍照等这些基础的功能在各个版本都能找到但是不同的版本,基于某个基础的版本,根据标价的不同添加了更多定制化或个性化的功能,相当于是说丰富了标准版的功能装饰器模式作为现有类的一个包装,允许向现有的对象添加注入新的功能,同时还不改变
分类: 其他 发布时间: 03-09 09:45 阅读次数: 0

Java会话技术之 —— cookie与session

前言说到cookie与session,想必大家都不陌生,写过单机模式下的登录业务逻辑的应该多少都会接触到cookie与session,对于cookie和session,很多同学第一反应就是cookie是存储再客户端浏览器的,而session是放在服务端的对于网上一大堆的关于对比cookie与session技术的,对于面试来讲,临时突击加以记忆还是可以的,但说到具体的使用以及原理,还是有必要对其做一些深入的理解和探讨首先我们通过一个具体的小案例来看看cookie与session的由来业务场景假如在单
分类: 其他 发布时间: 03-09 09:45 阅读次数: 0

Java会话技术之 —— Spring Session

前言在上一篇我们聊到了会话技术的基础原理中session和cookie的使用,基于cookie和session可以实现客户端(浏览器)和服务端的会话存储,从请求的无状态变为一定程度的有状态,在文章最后,通过一个简单的演示,看到这样一种现象,即在分布式环境下,假如客户端第一次携带着JSESSINID访问了A服务器的某个接口,再次访问B服务器相同服务的相同接口时,却发现获取到的JSESSINID值为null很明显,在分布式环境下,基于单机模式下的session和cookie的值是无法跨进程互通,于是我们想,
分类: 其他 发布时间: 03-09 09:45 阅读次数: 0

JVM常用垃圾收集器

前言在上一篇,我们谈到了JVM中的常用垃圾回收算法,并了解了JVM中针对堆区中不同的分代采用不同的垃圾回收算法在了解了垃圾回收算法之后,很多伙伴不禁在想,既然是分代垃圾回收,自然新生代和老年代的垃圾收集器也是不同的,事实上确实是这样,分代的回收算法也产生了不同的垃圾收集器,先来看一下下面这张简图左边表示年轻代中可选的垃圾收集器,右边表示老年代中可选的垃圾收集器,任何两个连线之间的两种垃圾收集器可以进行组合使用,在年轻代中,Parallel Scavenge 是默认的GC收集器,而在老年代中,Seri
分类: 其他 发布时间: 03-09 09:44 阅读次数: 0

Java建造者模式详解

前言在生活中,有这么一种场景,当需要去4S店买车时,会根据个人的预算,卖家会给你推荐同一个品牌的相应的低配,中配或高配版,在网上购买毕笔记本时也会遇到类似的情况,但不管是汽车也好,还是电脑,它们基本的功能都是具备的,但是内部使用的材料不同造成最终搭配出来的效果不一样,映射到设计模式上,就是一个典型的建造者设计模式建造者设计模式使用多个简单的对象一步步构建成一个复杂的对象,即将一个复杂对象的构建与表示进行分离,使得同样的构建过程存在多种表示(即电脑可以有多条组装线,A线组装低配电脑,B线组装高配电脑)
分类: 其他 发布时间: 03-09 09:44 阅读次数: 0

Redis秒杀功能设计与实现

前言抢购问题不仅是电商类项目中一个重要的业务,也是许多开发人员在进阶过程中绕不开的问题,关于抢购,如果理清了前后的逻辑和里面涉及到的几个关键性的问题,问题就迎刃而解了抢购中的几个常见问题如何设计抢购功能?(表结构,以及整体的抢购思路)不借助中间件如何实现抢购?(不借助redis)怎么利用redis解决抢购中的超卖问题怎么提升抢购的整体并发?上图是抢购中的两个重要步骤,对于抢购用户,抽象来讲,服务端只需要完成对待抢购商品的锁定以及锁定后的下单操作即可分开来说,商品名额锁定阶段,活动期间待
分类: 其他 发布时间: 03-09 09:44 阅读次数: 0

Redis解决秒杀中的超卖问题

前言在上一篇,我们通过一个简单的案例,分享了怎么利用redis设计并实现一个秒杀抢购的功能,关于秒杀功能中,需要注意的比较关键的有两个问题高并发场景下,怎么确保不会超卖高并发场景下,如何确保一人一单具体在设计的时候,需要结合实际的项目和业务场景,比如1000个人抢购50件商品的时候,抢购是一方面,抢购完毕之后还要下单,这个下单的业务是和抢购放在一起呢还是单独处理,需结合具体场景以及系统的架构进行分析下面用一个更通俗的业务场景来比较全面的业务场景描述某些商家为了吸引客户进店消费,推出线上发放
分类: 其他 发布时间: 03-09 09:43 阅读次数: 0