姜源Jerry
万物伊始,效率本源。大道至简,代码之禅。
展开
-
【单点登录】SSO单点登录sa-token接入流程详解
Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。Sa-Token 目前主要五大功能模块:登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权。原创 2025-03-01 11:00:00 · 469 阅读 · 0 评论 -
【项目管理】如何真正做好技术PM
工作已经很多年了,分享一下如何做好技术pm,所以有了此文。并不是说自己做的有多好,有一些实践经验分享探讨一下,也非常欢迎指正。项目管理是在有限的成本下,把控项目的质量和进度,保证项目顺利交付。成本、质量、进度之间相互制约相互影响,需要在这之中找到平衡点。并在项目执行的过程中持续关注项目的价值,推进项目价值最大化。上面说的主要是一些流程和技巧,此外,项目pm需要有很强的责任心,业务、老板把项目交付给我们,我们是否可以尽自己所能尽的最大努力去保证项目交付,并且做到没有边界,非分内之事,也愿意多承担一些。原创 2025-02-24 17:30:00 · 104 阅读 · 0 评论 -
【项目管理】如何写好B端产品技术方案
B端产品中的专业名称非常多,对专业名词进行汇总解释,方便项目组理解上下文,统一认知。转载 2025-02-23 17:30:00 · 105 阅读 · 0 评论 -
【Java消息队列】应对消息丢失、重复、顺序与积压的全面策略
对于大多数消息队列在解决消息丢失、重复消费、顺序消费和消息积压。原创 2025-02-20 17:21:48 · 341 阅读 · 0 评论 -
如何优雅的实现接口重试机制
合理设置重试次数和间隔:过多的重试次数和过短的间隔时间可能会增加系统负担,导致更多的失败。区分不同类型的错误:有些错误(如)不需要重试,而有些错误(如)则需要重试。使用幂等性操作:确保重试的操作是幂等的,即多次执行同一操作不会产生不同的结果。记录重试日志:记录重试的日志可以帮助调试和监控系统行为。原创 2024-11-20 16:45:40 · 105 阅读 · 0 评论 -
百度文心一言接入流程-java版
参考文档:https://cloud.baidu.com/doc/WENXINWORKSHOP/s/wlommlzgj。既能写文案、读文档,又能脑洞大开、答疑解惑,还能倾听你的故事、感受你的心声。登陆账号中的【安全认证】中创建 AK 和 SK。PS:【千帆大模型平台】中【模型广场】中有很多。文心一言,有用、有趣、有温度。的模型,可以根据情况使用。原创 2024-10-24 09:18:27 · 1636 阅读 · 0 评论 -
【云效】阿里云云效:一站式DevOps平台介绍与使用教程(图文)附PPT
阿里云一站式DevOps(持续交付)平台,项目数字化协作能效工具。官方介绍:云效,一站式Devops平台,支持公共云、专有云和混合云多种部署形态,通过云原生新技术和研发新范式,助力创新创业和数字化转型企业快速实现组织敏捷和研发敏捷,打造“双敏”企业,实现10倍研发效能提升。原创 2024-10-24 09:08:30 · 1199 阅读 · 0 评论 -
【完整梳理验证】企业微信第三方应用接入全流程java版
由企业内部的开发者自己开发部署,相当于是企业自己的资产,调用接口基本没有任何限制。由SaaS服务商的开发者开发并部署在服务商侧,面向所有企业。需要企业授权使用(先试用后付费),服务商仅可获取企业授权部分的权限,相当于白名单控制。由服务商的开发者开发,但部署在企业内部。一般是线下签约采购方式,因此权限几乎与自建应用无异,企业管理员只需要配置不对服务商开放的敏感权限,相当于黑名单控制。服务商后台地址:企业微信服务商官网企业管理后台地址:企业微信管理后台服务商,可以理解为 SAAS 中的运营端。企业管理端,可以理原创 2024-09-21 11:54:13 · 1374 阅读 · 0 评论 -
Redis实现延时队列-工具类
第一种方式适合简单的延时任务消费逻辑,并且对资源消耗要求较高的场景,但可能存在资源浪费和性能问题;第二种方式适合集成到Spring Boot项目中,可以利用Spring的特性进行任务调度,但可能无法及时准确地消费到达时间的延时任务,特别是在任务调度频率较低的情况下。根据实际场景和需求,可以根据优缺点选择合适的方式来实现延时消息队列。原创 2023-11-18 15:08:22 · 677 阅读 · 0 评论 -
MPJ: MyBatis-Plus-Join连表查询
mybatis plus 封装的 mapper 不支持 join,如果需要支持就必须自己去实现。但是对于大部分的业务场景来说,都需要多表 join,要不然就没必要采用关系型数据库了。或者 clone 代码到本地执行 mvn install,再引入以上依赖。那么有没有一种不通过硬 SQL 的形式,通过框架提供 join 能力呢?MPJLambdaWrapper 还有很多其他的功能。原创 2023-11-18 15:07:03 · 1018 阅读 · 0 评论 -
Java实现的插件化策略模式
2023-11-16 15:13:23.465 INFO 5043 — [ main] c.d.m.s.l.ContextBaseDealListener : 注册:register -> class com.demo.mytest.strategy.service.impl.BaseDocumentService, [DOCUMENT]原创 2023-11-18 15:05:06 · 767 阅读 · 0 评论 -
Java实现MQTT传输协议通信
MQTT 是一种基于发布/订阅模式的轻量级物联网消息传输协议,可在严重受限的硬件设备和低带宽、高延迟的网络上实现稳定传输。它凭借简单易实现支持 QoS报文小等特点,占据了物联网协议的半壁江山。MQTT是基于二进制消息的发布/订阅编程模式的消息协议,最早由IBM提出的,如今已经成为OASIS规范。遥感数据汽车智能家居智慧城市医疗医护精简,不添加可有可无的功能。发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递。允许用户动态创建主题,零运维成本。原创 2023-05-23 17:43:25 · 1856 阅读 · 0 评论 -
线程池提高百万级数据插入效率
spring容器注入线程池bean对象。模拟多线程 测试 2000003条数据。创建多线程批量插入具体业务方法。耗时如下:耗时1.67分钟。创建异步线程 业务类。原创 2023-04-20 16:23:12 · 312 阅读 · 0 评论 -
自定义线程池ThreadPoolExecutor详解
ThreadPoolExecutor 线程池的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,那么超出数量的线程排队等候,等其他线程执行完毕再从队列中取出任务来执行。原创 2023-03-01 10:53:20 · 697 阅读 · 0 评论 -
40行代码完全理解java线程池工作流程
40行代码完全理解java线程池工作流程线程测试Demo线程测试Demo结论在注释中,建议自己跑一跑。import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;public class Th原创 2021-12-02 17:48:13 · 483 阅读 · 0 评论 -
ElasticSearch用法和IK分词器
ElasticSearch用法和IK分词器ElasticSearch 是什么?为什么选择ES?ES提供的能力ES常用使用场景ES架构ES 基本概念ES 数据类型ElasticSearch , Kibana 和 elasticsearch-head第一个HelloWorld(v6.8)分词器常见入门问题1. ES 6.8 IK分词器bug2. 日期格式设置错误3. 设置匹配度 优化查询结果ES的Java客户端选择1. ES提供了两个JAVA REST client 版本2. TransportClient3原创 2021-02-17 22:19:03 · 740 阅读 · 0 评论 -
Java Stream 流高级使用全解
Java Stream 流高级使用全解一 基本汇总1. 创建流2. 中间操作3. 终止操作二 经验累积1. 统计1.1 取最大值1.2 取最小值1.3 取总和值1.4 取平均值2. 过滤2.1 获取最近时间3. 排序3.1 根据字段排序4. 分组4.1 获取字段出现次数4.2 过滤并获取指定字段列表Java 强大的 stream 流处理,必会!无状态:指元素的处理不受之前元素的影响;有状态:指该操作只有拿到所有元素之后才能继续下去。非短路操作:指必须处理所有元素才能得到最终结果;短路操作:指遇原创 2020-12-26 18:38:56 · 4112 阅读 · 3 评论 -
Java 线上问题快速排查思路(最全)
Java 线上问题快速排查思路-最全一 服务器层面1.1 磁盘1.1.1 问题现象1.1.2 排查思路1.1.2.1 利用 df 查询磁盘状态1.1.2.2 利用 du 查看文件夹大小1.1.2.3 利用 ls 查看文件大小1.1.3 相关命令1.1.3.1 df1.2 CPU过高1.2.1 问题现象1.2.2 排查思路1.2.2.1 利用 top 查询CPU使用率最高的进程1.2.3 相关命令1.2.3.1 top二 应用层面2.1 Tomcat假死案例分析2.1.1 发现问题2.2.2 查询日志2.2.原创 2020-12-26 18:36:34 · 1440 阅读 · 0 评论 -
Java 8 stream 流获取 list 中最大值、最小值、总和值、平均值
// liststatic List<Employee> empList = new ArrayList<Employee>(); private static void initEmp(){ empList.add(new Employee("张三",30)); empList.add(new Employee("张三1",96)); empList.add(new Employee("张三2",23)); empList.add(new Employee("张原创 2020-09-25 15:56:23 · 29423 阅读 · 0 评论 -
Regex正则表达式基本用法与核心语法
Regex正则表达式核心语法提炼1. 正则表达式 基本使用1.1 执行正则方法1.2 常用规则1.3 常用正则案例 × 752. 正则表达式 语法明细(查询)2.1 普通字符2.2 非打印字符2.3 特殊字符2.4 限定符2.5 定位符2.6 选择与反向引用2.7 预定义字符/元字符2.8 方括号与圆括号正则表达式在线测试:https://tool.oschina.net/regex/1....原创 2020-05-07 18:41:10 · 753 阅读 · 0 评论 -
【Java】高质量代码:10条基本类型使用准则
10条基本类型使用准则1. 用偶判断,不用奇判断2. 用整数类型处理货币3. 不要让类型默默转换4. 边界,边界,边界!5. 不要让四舍五入亏了一方6. 提防包装类型的 null 值7. 谨慎包装类型的大小比较8. 优先使用整型池9. 优先选择基本类型10. 不要随便设置随机种子不积跬步,无以至千里。不积小流,无以成江海。 —— 荀子《劝学篇》Java中8种基本类型:byte / char ...原创 2020-04-26 10:10:41 · 321 阅读 · 0 评论 -
Java注解、自定义注解、注解信息解析详解
Java注解、自定义注解、注解信息获取使用1. Java 注解1.1 Java 注解作用1.2 Java 注解分类1.3 Java 元注解 - 注解的注解2. 自定义注解3. 注解信息获取3.1 获取并执行自定义注解修饰的方法(标记注解)3.2 获取注解参数信息用于数据库初始化(完整注解)4. 常用注解说明4.1 JDK 内置注解4.2 Junit 单元测试注解4.3 Servlet 配置注解5....原创 2020-04-16 19:11:13 · 573 阅读 · 0 评论 -
Java设计模式:静态代理、装饰者、动态代理详解
静态代理、装饰者、动态代理1. 静态代理设计模式1.1 静态代理 - 实现步骤1.2 静态代理 - 逻辑图 & 源码示例1.3 静态代理 - 缺点2. 装饰者设计模式 - 类似静态代理2.1 装饰者模式 - 实现步骤2.2 装饰者模式 - 逻辑图 & 源码示例2.3 装饰者模式 - 缺点3. 动态代理设计模式【最优】3.1 动态代理设计模式 - 实现步骤3.2 动态代理设计模式 -...原创 2020-04-15 18:08:13 · 629 阅读 · 0 评论 -
Java反射实现通用编程的应用
Java的反射、代理设计模式1. Java的反射应用 - 通用编程1.1 执行任意对象的 set 方法1.2 执行任何方法1.3 创建任何对象 - 配置文件2. 代理设计模式2.1 静态代理设计模式 - 实现2.1.1 静态代理的特点2.2 动态代理设计模式 - 更优2.2.1 动态代理的特点1. Java的反射应用 - 通用编程实体类public class User { priv...原创 2020-04-14 21:39:29 · 312 阅读 · 0 评论 -
【Java】高质量代码:20条通用准则
Java开发中通用的方法和准则1. 不要在常量和变量中出现易混淆的字母2. 不要让常量变成变量3. 三元操作符的类型必须一致4. 避免带有变长参数的方法重载5. 别让 null 值和空值威胁到变长方法6. 重写变长方法也循规蹈矩7. 警惕自增的陷阱8. 不要让旧语法困扰你1. 不要在常量和变量中出现易混淆的字母包名全小写、类名首字母全大写、常量全部大写并下划线分割、变量采用驼峰命名等,这些是最...原创 2020-03-24 22:23:50 · 406 阅读 · 0 评论 -
【Java】Comparable和Comparator两接口区别总结
Comparable 和 Comparator 的区别1. Comparable 自然排序比较2. Comparator 定制排序比较3. 两者的比较总结Java 中为我们提供了两种比较机制:Comparable 和 Comparator。两个词的意思都是比较的意思,但实际又是 可比较的 和 比较器。所以很是疑惑。。。1. Comparable 自然排序比较java.lang pu...原创 2020-03-23 19:50:47 · 371 阅读 · 0 评论 -
【Java】JavaSE中易混淆概念汇总(一图胜千言)
JavaSE中易混淆概念汇总1. 四个访问修饰符的访问范围2. 三大关键字的修饰和作用3. 四种内部类的区别和特点4. abstract 抽象类与interface 接口5. Set集合元素不重复的基本逻辑6. 八种包装类和包装类缓冲区问题7. 异常处理基本架构类型8. 常用数据集合体系汇总9. synchronized同步锁与ReentrantLock重入锁10. 字节流与字符流1. 四个访问...原创 2020-03-22 13:06:29 · 386 阅读 · 1 评论 -
【Java】实现FTP文件下载功能简单IO流逻辑
download下载功能简单IO流逻辑Server 端IO处理逻辑Client 端IO处理逻辑区别 字符流 与 字节流 各自的功能和过滤流的使用场景。Server 端IO处理逻辑try { // 字符流:创建 Clinet/Server 交互输入输出字符流(收发字符串) BufferedReader br = new BufferedReader(new InputStreamRea...原创 2020-03-21 18:28:17 · 993 阅读 · 0 评论 -
【Java】三种单例模式的实现和优劣对比
Java三种单例模式① 单例模式:饿汉式(线程安全、占资源)② 单例模式:懒汉式(不安全、需要同步)③ 单例模式:懒汉式(线程安全,静态内部类)单例(singleton):只允许创建一个该类的对象。① 单例模式:饿汉式(线程安全、占资源)天生线程安全(无锁)、类加载时创建(不用也会被创建,占用资源)public class TestSingleton { public stati...原创 2020-03-21 12:18:18 · 510 阅读 · 0 评论 -
【Java】反射机制实现工厂模式和通用编程写法
Java工厂模式和通用编程1. 工厂模式2. 通用编程1. 工厂模式开发中有一个非常重要的原则“开闭原则”,对拓展开放、对修改关闭;工厂模式主要负责对象创建的问题;可通过反射进行工厂模式的设计,完成动态的对象创建。public class TestNewInstanceForFile { public static void main(String[] args) thr...原创 2020-03-21 11:46:36 · 308 阅读 · 0 评论 -
【Java】jdk1.8新特性及用法总结
Java8新特性及用法总结1. 接口中的实现方法2. Lambda 表达式3. 方法引用 ::4. 函数式接口 × 4① Predicate 接口(断言、返回真假)② Consumer 接口(消费、有去无回)③ Supplier 接口(创造、无中生有)④ Function 接口(传递、返回数据)5. (未完待续)1. 接口中的实现方法① 使用 default 关键字就可以给接口增加一个非抽象的...原创 2020-03-20 22:51:12 · 630 阅读 · 0 评论 -
【Java】反射机制介绍与Class类的基本使用
Java反射机制与Class类1.Java反射机制1.1 Java的反射机制是什么1.2 Java的反射的应用场合1.3 Java反射的常用类1.4 反射使用步骤2. Class类2.1 常用方法和示例2.2 获取Class对象的3种方法2.3 反射创建对象的2种方法3. 工厂设计模式1.Java反射机制1.1 Java的反射机制是什么在运行状态中,对于任意一个类都能够知道这个类所有的属性和...原创 2020-03-19 18:24:07 · 463 阅读 · 0 评论 -
【Java】socket发送带空格的字符串被自动换行问题的解决
String sendMsg = input.next(); // 如果输入了带空格的字符串,会被读出为换行String sendMsg = input.nextLine(); // 使用nextLine()【解决方案】这样在接收方 readLine()的时候到\n就会被正确读取。原因:next()方法把输入的空格自动解析为\n处理,算是一个坑吧。对比:...原创 2020-03-18 23:17:25 · 2393 阅读 · 0 评论 -
【Java】网络编程之Socket相关类的使用
文章目录1. InetAddress类2. Socket类 & ServerSocket类1. InetAddress类位置:java.net构造方法为默认default(包内可见),通过类内静态方法获取对象常用方法:byte[] getAddress()返回此 InetAddress对象的原始IP地址。static InetAddress[] getAllByName(...原创 2020-03-18 20:39:43 · 370 阅读 · 0 评论 -
【Java】File类与FileFilter过滤接口的使用
文章目录1. File类2. FileFilter接口实现过滤指定文件1. File类文件和目录路径名的抽象表示形式。public class File extends Object implements Serializable, Comparable<File>构造方法:没有无参构造。File(File parent, String child...原创 2020-03-17 18:13:23 · 340 阅读 · 0 评论 -
【Java】基本字符流输入输出类的使用
文章目录1. 基本字符输入输出类结构2. 抽象父类:Writer & Reader2.1 实现类:字符过滤流 PrintWriter & BufferedReader2.2 实现类:桥转换流 OutputStreamWriter & InputStreamReader2.3 实现类:字符节点流 FileWriter & FileReader1. 基本字符输入输出类...原创 2020-03-17 18:02:36 · 869 阅读 · 0 评论 -
【Java】基本字节流输入输出类的使用
文章目录1. 基本字节输入输出流实现类2. 输入输出字节流的分类3. 抽象父类:InputStream & OutputStream3.1 实现类:字节节点流 FileOutputStream & FileInputStream3.2 实现类:字节过滤流(缓冲流)BufferedOutputStream & BufferedInputStream3.3 实现类:字节过滤流(...原创 2020-03-16 18:28:22 · 1085 阅读 · 0 评论 -
【Java】读写.properties配置文件详解
文章目录1. ".properties"配置文件介绍2. Eclipse中怎么创建properties文件3. Properties 类的特点4. 读写.properties配置文件(非常简单)1. ".properties"配置文件介绍后缀名为.properties是一种属性配置文件。这种文件以key=value格式存储内容,Java中可以使用Properties类来读取这个文件Str...原创 2020-03-15 15:43:03 · 2758 阅读 · 0 评论 -
【Java】ReentrantLock重入锁与synchronized同步锁区别详解
文章目录1. 两者优劣特点对比(详细)2. ReentrantLock 的3个高级功能功能①:等待可中断功能②:公平锁机制功能③:锁可绑定多个条件ReentrantLock实现类(Lock接口)详解:【Java】Lock锁接口和实现类详解synchronized关键字线程同步详解:【Java】线程的基本同步方式和常用方法1. 两者优劣特点对比(详细)比较点Sychronized关...原创 2020-03-15 13:12:20 · 619 阅读 · 0 评论 -
【Java】常用数据集合体系和特点(汇总)
文章目录1. Collection体系集合1.1 List 表① ArrayList 类(数组)② Vector 类(数组、线程同步)③ LinkedList 类(链表)④ CopyOnWriteArrayList 类(线程安全且高效的List)1.2 Set 集合① HashSet 类(HashCode)② LinkedHashSet 类(记录插入顺序)③ TreeSet 类(二叉树-自动排序)...原创 2020-03-14 22:02:31 · 748 阅读 · 1 评论