全部后端前端产品运维设计测试开发者客栈
最新 最热 官方 加精

Qbian | 2022-11-09 | 开发者客栈

TODO(待办)新功能上线啦 !!! 🎉🎉🎉

地址:[https://www.developers.pub/todo/doing](https://www.developers.pub/todo/doing) 使用场景 生活中 帮忙取快递提醒:下班路过小区快递点,帮家人取个快递,家人可以分配个任务给你,在你快到家的时间定时提醒不要忘记; 重要日期提醒:生活中重要的时刻(生日、纪念日等),可以提前创建好任务,做好定时提醒别错过; 待办事项提醒:生活中看到的一些好看的电影,记录下来周末找个完整的时间刷一刷; 记录想法:生活中随时冒出来的一些奇思妙想,可能过会就会忘掉,可以快速记录下来,事后回顾; 工作中 自动生成日报并推送:工作中每天都需要写日报,可以把当天的工作罗列出来,当天工作内容更明确,效率更高,下班点还会自动生成并推送日报; 自动生成周报并推送:工作中每周都需要写周报,本周完成的工作,在本周结束后,自动生成周报并推送,高效快捷,还不会遗忘; 工作内容定期回顾总结:自定义时间范围,项目标签等统计任务,做工作复盘总结,不断反思进步; 功能列表 个人使

 4842 |  16 |  62 开发者客栈

心如止水 | 8小时前 | 后端相关Spring 全家桶

SpringBoot 实现 PDF 添加水印,我有 5 种实现方案

简介 PDF(Portable Document Format,便携式文档格式)是一种流行的文件格式,它可以在多个操作系统和应用程序中进行查看和打印。在某些情况下,我们需要对 PDF 文件添加水印,以使其更具有辨识度或者保护其版权。 本文将介绍如何使用 Spring Boot 来实现 PDF 添加水印的方式。 方式一:使用 Apache PDFBox 库 PDFBox 是一个流行的、免费的、用 Java 编写的库,它可以用来创建、修改和提取 PDF 内容。PDFBox 提供了许多 API,包括添加文本水印的功能。 1. 添加 PDFBox 依赖 首先,在 pom.xml 文件中添加 PDFBox 的依赖: <dependency     <groupId org.apache.pdfbox</groupId     <artifactId pdfbox</artifactId     <version 2.0.24</version </dependency 2. 添加水印 在添加水印之前,需要读取原始 PDF 文件

 19 |  0 |  0 后端相关Spring 全家桶

温酒 | 8小时前 | DDD后端相关

DDD死党:内存Join--将复用和扩展用到极致

1. 为什么"内存Join"是个无法绕过的话题 首先,我们先简单解释下,什么是“内存Join”。 相信大家对关系数据库的 join 语句肯定不陌生,其作用就是通过关联关系从多个表中查询数据,关联条件和数据聚合全部由 数据库服务完成。 image 而 内存 Join,简单来说就是把原本数据库帮我们完成的数据聚合操作迁移到应用服务,在应用服务的内存中完成。 image 数据库join非常简单,但随着系统的发展,内存join变得越来越重要,其核心驱动力有: 1. 微服务。微服务要求“数据资产私有化”,也就是说每个服务的数据库是私有资产,不允许其他服务的直接访问。如果需要访问,只能通过服务所提供的接口完成 2. 分库分表的限制。当数据量超过 MySQL 单实例承载能力时,通常会通...

 18 |  0 |  0 DDD后端相关

晚风 | 9小时前 | 后端相关Spring 全家桶

SpringBoot 这么实现动态数据源切换,就很丝滑!

最近在做业务需求时,需要从不同的数据库中获取数据然后写入到当前数据库中,因此涉及到切换数据源问题。本来想着使用Mybatis-plus中提供的动态数据源SpringBoot的starter: dynamic-datasource-spring-boot-starter 来实现。 结果引入后发现由于之前项目环境问题导致无法使用。然后研究了下数据源切换代码,决定自己采用 ThreadLocal+AbstractRoutingDataSource 来模拟实现 dynamic-datasource-spring-boot-starter 中线程数据源切换。 1 简介 上述提到了ThreadLocal和 AbstractRoutingDataSource ,我们来对其进行简单介绍下。 ThreadLocal :想必大家必不会陌生,全称: thread local variable 。主要是为解决多线程时由于并发而产生数据不一致问题。ThreadLocal为每个线程提供变量副本,确保每个线程在某一时间访问到的不是同一个对象,这样做到了隔离性,增加了内存,但大大减少了...

 20 |  0 |  0 后端相关Spring 全家桶

石昊 | 1天前 | 后端相关Spring 全家桶

SpringBoot+Flowable 完美结合,优雅实现工作流!

工作流Flowable学习,入门,实战 1工作流介绍 1.1 为什么使用工作流 在程序员工作中,或多或少都会遇见审批流程类型的业务需求。一个审批流程可能包含开始 申请 领导审批 老板审批 结束等多个阶段,如果我们用字段去定义每一个流程阶段(0 开始 1 申请 2 领导审批 3 老板审批 4 结束),虽然可以实现流程运行逻辑,但这样业务代码逻辑复杂。如果审批流程还有驳回操作,则还需要加一个是否驳回字段,显然这样实现,成本太大,且不利于维护。 为了解决上述用代码逻辑硬写审批流程而导致的成本大,不利用维护的缺点,工作流因此而生。 1.2 工作流是什么 工作流,是把业务之间的各个步骤以及规则进行抽象和概括性的描述。使用特定的语言为业务流程建模,让其运行在计算机上,并让计算机进行计算和推动。工作流是复杂版本的状态机。 简单状态 上图为工作流退化为基础状态机的例子,路人乙的状态非常简单,站起来-

 22 |  0 |  0 后端相关Spring 全家桶

晴天 | 1天前 | 数据库

数据库死锁排查思路分享

前言 最近解决了一个数据库死锁问题。因此,写篇文章,给大家讲讲死锁的排查思路。 死锁现场 死锁是如何产生的 排查思路 sql模拟 死锁解决方案 死锁场景现场 业务场景类似就是这样:做用户的数据迁移,酱紫: 把业务礼物表A的数据删除,然后修改用户ID后,然后插入到礼物B表。其中,A表和B表,表示同一个礼物逻辑表下的 不同分表 。 表结构:、 CREATE TABLE  gift_send_flow_0  (    id  int NOT NULL AUTO_INCREMENT COMMENT '主键',    sender_id  int DEFAULT NULL COMMENT '赠送者ID',    gift_type  varchar(50) NOT NULL COMMENT '礼物类型',    gift_id  varchar(50) NOT NULL COMMENT '礼物ID',    gift_name  varchar(100) NOT NULL COMMENT '礼物名称',    created_ti

 18 |  0 |  0 数据库

青木 | 1天前 | JavaScript前端相关Http

你知道 XHR 和 Fetch 的区别吗?

现如今,网站开发普遍采用前后端分离的模式,数据交互成为了不可或缺的关键环节。在这个过程中, XHR 和 Fetch API 是两种最常见的方法,用于从 Web 服务器获取数据。 XHR 是一种传统的数据请求方式,而 Fetch API 则代表了现代 Web 开发的新兴标准。 接下来,我们将一同深入学习它们的使用方法和适用场景。 XMLHttpRequest XMLHttpRequest,通常简称为 XHR。通过 XMLHttpRequest 可以在不刷新页面的情况下请求特定 URL,获取数据。XMLHttpRequest 在 AJAX 编程中(比如 jquery)被大量使用。 AJAX :异步 JavaScript 和 XML。许多人容易把它和 jq 的 ajax 混淆。它是一个技术统称,本身不是一种技术。 特点 1. 异步请求 :XHR 允许进行异步请求,它可以在后台执行,而不会阻止页面的其他操作。 2. 支持跨域请求 :通过服务器端设置允许跨域请求,从不同域的服务器获取数据。 3. 事件驱动 :提供了 onl...

 23 |  0 |  0 JavaScript前端相关

OOM | 4天前 | 后端相关

TCP 重传、滑动窗口、流量控制、拥塞控好难?看完图解就不愁了(重制)

你还在为 TCP 重传、滑动窗口、流量控制、拥塞控制发愁吗?看完图解就不愁了 正文 TCP 巨复杂 ,它为了保证可靠性,用了巨多的机制来保证,真是个「伟大」的协议,写着写着发现这水太深了。。。 本文的全部图片都是小林绘画的,非常的辛苦且累,不废话了,直接进入正文,Go! 相信大家都知道 TCP 是一个可靠传输的协议,那它是如何保证可靠的呢? 为了实现可靠性传输,需要考虑很多事情,例如数据的破坏、丢包、重复以及分片顺序混乱等问题。如不能解决这些问题,也就无从谈起可靠传输。 那么,TCP 是通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输的。 今天,将重点介绍 TCP 的 重传机制、滑动窗口、流量控制、拥塞控制。 --- 重传机制 TCP 实现可靠传输的方式之一,是通过序列号与确认应答。 在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收...

 27 |  0 |  0 后端相关

女王范 | 4天前 | 后端相关

如何保证高可用,我有11 个关键技巧

大型互联网架构设计,讲究一个 四件套 组合拳玩法, 高并发 、 高性能 、 高可用 、 高扩展 。 如果能掌握这四个方面,应付大厂面试以及日常工作中的架构方案设计基本不是什么难题。 今天就带大家学习下 高可用 都有哪些设计技巧? 一、系统拆分 有句古话 "牵一发而动全身"。 面对一个庞然大物,如果没有一个合理的分工分层。任何一个小小失误都会被无限放大,酿成巨大灾难。 万物相通,回到我们的软件架构。 早前的系统都是单体系统,比如电商业务,会员、商品、订单、物流、营销等模块都堆积在一个系统。每到节假日搞个大促活动,系统扩容时,一扩全扩,一挂全挂。只要一个接口出了问题,整个系统都不可用。 “鸡蛋不能放在一个篮子里”,这种连带风险换谁都承受不起。 因此, 系统拆分 成了更多人的选择。 慢慢的就有了我们现在看到的 微服务 架构,将一个复杂的业务域按DDD的思想拆分成若干子系统,每个子系统负责专属的业务功能,做好垂直化建...

 22 |  0 |  0 后端相关

念旧。 | 4天前 | 前端相关

面试官:跨页面通信的方式有哪些?

面试官:跨页面通信的方式有哪些? 我:1. Web Worker;2.本地存储;3.postMessage等 面试官:本地存储都有哪些? 我:localStorage,sessionStorage,cookie。 面试官:sessionStorage可以吗? 我:不可用吧? 面试官:localStorage新开页面和当前页面open新页面都可以吗? 我:都可以吧? .... 有没有经历过面试用跨页面通信的问题不断深入的摧残你,但是你又不能给出明确回答的经历。巧了在下就经历过这个过程。为了痛定思痛决定从头开始将这些东西揉碎了吃到嘴里,然后面试的时候嚼碎了喂给面试官😈。 好了心碎的事情说完了下面直接上才艺。 同源页面间通信 什么是同源这个不过多解释了,大家可以自己了解一下 [浏览器同源策略] (developer.mozilla.org/zh-CN/docs/…[1]) 1. localStorage 可以通过 localStroage.setItem() 在一个页面去写入一个值,然后在...

 23 |  0 |  0 前端相关

奈我何 | 5天前 | 后端相关

接口请求失败重试的8 种方案,稳妥极了!

请求三方接口的时候,难免会遇到一些网络问题,这时候需要加入重试机制了,这期就给大家分享几个接口重试的写法。 重试机制实现 8种重试机制实现 1. 循环重试 这是最简单也最直接的一种方式。在请求接口的代码块中加入循环,如果请求失败则继续请求,直到请求成功或达到最大重试次数。 示例代码: int retryTimes = 3; for(int i = 0; i < retryTimes; i ){     try{         // 请求接口的代码         break;     }catch(Exception e){         // 处理异常         Thread.sleep(1000); // 延迟1秒后重试     } } 这段简单的示例代码里,直接用了一个 for 循环来进行重试,最大重试次数设置为3次。同时在发生异常的时候,为了避免频繁请求,使用 Thread.sleep

 26 |  0 |  0 后端相关

流苏 | 5天前 | 后端相关Spring 全家桶

7min到40s:SpringBoot启动优化实践

1背景 公司 SpringBoot 项目在日常开发过程中发现服务启动过程异常缓慢,常常需要6-7分钟才能暴露端口,严重降低开发效率。通过 SpringBoot 的 SpringApplicationRunListener 、 BeanPostProcessor 原理和源码调试等手段排查发现,在 Bean 扫描和 Bean 注入这个两个阶段有很大的性能瓶颈。 通过 JavaConfig 注册 Bean, 减少 SpringBoot 的扫描路径,同时基于 Springboot 自动配置原理对第三方依赖优化改造,将服务本地启动时间从7min 降至40s 左右的过程。 本文会涉及以下知识点: 基于 SpringApplicationRunListener 原理观察 SpringBoot 启动 run 方法; 基于 BeanPostProcessor 原理监控 Bean 注入耗时; SpringBoot Cache 自动化配置原理; SpringBoot 自动化配置原理及 starter 改造; 2耗时问题排查 SpringBoot 服务启...

 26 |  0 |  0 后端相关Spring 全家桶

柚香 | 5天前 | 后端相关设计模式

【复杂性应对之道】如何应用设计模式搞定多变的需求

1引言 本文以一个实际案例来介绍在解决业务需求的路上,如何通过常用的设计模式来逐级优化我们的代码,以把我们所了解的到设计模式真实的应用于实战。 2背景 假定我们现在有一个订单流程管理系统,这个系统对于用户发起的一笔订单,需要你编写代码按照以下环节进行依次处理 注:本文不会对每个环节的实现细节进行描述,读者也不必了解这每个环节的实现,我们只需要关注代码架构设计 3第一次迭代 按照背景,我们如果不是打算if-else一撸到底的话,我们最合适使用的设计模式应该是 责任链模式 ,于是我们先打算用责任链模式来做我们的第一次迭代。 先整体看下类图: ![2dada0edf7ea4e429490e5612dcbf697 tplv-k3u1fbpfcp-jj-...

 26 |  0 |  0 后端相关设计模式

iron Man | 6天前 | DDD后端相关

DDD死党:单引擎查询利器

基于索引的单表查询,是 MySQL 正确打开方式!!! 基于 QueryObject 的声明式查询,是简单查询的正确使用方式!!! 1. 应用场景 单表查询在业务开发中占比最大,是所有 CRUD Boy 的入门必备,所有人在 JavaBean 和 SQL 之间乐此不疲。 整体架构如下图所示: image 这是一个简单的分层架构,主要有: 1. 接入层:接收用户或其他服务的请求,对参数进行基本验证; 2. 服务层:执行简单的业务逻辑,比如业务验证、数据转换、数据组装等; 3. 数据访问层。在 ORM 框架基础之上完成对数据库的访问; 4. 数据库层。负责数据存储和查询; 其中 ORM 框架尤为重要,帮我们完成 对象 与 关系数据 间的相互转换。因此,不少人认为玩好 ORM 就成为了高级开发人员。而实际情况是:该部分是最枯燥、最没有技术含量的“技能”。 目前,最常见的 ORM 便是 MyBatis 和 JPA...

 26 |  0 |  0 DDD后端相关

花小染 | 6天前 | DDD后端相关

DDD死党:查询模型的本质

1. 查询模型的本质 查询模型的本质就是:为不同的应用场景选择最合适的存储引擎,充分发挥各个存储引擎的优势。 在系统中,读接口的数量远超写接口,但我深信: 再简单的写也是复杂,再复杂的读也是简单。 为什么呢?因为,想做好查询只需为不同的应用场景选择最合适的存储引擎,从而充分发挥底层存储引擎的优势,然后所面对的高性能、高并发等技术问题就迎刃而解了。 如下图所示: 面对一个查询请求,我们需要: 1. 接受并解析用户请求; 2. 从各个存储引擎中获取数据; 3. 对数据进行加工,包括数据聚合、数据关联、数据转换等; 4. 将最终结果返回用户; 1.1. 常见存储引擎的特征 技术选型唯一原则: 仅仅使用它的成名之作,万万不可被花里胡哨的东西干扰你的判断。 简单列举下常见的存储引擎: ![图片](https://static.developers.pub/798ca8fbba7f44

 21 |  0 |  0 DDD后端相关

孤音 | 6天前 | Java后端相关

Java手写分布式锁的实现(非常牛逼)

Part1前言 随着互联网业务的发展,原本单机部署的系统演化成如今的分布式集群系统后,由于分布式系统多线程,多进程并且分布在不同的机器上,这会使原本的单机锁失效,而且单纯的Java API并不能提供分布式锁的能力,为了解决这个问题就需要一种跨JVM的互斥机制来控制共享资源的访问,这就是分布式锁要解决的问题。 本文将从实现本地锁所产生的问题入手,从而介绍分布式锁主流的实现方案,重点实现基于Redis的分布式锁。 相信我,往下看,你也会有所收获。如果观点有分歧,欢迎评论讨论。 本地锁会出现的问题(此篇幅代码图片过多,因此放在最后) Part2分布式锁的实现 1 分布式锁主要的实现有 : 基于数据库实现分布式锁 基于缓存(Redis等, 本文基于Redis实现手写分布式锁 ,因为这样可以更好的理解分布式锁的原理及实现,当然也可以使用Redisson) 基于Zookeeper 2 每种分布式锁的解决方案都有各自的优缺点 性能角度:redis zk mysql 安全角度:zk redi...

 27 |  0 |  0 Java后端相关

观云 | 1周前 | 后端相关

聊一聊幂等设计

1. 什么是幂等? 幂等是一个数学与计算机科学概念。 在数学中,幂等用函数表达式就是: f(x) = f(f(x)) 。比如求绝对值的函数,就是幂等的, abs(x) = abs(abs(x)) 。 计算机科学中,幂等表示一次和多次请求某一个资源应该具有同样的副作用,或者说,多次请求所产生的影响与一次请求执行的影响效果相同。 2. 为什么需要幂等 举个例子: 我们开发一个转账功能,假设我们调用下游接口 超时 了。一般情况下, 超时 可能是 网络传输丢包 的问题,也可能是请求时没送到,还有可能是请求到了, 返回结果却丢 了。这时候我们是否可以重试呢?如果 重试 的话,是否会多转了一笔钱呢? 转账超时 当前互联网的系统几乎都是解耦隔离后,会存在各个不同系统的相互远程调用。调用远程服务会有三个状态:成功,失败,或者超时。前两者都是明确的状态,而超时则是 未知状态 。我们转账 超时 的...

 26 |  0 |  0 后端相关

大牛猫 | 1周前 | 前端相关NodeJs

53道常见NodeJS基础面试题

说到前端就不得不提到后端,我们给用户展示页面所需的数据正是从后端获取的,所以了解后端的运行原理和技术的实现很有必要。 Node. js是一个不错的选择,它是基于JavaScript语法的一套服务器端(后端)语言。想要在企业中做得更好,开发者需要更多地了解它,并掌握它的有关用法。 1、你了解 Node. js吗? Node. js是一个基于 Chrome v8引擎的服务器端 JavaScript运行环境;Node. js是一个事件驱动、非阻塞式I/O的模型,轻量而又高效;Node. js的包管理器npm是全球最大的开源库生态系统。 2、Node. js的使用场景是什么? 高并发、实时聊天、实时消息推送、客户端逻辑强大的SPA(单页面应用程序)。 3、为什么要用 Node. js? 原因如下。 (1)简单, Node. js用 JavaScript、JSON进行编码,简单好学。 (2)功能强大,非阻塞式I/O,在较慢的网络环境中,可以分块传输数据,事件驱动,擅长高并发访问。 (3)轻量级, Node. js本身既是代码又是服务...

 29 |  0 |  0 前端相关NodeJs

蔡文姬 | 1周前 | 前端相关

前端程序员是怎么做物联网开发的

上图是我历时一周做的在线的温湿度可视化项目,可以查看截至目前往前一天的温度、湿度变化趋势,并且实时更新当前温湿度 本文可能含有知识诅咒 概述和基础讲解 该项目用到的技术有: 前端:jq、less、echarts、mqtt.js 后端:eggjs、egg-emqtt 数据库:mysql 服务器:emqx(mqtt broker) 硬件: 板子:wemos D1 R2(设计基于 Arduino Uno R3 , 搭载esp8266 wifi模块) 调试工具:mqttx、Arduino IDE v2.0.3 使用Arduino C开发 必备知识: nodejs(eggjs框架)能面向业务即可 mysql 能写基本插入查询语句即可 C语言的基本语法了解即可 知道mqtt协议的运作方式即可 arduino 开发板或任何其他电路板的初步了解即可 简单介绍一下上面几个的知识点...

 30 |  0 |  0 前端相关

布朗熊 | 1周前 | 后端相关Redis

Redis分布式锁存在哪些问题,该如何解决?

假设有这样一个场景,在一个购票软件上买一张票,但是此时剩余票数只有一张或几张,这个时候有几十个人都在同时使用这个软件购票。在不考虑任何影响下,正常的逻辑是首先判断当前是否还有剩余的票,如果有,那么就进行购买并扣减库存数,否则就会提示票数不足,购买失败。伪代码如下: void buyTicket() {     int stockNum = byTicketMapper.selectStockNum();     if(stockNum 0){         //TODO 买票流程....         byTicketMapper.reduceStock(); // 扣减库存     }else{         log.info(" = 票卖完了< ");     } } 这段代码在逻辑上没有问题,但是在并发场景下,可能会存在一个严重的问题。当剩余票数为1时,有A,B两个用户同时点击了购买按钮,A用户通过了库存大于0的校验并开始执行购票逻辑,但是由于一些原因造成A用户的购票线程有短暂的阻塞。 而在这个阻塞的过程中,用户B发起了购买请求,并且也通过

 35 |  0 |  0 后端相关Redis

推荐标签 🏷️

后端相关 前端相关 Java JavaScript Spring 全家桶 算法 React 数据库