配置vscode eslint 保存自动格式化

4 月 1 日
阅读 2 分钟
3.4k
自从使用了@antfu/eslint-config之后,配置eslint格式化方面特别方便了很多,特别是作者的理念非常对,Why I don't use Prettier,只需要使用eslint就可以了,简化了工程的配置。

使用wxt开发跨浏览器插件

1 月 29 日
阅读 3 分钟
2.2k
在使用@crxjs/vite-plugin一段时间后,开发发了welibrary等图书馆插件,为了进一步推广插件计划支持Chrome、Edge浏览器之外的Firefox,为此耗费了不少时间用于调整配置,初步结论如下,

开发一个CSDN博客浏览器插件

2023-12-26
阅读 3 分钟
912
基本效果沉浸模式——隐藏掉两个边栏,暗黑模式——无需解释release地址:[链接]原理解释整体技术栈使用Vue3 + Vite + Typescript + element-plus。使用popup配置, {代码...} 这个index.html引入了Vue,利用vue的onMounted开始判断当前浏览页面是否csdn博客地址, {代码...} 如果不是则switch开关按钮置灰不给使用。这个swi...

简单说明如何开发图书馆浏览器插件

2023-12-20
阅读 2 分钟
649
这个douban.js要做的事情是在douban.com dom loaded之后去加载,解析页面的标题及ISBN。3、然后是涉及到通讯问题明显存在跨域问题,从douban.com去fetch请求如深圳图书馆的网页是存在问题的。这里借助的是background service worker的方案,

开发一个图书馆浏览器插件v2.0

2023-12-14
阅读 3 分钟
724
use extension popup to see book infos extract from website being browsered, book list from weread.qq.com and city libraries borrow list of the month, activity list from city libraries, and see what time do city libraries serve and how to get there. 使用扩展的popup弹窗浏览图书信息,图书馆借阅排行...
封面图

关于聚合和多线程的处理套路

2020-08-03
阅读 6 分钟
3.1k
无差别地请求多个外部接口并聚合所有请求结果,应该有属于它自己的套路,应该将所有多线程的操作屏蔽之,我们只关心参数和结果。因此,应该抛弃Callable/FutureTask/Future等这些手工模式,这些代码应该交给框架来实现。

https的过程 (草稿)

2019-11-08
阅读 2 分钟
3.1k
(1) client hello(2) server hello, certificate, key exchange(3) client exchange, cipher, ciper sepec(4) cipher, cipher sepec(5) conclusionTLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256(*) veryfy server certificate

ConcurrentLinkedQueue vs BlockingQueue比较

2019-10-20
阅读 4 分钟
2.6k
结果////////////=============///blocking version cost ms:22052lock free cost ms:22

在XMLSignature中使用BouncyCastle做RSA

2018-09-07
阅读 10 分钟
2.8k
There is an article shows demo code for making XMLSignature by using Java XML Digital Signature API, where it actually uses org.jcp.xml.dsig.internal.dom.XMLDSigRI to do DOM formation, and the first provider in the java.security lookup order that will support SHA1 digestion, SHA1withRSA signing t...

使用Mockito修改Bean的依赖

2018-08-15
阅读 7 分钟
6k
在使用单元测试时经常会遇到某些dependency依赖了外部资源,或者想主动绕过真正的方法执行mock返回结果而快速得到单元测试最终的期望结果,可能有以下两种场景,对于TestCase A,设单元测试的方法是Service A的execute1方法和execute2方法,在执行execute1和execute2方法时都会调用ServiceB的不同方法,即ServiceA依赖了...

Java 8 HashMap中的TreeNode.putTreeVal方法分析

2018-06-26
阅读 7 分钟
6k
然后就是调用putMapEntries方法,第二个参数其实可以看作细节,个人认为它和HashMap的子类LinkedHashMap有关,evict是逐出的意思,如果基于LinkedHashMap实现LRU缓存的话,这个evict参数正好就用上了。

