没啥用的黑科技——自动生成测试对象信息框架

创作目的我们平时在写测试用例的时候,免不了要写一大堆set方法为对象设置属性。有时候为了补全测试用例,这件事就会变得非常枯燥。于是就在想,能不能写一个可以自动生成测试对象的工具呢?于是就有了这一个没啥用的测试框架:https://github.com/houbb/datafactory(https://github.com/houbb/datafactory)项目简介datafactory(htt

原创 点赞0 阅读276 收藏0 评论0 1 天前

投资中最简单的事

# 韭菜的自我修养 最近读到《投资中最简单的事》,感觉内容不错,这里记录一下,便于提升一下韭菜的自我修养。 鲁迅曾说过:“人只要有钱,烦恼就会减掉90%以上,情商和智商也会提高,更不会乱发火。” 但是钱从哪里来,鲁迅没说。 ![鲁迅说](https://img-blog.csdnimg.cn/c8393d830aeb498e819a67fb3c047809.jpg?x-oss-proces

原创 点赞0 阅读44 收藏0 评论0 8 天前

一个提升英文单词拼写检测性能 1000 倍的算法?

# 序言 小明同学上一次在产品经理的忽悠下,写好了一个中英文拼写纠正工具:[https://github.com/houbb/word-checker](https://github.com/houbb/word-checker/blob/master/README_ZH.md)。 本来以为可以一劳永逸了,直到昨天闲来无事,发现了另一个开源项目,描述简要如下: ``` Spelling co

原创 推荐 点赞0 阅读373 收藏0 评论0 9 天前

基于 junit5 实现 junitperf 源码分析

# 前言 上一节介绍了基于 junit4 实现 [junitperf](https://github.com/houbb/junitperf),但是可以发现定义变量的方式依然不够优雅。 那可以让用户使用起来更加自然一些吗? 有的,junit5 为我们带来了更加强大的功能。 拓展阅读: [浅谈性能测试](http://houbb.github.io/2021/07/23/junit-per

原创 点赞0 阅读25 收藏0 评论0 10 天前

关于 junit4 90% 的人都不知道的特性,详解 junitperf 的实现原理

# 前言 上一节介绍了 [https://github.com/houbb/junitperf](https://github.com/houbb/junitperf) 的入门使用。 这一节我们从源码的角度,剖析一下其实现方式。 > [性能测试该怎么做?](http://houbb.github.io/2021/07/23/junit-performance-overview) # Jun

原创 推荐 点赞0 阅读172 收藏0 评论0 10 天前

性能测试到底该怎么做?

# 三高人群 作为一名开发者,我们最长听到的就是编程界的三高: 高性能、高并发、高可用。 听起来非常高大上,但是性能到底如何呢?又该如何评定呢? 这次我们谈一谈性能测试,看一看到底什么样才叫做高性能。 本文主要从以下几个方面进行讨论。 (1)性能测试是什么? (2)为什么需要性能测试? (3)性能测试如何做? (4)有哪些性能测试的工具 # 性能测试是什么? 老马曾经说过,你

原创 点赞0 阅读80 收藏0 评论0 11 天前

从代码生成说起,带你深入理解 mybatis generator 源码

# 枯燥的任务 这一切都要从多年前说起。 那时候刚入职一家新公司,项目经理给我分配了一个比较简单的工作,为所有的数据库字段整理一张元数据表。 因为很多接手的项目文档都不全,所以需要统一整理一份基本的字典表。 如果是你,你会怎么处理这个任务呢? ## 重复的工作 一开始我是直接准备人工把所有的字段整理一遍,然后整理出对应的 SQL 插入到元数据库管理表中。 meta_table 元数据

原创 推荐 点赞0 阅读495 收藏0 评论0 11 天前

java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊!

# 简单的需求 临近下班,小明忙完了今天的任务,正准备下班回家。 一条消息闪烁了起来。 “最近发现公众号的拼写检查功能不错,帮助用户发现错别字,体验不错。给我们系统也做一个。” 看着这条消息,小明在内心默默问候了一句。 “我 TND 的会做这个,就直接去人家总部上班了,在这受你的气。” “好的”,小明回复到,“我先看看” 今天,天王老子来了我也得下班,耶稣也留不住。 小明想着,就回

原创 推荐 点赞0 阅读439 收藏0 评论0 12 天前

java 如何实现开箱即用的敏感词控台服务?

# sensitive-word-admin [sensitive-word-admin](https://github.com/houbb/sensitive-word-admin) 是基于 sensitive-word 实现的, 一款开箱即用的敏感词控台服务。 ## 特性 - 基本的 CRUD - 开箱即用的配置控台 - 简单易用的 API 服务 > [变更日志](https:

原创 推荐 点赞0 阅读593 收藏0 评论0 13 天前

吴X凡绯闻女友小怡同学被骂到清空社交平台?各大平台连敏感词库都没有的吗?

