- 博客(583)
- 资源 (31)
- 收藏
- 关注
原创 连接 IPv6 服务器
首先说一句没,普及 IPv6 还有很长的一段路要走。最简单的,你的节点没有的 IPv6 的 IP,连最简单的 PING 都 PING 不了,完全联不上。
2024-03-25 18:39:02 904
原创 轻量级角色权限组件
本文采用“用户+角色+权限”的模式设计一个简明的权限组件,力求清晰易维护、易扩展。该组件基于 Spring 后端与 Vue 前端的框架,并给出实际可运行的代码。虽然设计这组件的时候,是打算独立、不耦合的组件,但完整的功能外延还是涉及外部模块,于是最终成品来说,它的相关依赖也离不开 AJ-IAM,属于笔者 AJ-IAM 用户系统的一部分。尽管如此,更重要的是,笔者想借此文来分享“角色-权限”的设计思维与实际应用,以飨读者。
2024-02-20 15:33:14 925
原创 精简版 Win10 Atlas 使用心得
是一个魔改版本的 Windows,基于 Windows 10 20H2 版定制的操作系统,专门为游戏玩家开发,一切以游戏性能为目标,删除了众多拖慢 Windows 系统的组件(游戏性能下降的罪魁祸首)。
2024-01-21 16:55:08 1226
原创 轻量级 HTTP 请求组件
Apache HttpClient 是著名的 HTTP 客户端请求工具——现在我们模拟它打造一套简单小巧的请求工具库, 封装 Java 类库里面的 HttpURLConnection 对象来完成日常的 HTTP 请求,诸如 GET、HEAD、POST 等等,并尝试应用 Java 8 函数式风格来制定 API。
2024-01-11 22:03:48 1184
原创 探索 3D 图形处理的奥秘
最近一年多来,在 3Dfx、Intel 们的狂轰滥炸中,在 Quake、古墓丽影们的推波助澜下,三维图形已经成为计算机迷眼中的又一个热点。3D 世界到底是怎样的神奇,我们又是怎样享受它的乐趣呢?就让我们来一探究竟吧。
2023-12-30 21:26:56 1600
原创 轻量级的资源授权:基于 OAuth 规范
感觉 OAuth 太负盛名了,以至于后来在 OIDC 反而难以企及前辈 OAuth。倒是大家谈论比较多的是 JWT(例如),——实际谈 JWT 就是在实现 OIDC,反而 OIDC 大家不怎么爱谈!但我们要知道的是,真正诠释这些的,做点单点登录的,——是 OIDC 规范,JWT 只是 OIDC 规范下的一种 Token 协议,再说句难听的,如果 JWT 不满足或者有问题,换别的 Token 实现规则也行。
2023-11-18 15:51:08 161
原创 轻量级 Java 日志组件
日志记录功能在开发中很常用,不仅可以记录程序运行的细节,方便调试,也可以记录用户的行为,是框架中不可或缺的组件。为最大程度复用现有的组件,我们就地取材使用了 JDK 自带的 JUL()作为日志组件,并对其进行功能上的增强。这是笔者 17 年的时候就研究过了(见博客时至今日,感觉还是使用 Slf4J API 的人群多,顺应潮流,决定打造兼容 Slf4J 风格的整合,使用上也更便捷,可结合 Lombok 强大的功能,在类身上施加一个注解即可。
2023-11-18 15:50:20 349
原创 轻量级 SSO 方略:基于 OIDC 规范(二)
介绍了 SSO 相关的基础数据,这样有了 ClientId 和密钥后,我们就要准备客户端这边的代码。客户端当前指的便是一个网站(也就是 RP),这个网站要求有会员功能,典型地网站导航上通常会有“注册”或“登录”的链接。假设我们这是最简单的网站,采用 Servlet Session 本地记录用户凭证。本身这个网站设计用户的模块,得通过 SSO 完成用户登录。另外我们还要准备一个登录页面,简单的例子如下。这个页面存在 SSO 中心(也就是 OP)的,而不是客户端的。
2023-11-13 21:43:27 358
转载 深入研究线程池
线程池就是以一个或多个线程[循环执行]多个应用逻辑的线程集合。注意这里用了线程集合的概念是我生造的,目的是为了区分执行一批应用逻辑的多个线程和线程组的区别.关于线程组的概念请参阅基础部分。那么如果一个线程循环执行一段代码是否是线程池?如果极端而言,应该算,但实际上循环代码应该算上一个逻辑单元。我们说最最弱化的线程池。这就不能说循环中执行多个逻辑单元,因为它只是简单地对循环外部的初始变量执行++操作。而如果已经有一个队列我们说这个线程就是循环执行多个逻辑单元,可以说这个线程是弱化的线程池。
2023-11-06 20:03:28 45
原创 轻量级邮件发送组件:基于 Socket/SMTP 协议的浅层封装
Java 发送邮件组件,大家第一时间想到的就是 JavaMail。JavaMail 本身也不大,才 500kb 的 jar 包,足够轻量级。而今天为大家介绍的,可以说“羽量级”,核心一个类就可以发送邮件了,除了依赖 JDK 无须依赖什么。如果我们了解 SMTP 协议以及 Socket 的简单使用,就知道其中过程并不复杂——实质都是基于文本的协议交互。
2023-11-03 13:44:47 152
转载 微服务安全认证架构是如何演进而来的?
之前有同事问为何要用基于 JWT 令牌的认证架构,然后近期又有童鞋在后台留言问微服务安全认证架构的实践,因此我决定花两篇推文来解答一下。为了答好这个话题,我们先来看看微服务的安全认证架构是如何演进而来的,从而更好地理解。
2023-10-29 19:44:10 103
原创 轻量级 SSO 方略:基于 OIDC 规范(一)
OIDC 是 OpenID Connect,见官网介绍。OIDC 为用户身份认证提供了明确的规范指南,以方便我们更好地设计一个 SSO 产品。
2023-10-29 00:58:18 250
原创 利用 JSqlParser 防止 SQL 注入
高手文章介绍了利用 JSqlParser 防止 SQL 注入,写得很好,只不过有两个问题,代码比较复杂,我于是作了简化,只有两个类;其次检测比较严格,连子查询都禁止,我把它开放了。
2023-10-28 15:54:33 574 2
原创 嵌入式 Tomcat 调校
SpringBoot 嵌入了 Web 容器如 Tomcat/Jetty/Undertow,——这是怎么做到的?我们以 Tomcat 为例子,尝试调用嵌入式 Tomcat。调用嵌入式 Tomcat,如果按照默认去启动,一个 main 函数就可以了。
2023-10-25 22:35:54 1034
原创 轻量级仿 Spring Boot=嵌入式 Tomcat+Spring MVC
SpringBoot 嵌入了 Web 容器如 Tomcat/Jetty/Undertow,——这是怎么做到的?我们以 Tomcat 为例子,尝试调用嵌入式 Tomcat。为了说明如何打造轻量级的 SpringBoot,本文分为“嵌入式 Tomcat”、“增强 SpringMVC”和“打包/部署”三个小节来介绍。
2023-10-25 18:12:41 886
原创 轻量级导出 Excel 标准格式
一般业务系统中都有导出到 Excel 功能,其实质就是把数据库里面一条条记录转换到 Excel 文件上。Java 常用的第三方类库有 Apache POI 和阿里巴巴开源的 EasyExcel 等。另外也有通过 Web 模板技术渲染 Excel 文件导出,这实质是 MVC 模式的延伸,数据转为成不同的视图罢了。
2023-10-20 23:06:37 1503
原创 Java 转换 WebP 图片,使用 webp-imageio
WebP 是 Google 推出的一种新型图片格式,相比于 传统的 PNG/JPG 图片有着更小体积的优势,在当今 Web 中有着广泛的应用。但是Java 和 JDK 本身不支持 WebP 图像,不过我们可以使用库来支持 WebP 图片。顺便提一提其他库支持的方式。WebP 最早是这个 webp project of Luciad 库提供支持的,但它需要手动安装对应的动态链接库,非常不方便。项目作者为了解决这个问题,改进了对动态链接库的读取方式,把从读取改成了从项目 resource 文件中读取。
2023-09-15 23:29:57 2112 3
原创 简明 JDBC 数据访问操作库:JdbcHelper(三)
之前写的查询 API,感觉不够清晰,原因是我当时喜欢用方法重载,以为相同的方法名更统一,心智更少,其实不然,在使用过程中发现却是更迷糊,要通过参数不同去甄别。于是,我有了重构代码的想法,并在昨晚改了下,有了这个新的版本。这次我采用链式调用的风格,且不同名字的方法来区分,如果 info()/infoMap, list()/listMap(),有标明 Map 的就返回 Map 结果,否则是返回 Java Bean 的。可见是 Java Bean 优先(简洁的名字给 Java Bean 了)。
2023-09-15 10:59:10 99
原创 简明 JDBC 数据访问操作库:JdbcHelper(二)
上篇文章中,主要简介了 JdbcHelper 及 JdbcReader,其中关于 JdbcReader 都是偏源码、偏底层原理的介绍。这次我们打算介绍 Reader 的应用,怎么用于日常的 SQL 数据查询工作中,——所形成封装的就是。所谓 CRUD,顾名思义就是增删改查的工作。
2023-09-12 23:11:55 209
原创 学习 Java 的多线程开发
在介绍线程 Thread 之前,我们必须先搞清楚程序 Program 和进程 Process 这两个概念。main。
2023-09-07 00:01:14 322
转载 库存仓库:简单匹配算法/库存释放/库存扣减
通常在电商项目的库存项目中,每条库存记录都有一个对应的仓库字段,warehouse,同一个商品可能在多个仓库中都存在的。假设用户添加一个商品 sku1到购物车中,这个 sku1在 warehouse1和 warehouse2 都存在,这个时候到底要扣减哪个仓库中的库存呢?这里有个仓库优先级的概念,一般来说,会有专门的系统来决定仓库扣减的优先级。
2023-09-06 00:54:37 303
转载 关于分布式系统的数据一致性问题
最近写了一个关于 铁道部购票系统的若干文章铁道部新客票系统的设计(一)铁道部新客票系统的设计(二)铁道部新客票系统的设计(三)正好遇到一个博友,咨询了一个问题,这个问题正好可以作为分布式系统的数据一致性的简单例子,当然,这个只是比较简单的情况。
2023-09-05 04:00:00 62
转载 Spring 事务管理器设计思想
在最近做的一个项目里面,涉及到多数据源的操作,比较特殊的是,这多个数据库的表结构完全相同,由于我们使用的 iBatis 框架作为持久化层,为了防止每一个数据源都配置一套规则,所以重新实现了数据源,根据线程变量中指定的数据库连接名称来获取实际的数据源。每次调用 Spring 事务管理器之前设置事务提交之后在调用方法即可。但是这样设计实际使用过程中也会遇到一些典型的问题,这就是在仔细了解 spring 中持久化层的设计之后,才能明白所产生的问题的原因。下面主要总结一下 spring 持久化的设计。
2023-09-04 22:44:25 73
原创 学用 CountDownLatch 与 CyclicBarrier
CountDownLatch 强调一个线程等多个线程完成某件事情。CyclicBarrier 是多个线程互等,等大家都完成。CountDownLatch 很明显是可以不限制等待线程的数量,而会限制 countDown的操作数;CyclicBarrier 会限制等待线程的数量写法当然不一样,看看下面的伪代码main(){启动5个线程。。。cd.await();//让当前线程休眠,执行代码... (该代码不会立即执行,等待5个线程执行完成后,当前线程会被唤醒,继续执行后面的代码)
2023-09-02 11:27:02 183
翻译 语言与机器 Languages and Machines
至关重要的是,你不是推理你自己写的代码,而是编译器所写的代码,因为从官方的角度来说,目标代码才是"真正"的代码,而 pidgin 只是一种便利。)一种证明这一观点的方法是,定义一次性的 λ 演算到 RAM 代码的编译器,明确表明 λ 演算的抽象步骤可以在 RAM 上以常数时间执行(即不随输入的大小变化,只随静态程序的大小变化)。嗯,如果你的工作都是在复杂性的多项式因子范围内完成的,并且你只关心自然数(或其他有限对象)上的计算,那么这确实不重要。嗯,尽管这是真的,但我可以告诉你,你的论点是站不住脚的。
2023-08-31 10:47:49 65
原创 轻量级 Bean 实体校验器
利用 Spring 自带校验器结合 JSR 注解实现轻量级的 Bean 实体校验器。轻捷、简单、很容易上手,也容易扩展。三个核心类`ValidatorInitializing`、`ValidatorImpl`、`ValidatorEnum`去掉注释不超过共200行源码实现 10多m 的 Hibernate Validator 多数功能。
2023-08-20 12:14:52 182
原创 轻量级 Spring Task 任务调度可视化管理
大家都知道 Spring Scheduler 好用和怎么用,但它没有一个像 XXL-Job 有个后台界面的,好像不太完整,于是笔者打算为 Spring Scheduler 提供一个可视化的操作界面,虽然赶不上 XXL-Job 那么强大,但也算弥补其中缺失的一环。它支持在线监控执行的任务、支持动态修改任务状态、暂停/恢复任务,以及终止运行中任务。另外本组件的特色就是非常简单,或者说“轻量级”,只有两个主要的类和一个前端静态 html 组成,Java 的话总共不超过 500 行代码。
2023-08-12 10:24:16 929 5
原创 Tomcat 编程式启动 JMX 监控
通过这篇,我们可以了解到,利用 JMX 技术可以方便获取 Tomcat 监控情况。但是我们采用自研的框架而非大家常见的 SpringBoot,于是就不能方便地通过设置配置开启 Tomcat 的 JMX,——尽管我们也是基于 Tomcat 的 Web 容器,而是还是 SpringMVC。在笔者一番尝试下,终于实现了“Enable Embedded Tomcat JMX Programmatically”,所谓 Programmatically 就是编程式的用 Java 代码去配置。
2023-08-06 22:56:56 864
原创 工作流与状态机
引言与动机:世界是那么的广阔无垠,姿态万千,我们梦想着计算设备的多元化,而如今我们已经梦想成真,但同时业务模型同样变得纷繁复杂。如果不考虑我们拥有的繁杂的业务模型,就很难谈得上去探索行业发展的方向。MyWF 是基于有限状态机 FSM(Finite State Machine)理论的工作流引擎。状态机、状态机顾名思义着眼点在“状态(State)”上,以“状态”的不同为设计的参考物。一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。每请求一次,状态就更换一次,就执行对应的行为。
2023-08-02 14:11:51 879
微软百科全书 Encarta 2002 CD-3
2022-02-02
微软百科全书 Encarta 2002 CD-1
2022-02-02
帝视尼电话商务录音系统
2022-02-02
领域驱动设计 精简版 Abel Avram 和 Floyd Marinescu 总结整理
2022-01-29
数据结构思维 中文版 Think Data Structures
2022-01-29
简简单单用OpenOffice写书 use_OO_for_writing
2022-01-29
SUPER-SCSI-驱动
2021-11-20
商城测试用图片.7z
2020-02-16
DB Browser for SQLite.zip
2019-08-12
HDTunePro 5(Win8修正版).zip
2019-08-12
JDK JavaScript 独立运行时 Nashorn,Java 7 可用
2016-01-10
数据库转换神器 ESF Database Migration Toolkit - Professional
2015-11-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人