自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

coooooding

如果只能读三本书,那一定是《操作系统和计算机网络》、《编译原理》、《数据结构和算法》。如果只能读一本书,那它就是《数据结构和算法》

  • 博客(99)
  • 收藏
  • 关注

原创 swagger转markdown

swagger转markdown简介开始安装nodejsclone项目,安装依赖使用简介使用github上开源项目实现swagger转markdown。开始安装nodejs略clone项目,安装依赖git clone https://github.com/Mermade/widdershins.gitcd widdershinsnpm i使用node widdershins --search false --language_tabs ‘ruby:Ruby’ ‘python:Pytho

2021-06-11 09:40:18 296 2

原创 个人pc单机上万并发连接实战

环境个人电脑*1cpu 2.7GHz 4corememery 4GB系统ubuntu16个人桌面版服务nodejs写的一个hello world的http服务代码如下const http = require('http');const server = http.createServer((req, res) => { let now = ''+new Date().getTime() res.write(now) res.end(); //co

2021-04-18 14:49:23 475

原创 js对象序列化和反序列化json,支持循环引用

//代码从MDN拷贝,修改了一下,添加堆循环引用的支持//https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSONlet JSONUtil = { parse: function(jsonStr,resolveCircular=true) { let res = eval('(' + jsonStr + ')') let cache = [] let tasks = []

2020-09-26 16:00:53 538

原创 Haskell学习心得

Haskell学习心得话说程序员要每年学一门编程语言.2020年,目标Haskell.特性柯里化Haskell的函数,只有单参数函数.它的多参数函数,其实只是返回了另一个函数.所以在进行部分参数应用的时候,会非常的自然.运算符所有的运算符也是函数,和函数不同的是,运算符的结合性和优先级可以自定义.函数的结合性和优先级是固定的.强类型和类型推导定义函数时,可以声明类型,也可以不声...

2020-05-04 00:47:58 497

原创 软件的腐化之路

软件腐化之路本文并不是吐槽,而是总结开发过程中软件腐化的各种原因,希望基于此思考如何解决软件腐化的问题.需求不明确项目已有第n个版本,现开发第n+1个版本,但是需求不明确,导致可能无法将新需求融入到现有的设计,可能要调整现有设计,可能不要改.如果需求不明确,又要开始干活,那么可能到需求明确的时候,已经没有资源去做相应的调整了,这个时候通常会用各种hack方式实现功能,为后期版本埋坑.定义不...

2020-05-03 19:18:58 449

原创 js实现java字符串的hashCode方法

java的int类型占4个字节。在计算字符串的hashcode时,可能会溢出。这种溢出属于正常情况。在js中,所有数字都是以64位浮点数形式储存。其表示范围要远远超过java32位的int。所以在js要实现java字符串的hashCode方法,就需要主动让其值产生溢出效果。有什么用呢?更深入理解java字符串的hashCode方法理解数值计算的溢出处理连接js和java字符串处理ja...

2019-09-24 23:09:02 2332

原创 groovy伪递归优化

groovy伪递归优化1、官网文档闭包这一章介绍了使用trampoline进行伪递归优化def factorialfactorial = { int n, def accu = 1G -> if (n < 2) return accu factorial.trampoline(n - 1, n * accu)}factorial = factorial.tra...

2019-09-14 15:53:41 346 2

原创 asm实现aop,不是简单的打印方法执行时间

源码 https://github.com/zhoujiaping/asm0看org.wt.asm.aop包里面的内容实现了一个通用的aop,使用时写常规的java代码就可以了。

2019-09-07 23:27:38 268

原创 基于javaagent实现的mock框架

背景项目有点规模,使用dubbo框架,类似微服务的方式将项目分成了多个模块。各个模块逻辑复杂,而且调用了大量的外部接口。开发时自测面临以下问题:测试某个模块时,需要启动各个上游模块,以及上游模块的上游模块。业务逻辑复杂,需要有完备的测试数据,才能成功调用各个接口。项目中的加解密功能设计的不好,难以绕过加解密签名验签通过传入准备好的明文直接进行调用。有时候,不仅仅需要对外部接口进行moc...

2019-08-10 22:41:00 2153 1

原创 基于redis实现限流器

package org.jsirenia.ratelimit;import java.io.FileNotFoundException;import java.util.List;import org.jsirenia.file.MyFile;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.spri...

2019-06-12 21:52:47 1156 1

原创 redis实现队列

package org.jsirenia.queue;import java.util.List;public interface RedisQueue { void clear(); boolean isEmpty(); String peek(); int add(String... source); List<String> peek(int coun...

2019-06-12 21:50:42 795

原创 java8日期时间工具类

package org.jsirenia.date;import java.io.Serializable;import java.time.DayOfWeek;import java.time.Instant;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.LocalTime;i...

2019-06-12 21:48:38 5331

原创 线程工具类

package org.jsirenia.thread;import java.lang.Thread.UncaughtExceptionHandler;public class ThreadUtil { public static class ThreadException extends RuntimeException{ private static final long se...

2019-06-12 21:45:39 163

原创 懒初始化的map

package org.jsirenia.defer;import java.util.Map;/*** * 第一次get的时候,调用初始化方法。 * @author zhoujiaping 2019-04-23 * */public class LazyInitMap<K,V>{ private Map<K,V> map; private bool...

2019-06-12 21:39:17 301

原创 服务启动时序解耦

package org.jsirenia.defer;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import org.jsirenia.util.Callback.Callback00;import org.slf4j.Logger;import org.slf4j.LoggerFactory...

2019-06-12 21:38:00 328

原创 优雅停机-dubbo篇

dubbo中使用了netty,但是它修改了netty的代码,其中有个bug,导致无法优雅停机。下面的代码用于解决这个问题。package org.jsirenia.dubbo;import java.lang.reflect.Field;import java.lang.reflect.Method;import javax.annotation.PreDestroy;impor...

2019-06-12 21:35:21 653

原创 基于javassist实现aop

背景:系统集成测试,需要写mock(单元测试有spock等mock工具)。于是基于spring的aop实现了一个mock框架,可以用于集成测试。但是只能对spring管理的bean进行mock。对于有些工具类,是没办法mock的,比如一些加解密,签名验签,都是用静态方法实现的。于是寻找一些解决方案,希望尽可能的减少侵入性,实现对静态方法、非spring对象的mock。思路是在类加载之前...

2019-06-12 21:28:45 725 1

原创 用js实现鸟语

const map = { '~':'~', '[':'#', ']':'$', '!':'!', '&lt;':'&amp;', '|':'*', '&gt;':'@'}const rMap = {}for(let k in map){ rMap[map[k]]=k}//待转换文本let s = '你好啊'function transform(text){ c...

2019-02-16 12:46:00 332

原创 alibaba-druid里面的LRU缓存实现

内容从druid包里面拷贝的package org.jsirenia.cache;import java.util.LinkedHashMap;import java.util.Map;//copy from com.alibaba.druid.util.LRUCache;public class LRUCache&lt;K, V&gt; extends LinkedHashMap&l...

2018-12-05 20:36:34 578

原创 java版js数组

背景:java数组、列表的抽象程度不够,操作起来相对麻烦。相比而言,js数组方便很多。于是参考js的数组api,对java数组(列表)进行抽象,可以非常方便地进行平常的一些操作。依赖:只是在toString方法中依赖了fastjson,所以就不贴pom.xml了。代码:1、接口package org.jsirenia.array;import java.util.Comparato...

2018-12-05 20:32:57 354

原创 自己实现持久层框架

jdbc-template项目背景用过hibernate、mybatis,了解过spring的jdbc-template。觉得hibernate框架太重太复杂,sql优化不方便。mybatis强制使用xml配置提供sql(注解方式提供sql能力有限,provider方式提供sql也不方便),而且要配置ResultMap、关联查询又要比较复杂的配置,多表关联查询时对不同表字段名相同的情况处理...

2018-11-18 08:37:18 1165

原创 groovy执行sql简单示例

这里主要展示groovy为了代码的执行方便,竟然将依赖在脚本中指定。简直是太方便了。import groovy.sql.Sql//可以指定maven仓库@GrabResolver(name = 'aliyun', root = 'http://maven.aliyun.com/nexus/content/groups/public/')//jdbc驱动类需要用Class.forName...

2018-11-07 19:49:17 5301

原创 java调用groovy

最近学习了一下groovy,发现这门语言身上有scala的影子(或者相反)。使用起来非常的简洁,而且无缝调用java,真的非常棒。那么反过来,java调用groovy呢?由于groovy是动态语言(这里先不讨论groovy编译成字节码),java是静态编译的,所以java要调用groovy,编译器并不知道groovy会定义一些什么,所以就和java调用js的情况一样了(事实上都是java调用s...

2018-11-07 19:37:11 785

原创 spring整合hessian简化rpc调用

maven配置:略服务端HessianServiceExporterController.java/** * web.xml中不需要额外的servlet. * 对于hessian调用的理解,实际上就是http请求,然后在请求头加了特殊的Header, * 请求体的内容使用hessian协议序列化和反序列化。 * spring提供了HessianServiceExporter,封装了协...

2018-10-19 19:21:30 428

转载 java-nio学习

https://zhidao.baidu.com/question/557288047.htmlhttp://blog.sina.com.cn/s/blog_751bd9440102x571.htmlhttps://www.cnblogs.com/dolphin0520/p/3919162.htmlhttps://www.sohu.com/a/231626534_827544

2018-10-13 15:07:19 99

原创 第一次用kafka

maven配置依赖&lt;dependency&gt; &lt;groupId&gt;org.apache.kafka&lt;/groupId&gt; &lt;artifactId&gt;kafka-clients&lt;/artifactId&gt; &lt;version&gt;0.9.0.1&lt;/version&gt; &lt;exclusions&am

2018-10-13 11:05:42 138

原创 jetty服务器

maven配置依赖 &lt;!-- https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-server --&gt; &lt;dependency&gt; &lt;groupId&gt;org.eclipse.jetty&lt;/groupId&gt; &lt;artifactId&gt;jetty-server&...

2018-10-13 10:53:19 205

原创 代理服务器实现

基于apache的httpclient实现。配置依赖&lt;dependency&gt; &lt;groupId&gt;org.apache.httpcomponents&lt;/groupId&gt; &lt;artifactId&gt;httpclient&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&amp

2018-10-13 10:42:37 807

原创 leetcode-14. 最长公共前缀

一般求公共前缀可以用trie树解决。但是如果是朴素trie树,则会消耗大量空间,如果是double-array-trie,则编码相当复杂。所以这里就不用trie树,直接用遍历的方式解决。当然还可以用递归等其他方式。/** * @param {string[]} strs * @return {string} */var longestCommonPrefix = function...

2018-09-24 19:14:09 550

原创 dubbo filter记录接口参数日志

实现效果:dubbo的provider和consumer接口调用的入参和出参都会打印日志。dubbo配置 &lt;dubbo:consumer check="false" filter="dubboConsumerLogFilter"&gt;&lt;/dubbo:consumer&gt; &lt;dubbo:provider filter="dubboProducerLogFilter"/..

2018-09-24 18:40:54 4173

原创 leetcode-11. 盛最多水的容器

var maxArea = function(height) { let max = Math.min(height[0],height[1]) for(let i=2;i&lt;height.length;i++){ for(let j=0;j&lt;i;j++){ let h = Math.min(height[i],height[j])...

2018-09-22 21:07:57 175

原创 leetcode-8. 字符串转整数 (atoi)

/** * @param {string} str * @return {number} */var myAtoi = function(str) { let max = Math.pow(2,31)-1; let min = -max-1; let reg = /^\s*([-+]?\d+).*$/igm; let arr = reg.exec(str);...

2018-09-19 12:37:03 225

原创 对java调用javascript的封装

maven依赖&amp;amp;lt;dependency&amp;amp;gt; &amp;amp;lt;groupId&amp;amp;gt;junit&amp;amp;lt;/groupId&amp;amp;gt; &amp;amp;lt;artifactId&amp;amp;gt;junit&amp;amp;lt;/artifactId&amp;amp;gt; &amp;amp;lt;

2018-09-19 12:23:26 677

原创 leetcode-6. Z字形变换

/** * @param {string} s * @param {number} numRows * @return {string} */var convert = function(s, numRows) { if(numRows==1){ return s; } let chs = [...s]; let res = []; ...

2018-09-15 17:53:23 145

原创 leetcode-5.最长回文子串

/** * @param {string} s * @return {string} */var longestPalindrome = function(s) { let chs = [...s]; let res = []; for(let i=0;i&lt;chs.length;i++){ let s1 = f1(chs,i); ...

2018-09-15 16:03:00 118

原创 身份证相关代码

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.time.Instant;import java.time.LocalDate;import java.time.ZoneId;...

2018-09-05 20:11:37 5462 2

原创 leetcode-7. 反转整数

/** * @param {number} x * @return {number} */var reverse = function(x) { let r = 0; let res = []; while(x!=0){ r = x%10; //res = res*10+r; res.push(r); ...

2018-08-25 18:16:25 135

原创 leetcode-4. 两个排序数组的中位数

https://leetcode-cn.com/problems/median-of-two-sorted-arrays/description//** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number} */var findMedianSortedArrays = function(num...

2018-08-25 12:48:58 129

原创 leetcode-3. 无重复字符的最长子串

/*https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/description/*/var lengthOfLongestSubstring = function(s) { let dict = {}; let begin = 0; let max = 0;...

2018-08-25 10:12:02 119

原创 求l的k乘积-回溯算法

let num = '6345214';let K = 4;let res = [];let max = 0;function backtrace(k){ let c = consumed(k); if(k==K){ if(c.length==num.length){ console.info(res); le...

2018-08-16 19:54:24 721

空空如也

空空如也

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

TA关注的人

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