# 敏感词都没有的平台 最近某加拿大籍贯的 rapper 被曝私生活不检点,且极有可能涉及诱X未成年少女,成为一个 raper。 ![胖虎](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2dcef845821d4aa0b229482267229d67~tplv-k3u1fbpfcp-zoom-1.image) 当然至于是否属实,其实一

原创 点赞0 阅读143 收藏0 评论0 14 天前

如何从零实现属于自己的 API 网关?

# 序言 上一篇文章:[你连对外接口签名都不会知道?有时间还是要学习学习。](http://houbb.github.io/2020/06/17/java-tool-checksum) 有很多小伙伴反应,对外的 API 中相关的加签,验签这些工作可以统一使用网关去处理。 说到网关,大家肯定比较熟悉。市面上使用比较广泛的有:spring cloud/kong/soul。 ![网关](http

原创 推荐 点赞0 阅读658 收藏0 评论0 14 天前

你连对外接口签名都不知道?有时间还是要学习学习

# 背景 周三,18:00。 小明扭了扭微微发酸的脖子,揉了揉盯着屏幕有些干涩的眼睛。 终于忙完了,临近下班,整个人心也变得放松起来。 “对接方需要我们提供新的服务,下周二上线,需求我发你了,很简单的。” 产品经理发过来一条消息,打破了这份美好。 ![computer-1185626_1280.jpg](https://p3-juejin.byteimg.com/tos-cn-i-k3

原创 点赞0 阅读104 收藏0 评论0 18 天前

对称加密算法汇总:AES DES 3DES SM4 java 实现入门

# 密码的世界 如果你是黑帮老大,平时和手下沟通,如何保证自己的信息安全呢? 在神探夏洛克的第一季中,就讲述了一个如何侦破黑帮的加密交流的故事。 ![神探夏洛克](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bea2f5145778409d824985acaf15cfc1~tplv-k3u1fbpfcp-zoom-1.image "密码

原创 点赞0 阅读79 收藏0 评论0 18 天前

springboot 实现拦截的 3 种方式介绍及异步执行的思考

# springboot 拦截方式 实际项目中,我们经常需要输出请求参数,响应结果,方法耗时,统一的权限校验等。 本文首先为大家介绍 HTTP 请求中三种常见的拦截实现,并且比较一下其中的差异。 (1)基于 Aspect 的拦截方式 (2)基于 HandlerInterceptor 的拦截方式 (3)基于 ResponseBodyAdvice 的拦截方式 推荐阅读: 统一日志框架:

原创 推荐 点赞1 阅读681 收藏0 评论0 18 天前

如何实现一款好用的云图(word-cloud)生成工具?

# 创作背景 可以随时生成一副很酷的云图,一直是个人的梦想。 很久以前,写过一个简单版本:http://houbb.github.io/tools/wordCloud.html。 效果如下: ![在这里插入图片描述](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/de24864723d648ef95b9ac2d2c943e8f~tplv-k3u

原创 点赞0 阅读88 收藏0 评论0 18 天前

java 实现跳表(skiplist)及论文解读

什么是跳跃表跳表由WilliamPugh发明。他在论文《Skiplists:aprobabilisticalternativetobalancedtrees》中详细介绍了跳表的数据结构和插入删除等操作。跳表是一种可以用来代替平衡树的数据结构,跳表使用概率平衡而不是严格执行的平衡,因此,与等效树的等效算法相比,跳表中插入和删除的算法要简单得多,并且速度要快得多。为什么需要?性能比较好。实现相对于红黑

原创 点赞0 阅读1746 收藏0 评论0 2020-11-02

CopyOnWriteArrayList 使用入门及源码详解

CopyOnWriteArrayList官方定义CopyOnWriteArrayList是ArrayList的线程安全变体,其中通过创建底层数组的新副本来实现所有可变操作(添加,设置等)。这通常成本太高,但是当遍历操作大大超过突变时,它可能比替代方法更有效,并且当您不能或不想同步遍历但需要排除并发线程之间的干扰时非常有用。“快照”样式迭代器方法在创建迭代器时使用对数组状态的引用。这个数组在迭代器的

原创 点赞0 阅读1248 收藏0 评论0 2020-10-31

CopyOnWriteArrayList 使用入门及源码详解

CopyOnWriteArrayList官方定义CopyOnWriteArrayList是ArrayList的线程安全变体,其中通过创建底层数组的新副本来实现所有可变操作(添加,设置等)。这通常成本太高,但是当遍历操作大大超过突变时,它可能比替代方法更有效,并且当您不能或不想同步遍历但需要排除并发线程之间的干扰时非常有用。“快照”样式迭代器方法在创建迭代器时使用对数组状态的引用。这个数组在迭代器的

原创 点赞0 阅读423 收藏0 评论0 2020-10-31

并发类 AtomicInteger 使用入门及源码详解

AtomicInterger介绍可以原子性更新的Integer值,当然这个类并不能完全替代Integer对象。使用使用起来还是很方便的。比如说我们定义一个计数器,使用AtomicInteger可以同时兼顾性能与并发安全。importjava.util.concurrent.atomic.AtomicInteger;/***@authorbinbin.hou*@since1.0.0*/publicc

