自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

蹊源的奇思妙想的博客

和我一起来场奇妙旅行吧!

  • 博客(335)
  • 资源 (1)
  • 收藏
  • 关注

原创 浅谈导购业务怎么开展

本篇文章只是从几个方面简单讲述一下,我们开展导购业务需要注重关注的几个环节。其实每一个环节都涉及很深业务知识,需要大家自己去探索和学习。

2024-03-21 16:34:13 259

原创 容量治理三板斧:扩容、限流与降级

在面对不断波动的用户请求与系统负载时,一个精心设计的分布式架构必须具备出色的容量治理能力。在众多治理策略中,扩容、限流与降级无疑是最为有效的“三板斧”。它们不仅确保了在用户访问激增时系统的稳定性和响应速度,也充分考虑了成本效益,最大化了资源的利用效率。扩容提供了处理高峰流量的必要硬件支持,限流则确保了系统不会因超载而崩溃,而降级则在必要时牺牲部分服务质量,保证了核心功能的正常运行。

2024-03-11 21:27:46 940

原创 领域模型设计-COLA架构

当我们需要创建的新应用的时候,往往需要站在一个长远的角度来设计我们的系统架构。有时候我们接手一个老的应用的时候,会发现由于创建之初没有好好规划系统架构,导致我们后期开分成本和维护成本都非常高。近些年来领域模型的系统设计非常流行,本篇文章给大家分享一个非常好用的应用架构COLA.

2024-03-06 18:45:37 1080

原创 「项目实践」如何实现导购推荐“千人千面”

在电商背景下,为用户提供精准的导购推荐不仅能极大提升购物体验,也成为推动业务增长的关键驱动力。随着人工智能和数据科学的快速发展,实现“千人千面”的个性化推荐已不再是无法触及的梦想。如何在众多商品中准确捕捉用户的偏好,并推荐最合适的商品,是每一个零售商不断探索的目标。在本篇博客中,我将和大家分享一些在个性化推荐实践中积累的经验,希望能为大家在此领域的研究和应用提供一丝启发。穿越在数据的海洋,攀爬技术的高峰,导购推荐探索的道路充满了变数和挑战。每一次假设背后都蕴藏着无限可能,而每一次论证都需足够的谨慎和严密。

2024-03-05 22:01:43 886

原创 【避坑参考】如何实现一个百万QPS的秒杀系统

在构建百万QPS的秒杀系统的道路上,没有一种放之四海而皆准的完美方案。每个业务场景都有其独特的需求和挑战,因此最合适的方案往往是基于具体业务场景量身定制的。通过本文的分享,我们希望能够为读者提供一些有益的架构设计和实战经验,帮助你们在面对高并发挑战时能够更加从容和高效。然而,最终的方案还需要结合具体业务场景进行不断的调整和优化。希望这些分享能为你们带来启发,并帮助你们在实际操作中更好地应对各种挑战。

2024-03-04 23:47:57 864

原创 【项目实践】如何解决并发场景下数据一致性问题

并发写场景下,由于微服务的系统环境复杂,不可避免的会出现 【机器、缓存、数据库、依赖服务】等出现问题,导致数据不一致的情况产生

2024-03-04 20:18:04 382

原创 【项目实践】如何发掘用户隐性需求推送PUSH

对比业界广告推荐、触达成熟的平台,例如抖音,小红书,淘宝,知乎等,都已经站在巨量数据的基础之上,具备了 “用户意图分析” 的能力,可以分析出 “用户的隐性需求”,假设我们同样也具有丰富的用户行为数据,那么我们已经具备为用户推送潜在感兴趣商品的必要条件。

2024-03-04 20:14:58 763

原创 【AIGC】如何提高Prompt准确度

随着人工智能的迅猛进展,AIGC(通用人工智能聊天工具)已成为多个行业中不可或缺的自然语言处理技术。Prompt作为AIGC系统的一项关键功能,在工具的有效运作中发挥了举足轻重的作用。

2024-03-04 20:04:10 628

原创 2022年同花顺Java面试

