Java 实现企业微信扫码登录
一、场景
Web 系统登录页面“企业微信”图标,点击后调取企业微信扫码登录页面,扫码成功后判断系统账号与企业微信用户ID绑定情况,有则直接登录,无则跳转到绑定登录页面,用户手动输入个人账号密码进行绑定,首次绑定后后续无需再绑定。
二、企业微信应用相关配置
1、新建企微应用
进入企微管理后台,应用管理模块,点击 ...
NIO:解开非阻塞I/O高并发编程的秘密
流与块
Standard IO是对字节流的读写,在进行IO之前,首先创建一个流对象,流对象进行读写操作都是按字节 ,一个字节一个字节的来读或写。而NIO把IO抽象成块,类似磁盘的读写,每次IO操作的单位都是一个块,块被读入内存之后就是一个byte[],NIO一次可以读或写多个字节。
I/O 与 NIO 最重要的区别是数据打包和传输的方式,I ...
剑指offer-81、⼆叉搜索树的最近公共祖先
题⽬描述
给定⼀个⼆叉搜索树, 找到该树中两个指定节点的最近公共祖先。
对于该题的最近的公共祖先定义:对于有根树T的两个结点p 、q ,最近公共祖先LCA(T,p,q)表示⼀个结点x ,满⾜x 是p 和q 的祖先且x 的深度尽可能⼤。在这⾥,⼀个节点也可以是它⾃⼰的祖先.
⼆叉搜索树是若它的左⼦树不空,则左⼦树上所有结点的值均⼩ ...
BIO详解:解锁阻塞IO的使用方式
关于同步/异步,阻塞/非阻塞,Unix IO模型,可以先看这篇文章网络系统 - Unix IO模型
BIO概述
阻塞式IO。也就是说io没有就绪的时候,操作IO当前线程会被阻塞。也就是用户线程需要等待IO线程完成
服务器实现模式为一个连接一个线程,也就是说,客户端每当有一个连接请求的时候,服务器就需要启动一个对应线程进行处理。但是 ...
PipelinR:在Java中实现优雅的CQRS架构
使用中介者模式轻松实现命令查询职责分离,构建高内聚、低耦合的应用系统
一、知识点回顾
1. 什么是CQRS?
CQRS是Command Query Responsibility Segregation的缩写,一般称作命令查询职责分离。从字面意思理解,就是将命令(写入)和查询(读取)的责任划分到不同的模型中。
对比一下常用的 CRUD 模式(创建-读取-更新- ...
剑指offer-80、⼆叉树中和为某⼀值的路径(二)
题⽬描述
给定⼀个⼆叉树root和⼀个整数值 sum ,求该树有多少路径的的节点值之和等于 sum 。
该题路径定义不需要从根节点开始,也不需要在叶⼦节点结束,但是⼀定是从⽗亲节点往下到孩⼦节点
总节点数⽬为 n
保证最后返回的路径个数在整形范围内
假如⼆叉树 root 为 {1,2,3,4,5,4,3,#,#,-1} , sum=6 ,那么总共如下所示 ...
springboot~jpa优雅的软删除能力
之前写过关于springboot~jpa优雅的处理isDelete的默认值的文章,今天说一下在jpa或者其它类型的Repository中实现软删除的方法,主要借助了自定义的仓储的能力。
优雅的引用方式
/**
* 开启软删除的能力
*
* @author lind
* @date 2025/9/8 11:24
* @since 1.0.0
*/
@Target(ElementType.TYPE)
@Retention(RetentionPo ...
剑指offer-79、最⻓不含重复字符的⼦字符串
题目描述
请从字符串中找出⼀个最⻓的不包含重复字符的⼦字符串,计算该最⻓⼦字符串的⻓度。
数据范围: ⻓度⼩于40000
示例1
输⼊:"abcabcbb"
返回值:3
说明:因为⽆重复字符的最⻓⼦串是"abc",所以其⻓度为 3。
示例2
输⼊:"bbbbb"
返回值:1
说明:因为⽆重复字符的最⻓⼦串是"b",所以其⻓度为 1
示例3
输⼊:"pwwk ...
Nacos安装下载及配置教程
1.访问Nacos官网
点击跳转
2.点击下载按钮
3.选择需要下载安装的版本,下载二进制文件,这里以2.5.1为例
4.下载的压缩包,解压即可使用,无需安装。将压缩包解压到需要自己的文件夹下
4.启动命令
单机群启动命令 :startup -m standalone
默认启动命令 startup
或者直接修改启动文件,将 安装目 ...
虚拟线程深度解析:轻量并发编程的未来趋势
这是Java19新增的预览版功能,到Java21正式可以使用
简介
虚拟线程是一种用户态下的线程,类似go语言中的goroutines 和Erlang中的processes,虚拟线程并非比线程快,而是提高了应用的吞吐量,相比于传统的线程是由操作系统调度来看,虚拟线程是我们自己程序调度的线程。如果你对之前java提供的线程API比较熟悉了,那么在学 ...
解密synchronized:从对象头到内存屏障,搞懂Java锁的底层原理
解密synchronized:从对象头到内存屏障,搞懂Java锁的底层原理
一、引言
在 Java 并发编程的领域中,多线程环境下的数据一致性和线程安全是至关重要的课题。而 synchronized 关键字,作为 Java 语言提供的内置同步机制,就如同一位忠诚的守护者,在保障多线程安全方面发挥着不可或缺的作用。自 JDK 1.0 诞生以来,synchron ...
Flink实时计算心智模型——流、窗口、水位线、状态与Checkpoint的协作
Flink实时计算心智模型——流、窗口、水位线、状态与Checkpoint的协作
在实时计算领域,Flink凭借其强大的流处理能力、低延迟特性和高可靠性,成为当前最主流的框架之一。但对于很多初学者甚至资深开发者而言,Flink的核心概念——流、窗口、水位线、状态与Checkpoint,往往是“单独能懂,放在一起就乱”。其实,这五大组 ...
如何解决高并发下的短信延迟?从选型到接入的3个关键点
在分布式架构中,短信服务(SMS)常被视为业务链路的“最后一公里”。无论是 618 秒杀场景下的身份校验,还是应对验证码爆破等安全攻击,短信的实时性直接影响到用户转化率与资金安全。一旦短信延迟超过 10 秒,用户流失率将呈指数级增长。
作为后端架构师,解决短信延迟不应仅停留在代码层面,而需从底层通信协议、网关调 ...
Condition底层机制剖析:多线程等待与通知机制
概述
Condition 是一个多线程协调通信的工具类,可以让某些线程一起等待某个条件(condition),只有满足条件时,线程才会被唤醒。
在使用Lock之前,使用的最多的同步方式应该是synchronized关键字来实现同步方式了。配合Object的wait()、notify()系列方法可以实现等待/通知模式。
Condition接口也提供了类似Object的监视 ...
多租户架构设计
1、多租户架构设计
请设计一个支撑千万会员的鞋服会员SCRM(SaaS)多租户架构,重点说明如何在促销期间应对流量十倍激增,以及如何保障新旧SaaS客户体验稳定。
需求分析
设计支撑千万会员的鞋服会员多租户架构
促销期间应对流量十倍激增
保障新旧SaaS客户体验稳定
项目设计
程序涉及到 ...
剑指offer-78、求平⽅根
题⽬描述
给定⼀个⾮负整数 x ,计算并返回 x 的平⽅根,即实现 int sqrt(int x) 函数。
正数的平⽅根有两个,只输出其中的正数平⽅根。如果平⽅根不是整数,输出只保留整数的部分,⼩数部分将被舍去。
示例1
输⼊:8
返回值:2
解释:8 的平⽅根是 2.82842…,由于⼩数部分将被舍去,所以返回 2
思路及解答
暴力枚举
从0开 ...
剑指offer-77、打印从1到最⼤的n位数
题⽬描述
输⼊数字 n ,按顺序打印出从 1 到最⼤的 n 位⼗进制数。⽐如输⼊ 3 ,则打印出 1 、2 、3⼀直到最⼤的 3 位数 999 。
⽤返回⼀个整数列表来代替打印
n 为正整数
示例1
输⼊:1
返回值:[1,2,3,4,5,6,7,8,9]
思路及解答
直接计算
不太清楚这道题是要考察什么(苦笑),⼏乎都是⼀个循环能解决的事情,仔细想了⼀ ...
Spring AI学习:聊天记忆
配置依赖
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-chat-memory-repository-jdbc</artifactId>
</dependency>
spring:
ai:
chat:
memory:
repository:
jdbc:
...
CompletableFuture深度解析:异步编程与任务编排的实现
前言
CompletableFuture是jdk8的新特性。CompletableFuture的实现与使用上,处处体现出了函数式异步编程的味道。一个CompletableFuture对象可以被一个环节接一个环节的处理、也可以对两个或者多个CompletableFuture进行组合处理或者等待结果完成。通过对CompletableFuture各种方法的合理使用与组合搭配,可以在很多的场景都 ...
9、PipedInputStream和PipedOutputStream的源码分析和使用方法详细分析
在多线程编程中,线程间的数据交换是一个常见需求。Java IO包中的PipedInputStream和PipedOutputStream提供了一种高效的线程间通信机制,允许一批(多个)线程向PipedOutputStream写入数据,另一批(多个)线程从PipedInputStream读取数据。
但是,同一批(多个)线程相互之间会存在竞争,比如,同一批向PipedOutpu ...