自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 资源 (1)
  • 收藏
  • 关注

原创 水一篇,与一位同行关于Java interface最初目的的讨论

首先我部分认同你的观点,也就是接口的作用不只多态一个,但我说的是接口的目的,而不是接口的作用,也就是说“作用”可以根据自己的需要并结合接口本身的特点来定义它在一个上下文中所承担的责任,比如你可以在开发规范中将接口定义为隔离关注点的工具(为什么不用分层来隔离关注点),这当然没问题,但这一定不是当初创造“接口”这个概念的人的目的,也就是说,除了多态外,接口的其他作用都是被后天赋予的,唯独多态是接口诞生的目的。比如可以通过接口表达关注点的分离,让使用者只关心接口能提供过的能力,而不用去关心具体的实现细节。

2023-08-11 21:03:35 106 1

原创 面试马后炮——写一个无入侵业务代码的锁

我当时能想到的方案是基于自定义注解和AOP,不过这不是面试官想要的答案,他甚至已经给出了关键性的提示:用模板模式。怎奈CPU已经在之前一小时的拷问下变得有点儿发烫了,所以即使给出了提示,也没能想到如何用模板来处理这个问题,但基于一个程序员最后的本能,那个隐约的想法在沸腾的脑浆中忽隐忽现,可最终还是没能抓住它。遇到这种情况,如果你很看重这个职位,而且还能联系上面试官的话,那就在面试结束后的最短时间内将你的想法再与面试官讨论一下,说不定机会就在眼前。我去,有种被自己CPU坑了的感觉。

2023-08-11 08:46:31 96 1

原创 一二三 二二三,写个死锁大家观

代码中要注意的是sleep的时间,如果没有sleep或两个时间相等,那么运行10次也不一定能形成一次死锁,所以要错开两个线程的时间,这样一个死锁就轻松形成了,去把它写进你的系统吧。能点击题目看的一定知道什么是死锁以及其形成原因,所以就不介绍,直接上代码。

2023-06-03 14:03:18 94

原创 手撸一个纯纯的基于Java阻塞队列爬虫框架

比如最基本的就是统计各城市均价和中位数,然后还可以用Spark流计算对所爬取下来的数据进行实时计算,还可以用Spark机器学习对房价走势进行预测(虽然这年头房价走势你我都懂的),当然,前面所说的各种统计也可用Spark来做。之所以加纯纯两字,是因为没有依赖任何第三方包,什么common,什么HttpClient,什么sl4j,logback,就连JSON.toString()也是自己写,为了一个小小的爬虫引入那么多包干什么,JDK自己能搞定的事不麻烦别人。还有这个监控页面,其中有一半时间都在跟它死磕。

2023-05-28 22:27:32 133

原创 数据结构的力量——基于Tire Tree实现图片验证码自动识别

假期闲来无事,于是找出之前做的一个识别图片验证码的小工具来优化一下。之前写过一篇关于这个小工具的介绍————《不用OCR,如何实现图片验证码的自动识别》时隔近一年,再次看这些当时觉得还可以的代码已经不尽如人意了,比如字符描述字典的保存形式,又或者识别策略算法,甚至对于原始图片处理的封装。既然如今觉得可以做的更好,那就将这些优化的想法付诸实施吧。借助Tire树这个数据结构来识别字符的优点是每比对一个字符像素就可以过滤掉那些肯定不匹配的字符描述,而之前的识别算法,

2023-05-04 00:50:57 155

原创 已经是公元2023年了,一定还有这么写代码的Javaer——看如何把简单事情搞复杂的

先来一道开胃菜。这是典型的Javaer对于类似问题的代码写法。尝尝这么写香不香。(将is_tax从int改为tinyint(1))V再来看一个。首先是这个方法名,purchase这个动词说明是跟业务有关系,而且还是一个很大的业务逻辑,而如果真看代码则根本不是那么回事,其实加个get前缀才符合这个方法的气质。其次,宁可用一堆魔数加注释都舍不得定义几个常量。当然,更合适的方式是将这些equals判断放入vo中,然后给方法起一个符合业务的名字,比如 getSubjectOfInputTax()。