学习Java Collection Framework的Iterator实现

2018-06-18
阅读 12 分钟
2k
继续研读JDK的源码,在比较HashMap和ConcurrentHashMap的不同之处发现了一个细节——关于Iterator的实现的不同,其实HashMap和ConcurrentHashMap还有更多不同的地方,这也是面试经常问到的问题,有一篇文章我觉得讲的很好了,Java进阶(六)从ConcurrentHashMap的演进看Java多线程核心技术。Iterator是一种设计模式,在Jav...

根据xml配置校验bean

2018-04-18
阅读 4 分钟
2.2k
例子参考自官方文档,[链接]官方文档的xml配置有点过期了,一两个属性不合法。 {代码...} Userbean类, {代码...} OvalAppTest测试类, {代码...} xml配置,src/resources/oval-config.xml {代码...} 输出结果, {代码...}

一些我认为有用有趣的JDK方法

2018-04-10
阅读 6 分钟
4k
在学习JDK的源码过程中我遇到了一些有趣有用的方法,在此之前如果要使用这些工具方法,我首先会想到的是commons-lang和guava这样的语言扩展包,但现在如果是写一些demo,使用原生即可达到目的。当然我们也不能否认它们的作用,在平时的工作项目中几乎都会引入这些语言扩展包,直接使用他们也使得编程风格统一,而且还能...

说一说java.util.Arrays$ArrayList

2018-04-03
阅读 4 分钟
4.8k
java.util.Arrays$ArrayList(下文:Arrays$ArrayList)是java.util.Arrays的私有静态内部类,他实现的接口,继承的父类几乎和java.util.ArrayList(下文:ArrayList)相同,既然是私有的,那么平常应该是我们少关注的地方。本文尝试对比一两个他们之间的不同点。

强类型与弱类型语言关于存取对象(数据)的问题

2018-03-02
阅读 4 分钟
2.6k
在旧的业务流程加入一个“拦截”,原来从前端表单提交到后台的处理逻辑延后处理,本质上是一个异步化的处理过程。此时将表单参数存储到数据库,在适当的时刻“拦截”结束通过时调用原来的处理逻辑。F代表表单参数,A代表控制器参数,

使用FTP连接池封装工具类

2018-02-01
阅读 3 分钟
3.8k
早前的思路是将FTP连接的管理(对象池功能)与FTP工具类(上传下载方法)在一个工程中实现,在工具类中调用是模板类提供的模板方法,由模板方法与对象池打交道——初始时获取对象,结束时归还对象。将对象池引用在模板类中暴露出来,模板类的模板方法需要很多的样板式代码,虽然这是不可避免的,但是模板方法即API的设计限...

并发数据结构与线程(ArrayBlockingQueue)

2017-12-29
阅读 7 分钟
3.3k
今天在QQ群上抛出来一个问题,如下 我以Java自带的数据结构为例,用源码的形式说明,如何阻塞线程、通知线程的。 一、Lock & ConditionArrayBlockingQueue以可重入锁和两个Condition对象来控制并发。 {代码...} 构造函数中初始化了notEmpty和notFull. {代码...} 二、线程阻塞当ArrayBlockingQueue存储的元素是0个的...

从Timer中学习优先队列的实现

2017-04-30
阅读 3 分钟
2.4k
Timer是Java定时器的实现,用来调度定时执行的任务和执行一次的任务,就像JavaScript的setInterval和setTimeout的意思,它也可以作为后台程序(Daemon)运行。

Webservice On Netty

2017-03-12
阅读 2 分钟
7.5k
最近遇到了一个项目需求,技术选型选择了webservice,需要对外提供webservice接口。实现webserice功能可以有多种做法的,比如servlet + tomcat的方式,Java Main方法+嵌入jetty server的方式,本质上是XML/HTTP的原理(误?)。

解析XML和JSON内容的一点技巧