原创 点赞0 阅读420 收藏0 评论0 2020-10-28

工作 5 年了,竟然不知道 volatile 关键字?

“工作5年了,竟然不知道volatile关键字!”听着刚面试完的架构师一顿吐槽,其他几个同事也都参与这次吐槽之中。都说国内的面试是“面试造航母,工作拧螺丝”,有时候你就会因为一个问题被PASS。你工作几年了?知道volatile关键字吗?今天就让我们一起来学习一下volatile关键字,做一个在可以面试中造航母的螺丝工!volatileJava语言规范第三版中对volatile的定义如下:java

原创 点赞0 阅读657 收藏0 评论0 2020-10-20

java 手写并发框架(二)异步转同步框架封装锁策略

序言上一节我们学习了异步查询转同步的7种实现方式,今天我们就来学习一下,如何对其进行封装,使其成为一个更加便于使用的工具。思维导图如下:拓展阅读java手写并发框架(1)异步查询转同步的7种实现方式异步转同步的便利性实现方式循环等待wait¬ify使用条件锁使用CountDownLatch使用CyclicBarrierFutureSpringEventListener上一节我们已经对

原创 点赞0 阅读479 收藏0 评论0 2020-10-12

java 手写并发框架(二)异步转同步框架封装锁策略

序言上一节我们学习了异步查询转同步的7种实现方式,今天我们就来学习一下,如何对其进行封装,使其成为一个更加便于使用的工具。思维导图如下:拓展阅读java手写并发框架(1)异步查询转同步的7种实现方式异步转同步的便利性实现方式循环等待wait¬ify使用条件锁使用CountDownLatch使用CyclicBarrierFutureSpringEventListener上一节我们已经对

原创 点赞0 阅读411 收藏0 评论0 2020-10-12

从零手写缓存框架(14)redis渐进式rehash详解

redis的rehash设计本文思维导图如下:HashMap的rehash回顾读过HashMap源码的同学,应该都知道map在扩容的时候,有一个rehash的过程。没有读过也没有关系,可以花时间阅读下从零开始手写redis(13)HashMap源码详解简单了解下整个过程即可。HashMap的扩容简介这里简单介绍下:扩容(resize)就是重新计算容量,向HashMap对象里不停的添加元素,而Has

原创 点赞0 阅读777 收藏0 评论1 2020-10-11

从零开始手写缓存框架 redis(13)HashMap 源码原理详解

为什么学习HashMap源码?作为一名java开发,基本上最常用的数据结构就是HashMap和List,jdk的HashMap设计还是非常值得深入学习的。无论是在面试还是工作中,知道原理都对会我们有很大的帮助。本篇的内容较长,建议先收藏,再细细品味。不同于网上简单的源码分析,更多的是实现背后的设计思想。涉及的内容比较广泛,从统计学中的泊松分布,到计算机基础的位运算,经典的红黑树、链表、数组等数据结

原创 点赞0 阅读506 收藏0 评论0 2020-10-10

java 手写并发框架(一)异步查询转同步的 7 种实现方式

序言本节将学习一下如何实现异步查询转同步的方式,共计介绍了7种常见的实现方式。思维导图如下:异步转同步业务需求有些接口查询反馈结果是异步返回的,无法立刻获取查询结果。比如业务开发中我们调用其他系统,但是结果的返回确实通知的。或者rpc实现中,client调用server端,结果也是异步返回的,那么如何同步获取调用结果呢?正常处理逻辑触发异步操作,然后传递一个唯一标识。等到异步结果返回,根据传入的唯

原创 点赞0 阅读333 收藏0 评论0 2020-10-09

从零开始手写缓存框架(12)redis expire 过期的随机特性详解及实现

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(二)redisexpire过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF持久化原理详解及实现java从零开始手写redis(七)LRU

原创 点赞0 阅读1018 收藏0 评论0 2020-10-08

java 从零开始手写 redis(11)clock时钟淘汰算法详解及实现

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redisexpire过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF持久化原理详解及实现java从零开始手写redis(七)LRU

原创 点赞0 阅读287 收藏0 评论0 2020-10-07

java 从零开始手写 redis(11)clock时钟淘汰算法详解及实现

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redisexpire过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF持久化原理详解及实现java从零开始手写redis(七)LRU

原创 点赞0 阅读315 收藏0 评论0 2020-10-07

java 从零开始手写 redis(十)缓存淘汰算法 LFU 最少使用频次

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redisexpire过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF持久化原理详解及实现java从零手写实现redis(七)LRU

原创 点赞0 阅读409 收藏0 评论0 2020-10-06

java 从零开始手写 redis(九)LRU 缓存淘汰算法如何避免缓存污染

前言java从零手写实现redis(一)如何实现固定大小的缓存?java从零手写实现redis(三)redisexpire过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF持久化原理详解及实现java从零手写实现redis(七)LRU

原创 点赞0 阅读383 收藏0 评论0 2020-10-05
  • 1
  • 2
  • 3
  • 4