2023-03-05 13:06:13 161

原创 SRP左右护法 vs 千行Service————状态模式+命令模式瘦身记

如果你看过了众多状态模式的讲解,也许你会发现所有网上和书中所介绍的状态模式的代码都有一个共同点,那就是Context在被赋予了一个初始状态后就不再与除State之外的对象交互了,换句话说就是Context中的所有方法是没有入参的,并且Context中如果维护了除State之外的属性,那这些属性的值是不能被使用Context的一方修改的。这是一种非常种理想的情况,实际业务中不会这么简单。来看下面的代码。

2022-11-19 20:32:57 298

原创 实体类(Entity)有大量属性且持续增加该如何应对

需要说明的是,不同类型的单据所使用的属性和List引用是不同的,也就是说,当单据实体中持有数据时,只有部分属性和List中是有数据的,其余都是Null。因此,在保存序列化明细项数据的同时,还要保存数据所对应的类的版本标识,如此程序才能够知道用哪个版本的明细项类(Class)来反序列化数据。由于系统中原有的一个核心实体类在业务扩展性方面的表现实在不佳,在每次新增单据类型时,如果这个新增的单据类型有明细项的话,那么就需要为该明细项创建一个明细表,并在单据实体类中添加一个明细项的一对多引用(List)。

2022-10-31 23:22:43 908

原创 采用事件溯源重构支付功能