2016-11-26
阅读 5 分钟
5k
在没有统一标准的情况下,一个系统对接多个外部系统往往会遇到请求接口响应数据异构的情况,有可能返回的是XML,也有可能返回JSON。除了返回类型不同,内容结构也不尽相同。以XML类型为例,接口1返回内容

封装一个FTP工具类

2016-11-12
阅读 5 分钟
9.7k
前人的代码中把FTP操作和业务逻辑实现耦合在一起,据说经过多次的修改,在性能表现方面已经非常靠谱。在原来的代码中可以看到使用了commons-net进行FTP操作,使用commons-pool对象池方式管理FTP连接,完成了多线程下载和上传的功能,本次的修改只是把耦合的地方剥离开来。

LinkedHashSet内部是如何工作的(翻译)

2016-03-05
阅读 3 分钟
3.6k
LinkedHashSet是HashSet的一个“扩展版本”,HashSet并不管什么顺序,不同的是LinkedHashSet会维护“插入顺序”。HashSet内部使用HashMap对象来存储它的元素,而LinkedHashSet内部使用LinkedHashMap对象来存储和处理它的元素。这篇文章,我们将会看到LinkedHashSet内部是如何运作的及如何维护插入顺序的。

最大子序列和O(N)算法简单分析『神兽必读』

2016-03-04
阅读 2 分钟
4k
可以看到算法中重要的位置都标注出来了。显然这个算法有一个for循环,整体时间复杂度可以看作O(N)。就算法正确性来分析,首先假设这样的输入:-2, -3, 5, 6, -1, 8, 9

[Java]使用Apache Commons Execs调用脚本

2016-01-17
阅读 10 分钟
6.2k
问题中提到的Apache Commons Execs这个库,相比我们原来使用原生的Runtime和Process有不少优点。对比我之前写过的代码,总结一下:

unslider源码分析

2015-12-28
阅读 23 分钟
7.6k
根据Bootstrap中文网的介绍,Unslider一个超小的 jQuery轮播(slider)插件,参照这个汉化版的介绍页面,这个插件有你需要的优点,但是本文是抱着学习的态度,学习如何实现轮播插件,所以有些细节可能有所忽略。

jFinal路由解析源码分析

2015-12-13
阅读 18 分钟
8.6k
jFinal的路由解析是在JFinalFilter中做的,这个Filter也需要在web.xml中配置。JFinalFilter实现了javax.servlet.Filter接口,从这里也可以看出jFinal是基于Servlet的。JFinalFilter在初始化时负责初始化jFinal项目的配置(com.jfinal.core.Config)、路由表(Route)、映射表(ActionMapping)等;路由解析是在JFinalFilter的d...

将JavaScript Date对象转换成yyyy-MM-dd HH:mm:ss格式字符串的方法

2015-12-10
阅读 1 分钟
8.9k
第一种可以马上想到的是使用Date对象的api方法,获得年份,月份,天,小时,分钟和秒数,就可以拼出来。从Date.prototype.toISOString方法稍微改造就可以了:

Python学习资源

2015-08-01
阅读 1 分钟
6.9k
Python学习资源持续收集中。 [链接] [链接] [链接] Python正则表达式操作指南 [链接] [链接] [链接] 怎样学 Python? 你像从前一样的Python学习笔记 Python -- 头条 11. 玩 Python 之必装组件 12. Python俱乐部 13. python-china新风格社区 14. 伯乐在线的Python频道 多谢评论的补充 15. [链接] 16. Python Cookbook 是P...

前序遍历树

2015-08-01
阅读 3 分钟
2.1k
代码来自:pickle and cPickle – Python object serialization 首先树的结构,如图 {代码...} 输出结果: {代码...} 其中preorder_traversal是生成器。这里记录下生成器方法的每一步的意思。 {代码...} 一开始不明白的地方是这样 {代码...} 为什么不是先判断呢。 看循环引用的情况。 前序输出从root -> a -> b -&g...