随笔分类 - JAVA
摘要:需要注意图中存在环路。 JAVA: public final Node cloneGraph(Node node) { return deepCopy(node, new HashMap<Integer, Node>()); } private Node deepCopy(Node node, Ha
阅读全文
摘要:因为数组是有序的,可以递归的选取根节点构建子树。 JAVA: public final TreeNode sortedArrayToBST(int[] nums) { if (null == nums) return null; return this.build(nums, 0, nums.len
阅读全文
摘要:解析方法调用的语法,支持常量(双引号包含)、变量、函数(嵌套调用)作为入参。 自动机: java实现: // 方法执行 public String excuteMethod(String expression, JSONObject formData) throws Exception { if (
阅读全文
摘要:自定义逻辑表达式,关键字:= 等于,& 与,| 或, !非, ( , ) ,<> 包含,>< 不包含, # 不等于。 表达式支持括号标识作用域。 自动机分析如下: JAVA 实现: public class ConditionAnalysis2 { // 终止符号 Set<Character> si
阅读全文
摘要:自定义逻辑表达式,关键字:"="等于,"&"与,"|"或,"(",")","<>"包含,"><"不包含,"#"不等于。 表达式支持括号标识作用域。 自动机分析如下: JAVA 代码实现: public class ConditionAnalysis { public static void main
阅读全文
摘要:根据建表语句解析表结构,并将表结构解析为JSON。根据MYSQL的建表语句, 建表语句: CREATE TABLE `TEST` ( `ID` varchar(56) NOT NULL, `CREAETE_TIME` datetime NOT NULL, `IS_DEL` varchar(6) NO
阅读全文
摘要:解法主要有两项工作: 1、处理作用域(栈或递归); 2、顺序处理逻辑:(1)根据分隔符将语句拆解为 token;(2)根据关键字的运算逻辑定义状态,设计自动机;(3)从左至右逐个解析 token ,将 token 压入自动机 程序处理时,先处理会引起自动机状态变更的关键字或字符,再处理 token,
阅读全文
摘要:从 GitHub 下载对应版本的 IK 分词器源码,修改 CharacterUtil.identifyCharType 方法,将特殊符号、标点符号当做中文进行处理即可。 添加: //驼峰作为分词点 if (input >= 'A' && input <= 'Z') return CHAR_CHINE
阅读全文
摘要:倒排索引的简单 JAVA 实现,当玩具其实都很粗糙,简单实现下原理: public class IntertedIndex { // 倒排索引 private Map<String, List<String>> indexMap; // 关键词计数 private Map<String, Integ
阅读全文
摘要:在 spring 中大部分时候使用的是声明式事务,也就是 @Transaction 注解,但在某些特殊情况下也需要手动控制事务的开启/提交/回滚。 工具类封装: 1 @Component 2 public class TransactionUtils { 3 @Resource 4 private
阅读全文
摘要:Lost Update 问题 A4的访问模式r1[x], w2[x], w2[commit], w1[x], w1[commit] 这种访问模式下,w2的更新可能会丢失。因为w1可能基于一个比较old-x来做更新x的操作。 RR 隔离级别下的事务表现 快照读 测试数据: 事务 1: start tr
阅读全文
摘要:以 word 做模板时,文档中的字符串在 xml 中可能被打散到多个节点。 给出上下界字符(比如 {} ),去除中间无用的 dom 节点,使其之间的内容在 xml 中是连续完整的字符串。 用双指针标出上下界后对其中的 dom 节点进行替换。 public static void format(Str
阅读全文
摘要:针对 docx ,处理正文、表格、标头中的坐标替换。 public static void copyAndReplace(String oldPath, String newPath, Map<String, String> dict) throws Exception { FileOutputSt
阅读全文
摘要:springboot 中 @NotNull 等参数检查注解非常实用,优化掉了很多的重复代码。 在开发老版本 spring 项目时,没有类似注解,所以自己实现一个类似的功能,优化代码结构。 由于项目中没有使用统一异常处理,注解用于 Service 层,抛出的异常由 Controller 处理。 首先自
阅读全文
摘要:场景:页面包含多个大 sql。 目的:尽量保证接口响应速度,数据库压力可暂不考虑(并发不大,耗时 sql 多)。 思路: 1、如果 redis 中不存在缓存,查询数据库并添加缓存,根据数据变化频率设置缓存过期时间; 2、如果 redis 中存在缓存,提交更新缓存的异步任务(可选,针对数据变化频率高,
阅读全文
摘要:手写分布式锁,仅适用于单例 Redis。 与多线程的加锁解锁机制一样,分解出加锁解锁需要做的动作后,想办法保证动作的原子性即可。 X86 架构提供了 getAndSet 原语,保证了锁的检查与上锁这组动作的原子性,操作系统在其基础上提供了非常多的加锁方法。 Redis 也提供了类似的 “原语”:SE
阅读全文
摘要:package Demo.qd; import com.itextpdf.awt.geom.Rectangle2D.Float; import com.itextpdf.text.pdf.PdfDictionary; import com.itextpdf.text.pdf.PdfName; imp
阅读全文
摘要://获取网络文件转 base64 public String fileToBase64(String urlStr) { int byteread = 0; String total = null; byte[] totalbyte = new byte[0]; InputStream inStre
阅读全文
摘要:一种比较方便的写法,但基于反射,效率比硬编码低。注解: @Retention(RetentionPolicy.RUNTIME) @Target(value = ElementType.FIELD) public @interface ParamAnnotation { //是否必须参数 public
阅读全文
摘要:上学的时候用 C 写过俄罗斯方块,用 JAVA 再实现一次。 外公走了两个多月了,年初刚刚疫情的时候,外公还常给我打电话,让我在外面注意安全,不要乱跑。现在想想就是黄粱一梦。 外公为人极好,真心的希望每个他遇到的人能过好。好到从一个村里的民办教师,被众人生生的托举到了副市级的位置。 外公也极不容易,
阅读全文