2022年同花顺Java面试前言最近疫情期间抽空面试了一家互联网公司,很多问题都很常见,但是很长时间没有看这方面的知识了,所以回答的确实很不好,于是周末抽空把涉及的问题整理一下,希望对大家有用。正文Java基础1.一个java文件中有几个类,编译后有几个class文件?在一个源文件中用class关键字定义了几个类,编译的时候就会产生几个字节码文件2. Java是否可以同时使用abstract和fInal声明方法?final的四种用法:final 修饰的是引用不可修改,但是引用地址指向的数

2022-03-27 22:18:31 2364 4

原创 搬砖日记-CountDownLatch和CompletableFuture的使用

搬砖日记-CountDownLatch和CompletableFuture的使用前言不知不觉在大厂搬砖快一年了,在这一年里不得不说我学到了很多,特别把之前学到的知识给落地,这给我带来一些满足感和充实感,于是我想着抽空把最近学到的知识给整理整理,既是温习回顾还是一种分享,本篇文章将带领大家了解一下CountDownLatch和CompletableFuture的使用.正文CountDownLatchCountDownLatch程序计数器:CountDownLatch用于主线程等待其他子线程任务都

2022-03-13 00:48:34 1934 1

原创 2021年阿里巴巴Java岗位面试(已拿offer)

2021年阿里巴巴Java岗位面试前言作者蹊源前段时间有辛被阿里的一位同学内推,参加了阿里巴巴Java岗位的面试,本人19年双非本科软件工程专业,目前有一年半的工作经验,面试前就职于一家外包公司。如果在自己本人拿到offer之前,如果有人告诉我一年工作经验可以直接从外包进阿里,我肯定是不信。但是真的发生在自己身上,真的觉得非常非常幸运与不可思议。正文阿里面试总共有五面,包括:第一轮电话面试(同事面):将近1h20min,主要是介绍项目与基础知识第二轮视频面试(组长面):将近1h,同样也是介绍项

2021-03-22 00:39:28 7732 11

原创 RabbitMQ实现延时队列

RabbitMQ实现延时队列前言我们在设计大型的购物类的网站的时候,有这样的一个场景就是我们下订单后如果长时间不去支付的话需要超时将订单取消,并且存库要恢复,这就是我们经常说的订单过期会库存。分布式秒杀系统的设计可参考我的博客:分布式秒杀系统的设计SpringBoot项目中使用RabbitMQ可参考我的博客:SpringBoot项目中使用RabbitMQ正文延时队列订单过期库存回库的场景:淘宝七天自动确认收货:在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统,通知支付系统将款

2021-03-10 17:11:15 739 3

原创 Mysql高并发解决方案

随着近些年来分布式的应用,其伴随而来的是系统的数据量也越来越大,为了可以提升系统的整体性能,我们对以Mysql为代表的关系型数据库也提出了“分布式”的要求.

2021-02-05 21:27:55 3016 1

原创 Zookeeper作为Dubbo服务治理中心

Zookeeper作为Dubbo服务治理中心前言前几天被人问到这样的一个问题:当我们使用Zookeeper作为Dubbo的注册中心时,我们如果启动新的服务提供者怎么被其他节点检测到,我们都知道节点的注册信息都会放在一个服务清单里面,所以这个问题可以理解为Zookeeper是怎么样创建并维护这个服务清单的?分布式可参考我的博客:溪源的Java笔记—分布式微服务可参考我的博客:溪源的Java笔记—微服务正文Zookeeper作为Dubbo服务治理中心首先我们要知道Zookeeper提供了一给类似

2021-02-03 21:04:23 382 1

原创 分布式秒杀系统的设计

不知道你在面试的过程中有没有被问到如何设计一个分布式秒杀系统?本篇博客根据大神们的梳理的体系并结合自己实际的项目经验,大致描述我们在设计分布式秒杀系统需要关注的核心内容——分布式锁、分布式限流、消息队列等等,希望可以帮助同学们可以在面试中更加从容地回答这个问题。

2021-02-02 14:11:41 3181 3

原创 从悲观锁、乐观锁到分布式锁