事件溯源是以时间顺序记录所发生的事件,之后可通过这些事件得到相应对象当前状态的一种设计理念。这种设计理念从根本上颠覆了以更新方式维护对象当前状态的传统方法,其优点是保存了聚合(如果还没听说过这个概念,可以先了解下DDD)的操作历史,可以为审计和数据分析提供支持;对于事件只进行插入,也就无需锁和事务,因此性能更好。缺点是数据量会更大;需要重放所有相关事件来得到当前状态;有违大多数开发人员的习惯思维方式。 在为报销单开发支付功能的过程中发现了原支付功能中诸多不合理设计和缺陷,比如表结构(不参与查询

2022-07-11 20:12:30 396

原创 被代码规范毁掉的Java interface——面向接口编程就是一类一接口吗?

面向接口编程的理念是要基于协议或约定来编程,这里的“接口”指的是一组协议或约定,从代码的层面出发,接口就是能力的抽象,其目的是增强程序的灵活性。可以看到,这些接口中都有撤回,批准,拒绝,退回,添加审批人和转交他人几个方法,个别的接口因为业务差异定义了自己特有的方法,并且以上接口的实现类中的代码也是大同小异。很明显,上图中的那些接口其实只需定义一个“审批”接口便可被全部代替,然后为各具体类型的单据创建实现“审批”接口的类,各实现类中的相同代码还可提取到接口中。的姊妹篇,这两篇文字中的代码均来自于同一个系统。

2022-06-19 10:54:34 519

原创 该如何命名代码包以及划分代码包的结构

我们的代码是因业务而生,如果没有业务也就没有代码,所以,代码首先要反应的就是业务,而实现业务的具体手段则要隐藏在背后。 在继续浏览下面的内容之前,请先回答一个问题,当用IDE首次打开一个陌生的工程后,让你对它产生初始认知的是什么?what?工程名?好吧,前提是这个工程名不是几个单词的首字母缩写。README?你确定每个项目都有这个文件?即使有,里面信息的用处又有多大呢。而我的回答则已经在本文的题目中了。 代码包是我们人民群众喜闻乐见的一种划分代码整体结构的工具,用好它有助于明确业

2022-06-16 23:13:27 340

原创 不用OCR,如何实现图片验证码的自动识别

用Java实现图片验证码的自动识别,从这位“老友”第一次为我成功预约课程后,我就一直想着怎么再把她捯饬的漂亮些————把人肉识别验证码变成自动识别验证码,这样就又可以省去敲四下键盘的巨大工作量了。不过后来随着课程的完毕,自动识别验证码的想法也就被搁置了,直到今天她又重见天日。如今某家要誓补当年之憾。...............

2022-06-01 23:42:23 2635 1

原创 分布锁替代方案

synchronized和ReentrantLock等锁机制为Java单体应用提供了在并发情况下程序可正确运行的保障,然应用开发已归治于分布式与微服务久矣,单体应用时代曾作威作福,号令天下线程的锁机制,在遇到多节点部署后,便只可将其位禅于分布锁。难道Java锁机制在分布环境下就真的一点发挥空间也没有了吗?他是否还有机会从分布锁手中夺回统领群“线”的权利,或者至少与其分庭抗礼呢?当然有,不过仅凭他自己是做不到的,他还需要一位路由大将军的辅佐。到此,估计老鸟应该已经猜到了具体...

2021-11-23 22:35:25 866

原创 用DDD(领域驱动设计)重构会计凭证生成(下)

之前写了篇如本文题目的文章,但考虑到篇幅就没有介绍项目的重构过程,今天就把这个坑填上,以了却一块心病。 如果想用DDD,那么相关知识是必不可少的,所以先推荐几本有关DDD的书籍,从“学”开始。第一本当然是DDD的提出者Eric Evans的《领域驱动设计 软件核心复杂性应对之道》,这本花费了作者4年时间的DDD开山之作值得反复阅读。《复杂软件设计之道:领域驱动设计全面解析与实战》,这本书是国内DDD布道者彭晨阳编著,书中实例丰富,对实践很有帮助。顺便说一句,我非常喜欢封面上............

2021-10-25 19:52:30 630

原创 软考杂记——系统架构设计师

2019年初冬,抱着给从业多年的自己一个交代的目的,我参加了软考的系统架构设计师资格的考试。之所以抱着如此理想化和单纯的目的,其实原因也很简单,那就是这个证书真的没什么用。 之所以说这个证书没用,是因为你既不能凭它找到一份工作,也不能凭它升职加薪(估计这话有点绝对,因为我确实不清楚体制内是如何对待持有这个证书的人的)。唯一的用处就是,你有了一个证,没事时可以拿出来,然后跟证书中的照片比对下如今的发量。 虽然这个证书没用,但却也不是轻轻松松就能得到的。拿系统......

2021-10-18 14:50:55 526

原创 职位描述中的“高并发”

当我们查看招聘网上的职位时,几乎所有的职位都有一个共同的关键词--高并发。。。从网络大规模普及后,这个词也就成了程序员的标配。那么,当一个职位描述中出现“高并发”三个字时,用人单位到底想要的是什么呢?这其实要看我们从事的岗位。对于架构人员来说,要做的其实是如何以及更好的应对短时间内大量请求的涌入,而对于程序员来说,就是要保证代码在高并发情况下运行的正确性和鲁棒性。

2021-09-28 12:58:58 168

原创 用DDD(领域驱动设计)重构会计凭证生成(上)

由于之前采用DDD的战略战术工具对几个项目进行了重构,在可扩展性和易维护性方面取得了很好的效果,所以在维护这个系统的过程中,结合开发、测试、上线过程中所遇到的问题以及对业务领域的理解,初步形成了重构的总体框架思路,随着对业务领域的认识不断深入,并经过数轮迭代后得到了现在的成果。https://blog.csdn.net/wangleimj88/article/details/120929931?spm=1001.2014.3001.5502

2021-08-26 09:41:26 969 2

dwr详细配置说明和讲解

关键字: dwr DWR是一种AJAX(Asynchronous JavaScript and XML)的JAVA实现,它提供了一种能在web浏览器端采用JavaScript语言直接调用后台业务商业组件的解决方案。DWR通过JavaScript直接调用远程组件可以减少Web开发的时间,特别对于那些具有和用户频繁交互的Web应用程序。DWR使得浏览器不用刷新页面就可以从远程Web服务器取得用户需的数据,这种无刷新页面的交互方式大大提高Web页面的响应时间。至少用户不会感觉到刷新页面带来的等待响应心理感觉。DWR采用浏览器端采用纯JavaScript实现,并且会自动根据浏览器类型采用最高效率的远程组件调用机制。DWR目前最新发布的稳定版本为1.0。本次项目中采用的也是目前的最新发布版本1.0。

2011-04-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除