From de16f1cf121328baedc3f9df68f06c19c195a588 Mon Sep 17 00:00:00 2001 From: ehlxr Date: Tue, 22 Jan 2019 15:38:12 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AB=99=E7=82=B9=E6=9B=B4=E6=96=B0=EF=BC=9A20?= =?UTF-8?q?19-01-22=2015:38:12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + java-utils.iml | 111 ----------- pom.xml | 70 ++++++- resources/idea/go-settings.jar | Bin 41758 -> 50240 bytes src/main/java/me/ehlxr/CharToHex.java | 21 ++ src/main/java/me/ehlxr/DidSdkTest.java | 29 +++ .../java/me/ehlxr/FindRequestMapping.java | 44 +++++ src/main/java/me/ehlxr/Hello.kt | 15 ++ .../java/me/ehlxr/ReferenceCountingGC.java | 31 +++ src/main/java/me/ehlxr/Rename.java | 28 ++- .../ScheduledThreadPoolExecutorTest.java | 40 ++++ src/main/java/me/ehlxr/SnowflakeIdWorker.java | 183 ++++++++++++++++++ src/main/java/me/ehlxr/dfd.java | 8 +- src/main/resources/log4j.properties | 12 +- 14 files changed, 455 insertions(+), 138 deletions(-) delete mode 100644 java-utils.iml create mode 100644 src/main/java/me/ehlxr/DidSdkTest.java create mode 100644 src/main/java/me/ehlxr/FindRequestMapping.java create mode 100644 src/main/java/me/ehlxr/Hello.kt create mode 100644 src/main/java/me/ehlxr/ReferenceCountingGC.java create mode 100644 src/main/java/me/ehlxr/ScheduledThreadPoolExecutorTest.java create mode 100644 src/main/java/me/ehlxr/SnowflakeIdWorker.java diff --git a/.gitignore b/.gitignore index 71eb3a1..7795b63 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ target /useful-code.iml /.idea /resources/debug.log +java-utils.iml \ No newline at end of file diff --git a/java-utils.iml b/java-utils.iml deleted file mode 100644 index c94a0f6..0000000 --- a/java-utils.iml +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pom.xml b/pom.xml index afb08a2..9c03e33 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ war 0.0.1-SNAPSHOT - useful-code Maven Webapp + java-utils http://maven.apache.org @@ -19,6 +19,7 @@ utf-8 1.8 1.7.1 + 1.2.60 @@ -263,6 +264,27 @@ jodd-props 3.6.1 + + cn.ceres.did + did-sdk + 1.0-SNAPSHOT + + + cn.enncloud.ceres + ceres + 1.1.0-SNAPSHOT + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + ${kotlin.version} + + + org.jetbrains.kotlin + kotlin-test + ${kotlin.version} + test + java-utils @@ -360,6 +382,52 @@ + + + org.jetbrains.kotlin + kotlin-maven-plugin + ${kotlin.version} + + + compile + compile + + compile + + + + test-compile + test-compile + + test-compile + + + + + 1.8 + + + + org.apache.maven.plugins + maven-compiler-plugin + + + compile + compile + + compile + + + + testCompile + test-compile + + testCompile + + + + + compile diff --git a/resources/idea/go-settings.jar b/resources/idea/go-settings.jar index 1ac9ecc2c88e1240a396f4c040d274b5cdf80ec6..efa0cd3eaaaf1ddfe04b267076130ef6deda772d 100644 GIT binary patch delta 11072 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 delta 2912 zcmZuy3s6&68b0?XKp+t#56OdspkxVCsY*w?U@dg4rB1+twYZ217Ew_kQPgU!22rp= z5Xg^Es`8Kp6%u!7ZYjvi@)K zbTUjuB{Gn>j7{9xat~2*GB7s`F!ymaGWb`mSR z;rRnsg+$j!Q+5K_PF zM{Ma zDOt99Y#T)9+8IGeG`Qea;M8rcSbUZ#4pmX`5EH} z=N;=${7>4Qfpd=sPMiw<_nuv^Z4W>0b@TLMTlwmY_6O~^tmVN2J5Oel>j79s-*p+Q> z^oW-Zd)Ed2t;i}nwC08QtB&8a$3FaD!YxguIr1J6r*{)&e|`1ak1;F`0wMOHEQzh; zfhETr2IG!&Lus!NdfcjnWyU;xbJGG|1;1X$;0^E8X<|b;!yT=czYW*lhQv`@eXz_Tp&x63dZoP0!zsp8fX1@x-#IYqK}i$-+kl zljesH`*n<-+rMd9b-(HMqHpTOe+d~6G#TBffOS89dpQ?}GlVxAFzuz-uBU71hZZG) zAWP&oCr(e0K8S4$!4E#aYsG>qF!yV%6LkO zJ>htX0#ptOBiPuhAfu#kwLU;PCI53e736&>R3Gz$U2-Uf&Nf7WtG{8mNf4oR8T%@#Y(;F@dQ!;AzUKNyRmQXEA4G=76DZ zChd}{PTQ~myOblGTttuq^?jilN|W?!_k9~Z!T2WW=-+4s-dL$|5%_1 zBh9aY?t>83uanT zz4@T7@bjFM{FH87MfqT=RzYRAgbp}wyjZj!yEX?0%1jhA-wGP<4T&Mb4y9)uJFT7vM4M1FJua7{mx} z=~s}EX4u=T=3z=r?{BQ$eeYqxUni8XI% { + System.out.println(responseFuture.getSdkProto().getDid()); + countDownLatch.countDown(); + }); + countDownLatch.await(); + client.shutdown(); + } +} diff --git a/src/main/java/me/ehlxr/FindRequestMapping.java b/src/main/java/me/ehlxr/FindRequestMapping.java new file mode 100644 index 0000000..9aec1f8 --- /dev/null +++ b/src/main/java/me/ehlxr/FindRequestMapping.java @@ -0,0 +1,44 @@ +package me.ehlxr; + +import java.io.*; + + +/** + * @author ehlxr + */ +public class FindRequestMapping { + private static int total = 0; + private static int unDeal = 0; + + public static void main(String[] args) throws IOException { + File dir = new File("/Users/ehlxr/WorkSpaces/enncloud/ceres-epns/ceres-epns-web/src/main/java/com/ceres/epns/web"); + deal(dir); + } + + private static void deal(File file) throws IOException { + if (file.isDirectory()) { + File[] fs = file.listFiles(((dir, name) -> { + File f = new File(dir.getPath() + File.separator + name); + + return (f.getPath().contains("src") && name.endsWith(".java")) || f.isDirectory(); + })); + + for (File f : fs != null ? fs : new File[0]) { + deal(f); + } + + } else { + InputStreamReader read = new InputStreamReader(new FileInputStream(file)); + BufferedReader bufferedReader = new BufferedReader(read); + String lineTxt; + + while ((lineTxt = bufferedReader.readLine()) != null) { + if (lineTxt.contains("@RequestMapping")) { + System.out.println(lineTxt); + } + } + bufferedReader.close(); + read.close(); + } + } +} \ No newline at end of file diff --git a/src/main/java/me/ehlxr/Hello.kt b/src/main/java/me/ehlxr/Hello.kt new file mode 100644 index 0000000..50532bf --- /dev/null +++ b/src/main/java/me/ehlxr/Hello.kt @@ -0,0 +1,15 @@ +package me.ehlxr + +/** + * Created by lixiangrong on 2018/8/17. + */ +fun main(args: Array) { + val strList = listOf("a", "ab", "abc","abcd","abcde","abcdef","abcdefg") + // 非常好用的流式 API filter,flat,map 等等 + strList.forEach{str-> + run { + str.length + println(str) + } + } +} diff --git a/src/main/java/me/ehlxr/ReferenceCountingGC.java b/src/main/java/me/ehlxr/ReferenceCountingGC.java new file mode 100644 index 0000000..2874043 --- /dev/null +++ b/src/main/java/me/ehlxr/ReferenceCountingGC.java @@ -0,0 +1,31 @@ +package me.ehlxr; + +/** + * @author lixiangrong + * @date 2018/8/21 + */ +public class ReferenceCountingGC { + public Object instance = null; + private static final int _1MB = 1024 * 1024; + /** + * 这个成员属性的唯一意义就是占点内存,以便在能在 GC 日志中看清楚是否有回收过 + */ + private byte[] bigSize = new byte[2 * _1MB]; + + public static void testGC() { + ReferenceCountingGC objA = new ReferenceCountingGC(); + ReferenceCountingGC objB = new ReferenceCountingGC(); + objA.instance = objB; + objB.instance = objA; + + objA = null; + objB = null; + + // 假设在这行发生 GC,objA 和 objB 是否能被回收? + System.gc(); + } + + public static void main(String[] args) { + testGC(); + } +} \ No newline at end of file diff --git a/src/main/java/me/ehlxr/Rename.java b/src/main/java/me/ehlxr/Rename.java index b426900..6e2b842 100644 --- a/src/main/java/me/ehlxr/Rename.java +++ b/src/main/java/me/ehlxr/Rename.java @@ -3,13 +3,19 @@ package me.ehlxr; import java.io.*; /** - * Created by lixiangrong on 2017/3/27. + * @author lixiangrong + * @date 2017/3/27 */ public class Rename { public static void main(String[] args) { - File dir = new File("/Users/ehlxr/Desktop/_posts/"); + File dir = new File("/Users/ehlxr/ehlxr/blog/posts"); File[] files = dir.listFiles(); + if (null == files || files.length <= 0) { + System.out.println("sources is null!"); + return; + } + int count = 0; for (File file : files) { try { String oName = file.getName(); @@ -19,31 +25,23 @@ public class Rename { String nName = date + "-" + title + ".md"; - - copyFileUsingFileStreams(file, new File("/Users/ehlxr/Desktop/posts/" + nName)); + copyFileUsingFileStreams(file, new File("/Users/ehlxr/Desktop/post/" + nName)); + count++; } catch (Exception e) { - continue; + System.out.println("exce file [ " + file.getName() + " ] error, reason: " + e.getMessage()); } } + System.out.println("complete: " + count); } private static void copyFileUsingFileStreams(File source, File dest) throws IOException { - InputStream input = null; - OutputStream output = null; - try { - input = new FileInputStream(source); - output = new FileOutputStream(dest); + try (InputStream input = new FileInputStream(source); OutputStream output = new FileOutputStream(dest)) { byte[] buf = new byte[1024]; int bytesRead; while ((bytesRead = input.read(buf)) > 0) { output.write(buf, 0, bytesRead); } - } finally { - input.close(); - output.close(); } } - - } diff --git a/src/main/java/me/ehlxr/ScheduledThreadPoolExecutorTest.java b/src/main/java/me/ehlxr/ScheduledThreadPoolExecutorTest.java new file mode 100644 index 0000000..b99f965 --- /dev/null +++ b/src/main/java/me/ehlxr/ScheduledThreadPoolExecutorTest.java @@ -0,0 +1,40 @@ +package me.ehlxr; + +import cn.enncloud.ceres.utils.NamedThreadFactory; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * @author lixiangrong + * @date 2018/8/27 + */ +public class ScheduledThreadPoolExecutorTest { + + private ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("TestTimer", true)); + private ScheduledFuture scheduledFuture; + private static CountDownLatch countDownLatch = new CountDownLatch(1); + + private void start() { + scheduledFuture = scheduledThreadPoolExecutor.scheduleAtFixedRate(() -> { + System.out.println(scheduledThreadPoolExecutor.getQueue() + " " + Thread.currentThread().getName()); + + scheduledFuture.cancel(false); + // System.out.println(scheduledThreadPoolExecutor.remove(pingCommand)); + // System.out.println(scheduledThreadPoolExecutor.getRemoveOnCancelPolicy()); + // scheduledThreadPoolExecutor.setRemoveOnCancelPolicy(true); + System.out.println(scheduledThreadPoolExecutor.getQueue() + " " + Thread.currentThread().getName()); + // System.out.println(scheduledThreadPoolExecutor.getActiveCount()); + + countDownLatch.countDown(); + }, 2, 5, TimeUnit.SECONDS); + } + + public static void main(String[] args) throws InterruptedException { + ScheduledThreadPoolExecutorTest test = new ScheduledThreadPoolExecutorTest(); + test.start(); + countDownLatch.await(); + } +} diff --git a/src/main/java/me/ehlxr/SnowflakeIdWorker.java b/src/main/java/me/ehlxr/SnowflakeIdWorker.java new file mode 100644 index 0000000..e9f3660 --- /dev/null +++ b/src/main/java/me/ehlxr/SnowflakeIdWorker.java @@ -0,0 +1,183 @@ +package me.ehlxr; + + +/** + * Twitter_Snowflake
+ * SnowFlake的结构如下(每部分用-分开):
+ * 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000
+ * SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分) + * + * @author ehlxr + */ +public class SnowflakeIdWorker { + + /** + * 开始时间截 (2015-01-01) + */ + private final long twepoch = 1420041600000L; + + /** + * 机器id所占的位数 + */ + private final long workerIdBits = 5L; + + /** + * 数据标识id所占的位数 + */ + private final long datacenterIdBits = 5L; + + /** + * 支持的最大机器id,结果是31 (这个移位算法可以很快的计算出几位二进制数所能表示的最大十进制数) + */ + private final long maxWorkerId = -1L ^ (-1L << workerIdBits); + + /** + * 支持的最大数据标识id,结果是31 + */ + private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits); + + /** + * 序列在id中占的位数 + */ + private final long sequenceBits = 12L; + + /** + * 机器ID向左移12位 + */ + private final long workerIdShift = sequenceBits; + + /** + * 数据标识id向左移17位(12+5) + */ + private final long datacenterIdShift = sequenceBits + workerIdBits; + + /** + * 时间截向左移22位(5+5+12) + */ + private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits; + + /** + * 生成序列的掩码,这里为4095 (0b111111111111=0xfff=4095) + */ + private final long sequenceMask = -1L ^ (-1L << sequenceBits); + + /** + * 工作机器ID(0~31) + */ + private long workerId; + + /** + * 数据中心ID(0~31) + */ + private long datacenterId; + + /** + * 毫秒内序列(0~4095) + */ + private long sequence = 0L; + + /** + * 上次生成ID的时间截 + */ + private long lastTimestamp = -1L; + + /** + * 构造函数 + * + * @param workerId 工作ID (0~31) + * @param datacenterId 数据中心ID (0~31) + */ + public SnowflakeIdWorker(long workerId, long datacenterId) { + if (workerId > maxWorkerId || workerId < 0) { + throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId)); + } + if (datacenterId > maxDatacenterId || datacenterId < 0) { + throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId)); + } + this.workerId = workerId; + this.datacenterId = datacenterId; + } + + /** + * 获得下一个ID (该方法是线程安全的) + * + * @return SnowflakeId + */ + public synchronized long nextId() { + long timestamp = timeGen(); + + //如果当前时间小于上一次ID生成的时间戳,说明系统时钟回退过这个时候应当抛出异常 + if (timestamp < lastTimestamp) { + throw new RuntimeException( + String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp)); + } + + //如果是同一时间生成的,则进行毫秒内序列 + if (lastTimestamp == timestamp) { + sequence = (sequence + 1) & sequenceMask; + //毫秒内序列溢出 + if (sequence == 0) { + //阻塞到下一个毫秒,获得新的时间戳 + timestamp = tilNextMillis(lastTimestamp); + } + } + //时间戳改变,毫秒内序列重置 + else { + sequence = 0L; + } + + //上次生成ID的时间截 + lastTimestamp = timestamp; + + //移位并通过或运算拼到一起组成64位的ID + return ((timestamp - twepoch) << timestampLeftShift) + | (datacenterId << datacenterIdShift) + | (workerId << workerIdShift) + | sequence; + } + + /** + * 阻塞到下一个毫秒,直到获得新的时间戳 + * + * @param lastTimestamp 上次生成ID的时间截 + * @return 当前时间戳 + */ + protected long tilNextMillis(long lastTimestamp) { + long timestamp = timeGen(); + while (timestamp <= lastTimestamp) { + timestamp = timeGen(); + } + return timestamp; + } + + /** + * 返回以毫秒为单位的当前时间 + * + * @return 当前时间(毫秒) + */ + protected long timeGen() { + return System.currentTimeMillis(); + } + + public static void main(String[] args) { + // SnowflakeIdWorker snowflakeIdWorker = new SnowflakeIdWorker(1, 2); + // System.out.println(snowflakeIdWorker.nextId()); + + // System.out.println(1<<30); + // System.out.println(1<<31); + + + // System.out.println(0xff>>>7); + // System.out.println(((short)0xff)>>>7); + // System.out.println(((byte)0xff)>>>7); + // System.out.println(((short)0xff)); + // System.out.println(((byte)0xff)); + // System.out.println((0xff)); + // + // + // System.out.println(0xff==255); + // System.out.println(0xff==255); + + System.out.println(~(-1L << 5)); + } +} diff --git a/src/main/java/me/ehlxr/dfd.java b/src/main/java/me/ehlxr/dfd.java index c8e1ad6..025ff18 100644 --- a/src/main/java/me/ehlxr/dfd.java +++ b/src/main/java/me/ehlxr/dfd.java @@ -1,16 +1,14 @@ package me.ehlxr; -import com.google.common.collect.Maps; - /** * Created by lixiangrong on 2016/12/23. */ public class dfd { public static void main(String[] args) { - var map = Maps.newHashMap(); - map.put("d",1); - System.out.println(map); + // var map = Maps.newHashMap(); + // map.put("d",1); + // System.out.println(map); } public void printCircle(int[][] matrix, int startX, int startY, int endX, int endY) { // only one column left diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties index f6a3eb5..7da5d58 100644 --- a/src/main/resources/log4j.properties +++ b/src/main/resources/log4j.properties @@ -19,9 +19,9 @@ log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%p] %-d{yyyy-MM-dd HH\:mm\:ss} [%t] [%c.%M\:%L] %m%n -log4j.appender.logFile=org.apache.log4j.RollingFileAppender -log4j.appender.logFile.File=${webapp.root}/logs/amq.log -log4j.appender.logFile.layout=org.apache.log4j.PatternLayout -log4j.appender.logFile.layout.ConversionPattern=[%p] %-d{yyyy-MM-dd HH\:mm\:ss} [%t] [%c.%M\:%L] %m%n -log4j.appender.logFile.MaxFileSize = 5MB -log4j.appender.logFile.MaxBackupIndex =3 \ No newline at end of file +#log4j.appender.logFile=org.apache.log4j.RollingFileAppender +#log4j.appender.logFile.File=${webapp.root}/logs/amq.log +#log4j.appender.logFile.layout=org.apache.log4j.PatternLayout +#log4j.appender.logFile.layout.ConversionPattern=[%p] %-d{yyyy-MM-dd HH\:mm\:ss} [%t] [%c.%M\:%L] %m%n +#log4j.appender.logFile.MaxFileSize = 5MB +#log4j.appender.logFile.MaxBackupIndex =3 \ No newline at end of file