从悲观锁、乐观锁到分布式锁前言我们在设计商品秒杀模块时为了防止“库存”超卖的情况,我们常常会使用一个锁的机制,解决多线程下数据一致性问题,但是在分布式集群下单节点的锁往往是无法满足业务的需求,本篇博客从悲观锁、乐观锁开始,逐步介绍分布式数据一致性的利器——分布式锁。正文悲观锁与乐观锁悲观锁与乐观锁的差异:悲观锁:一段执行逻辑加上悲观锁,不同线程同时执行时,只能有一个线程执行,其他的线程在入口处等待,直到锁被释放sychronized提供的是悲观锁乐观锁:一段执行逻辑加上乐观锁,不同线程同时执

2021-02-02 12:09:03 626 1

原创 消息队列设计

消息队列设计前言最近被问到这样的问题,如何让你设计一套消息队列,你会从哪些角度去设计。于是我回顾了自己对目前两款主流的消息队列RabbitMQ与Kafka的原理,并收集了一些大佬们对此问题的解答,于是给出了自己的一些理解与认识。消息队列可参考我的博客溪源的Java笔记—消息队列正文消息队列消息队列要实现的主要功能解耦:基于消息的模型,关心的是“通知”,而非“处理”,相对而言更关心结果而不是过程,通过消息队列可以减少系统与系统的耦合性,换句话来说一个系统的低效率不会拖累其他系统。最终一致性:

2021-01-30 01:46:09 683

原创 Java集合快速失败与安全失败

Java集合快速失败与安全失败前言我们在开发过程中有没有在遍历集合的时候遇到过ConcurrentModificationException这样的异常,那么什么样的原因导致这种异常呢?本篇博客将带领大家去了解一下Java集合fail-fast快速失败机制与fail-safe安全失败机制。正文fail-fast与fail-safefail-fast快速失败机制: 是Java集合中的一种机制,在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Conc

2021-01-07 16:42:25 1347 1

原创 蹊源的Java笔记—设计模式

我们在开发过程中会根据一些特点的场景去总结出一些常用的解决方法,这些解决方案实际上就是设计模式,本篇博客带领大家去了解一些场景的设计模式。

2021-01-04 12:29:03 1518 1

原创 SpringBoot将对象转化Map

SpringBoot将对象转化Map前言我们在开发的过程中可能会遇到这样的一个场景:我们需要将一个对象中的属性名和值放在一个Map中,当属性比较少的时候你可以选择逐一放,但是如果我们要动态获取指定属性或者属性特别多的时候,这种“笨方法”显然是行不通的,本篇博客提供两种方式:通过反射将对象转化为Map和利用JackJson将对象转化为Map。正文通过反射将对象转化为Map依赖<!--lombok--><dependency> <groupId>org.pr

2020-12-31 10:15:06 11066 2

原创 蹊源的Java笔记—微服务

溪源的Java笔记—微服务前言微服务架构是一种架构风格和架构思想,它提倡将系统业务按照功能拆分为更加细粒度的服务,即每一个服务都是一个独立的应用。这些应用对外提供公共API用于应用调度。本篇博客从服务治理、微服务网关、Netty等方面介绍微服务。正文服务治理服务注册发现服务注册就是维护一个登记簿,它管理系统内所有的服务地址。当新的服务启动后,它会向登记簿交待自己的地址信息。服务的依赖方直接向登记簿要 Service Provider 地址就行了。当下用于服务注册的工具非常多 ZooKeep

2020-12-29 12:49:43 5215 8

原创 蹊源的Java笔记—分布式

溪源的Java笔记—分布式前言现在的互联网的架构中往往会面对这数以万计的并发访问,为了让系统在这样的访问压力下可以平稳运行,有这限流算法、分布式事务、分布式锁等分布式技术,本篇博客将针对其中几个经常被使用的技术和各位同学介绍介绍。消息队列可参考我的博客溪源的Java笔记—消息队列正文限流算法一般来说服务降级分为两种故障降级:当发生网络故障或者RPC服务返回异常,这种情况我们通常采用关联fallback方法,为客户端设置兜底数据,从而避免造成服务依赖的“雪崩”现象。限流降级:无论系统运行在什

