站点更新:2019-01-22 15:38:12
parent
6673306bb8
commit
de16f1cf12
|
@ -12,3 +12,4 @@ target
|
||||||
/useful-code.iml
|
/useful-code.iml
|
||||||
/.idea
|
/.idea
|
||||||
/resources/debug.log
|
/resources/debug.log
|
||||||
|
java-utils.iml
|
111
java-utils.iml
111
java-utils.iml
|
@ -1,111 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
|
||||||
<component name="FacetManager">
|
|
||||||
<facet type="Spring" name="Spring">
|
|
||||||
<configuration />
|
|
||||||
</facet>
|
|
||||||
<facet type="web" name="Web">
|
|
||||||
<configuration>
|
|
||||||
<descriptors>
|
|
||||||
<deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/src/main/webapp/WEB-INF/web.xml" />
|
|
||||||
</descriptors>
|
|
||||||
<webroots>
|
|
||||||
<root url="file://$MODULE_DIR$/src/main/webapp" relative="/" />
|
|
||||||
</webroots>
|
|
||||||
</configuration>
|
|
||||||
</facet>
|
|
||||||
</component>
|
|
||||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_10">
|
|
||||||
<output url="file://$MODULE_DIR$/target/classes" />
|
|
||||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
|
||||||
<content url="file://$MODULE_DIR$">
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="inheritedJdk" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
<orderEntry type="library" name="Maven: com.jcraft:jsch:0.1.53" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk16:1.46" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: junit:junit:4.11" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-core:1.2.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.6.4" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.8.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-core:4.0.2.RELEASE" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-beans:4.0.2.RELEASE" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-context:4.0.2.RELEASE" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-web:4.0.2.RELEASE" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:4.0.2.RELEASE" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-tx:4.0.2.RELEASE" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:4.0.2.RELEASE" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:4.0.2.RELEASE" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-aop:4.0.2.RELEASE" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: aopalliance:aopalliance:1.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:4.0.2.RELEASE" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-test:4.0.2.RELEASE" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-jms:4.0.2.RELEASE" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.springframework:spring-expression:4.0.2.RELEASE" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.6" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: net.sf.json-lib:json-lib:jdk15:2.4" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.5" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: net.sf.ezmorph:ezmorph:1.0.6" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.caucho:hessian:4.0.38" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: redis.clients:jedis:2.8.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:5.1.38" level="project" />
|
|
||||||
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.servlet:servlet-api:2.5" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.2.7" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.1.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.mybatis.generator:mybatis-generator-core:1.3.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: c3p0:c3p0:0.9.1.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.4" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-frontend-jaxws:3.1.6" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: xml-resolver:xml-resolver:1.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.ow2.asm:asm:5.0.4" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-core:3.1.6" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.codehaus.woodstox:woodstox-core-asl:4.4.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.codehaus.woodstox:stax2-api:3.1.4" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.ws.xmlschema:xmlschema-core:2.2.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-bindings-soap:3.1.6" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-wsdl:3.1.6" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: wsdl4j:wsdl4j:1.6.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-databinding-jaxb:3.1.6" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-impl:2.2.11" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-core:2.2.11" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-bindings-xml:3.1.6" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-frontend-simple:3.1.6" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-ws-addr:3.1.6" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-ws-policy:3.1.6" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.neethi:neethi:3.0.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.cxf:cxf-rt-transports-http:3.1.6" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.activemq:activemq-all:5.13.3" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.apache.xbean:xbean-spring:4.5" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: commons-io:commons-io:2.5" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.powermock:powermock-module-junit4:1.7.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.powermock:powermock-module-junit4-common:1.7.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.powermock:powermock-reflect:1.7.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.powermock:powermock-core:1.7.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.javassist:javassist:3.21.0-GA" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.powermock:powermock-api-mockito2:1.7.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.powermock:powermock-api-mockito-common:1.7.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.powermock:powermock-api-support:1.7.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.mockito:mockito-core:2.8.9" level="project" />
|
|
||||||
<orderEntry type="library" scope="RUNTIME" name="Maven: net.bytebuddy:byte-buddy:1.6.14" level="project" />
|
|
||||||
<orderEntry type="library" scope="RUNTIME" name="Maven: net.bytebuddy:byte-buddy-agent:1.6.14" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.objenesis:objenesis:2.5" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.reactivex:rxjava:1.3.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: io.reactivex.rxjava2:rxjava:2.1.8" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.2" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.google.guava:guava:22.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.0.18" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.codehaus.mojo:animal-sniffer-annotations:1.14" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.jodd:jodd-props:3.6.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.jodd:jodd-core:3.6.1" level="project" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
70
pom.xml
70
pom.xml
|
@ -6,7 +6,7 @@
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
|
||||||
<name>useful-code Maven Webapp</name>
|
<name>java-utils</name>
|
||||||
<url>http://maven.apache.org</url>
|
<url>http://maven.apache.org</url>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@ -19,6 +19,7 @@
|
||||||
<file_encoding>utf-8</file_encoding>
|
<file_encoding>utf-8</file_encoding>
|
||||||
<jdk.verion>1.8</jdk.verion>
|
<jdk.verion>1.8</jdk.verion>
|
||||||
<powermock.version>1.7.1</powermock.version>
|
<powermock.version>1.7.1</powermock.version>
|
||||||
|
<kotlin.version>1.2.60</kotlin.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
@ -263,6 +264,27 @@
|
||||||
<artifactId>jodd-props</artifactId>
|
<artifactId>jodd-props</artifactId>
|
||||||
<version>3.6.1</version>
|
<version>3.6.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.ceres.did</groupId>
|
||||||
|
<artifactId>did-sdk</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.enncloud.ceres</groupId>
|
||||||
|
<artifactId>ceres</artifactId>
|
||||||
|
<version>1.1.0-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jetbrains.kotlin</groupId>
|
||||||
|
<artifactId>kotlin-stdlib-jdk8</artifactId>
|
||||||
|
<version>${kotlin.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jetbrains.kotlin</groupId>
|
||||||
|
<artifactId>kotlin-test</artifactId>
|
||||||
|
<version>${kotlin.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<finalName>java-utils</finalName>
|
<finalName>java-utils</finalName>
|
||||||
|
@ -360,6 +382,52 @@
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</pluginManagement>
|
</pluginManagement>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.jetbrains.kotlin</groupId>
|
||||||
|
<artifactId>kotlin-maven-plugin</artifactId>
|
||||||
|
<version>${kotlin.version}</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>compile</id>
|
||||||
|
<phase>compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>compile</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>test-compile</id>
|
||||||
|
<phase>test-compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>test-compile</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<jvmTarget>1.8</jvmTarget>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>compile</id>
|
||||||
|
<phase>compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>compile</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>testCompile</id>
|
||||||
|
<phase>test-compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>testCompile</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
<defaultGoal>compile</defaultGoal>
|
<defaultGoal>compile</defaultGoal>
|
||||||
</build>
|
</build>
|
||||||
</project>
|
</project>
|
||||||
|
|
Binary file not shown.
|
@ -28,8 +28,29 @@ public class CharToHex {
|
||||||
String oct = Integer.toOctalString(i);
|
String oct = Integer.toOctalString(i);
|
||||||
System.out.println(oct);
|
System.out.println(oct);
|
||||||
|
|
||||||
|
System.out.println("---------------");
|
||||||
|
System.out.println(Integer.toBinaryString(-22));
|
||||||
|
//测试 int 转 byte
|
||||||
|
int int0 = 234;
|
||||||
|
byte byte0 = intToByte(int0);
|
||||||
|
System.out.println("byte0= " + byte0);//byte0=-22
|
||||||
|
//测试 byte 转 int
|
||||||
|
int int1 = byteToInt(byte0);
|
||||||
|
System.out.println("int1= " + int1);//int1=234
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//byte 与 int 的相互转换
|
||||||
|
public static byte intToByte(int x) {
|
||||||
|
return (byte) x;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int byteToInt(byte b) {
|
||||||
|
//Java 总是把 byte 当做有符处理;我们可以通过将其和 0xFF 进行二进制与得到它的无符值
|
||||||
|
return b & 0xFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 字符对应编码的哈希值
|
* 字符对应编码的哈希值
|
||||||
*
|
*
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
package me.ehlxr;
|
||||||
|
|
||||||
|
import cn.ceres.did.client.SdkClient;
|
||||||
|
import cn.ceres.did.sdk.SdkProto;
|
||||||
|
|
||||||
|
import java.util.concurrent.CountDownLatch;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author ehlxr
|
||||||
|
*/
|
||||||
|
public class DidSdkTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
SdkClient client = new SdkClient("10.19.248.200", 30581);
|
||||||
|
// SdkClient client = new SdkClient();
|
||||||
|
client.init();
|
||||||
|
client.start();
|
||||||
|
|
||||||
|
// client.invokeOneWay(new SdkProto(), 2000);
|
||||||
|
// System.out.println(client.invokeSync(new SdkProto(), 2000).getDid());
|
||||||
|
CountDownLatch countDownLatch = new CountDownLatch(1);
|
||||||
|
client.invokeAsync(new SdkProto(), 2000, responseFuture -> {
|
||||||
|
System.out.println(responseFuture.getSdkProto().getDid());
|
||||||
|
countDownLatch.countDown();
|
||||||
|
});
|
||||||
|
countDownLatch.await();
|
||||||
|
client.shutdown();
|
||||||
|
}
|
||||||
|
}
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package me.ehlxr
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by lixiangrong on 2018/8/17.
|
||||||
|
*/
|
||||||
|
fun main(args: Array<String>) {
|
||||||
|
val strList = listOf("a", "ab", "abc","abcd","abcde","abcdef","abcdefg")
|
||||||
|
// 非常好用的流式 API filter,flat,map 等等
|
||||||
|
strList.forEach{str->
|
||||||
|
run {
|
||||||
|
str.length
|
||||||
|
println(str)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,13 +3,19 @@ package me.ehlxr;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by lixiangrong on 2017/3/27.
|
* @author lixiangrong
|
||||||
|
* @date 2017/3/27
|
||||||
*/
|
*/
|
||||||
public class Rename {
|
public class Rename {
|
||||||
public static void main(String[] args) {
|
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();
|
File[] files = dir.listFiles();
|
||||||
|
if (null == files || files.length <= 0) {
|
||||||
|
System.out.println("sources is null!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int count = 0;
|
||||||
for (File file : files) {
|
for (File file : files) {
|
||||||
try {
|
try {
|
||||||
String oName = file.getName();
|
String oName = file.getName();
|
||||||
|
@ -19,31 +25,23 @@ public class Rename {
|
||||||
|
|
||||||
String nName = date + "-" + title + ".md";
|
String nName = date + "-" + title + ".md";
|
||||||
|
|
||||||
|
copyFileUsingFileStreams(file, new File("/Users/ehlxr/Desktop/post/" + nName));
|
||||||
copyFileUsingFileStreams(file, new File("/Users/ehlxr/Desktop/posts/" + nName));
|
count++;
|
||||||
} catch (Exception e) {
|
} 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)
|
private static void copyFileUsingFileStreams(File source, File dest)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
InputStream input = null;
|
try (InputStream input = new FileInputStream(source); OutputStream output = new FileOutputStream(dest)) {
|
||||||
OutputStream output = null;
|
|
||||||
try {
|
|
||||||
input = new FileInputStream(source);
|
|
||||||
output = new FileOutputStream(dest);
|
|
||||||
byte[] buf = new byte[1024];
|
byte[] buf = new byte[1024];
|
||||||
int bytesRead;
|
int bytesRead;
|
||||||
while ((bytesRead = input.read(buf)) > 0) {
|
while ((bytesRead = input.read(buf)) > 0) {
|
||||||
output.write(buf, 0, bytesRead);
|
output.write(buf, 0, bytesRead);
|
||||||
}
|
}
|
||||||
} finally {
|
|
||||||
input.close();
|
|
||||||
output.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,183 @@
|
||||||
|
package me.ehlxr;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Twitter_Snowflake<br>
|
||||||
|
* SnowFlake的结构如下(每部分用-分开):<br>
|
||||||
|
* 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 <br>
|
||||||
|
* 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));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,16 +1,14 @@
|
||||||
package me.ehlxr;
|
package me.ehlxr;
|
||||||
|
|
||||||
import com.google.common.collect.Maps;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by lixiangrong on 2016/12/23.
|
* Created by lixiangrong on 2016/12/23.
|
||||||
*/
|
*/
|
||||||
public class dfd {
|
public class dfd {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
var map = Maps.newHashMap();
|
// var map = Maps.newHashMap();
|
||||||
map.put("d",1);
|
// map.put("d",1);
|
||||||
System.out.println(map);
|
// System.out.println(map);
|
||||||
}
|
}
|
||||||
public void printCircle(int[][] matrix, int startX, int startY, int endX, int endY) {
|
public void printCircle(int[][] matrix, int startX, int startY, int endX, int endY) {
|
||||||
// only one column left
|
// only one column left
|
||||||
|
|
|
@ -19,9 +19,9 @@ log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||||
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
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.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=org.apache.log4j.RollingFileAppender
|
||||||
log4j.appender.logFile.File=${webapp.root}/logs/amq.log
|
#log4j.appender.logFile.File=${webapp.root}/logs/amq.log
|
||||||
log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
|
#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.layout.ConversionPattern=[%p] %-d{yyyy-MM-dd HH\:mm\:ss} [%t] [%c.%M\:%L] %m%n
|
||||||
log4j.appender.logFile.MaxFileSize = 5MB
|
#log4j.appender.logFile.MaxFileSize = 5MB
|
||||||
log4j.appender.logFile.MaxBackupIndex =3
|
#log4j.appender.logFile.MaxBackupIndex =3
|
Loading…
Reference in New Issue