2020-12-14 23:52:10 1952 1

原创 蹊源的Java笔记—消息队列

溪源的Java笔记—消息队列

2020-12-09 03:17:36 2045 2

原创 蹊源的Java笔记—Redis服务器

溪源的Java笔记—Redis服务器前言前段时间我对Mysql数据库的知识点进行了梳理,本篇博客我对Redis服务器的相关的知识点进行整理,Redis可以是我们在Web应用中提升性能的利器,可以说Redis是一个中高级开发者必备的技能点。Mysql的知识点可参考我的博客溪源的Java笔记—Mysql数据库正文RedisRedis常见应用场景:实现缓存系统和内存数据库:会话缓存和全页缓存使用redis来搭建消息队列排行榜/计数器,redis在内存中对数字进行递增或者递减的操作实现比较好。

2020-12-03 23:54:57 1181 1

原创 蹊源的Java笔记—Mysql数据库

溪源的Java笔记—Mysql数据库前言前段时间我们花了比较多的时间对Spring相关的知识点进行了整理,本期博客将带领各位同学来了解一下Mysql数据库的必备知识点。Spring的可参考我的博客溪源的Java笔记—Spring正文MysqlMysql是我们最常用的关系性数据库。Mysql的逻辑结构组件:客户端、核心服务、存储引擎Mysql查询的5个过程过程:客户端向MySQL服务器发送一条查询请求服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段

2020-12-01 00:27:09 4740 6

原创 蹊源的Java笔记—Spring

在现如今的Java开发中有一个不得不提的工具,那就是Spring,Spring是Java EE编程领域的一个轻量级开源框架, 是为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架 。本期博客带领大家去了解Spring相关的知识点。

2020-11-22 11:09:35 3308 3

原创 蹊源的Java笔记—线程并发与线程安全

溪源的Java笔记之线程并发与线程安全前言上期博客我们对线程与线程池相关知识进行了总结,实际上我们在使用线程的过程中有不得不提的问题就是线程并发与线程安全,我们在为了提升系统性能的时候,采用多线程的方式,就有可能会造成数据不安全,本篇文章溪源将带领大家了解一下线程并发与线程安全相关的知识。线程与线程池可参考我的博客:溪源的Java笔记之线程与线程池正文线程并发线程并发,指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行

2020-11-13 22:17:59 2000 2

原创 蹊源的Java笔记—线程与线程池

溪源的Java笔记—线程与线程池前言Java的进阶之路上不得不说的技术点就是——多线程,上期博客我们对JVM的知识进行了简单地整理,本期博客将针对线程与线程池后端知识点一一阐述。JVM虚拟机 可参考我的博客:溪源的Java笔记—JVM正文线程线程是CPU调度分派的基本单位。线程的周期新建:当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值。就绪:当线程对象调用了start()方法之后,该线程处于就绪状态。Java 虚拟机会为

2020-11-11 18:08:33 2973 1

原创 蹊源的Java笔记—JVM

前言作为一个Java开发,JVM是我们必须要了解的,我们只有建立在了解它的基本运作原理,才可能设计出一个最合理的代码方案,在此之前我们已经了解了集合中的Map接口,接下来溪源我将带领大家了解一下JVM,希望对大家略有帮助。集合之Map接口可参考我的博客:溪源的Java笔记—集合之Map接口正文JVMJVM为了达到给所有硬件提供一致的虚拟平台的目的,牺牲了一些与硬件相关的特性。Java源文件可以通过编译器转化成字节码文件(.class文件),这些字节码文件又可以被JVM转化成机器码。JVM是运

2020-11-05 23:15:43 3179 2

原创 SpringBoot使用PageHelper实现数据分页

SpringBoot使用PageHelper实现数据分页前言我们在做页面查询的时候由于页面无法一次性展示所有的数据,所以采用一种分段式的展示策略—分页查询,实现分页查询的方式有很多种方式,比如sql中的limit,mybatisplus带的分页插件等等,这里我们介绍一下如何在SpringBoot中使用PageHelper插件实现分页查询。正文PageHelperPageHelper是针对MyBatis最方便的分页插件PageHelper支持任何复杂的单表,多表查询。它有以下特点:PageHe

2020-11-03 20:39:19 4524

原创 SpringBoot使用Netty实现远程调2.0

SpringBoot使用Netty实现远程调2.0前言不久之前溪源我发布了一篇博客时关于使用如何使用Netty实现远程调用,之前做的只是一个简单的demo,最近在此基础上,进行了进一步的扩展:包括使用反射机制获取类、异常的统一处理等,虽然有一定程度上的改进,但还是有一定程度上的不足,我会持续更新继续改进的。SpringBoot使用Netty实现远程调用可参考我的博客:SpringBoot使用Netty实现远程调用正文SpringBoot使用Netty实现远程调2.0在SpringBoot使用Ne

2020-11-01 20:14:51 3422 2

原创 SpringBoot使用validation-api实现对枚举类参数校验

SpringBoot使用validation-api实现对枚举类参数校验前言之前写了一个博客是关于使用SpringBoot使用validation-api实现参数校验,当时使用的注解都是validation-api自带的注解只能完成对空值、长度等简单的校验,在我们日常的使用当中会遇到对参数是否在枚举值类的校验,针对这种情况我们怎么来实现呢?SpringBoot使用validation-api实现参数校验可参考我的博客:SpringBoot使用validation-api实现参数校验正文Spring

2020-11-01 19:41:04 7059 7

原创 蹊源的Java笔记—集合之Map接口

溪源的Java笔记—集合之Map接口前言集合可以说Java最重要的数据结构了,在上期博客溪源我简单对Collection接口一些整理,这期博客会对另一个集合类接口—Map接口常见的知识点做了简单地整理。集合之Collection接口可参考我的博客:溪源的Java笔记—集合之Collection接口正文集合类集合类有两个接口组成:Collection和MapMap接口Map接口有三个实现类分别是:HashMap:HashMap实现了Map接口,继承AbstractMap,它是基于哈希表(

2020-10-29 23:41:23 4101 3

原创 SpringBoot使用阿里OSS实现文件云存储

SpringBoot使用阿里OSS实现文件云存储前言我们在项目中经常会使用到图片或者文档资源,一般来说如何这类文件比较少的时候我们可以直接存在在服务器中,但是如果一旦这些文件到达一定数量的时候如果在放在应用服务器必然会影响应用服务器的性能,并且有时候这些图片资源也要直接用在前端显示当中,所以放在应用服务器也是不妥的。一些比较大的互联网公司可能会使用一些分布式文件系统来达到存储文件的目的,但这种方式门槛过高。如何找到一个合适且性价比高的文件存储方式呢?那么不得不说的就是对象存储服务OSS.FastDFS

2020-10-27 23:56:46 8237 17

原创 蹊源的Java笔记—集合之Collection接口

溪源的Java笔记—集合前言在java中我们最常的数据接口就是集合,在面试的时候最常问的问题也是集合相关的问题,结合自己的面试经验,我做了简单地整理,希望可以能够帮助小伙伴们一二。正文集合集合有两个接口组成:Collection和MapCollection接口Collection接口有3个子接口分别是:List:有序且元素是可重复的Set:无序并元素是不可重复的Queue:先进先出的线性数据结构,并且只能观察到队首元素.List接口List的常用实现类有:ArrayList

2020-10-27 12:41:23 5082 7

原创 SpringBoot使用Netty实现远程调用

SpringBoot使用Netty实现远程调用前言众所周知我们在进行网络连接的时候,建立套接字连接是一个非常消耗性能的事情,特别是在分布式的情况下,用线程池去保持多个客户端连接,是一种非常消耗线程的行为。那么我们该通过什么技术去解决上述的问题呢,那么就不得不提一个网络连接的利器——Netty.正文NettyNetty是一个NIO客户端服务器框架:它可快速轻松地开发网络应用程序,例如协议服务器和客户端。它极大地简化和简化了网络编程,例如TCP和UDP套接字服务器。NIO是一种非阻塞IO ,

2020-10-24 00:12:29 9445 12

原创 缓存和数据库一致性问题

缓存和数据库一致性问题前言在我们生产的过程中,我们会发现我们80%的业务是由20%的数据来驱动的,这20%的数据往往被我们称为热数据,这种现象也被称为二八定律。这种数据访问不均匀的现象,使得我们可以采用最有效的技术——缓存来提升我们整个系统的性能,但是用到缓存我们不可避免地要考虑一个问题缓存和数据库数据一致性的问题。正文缓存和数据库一致性问题缓存和数据库双写一致性问题强一致性:缓存和数据库数据始终保持一致最终一致性:缓存和数据库数据有一段时间不一致,单不影响查询结果。解决缓存一致性的解决

2020-10-21 16:06:29 3617

原创 微服务+微信小程序实现社区服务

我在上大学的时候毕业设计做的是微服务`SpringCloud`结合微信小程序实现一个提供一些生活服务的微信小程序,它主要可以提供豆瓣电影资讯、热点新闻、天气预报、停车位预约等生活服务,也用到了一些分布式的技术比如消息队列、内存数据库等。

2020-10-19 00:13:50 16605 28

原创 开箱即用的SpringBoot模板

如果你从事的开发岗位是独立开发一个完整的项目的时候,我们需要前期做很多的开发准备,特别是使用比较多的技术栈的时候,我们前期会投入比较多的组件调试时间,其实这部分工作往往是不涉及业务的,完全可以把常见的技术栈集合在一起做一个开发模板,本篇博客为大家提供一个不涉及业务逻辑的`SpringBoot`项目模板。

2020-10-14 09:20:07 9209 27

原创 SpringBoot通过自定义注解实现日志打印

在我们日常的开发过程中通过打印详细的日志信息能够帮助我们很好地去发现开发过程中可能出现的`Bug`,特别是在开发`Controller`层的接口时,我们一般会打印出`Request`请求参数和`Response`响应结果,但是如果这些打印日志的代码相对而言还是比较重复的,那么我们可以通过什么样的方式来简化日志打印的代码呢?

2020-10-12 23:36:29 6208 7

springcloud-alibaba-demo-8-9.zip

容错机制值得是服务容忍错误的能力,当系统出现网络延迟、网络中断、服务异常等原因,造成当前服务暂时不可用,Dubbo提供了容错机制来优雅地帮助服务调用者处理这类错误。 Dubbo默认提供了6种容错模式 Failover Cluster(默认):失败自动切换。当服务调用失败后,会切换到集群中的其他机器进行重试,默认重试次数为2,通过属性retries=2可以修改次数,但是重试次数增加会带来更长的响应延迟。(这种容错模式通常用于读操作) Failfast Cluster:快速失败。当服务调用失败后,立即报错,也就是指发起一次调用。(这种模式通常用于写操作,这种模式可以防止网络等问题导致数据重复新增,它等同于Failover Cluster retries=0) Failsafe Cluster:失败安全,出现异常时,直接忽略异常。(这种模式处理的数据相对而言不太重要) Failback Cluster:失败后自动回复。服务调用出现异常时,在后台记录这条失败的请求定时重发。(这种模式适合用于消息通知操作,保证这个请求一定发送成功,可以解决短期网络拥塞导致请求的丢失) Forking Cluster:并行调用集群中的多个服务,只要其中一个成功就返回。可以通过forks=2来设置最大并行数。(这种模式要保证请求的幂等性) Broadcast Cluster:广播调用所有的服务提供者,任意一个服务报错则表示服务调用失败。(这种模式需要所有节点都是正常的才能被调用) 服务调用者容错机制的配置方式 容错机制既可以在服务调用者中配置或在服务提供者中配置 在服务调用者中配置只对该调用者起作用(其他调用节点采用默认的) 在服务服务者中配置对所有调用者起作用 调用者的配置优先级高于服务者

2020-08-09

空空如也

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

TA关注的人

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