25 changed files with 1110 additions and 172 deletions
@ -0,0 +1,30 @@ |
|||||
|
package com.ping.chuan.ahpmsdp.xxljobexecutor.jobhandler; |
||||
|
|
||||
|
import com.ping.chuan.ahpmsdp.xxljobexecutor.service.IFileHandlerService; |
||||
|
import com.xxl.job.core.handler.annotation.XxlJob; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
import java.io.IOException; |
||||
|
import java.time.LocalDateTime; |
||||
|
import java.time.ZoneId; |
||||
|
|
||||
|
/** |
||||
|
* @author: xiaowuler |
||||
|
* @createTime: 2022-04-07 10:02 |
||||
|
* @describe: 文件 任务处理类 |
||||
|
*/ |
||||
|
@Component |
||||
|
public class FileJobHandler { |
||||
|
|
||||
|
private final IFileHandlerService fileHandlerService; |
||||
|
|
||||
|
public FileJobHandler(IFileHandlerService fileHandlerService) { |
||||
|
this.fileHandlerService = fileHandlerService; |
||||
|
} |
||||
|
|
||||
|
@XxlJob("deleteOut3DayFile") |
||||
|
public void deleteOut3DayFile() throws IOException { |
||||
|
fileHandlerService.deleteFile("C:\\SaveFile\\Source", LocalDateTime.now().minusDays(3).atZone(ZoneId.of("Asia/Shanghai")).toInstant().toEpochMilli()); |
||||
|
fileHandlerService.deleteFile("C:\\SaveFile\\Target", LocalDateTime.now().minusDays(3).atZone(ZoneId.of("Asia/Shanghai")).toInstant().toEpochMilli()); |
||||
|
} |
||||
|
} |
@ -1,164 +0,0 @@ |
|||||
//package com.ping.chuan.ahpmsdp.xxljobexecutor.jobhandler;
|
|
||||
//
|
|
||||
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
||||
//import com.datastax.driver.core.Cluster;
|
|
||||
//import com.datastax.driver.core.Session;
|
|
||||
//import com.fasterxml.jackson.core.JsonProcessingException;
|
|
||||
//import com.fasterxml.jackson.core.type.TypeReference;
|
|
||||
//import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||
//import com.ping.chuan.ahpmsdp.xxljobexecutor.model.constant.FileStateConstant;
|
|
||||
//import com.ping.chuan.ahpmsdp.xxljobexecutor.model.constant.TimeConstant;
|
|
||||
//import com.ping.chuan.ahpmsdp.xxljobexecutor.model.dao.BaseInfo;
|
|
||||
//import com.ping.chuan.ahpmsdp.xxljobexecutor.model.dao.HandlerDetail;
|
|
||||
//import com.ping.chuan.ahpmsdp.xxljobexecutor.model.domain.ApplicationCommon;
|
|
||||
//import com.ping.chuan.ahpmsdp.xxljobexecutor.model.domain.Grb2Reader;
|
|
||||
//import com.ping.chuan.ahpmsdp.xxljobexecutor.model.vo.ParamInfo;
|
|
||||
//import com.ping.chuan.ahpmsdp.xxljobexecutor.model.vo.TianQingFileVO;
|
|
||||
//import com.ping.chuan.ahpmsdp.xxljobexecutor.model.vo.TianQingResponse;
|
|
||||
//import com.ping.chuan.ahpmsdp.xxljobexecutor.service.ITianQingSCMOCDataService;
|
|
||||
//import com.ping.chuan.ahpmsdp.xxljobexecutor.service.impl.BaseInfoService;
|
|
||||
//import com.ping.chuan.ahpmsdp.xxljobexecutor.util.FileUtil;
|
|
||||
//import com.ping.chuan.ahpmsdp.xxljobexecutor.util.WebUtil;
|
|
||||
//import com.xxl.job.core.context.XxlJobHelper;
|
|
||||
//import com.xxl.job.core.handler.annotation.XxlJob;
|
|
||||
//import org.springframework.stereotype.Component;
|
|
||||
//
|
|
||||
//import java.io.IOException;
|
|
||||
//import java.time.LocalDateTime;
|
|
||||
//import java.util.HashMap;
|
|
||||
//import java.util.List;
|
|
||||
//import java.util.Map;
|
|
||||
//import java.util.Objects;
|
|
||||
//
|
|
||||
///**
|
|
||||
// * @author xiaowuler
|
|
||||
// * 模式数据处理
|
|
||||
// */
|
|
||||
//@Component
|
|
||||
//public class TianQingSCMOCJobHandler {
|
|
||||
//
|
|
||||
// private final ObjectMapper objectMapper = new ObjectMapper();
|
|
||||
// private Map<String, TianQingResponse<List<TianQingFileVO>>> results = new HashMap<>();
|
|
||||
//
|
|
||||
// private final ApplicationCommon applicationCommon;
|
|
||||
// private final BaseInfoService baseInfoService;
|
|
||||
// private final ITianQingSCMOCDataService tianQingSCMOCDataService;
|
|
||||
//
|
|
||||
// public TianQingSCMOCJobHandler(ApplicationCommon applicationCommon, BaseInfoService baseInfoService, ITianQingSCMOCDataService tianQingSCMOCDataService){
|
|
||||
// this.applicationCommon = applicationCommon;
|
|
||||
// this.baseInfoService = baseInfoService;
|
|
||||
// this.tianQingSCMOCDataService = tianQingSCMOCDataService;
|
|
||||
// }
|
|
||||
//
|
|
||||
// @XxlJob("readSCMOC")
|
|
||||
// public void readSCMOC() throws Exception {
|
|
||||
// XxlJobHelper.log("read SCMOC job handler start");
|
|
||||
// String param = XxlJobHelper.getJobParam();
|
|
||||
// ParamInfo paramInfo = objectMapper.readValue(param, ParamInfo.class);
|
|
||||
// Map<String, Object> params = applicationCommon.prepareParams("scmoc");
|
|
||||
// LocalDateTime startTime = LocalDateTime.now().minusHours(8).minusHours(paramInfo.getTimeLength());
|
|
||||
// LocalDateTime endTime = LocalDateTime.now().minusHours(8);
|
|
||||
//
|
|
||||
// TianQingResponse<List<TianQingFileVO>> tianQingResponse = request(String.format("[%s,%s]", startTime.format(TimeConstant.YYYYMMDDHHMM00), endTime.format(TimeConstant.YYYYMMDDHHMM00)), params);
|
|
||||
// if (Objects.isNull(tianQingResponse)){
|
|
||||
// return;
|
|
||||
// }
|
|
||||
//
|
|
||||
// Map<String, Boolean> results = download(tianQingResponse.getDs(), paramInfo.getElementCode());
|
|
||||
// List<BaseInfo> baseInfos = baseInfoService.list(new QueryWrapper<BaseInfo>().ge("file_time", startTime).le("file_time", endTime).eq("mode_code", "SCMOC").eq("element_code", paramInfo.getBaseName()).eq("state", FileStateConstant.SUCCESS));
|
|
||||
// convertFile(results, paramInfo.getVariable(), baseInfos, paramInfo.isWind());
|
|
||||
//
|
|
||||
// XxlJobHelper.log("read SCMOC job end");
|
|
||||
// }
|
|
||||
//
|
|
||||
// public TianQingResponse<List<TianQingFileVO>> request(String timeRang, Map<String, Object> params) throws JsonProcessingException {
|
|
||||
// synchronized (this){
|
|
||||
// if (results.containsKey(timeRang)){
|
|
||||
// return results.get(timeRang);
|
|
||||
// }
|
|
||||
//
|
|
||||
// results.clear();
|
|
||||
// params.put("timeRange", timeRang);
|
|
||||
// int index = 0;
|
|
||||
// while (index < 3){
|
|
||||
// String result = WebUtil.get(applicationCommon.getUrl(), params);
|
|
||||
// TianQingResponse<List<TianQingFileVO>> tianQingResponse = objectMapper.readValue(result, new TypeReference<>() {});
|
|
||||
// if (tianQingResponse.getReturnCode() == 0){
|
|
||||
// results.put(timeRang, tianQingResponse);
|
|
||||
// return tianQingResponse;
|
|
||||
// }
|
|
||||
//
|
|
||||
// index++;
|
|
||||
// }
|
|
||||
//
|
|
||||
// return null;
|
|
||||
// }
|
|
||||
// }
|
|
||||
//
|
|
||||
// private void convertFile(Map<String, Boolean> results, String variable, List<BaseInfo> baseInfos, boolean isWind) throws IOException {
|
|
||||
// for(Map.Entry<String, Boolean> entry : results.entrySet()){
|
|
||||
// String filepath = entry.getKey();
|
|
||||
// boolean result = entry.getValue();
|
|
||||
// if (!result){
|
|
||||
// continue;
|
|
||||
// }
|
|
||||
//
|
|
||||
// if (baseInfos.stream().filter(b -> b.getSourceFilePath().equals(filepath)).count() > 0){
|
|
||||
// continue;
|
|
||||
// }
|
|
||||
//
|
|
||||
// BaseInfo baseInfo = Grb2Reader.readCLDASInfo(filepath);
|
|
||||
// if (isWind) {
|
|
||||
// tianQingSCMOCDataService.readWindElement(baseInfo);
|
|
||||
// } else {
|
|
||||
// tianQingSCMOCDataService.readRoutineElement(baseInfo, variable);
|
|
||||
// }
|
|
||||
// }
|
|
||||
// }
|
|
||||
//
|
|
||||
// private Map<String, Boolean> download(List<TianQingFileVO> tianQingFileVOs, String elementCode){
|
|
||||
// Map<String, Boolean> results = new HashMap<>(tianQingFileVOs.size());
|
|
||||
// for(TianQingFileVO tianQingFileVO: tianQingFileVOs){
|
|
||||
// if (!tianQingFileVO.getFileName().contains(String.format("-%s-", elementCode))){
|
|
||||
// continue;
|
|
||||
// }
|
|
||||
//
|
|
||||
// String saveFilepath = String.format("%s\\%s", "C:\\SaveFile\\Source", tianQingFileVO.getFileName());
|
|
||||
// boolean result = FileUtil.downloadByNetwork(tianQingFileVO.getFileUrl(), saveFilepath);
|
|
||||
// results.put(saveFilepath, result);
|
|
||||
// XxlJobHelper.log("save file: [{}], result: {}", saveFilepath, result);
|
|
||||
// }
|
|
||||
// return results;
|
|
||||
// }
|
|
||||
//
|
|
||||
//
|
|
||||
// @XxlJob("insertNoSql")
|
|
||||
// public void insertHandlerDetailToNoSql(){
|
|
||||
// Cluster cluster = null;
|
|
||||
// Session session = null;
|
|
||||
// HandlerDetail handlerDetail = new HandlerDetail();
|
|
||||
// handlerDetail.setWriteTime(LocalDateTime.now());
|
|
||||
// handlerDetail.setTargetFilePath("xxxxxxxxxxxxx");
|
|
||||
// handlerDetail.setTimeEffect(1);
|
|
||||
// handlerDetail.setState(1);
|
|
||||
// handlerDetail.setForecastTime(LocalDateTime.now());
|
|
||||
// handlerDetail.setResult("5555444");
|
|
||||
//
|
|
||||
// try {
|
|
||||
// cluster = Cluster.builder().addContactPoints("199.1.1.81").withCredentials("ahgfzx","ahgfzx@2020").build();
|
|
||||
// session = cluster.connect();
|
|
||||
//
|
|
||||
// String createKeySpaceCQL = "create keyspace if not exists keyspace with replication = {'class':'SimpleStrategy', 'replication_factor':1}";
|
|
||||
// session.execute(createKeySpaceCQL);
|
|
||||
//
|
|
||||
// String createTableCQL = "create table if not exists keyspace.HandlerDetail(targetFilePath varchar primary key, forecastTime datetime, timeEffect int, writeTime datetime, state int, result varchar)";
|
|
||||
// session.execute(createTableCQL);
|
|
||||
//
|
|
||||
// }catch (Exception e) {
|
|
||||
// e.printStackTrace();
|
|
||||
// } finally {
|
|
||||
// cluster.close();
|
|
||||
// session.close();
|
|
||||
// }
|
|
||||
// }
|
|
||||
//}
|
|
@ -0,0 +1,12 @@ |
|||||
|
package com.ping.chuan.ahpmsdp.xxljobexecutor.service; |
||||
|
|
||||
|
import java.time.LocalDateTime; |
||||
|
|
||||
|
/** |
||||
|
* @author: xiaowuler |
||||
|
* @createTime: 2022-04-07 10:08 |
||||
|
* @describe: 文件 处理 接口 |
||||
|
*/ |
||||
|
public interface IFileHandlerService { |
||||
|
void deleteFile(String filePath, long milliseconds); |
||||
|
} |
@ -0,0 +1,34 @@ |
|||||
|
package com.ping.chuan.ahpmsdp.xxljobexecutor.service.impl; |
||||
|
|
||||
|
import com.ping.chuan.ahpmsdp.xxljobexecutor.service.IFileHandlerService; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
import java.io.File; |
||||
|
import java.time.LocalDateTime; |
||||
|
|
||||
|
/** |
||||
|
* @author: xiaowuler |
||||
|
* @createTime: 2022-04-07 10:09 |
||||
|
* @describe: 文件 处理 服务 |
||||
|
*/ |
||||
|
@Component |
||||
|
public class FileHandlerService implements IFileHandlerService { |
||||
|
@Override |
||||
|
public void deleteFile(String filePath, long milliseconds) { |
||||
|
File file = new File(filePath); |
||||
|
if (file.isFile()) { |
||||
|
if (milliseconds > file.lastModified()) { |
||||
|
file.delete(); |
||||
|
} |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
for (File targetFile : file.listFiles()) { |
||||
|
deleteFile(targetFile.getAbsolutePath(), milliseconds); |
||||
|
} |
||||
|
|
||||
|
if (file.listFiles().length == 0) { |
||||
|
file.delete(); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,33 @@ |
|||||
|
HELP.md |
||||
|
target/ |
||||
|
!.mvn/wrapper/maven-wrapper.jar |
||||
|
!**/src/main/**/target/ |
||||
|
!**/src/test/**/target/ |
||||
|
|
||||
|
### STS ### |
||||
|
.apt_generated |
||||
|
.classpath |
||||
|
.factorypath |
||||
|
.project |
||||
|
.settings |
||||
|
.springBeans |
||||
|
.sts4-cache |
||||
|
|
||||
|
### IntelliJ IDEA ### |
||||
|
.idea |
||||
|
*.iws |
||||
|
*.iml |
||||
|
*.ipr |
||||
|
|
||||
|
### NetBeans ### |
||||
|
/nbproject/private/ |
||||
|
/nbbuild/ |
||||
|
/dist/ |
||||
|
/nbdist/ |
||||
|
/.nb-gradle/ |
||||
|
build/ |
||||
|
!**/src/main/**/build/ |
||||
|
!**/src/test/**/build/ |
||||
|
|
||||
|
### VS Code ### |
||||
|
.vscode/ |
Binary file not shown.
@ -0,0 +1,2 @@ |
|||||
|
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip |
||||
|
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar |
@ -0,0 +1,316 @@ |
|||||
|
#!/bin/sh |
||||
|
# ---------------------------------------------------------------------------- |
||||
|
# Licensed to the Apache Software Foundation (ASF) under one |
||||
|
# or more contributor license agreements. See the NOTICE file |
||||
|
# distributed with this work for additional information |
||||
|
# regarding copyright ownership. The ASF licenses this file |
||||
|
# to you under the Apache License, Version 2.0 (the |
||||
|
# "License"); you may not use this file except in compliance |
||||
|
# with the License. You may obtain a copy of the License at |
||||
|
# |
||||
|
# https://www.apache.org/licenses/LICENSE-2.0 |
||||
|
# |
||||
|
# Unless required by applicable law or agreed to in writing, |
||||
|
# software distributed under the License is distributed on an |
||||
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
||||
|
# KIND, either express or implied. See the License for the |
||||
|
# specific language governing permissions and limitations |
||||
|
# under the License. |
||||
|
# ---------------------------------------------------------------------------- |
||||
|
|
||||
|
# ---------------------------------------------------------------------------- |
||||
|
# Maven Start Up Batch script |
||||
|
# |
||||
|
# Required ENV vars: |
||||
|
# ------------------ |
||||
|
# JAVA_HOME - location of a JDK home dir |
||||
|
# |
||||
|
# Optional ENV vars |
||||
|
# ----------------- |
||||
|
# M2_HOME - location of maven2's installed home dir |
||||
|
# MAVEN_OPTS - parameters passed to the Java VM when running Maven |
||||
|
# e.g. to debug Maven itself, use |
||||
|
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 |
||||
|
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files |
||||
|
# ---------------------------------------------------------------------------- |
||||
|
|
||||
|
if [ -z "$MAVEN_SKIP_RC" ] ; then |
||||
|
|
||||
|
if [ -f /usr/local/etc/mavenrc ] ; then |
||||
|
. /usr/local/etc/mavenrc |
||||
|
fi |
||||
|
|
||||
|
if [ -f /etc/mavenrc ] ; then |
||||
|
. /etc/mavenrc |
||||
|
fi |
||||
|
|
||||
|
if [ -f "$HOME/.mavenrc" ] ; then |
||||
|
. "$HOME/.mavenrc" |
||||
|
fi |
||||
|
|
||||
|
fi |
||||
|
|
||||
|
# OS specific support. $var _must_ be set to either true or false. |
||||
|
cygwin=false; |
||||
|
darwin=false; |
||||
|
mingw=false |
||||
|
case "`uname`" in |
||||
|
CYGWIN*) cygwin=true ;; |
||||
|
MINGW*) mingw=true;; |
||||
|
Darwin*) darwin=true |
||||
|
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home |
||||
|
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html |
||||
|
if [ -z "$JAVA_HOME" ]; then |
||||
|
if [ -x "/usr/libexec/java_home" ]; then |
||||
|
export JAVA_HOME="`/usr/libexec/java_home`" |
||||
|
else |
||||
|
export JAVA_HOME="/Library/Java/Home" |
||||
|
fi |
||||
|
fi |
||||
|
;; |
||||
|
esac |
||||
|
|
||||
|
if [ -z "$JAVA_HOME" ] ; then |
||||
|
if [ -r /etc/gentoo-release ] ; then |
||||
|
JAVA_HOME=`java-config --jre-home` |
||||
|
fi |
||||
|
fi |
||||
|
|
||||
|
if [ -z "$M2_HOME" ] ; then |
||||
|
## resolve links - $0 may be a link to maven's home |
||||
|
PRG="$0" |
||||
|
|
||||
|
# need this for relative symlinks |
||||
|
while [ -h "$PRG" ] ; do |
||||
|
ls=`ls -ld "$PRG"` |
||||
|
link=`expr "$ls" : '.*-> \(.*\)$'` |
||||
|
if expr "$link" : '/.*' > /dev/null; then |
||||
|
PRG="$link" |
||||
|
else |
||||
|
PRG="`dirname "$PRG"`/$link" |
||||
|
fi |
||||
|
done |
||||
|
|
||||
|
saveddir=`pwd` |
||||
|
|
||||
|
M2_HOME=`dirname "$PRG"`/.. |
||||
|
|
||||
|
# make it fully qualified |
||||
|
M2_HOME=`cd "$M2_HOME" && pwd` |
||||
|
|
||||
|
cd "$saveddir" |
||||
|
# echo Using m2 at $M2_HOME |
||||
|
fi |
||||
|
|
||||
|
# For Cygwin, ensure paths are in UNIX format before anything is touched |
||||
|
if $cygwin ; then |
||||
|
[ -n "$M2_HOME" ] && |
||||
|
M2_HOME=`cygpath --unix "$M2_HOME"` |
||||
|
[ -n "$JAVA_HOME" ] && |
||||
|
JAVA_HOME=`cygpath --unix "$JAVA_HOME"` |
||||
|
[ -n "$CLASSPATH" ] && |
||||
|
CLASSPATH=`cygpath --path --unix "$CLASSPATH"` |
||||
|
fi |
||||
|
|
||||
|
# For Mingw, ensure paths are in UNIX format before anything is touched |
||||
|
if $mingw ; then |
||||
|
[ -n "$M2_HOME" ] && |
||||
|
M2_HOME="`(cd "$M2_HOME"; pwd)`" |
||||
|
[ -n "$JAVA_HOME" ] && |
||||
|
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" |
||||
|
fi |
||||
|
|
||||
|
if [ -z "$JAVA_HOME" ]; then |
||||
|
javaExecutable="`which javac`" |
||||
|
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then |
||||
|
# readlink(1) is not available as standard on Solaris 10. |
||||
|
readLink=`which readlink` |
||||
|
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then |
||||
|
if $darwin ; then |
||||
|
javaHome="`dirname \"$javaExecutable\"`" |
||||
|
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" |
||||
|
else |
||||
|
javaExecutable="`readlink -f \"$javaExecutable\"`" |
||||
|
fi |
||||
|
javaHome="`dirname \"$javaExecutable\"`" |
||||
|
javaHome=`expr "$javaHome" : '\(.*\)/bin'` |
||||
|
JAVA_HOME="$javaHome" |
||||
|
export JAVA_HOME |
||||
|
fi |
||||
|
fi |
||||
|
fi |
||||
|
|
||||
|
if [ -z "$JAVACMD" ] ; then |
||||
|
if [ -n "$JAVA_HOME" ] ; then |
||||
|
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then |
||||
|
# IBM's JDK on AIX uses strange locations for the executables |
||||
|
JAVACMD="$JAVA_HOME/jre/sh/java" |
||||
|
else |
||||
|
JAVACMD="$JAVA_HOME/bin/java" |
||||
|
fi |
||||
|
else |
||||
|
JAVACMD="`\\unset -f command; \\command -v java`" |
||||
|
fi |
||||
|
fi |
||||
|
|
||||
|
if [ ! -x "$JAVACMD" ] ; then |
||||
|
echo "Error: JAVA_HOME is not defined correctly." >&2 |
||||
|
echo " We cannot execute $JAVACMD" >&2 |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
if [ -z "$JAVA_HOME" ] ; then |
||||
|
echo "Warning: JAVA_HOME environment variable is not set." |
||||
|
fi |
||||
|
|
||||
|
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher |
||||
|
|
||||
|
# traverses directory structure from process work directory to filesystem root |
||||
|
# first directory with .mvn subdirectory is considered project base directory |
||||
|
find_maven_basedir() { |
||||
|
|
||||
|
if [ -z "$1" ] |
||||
|
then |
||||
|
echo "Path not specified to find_maven_basedir" |
||||
|
return 1 |
||||
|
fi |
||||
|
|
||||
|
basedir="$1" |
||||
|
wdir="$1" |
||||
|
while [ "$wdir" != '/' ] ; do |
||||
|
if [ -d "$wdir"/.mvn ] ; then |
||||
|
basedir=$wdir |
||||
|
break |
||||
|
fi |
||||
|
# workaround for JBEAP-8937 (on Solaris 10/Sparc) |
||||
|
if [ -d "${wdir}" ]; then |
||||
|
wdir=`cd "$wdir/.."; pwd` |
||||
|
fi |
||||
|
# end of workaround |
||||
|
done |
||||
|
echo "${basedir}" |
||||
|
} |
||||
|
|
||||
|
# concatenates all lines of a file |
||||
|
concat_lines() { |
||||
|
if [ -f "$1" ]; then |
||||
|
echo "$(tr -s '\n' ' ' < "$1")" |
||||
|
fi |
||||
|
} |
||||
|
|
||||
|
BASE_DIR=`find_maven_basedir "$(pwd)"` |
||||
|
if [ -z "$BASE_DIR" ]; then |
||||
|
exit 1; |
||||
|
fi |
||||
|
|
||||
|
########################################################################################## |
||||
|
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central |
||||
|
# This allows using the maven wrapper in projects that prohibit checking in binary data. |
||||
|
########################################################################################## |
||||
|
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then |
||||
|
if [ "$MVNW_VERBOSE" = true ]; then |
||||
|
echo "Found .mvn/wrapper/maven-wrapper.jar" |
||||
|
fi |
||||
|
else |
||||
|
if [ "$MVNW_VERBOSE" = true ]; then |
||||
|
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." |
||||
|
fi |
||||
|
if [ -n "$MVNW_REPOURL" ]; then |
||||
|
jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" |
||||
|
else |
||||
|
jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" |
||||
|
fi |
||||
|
while IFS="=" read key value; do |
||||
|
case "$key" in (wrapperUrl) jarUrl="$value"; break ;; |
||||
|
esac |
||||
|
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" |
||||
|
if [ "$MVNW_VERBOSE" = true ]; then |
||||
|
echo "Downloading from: $jarUrl" |
||||
|
fi |
||||
|
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" |
||||
|
if $cygwin; then |
||||
|
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` |
||||
|
fi |
||||
|
|
||||
|
if command -v wget > /dev/null; then |
||||
|
if [ "$MVNW_VERBOSE" = true ]; then |
||||
|
echo "Found wget ... using wget" |
||||
|
fi |
||||
|
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then |
||||
|
wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" |
||||
|
else |
||||
|
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" |
||||
|
fi |
||||
|
elif command -v curl > /dev/null; then |
||||
|
if [ "$MVNW_VERBOSE" = true ]; then |
||||
|
echo "Found curl ... using curl" |
||||
|
fi |
||||
|
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then |
||||
|
curl -o "$wrapperJarPath" "$jarUrl" -f |
||||
|
else |
||||
|
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f |
||||
|
fi |
||||
|
|
||||
|
else |
||||
|
if [ "$MVNW_VERBOSE" = true ]; then |
||||
|
echo "Falling back to using Java to download" |
||||
|
fi |
||||
|
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" |
||||
|
# For Cygwin, switch paths to Windows format before running javac |
||||
|
if $cygwin; then |
||||
|
javaClass=`cygpath --path --windows "$javaClass"` |
||||
|
fi |
||||
|
if [ -e "$javaClass" ]; then |
||||
|
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then |
||||
|
if [ "$MVNW_VERBOSE" = true ]; then |
||||
|
echo " - Compiling MavenWrapperDownloader.java ..." |
||||
|
fi |
||||
|
# Compiling the Java class |
||||
|
("$JAVA_HOME/bin/javac" "$javaClass") |
||||
|
fi |
||||
|
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then |
||||
|
# Running the downloader |
||||
|
if [ "$MVNW_VERBOSE" = true ]; then |
||||
|
echo " - Running MavenWrapperDownloader.java ..." |
||||
|
fi |
||||
|
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") |
||||
|
fi |
||||
|
fi |
||||
|
fi |
||||
|
fi |
||||
|
########################################################################################## |
||||
|
# End of extension |
||||
|
########################################################################################## |
||||
|
|
||||
|
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} |
||||
|
if [ "$MVNW_VERBOSE" = true ]; then |
||||
|
echo $MAVEN_PROJECTBASEDIR |
||||
|
fi |
||||
|
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" |
||||
|
|
||||
|
# For Cygwin, switch paths to Windows format before running java |
||||
|
if $cygwin; then |
||||
|
[ -n "$M2_HOME" ] && |
||||
|
M2_HOME=`cygpath --path --windows "$M2_HOME"` |
||||
|
[ -n "$JAVA_HOME" ] && |
||||
|
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` |
||||
|
[ -n "$CLASSPATH" ] && |
||||
|
CLASSPATH=`cygpath --path --windows "$CLASSPATH"` |
||||
|
[ -n "$MAVEN_PROJECTBASEDIR" ] && |
||||
|
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` |
||||
|
fi |
||||
|
|
||||
|
# Provide a "standardized" way to retrieve the CLI args that will |
||||
|
# work with both Windows and non-Windows executions. |
||||
|
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" |
||||
|
export MAVEN_CMD_LINE_ARGS |
||||
|
|
||||
|
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain |
||||
|
|
||||
|
exec "$JAVACMD" \ |
||||
|
$MAVEN_OPTS \ |
||||
|
$MAVEN_DEBUG_OPTS \ |
||||
|
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ |
||||
|
"-Dmaven.home=${M2_HOME}" \ |
||||
|
"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ |
||||
|
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" |
@ -0,0 +1,188 @@ |
|||||
|
@REM ---------------------------------------------------------------------------- |
||||
|
@REM Licensed to the Apache Software Foundation (ASF) under one |
||||
|
@REM or more contributor license agreements. See the NOTICE file |
||||
|
@REM distributed with this work for additional information |
||||
|
@REM regarding copyright ownership. The ASF licenses this file |
||||
|
@REM to you under the Apache License, Version 2.0 (the |
||||
|
@REM "License"); you may not use this file except in compliance |
||||
|
@REM with the License. You may obtain a copy of the License at |
||||
|
@REM |
||||
|
@REM https://www.apache.org/licenses/LICENSE-2.0 |
||||
|
@REM |
||||
|
@REM Unless required by applicable law or agreed to in writing, |
||||
|
@REM software distributed under the License is distributed on an |
||||
|
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
||||
|
@REM KIND, either express or implied. See the License for the |
||||
|
@REM specific language governing permissions and limitations |
||||
|
@REM under the License. |
||||
|
@REM ---------------------------------------------------------------------------- |
||||
|
|
||||
|
@REM ---------------------------------------------------------------------------- |
||||
|
@REM Maven Start Up Batch script |
||||
|
@REM |
||||
|
@REM Required ENV vars: |
||||
|
@REM JAVA_HOME - location of a JDK home dir |
||||
|
@REM |
||||
|
@REM Optional ENV vars |
||||
|
@REM M2_HOME - location of maven2's installed home dir |
||||
|
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands |
||||
|
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending |
||||
|
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven |
||||
|
@REM e.g. to debug Maven itself, use |
||||
|
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 |
||||
|
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files |
||||
|
@REM ---------------------------------------------------------------------------- |
||||
|
|
||||
|
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' |
||||
|
@echo off |
||||
|
@REM set title of command window |
||||
|
title %0 |
||||
|
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' |
||||
|
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% |
||||
|
|
||||
|
@REM set %HOME% to equivalent of $HOME |
||||
|
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") |
||||
|
|
||||
|
@REM Execute a user defined script before this one |
||||
|
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre |
||||
|
@REM check for pre script, once with legacy .bat ending and once with .cmd ending |
||||
|
if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* |
||||
|
if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* |
||||
|
:skipRcPre |
||||
|
|
||||
|
@setlocal |
||||
|
|
||||
|
set ERROR_CODE=0 |
||||
|
|
||||
|
@REM To isolate internal variables from possible post scripts, we use another setlocal |
||||
|
@setlocal |
||||
|
|
||||
|
@REM ==== START VALIDATION ==== |
||||
|
if not "%JAVA_HOME%" == "" goto OkJHome |
||||
|
|
||||
|
echo. |
||||
|
echo Error: JAVA_HOME not found in your environment. >&2 |
||||
|
echo Please set the JAVA_HOME variable in your environment to match the >&2 |
||||
|
echo location of your Java installation. >&2 |
||||
|
echo. |
||||
|
goto error |
||||
|
|
||||
|
:OkJHome |
||||
|
if exist "%JAVA_HOME%\bin\java.exe" goto init |
||||
|
|
||||
|
echo. |
||||
|
echo Error: JAVA_HOME is set to an invalid directory. >&2 |
||||
|
echo JAVA_HOME = "%JAVA_HOME%" >&2 |
||||
|
echo Please set the JAVA_HOME variable in your environment to match the >&2 |
||||
|
echo location of your Java installation. >&2 |
||||
|
echo. |
||||
|
goto error |
||||
|
|
||||
|
@REM ==== END VALIDATION ==== |
||||
|
|
||||
|
:init |
||||
|
|
||||
|
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". |
||||
|
@REM Fallback to current working directory if not found. |
||||
|
|
||||
|
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% |
||||
|
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir |
||||
|
|
||||
|
set EXEC_DIR=%CD% |
||||
|
set WDIR=%EXEC_DIR% |
||||
|
:findBaseDir |
||||
|
IF EXIST "%WDIR%"\.mvn goto baseDirFound |
||||
|
cd .. |
||||
|
IF "%WDIR%"=="%CD%" goto baseDirNotFound |
||||
|
set WDIR=%CD% |
||||
|
goto findBaseDir |
||||
|
|
||||
|
:baseDirFound |
||||
|
set MAVEN_PROJECTBASEDIR=%WDIR% |
||||
|
cd "%EXEC_DIR%" |
||||
|
goto endDetectBaseDir |
||||
|
|
||||
|
:baseDirNotFound |
||||
|
set MAVEN_PROJECTBASEDIR=%EXEC_DIR% |
||||
|
cd "%EXEC_DIR%" |
||||
|
|
||||
|
:endDetectBaseDir |
||||
|
|
||||
|
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig |
||||
|
|
||||
|
@setlocal EnableExtensions EnableDelayedExpansion |
||||
|
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a |
||||
|
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% |
||||
|
|
||||
|
:endReadAdditionalConfig |
||||
|
|
||||
|
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" |
||||
|
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" |
||||
|
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain |
||||
|
|
||||
|
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" |
||||
|
|
||||
|
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( |
||||
|
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B |
||||
|
) |
||||
|
|
||||
|
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central |
||||
|
@REM This allows using the maven wrapper in projects that prohibit checking in binary data. |
||||
|
if exist %WRAPPER_JAR% ( |
||||
|
if "%MVNW_VERBOSE%" == "true" ( |
||||
|
echo Found %WRAPPER_JAR% |
||||
|
) |
||||
|
) else ( |
||||
|
if not "%MVNW_REPOURL%" == "" ( |
||||
|
SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" |
||||
|
) |
||||
|
if "%MVNW_VERBOSE%" == "true" ( |
||||
|
echo Couldn't find %WRAPPER_JAR%, downloading it ... |
||||
|
echo Downloading from: %DOWNLOAD_URL% |
||||
|
) |
||||
|
|
||||
|
powershell -Command "&{"^ |
||||
|
"$webclient = new-object System.Net.WebClient;"^ |
||||
|
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ |
||||
|
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ |
||||
|
"}"^ |
||||
|
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ |
||||
|
"}" |
||||
|
if "%MVNW_VERBOSE%" == "true" ( |
||||
|
echo Finished downloading %WRAPPER_JAR% |
||||
|
) |
||||
|
) |
||||
|
@REM End of extension |
||||
|
|
||||
|
@REM Provide a "standardized" way to retrieve the CLI args that will |
||||
|
@REM work with both Windows and non-Windows executions. |
||||
|
set MAVEN_CMD_LINE_ARGS=%* |
||||
|
|
||||
|
%MAVEN_JAVA_EXE% ^ |
||||
|
%JVM_CONFIG_MAVEN_PROPS% ^ |
||||
|
%MAVEN_OPTS% ^ |
||||
|
%MAVEN_DEBUG_OPTS% ^ |
||||
|
-classpath %WRAPPER_JAR% ^ |
||||
|
"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ |
||||
|
%WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* |
||||
|
if ERRORLEVEL 1 goto error |
||||
|
goto end |
||||
|
|
||||
|
:error |
||||
|
set ERROR_CODE=1 |
||||
|
|
||||
|
:end |
||||
|
@endlocal & set ERROR_CODE=%ERROR_CODE% |
||||
|
|
||||
|
if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost |
||||
|
@REM check for post script, once with legacy .bat ending and once with .cmd ending |
||||
|
if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" |
||||
|
if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" |
||||
|
:skipRcPost |
||||
|
|
||||
|
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' |
||||
|
if "%MAVEN_BATCH_PAUSE%"=="on" pause |
||||
|
|
||||
|
if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% |
||||
|
|
||||
|
cmd /C exit /B %ERROR_CODE% |
@ -0,0 +1,62 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
|
<modelVersion>4.0.0</modelVersion> |
||||
|
<parent> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-starter-parent</artifactId> |
||||
|
<version>2.6.6</version> |
||||
|
<relativePath/> <!-- lookup parent from repository --> |
||||
|
</parent> |
||||
|
<groupId>com.xiaowuler</groupId> |
||||
|
<artifactId>interview-demo</artifactId> |
||||
|
<version>0.0.1-SNAPSHOT</version> |
||||
|
<name>interview-demo</name> |
||||
|
<description>interview-demo</description> |
||||
|
<properties> |
||||
|
<java.version>1.8</java.version> |
||||
|
</properties> |
||||
|
<dependencies> |
||||
|
<dependency> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-starter</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-starter-json</artifactId> |
||||
|
<version>2.5.2</version> |
||||
|
<scope>compile</scope> |
||||
|
</dependency> |
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>org.projectlombok</groupId> |
||||
|
<artifactId>lombok</artifactId> |
||||
|
<optional>true</optional> |
||||
|
</dependency> |
||||
|
<dependency> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-starter-test</artifactId> |
||||
|
<scope>test</scope> |
||||
|
</dependency> |
||||
|
|
||||
|
</dependencies> |
||||
|
|
||||
|
<build> |
||||
|
<plugins> |
||||
|
<plugin> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-maven-plugin</artifactId> |
||||
|
<configuration> |
||||
|
<excludes> |
||||
|
<exclude> |
||||
|
<groupId>org.projectlombok</groupId> |
||||
|
<artifactId>lombok</artifactId> |
||||
|
</exclude> |
||||
|
</excludes> |
||||
|
</configuration> |
||||
|
</plugin> |
||||
|
</plugins> |
||||
|
</build> |
||||
|
|
||||
|
</project> |
@ -0,0 +1,13 @@ |
|||||
|
package com.xiaowuler.interviewdemo; |
||||
|
|
||||
|
import org.springframework.boot.SpringApplication; |
||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
|
|
||||
|
@SpringBootApplication |
||||
|
public class InterviewDemoApplication { |
||||
|
|
||||
|
public static void main(String[] args) { |
||||
|
SpringApplication.run(InterviewDemoApplication.class, args); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,81 @@ |
|||||
|
package com.xiaowuler.interviewdemo.test; |
||||
|
|
||||
|
import com.fasterxml.jackson.core.JsonProcessingException; |
||||
|
import com.fasterxml.jackson.core.type.TypeReference; |
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
import com.xiaowuler.interviewdemo.test.util.CollectorsUtils; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import java.util.*; |
||||
|
import java.util.stream.Collector; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
/** |
||||
|
* @author: xiaowuler |
||||
|
* @createTime: 2022-05-06 13:44 |
||||
|
* @describe: 集合测试 |
||||
|
*/ |
||||
|
public class CollectionTest { |
||||
|
public static void main(String[] args) throws JsonProcessingException { |
||||
|
testHashMap(); |
||||
|
testMapMerger(); |
||||
|
Float[] floats = new Float[555]; |
||||
|
Arrays.fill(floats, 0.0f); |
||||
|
Float[] target = new Float[801]; |
||||
|
Arrays.fill(target, Float.NaN); |
||||
|
System.arraycopy(floats, 0, target, 6, floats.length); |
||||
|
System.out.println(Arrays.toString(target)); |
||||
|
} |
||||
|
|
||||
|
private static void testHashMap() throws JsonProcessingException { |
||||
|
|
||||
|
String text = "{0=1427159046724165633, 1=1395908122255495169, 2=实时监控数据, 3=测试1, 4=0, 5=null, 6=启用}\n" + |
||||
|
"{0=1430091584367169537, 1=1395908122255495169, 2=测试1-2, 3=测试2, 4=1427159046724165633, 5=实时监控数据, 6=启用}\n" + |
||||
|
"{0=1430419967089250306, 1=1395908122255495169, 2=主机基本信息, 3=2, 4=0, 5=null, 6=启用}\n" + |
||||
|
"{0=1437341320002326529, 1=1395908122255495169, 2=用户相关, 3=Ttest1 descrption, 4=0, 5=null, 6=启用}\n" + |
||||
|
"{0=1437598497426366466, 1=-1, 2=Ttestdir1-1, 3=test dir 1-1, 4=1437598194912190466, 5=Ttestdir1, 6=启用}"; |
||||
|
|
||||
|
String text1 = "{0=1427159046724165633, 1=1395908122255495169, 2=实时监控数据, 3=测试1, 4=0, 5=null, 6=启用}"; |
||||
|
ObjectMapper mapper = new ObjectMapper(); |
||||
|
LinkedHashMap<Object, Object> result = mapper.readValue(text1, new TypeReference<LinkedHashMap<Object, Object>>() {}); |
||||
|
System.out.println(""); |
||||
|
} |
||||
|
|
||||
|
private static void testMapMerger(){ |
||||
|
Map<String, BigDecimal> map1 = new HashMap<String, BigDecimal>(){{ |
||||
|
put("a", null); |
||||
|
put("b", new BigDecimal(2)); |
||||
|
put("c", new BigDecimal(3)); |
||||
|
}}; |
||||
|
|
||||
|
Map<String, BigDecimal> map2 = new HashMap<String, BigDecimal>(){{ |
||||
|
put("a", new BigDecimal(1)); |
||||
|
put("b", new BigDecimal(2)); |
||||
|
put("c", new BigDecimal(3)); |
||||
|
}}; |
||||
|
|
||||
|
List<Map.Entry<String, BigDecimal>> target = new ArrayList<>(map1.entrySet()); |
||||
|
target.addAll(map2.entrySet()); |
||||
|
target.addAll(target); |
||||
|
|
||||
|
Map<String, BigDecimal> result = target.stream() |
||||
|
.collect( |
||||
|
Collectors.groupingBy( |
||||
|
Map.Entry<String, BigDecimal> :: getKey, |
||||
|
Collectors.mapping(entry -> Objects.isNull( entry.getValue()) ? BigDecimal.ZERO : entry.getValue(), Collectors.reducing(BigDecimal.ZERO, BigDecimal :: add)) |
||||
|
) |
||||
|
); |
||||
|
System.out.println(result); |
||||
|
} |
||||
|
|
||||
|
private <T> T create(Class<T> clazz){ |
||||
|
try { |
||||
|
return clazz.newInstance(); |
||||
|
} catch (InstantiationException e) { |
||||
|
e.printStackTrace(); |
||||
|
} catch (IllegalAccessException e) { |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
return null; |
||||
|
} |
||||
|
} |
@ -0,0 +1,40 @@ |
|||||
|
package com.xiaowuler.interviewdemo.test; |
||||
|
|
||||
|
import java.io.PrintStream; |
||||
|
import java.util.*; |
||||
|
import java.util.concurrent.ConcurrentHashMap; |
||||
|
import java.util.concurrent.Executors; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
/** |
||||
|
* @author: xiaowuler |
||||
|
* @createTime: 2022-04-07 14:46 |
||||
|
* @describe: 集合测试 |
||||
|
*/ |
||||
|
public class ListTest { |
||||
|
public void handler(){ |
||||
|
List<String> names = Collections.synchronizedList(new ArrayList<>(2)); |
||||
|
names.add("xiaowuler"); |
||||
|
names.add("xiaowuler"); |
||||
|
names.add("xiaowuler"); |
||||
|
|
||||
|
String name = "xiaowuler"; |
||||
|
|
||||
|
Map<String, String> map = new HashMap<>(); |
||||
|
map.put(null, "xiaowuler"); |
||||
|
map.put(null, "xiaowuler11"); |
||||
|
System.out.println(""); |
||||
|
} |
||||
|
|
||||
|
public void createConcurrentHashMap(){ |
||||
|
Map<String, String> map = new ConcurrentHashMap<>(); |
||||
|
map.put(null, "xiaowuler"); |
||||
|
map.put(null, "xiaowuler11"); |
||||
|
map.putIfAbsent(null, "xiaowuler22"); |
||||
|
} |
||||
|
|
||||
|
public static void main(String[] args) { |
||||
|
ListTest listTest = new ListTest(); |
||||
|
listTest.handler(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,15 @@ |
|||||
|
package com.xiaowuler.interviewdemo.test.thread; |
||||
|
|
||||
|
import java.util.concurrent.Callable; |
||||
|
|
||||
|
/** |
||||
|
* @author: xiaowuler |
||||
|
* @createTime: 2022-04-12 09:58 |
||||
|
* @describe: 实现 callable 创建线程 |
||||
|
*/ |
||||
|
public class CallableImpl implements Callable<String> { |
||||
|
@Override |
||||
|
public String call() throws Exception { |
||||
|
return Thread.currentThread().getName(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
package com.xiaowuler.interviewdemo.test.thread; |
||||
|
|
||||
|
import java.nio.ByteBuffer; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.Arrays; |
||||
|
import java.util.Collections; |
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* @author: xiaowuler |
||||
|
* @createTime: 2022-05-05 09:58 |
||||
|
* @describe: 直接内存 测试 |
||||
|
*/ |
||||
|
public class DirectByteBufferTest { |
||||
|
public static void main(String[] args) { |
||||
|
//创建一个直接内存
|
||||
|
// ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
|
||||
|
|
||||
|
Float[] list = new Float[10]; |
||||
|
Arrays.fill(list, Float.NaN); //填充集合
|
||||
|
System.out.println(list); |
||||
|
} |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
package com.xiaowuler.interviewdemo.test.thread; |
||||
|
|
||||
|
/** |
||||
|
* @author: xiaowuler |
||||
|
* @createTime: 2022-04-12 09:56 |
||||
|
* @describe: 实现 Runnable 创建个线程 |
||||
|
*/ |
||||
|
public class RunnableImpl implements Runnable { |
||||
|
@Override |
||||
|
public void run() { |
||||
|
System.out.println("线程名称:" + Thread.currentThread().getName() + ",线程ID:" + Thread.currentThread().getId()); |
||||
|
} |
||||
|
} |
@ -0,0 +1,36 @@ |
|||||
|
package com.xiaowuler.interviewdemo.test.thread; |
||||
|
|
||||
|
import java.util.concurrent.ExecutionException; |
||||
|
import java.util.concurrent.FutureTask; |
||||
|
|
||||
|
/** |
||||
|
* @author: xiaowuler |
||||
|
* @createTime: 2022-04-12 09:53 |
||||
|
* @describe: 线程测试 |
||||
|
*/ |
||||
|
public class ThreadTest { |
||||
|
public void createThread(){ |
||||
|
new Thread(new Runnable() { |
||||
|
@Override |
||||
|
public void run() { |
||||
|
System.out.println("线程名称:"+Thread.currentThread().getName()); |
||||
|
} |
||||
|
}).start(); |
||||
|
} |
||||
|
|
||||
|
public static void main(String[] args) throws ExecutionException, InterruptedException { |
||||
|
RunnableImpl runnable = new RunnableImpl(); |
||||
|
Thread thread = new Thread(runnable); |
||||
|
thread.start(); |
||||
|
|
||||
|
ThreadTest threadTest = new ThreadTest(); |
||||
|
threadTest.createThread(); |
||||
|
|
||||
|
CallableImpl callable = new CallableImpl(); |
||||
|
FutureTask<String> futureTask = new FutureTask<>(callable); |
||||
|
futureTask.run(); |
||||
|
System.out.println(futureTask.isDone()); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,72 @@ |
|||||
|
package com.xiaowuler.interviewdemo.test.threadpool; |
||||
|
|
||||
|
import java.util.concurrent.*; |
||||
|
import java.util.concurrent.atomic.AtomicInteger; |
||||
|
|
||||
|
/** |
||||
|
* @author: xiaowuler |
||||
|
* @createTime: 2022-04-12 10:30 |
||||
|
* @describe: 线程池测试 |
||||
|
*/ |
||||
|
public class ThreadPoolTest { |
||||
|
public static void main(String[] args) { |
||||
|
//
|
||||
|
// ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
|
||||
|
// 1,
|
||||
|
// 5,
|
||||
|
// 60L,
|
||||
|
// TimeUnit.SECONDS,
|
||||
|
// new LinkedBlockingQueue<>(10),
|
||||
|
// new NamedThreadFactory("test"),
|
||||
|
// new ThreadPoolExecutor.CallerRunsPolicy()
|
||||
|
// );
|
||||
|
//
|
||||
|
// for(int index = 0; index < 50; index++){
|
||||
|
// threadPoolExecutor.execute(() -> {
|
||||
|
// System.out.println(Thread.currentThread().getName() + ": hello world");
|
||||
|
// });
|
||||
|
// }
|
||||
|
|
||||
|
retry: |
||||
|
for(int index = 0; index < 50; index++){ |
||||
|
for(int i = 0; i < 10; i++){ |
||||
|
System.out.println(i + ": " + index); |
||||
|
break retry; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
synchronized (ThreadPoolTest.class) { |
||||
|
System.out.println("hello world"); |
||||
|
} |
||||
|
|
||||
|
Runnable thread = () -> { |
||||
|
System.out.println("hello world"); |
||||
|
}; |
||||
|
thread.run(); |
||||
|
|
||||
|
System.out.println("end"); |
||||
|
} |
||||
|
|
||||
|
static class NamedThreadFactory implements ThreadFactory { |
||||
|
|
||||
|
private final AtomicInteger poolNumber = new AtomicInteger(1); |
||||
|
private final ThreadGroup group; |
||||
|
private final AtomicInteger threadNumber = new AtomicInteger(1); |
||||
|
private final String namePrefix; |
||||
|
|
||||
|
NamedThreadFactory(String name) { |
||||
|
SecurityManager s = System.getSecurityManager(); |
||||
|
group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); |
||||
|
namePrefix = name + "-" + poolNumber.getAndIncrement() + "-thread-"; |
||||
|
} |
||||
|
|
||||
|
public Thread newThread(Runnable r) { |
||||
|
Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement(), 0); |
||||
|
if (t.isDaemon()) |
||||
|
t.setDaemon(false); |
||||
|
if (t.getPriority() != Thread.NORM_PRIORITY) |
||||
|
t.setPriority(Thread.NORM_PRIORITY); |
||||
|
return t; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,95 @@ |
|||||
|
package com.xiaowuler.interviewdemo.test.util; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import java.util.Collections; |
||||
|
import java.util.Set; |
||||
|
import java.util.function.BiConsumer; |
||||
|
import java.util.function.BinaryOperator; |
||||
|
import java.util.function.Function; |
||||
|
import java.util.function.Supplier; |
||||
|
import java.util.stream.Collector; |
||||
|
|
||||
|
/** |
||||
|
* @author: xiaowuler |
||||
|
* @createTime: 2022-05-31 17:29 |
||||
|
* @describe: 集合工具类 |
||||
|
*/ |
||||
|
public class CollectorsUtils { |
||||
|
static final Set<Collector.Characteristics> CH_NOID = Collections.emptySet(); |
||||
|
|
||||
|
private CollectorsUtils() { |
||||
|
} |
||||
|
|
||||
|
@SuppressWarnings("unchecked") |
||||
|
private static <I, R> Function<I, R> castingIdentity() { |
||||
|
return i -> (R) i; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Simple implementation class for {@code Collector}. |
||||
|
* |
||||
|
* @param <T> |
||||
|
* the type of elements to be collected |
||||
|
* @param <R> |
||||
|
* the type of the result |
||||
|
*/ |
||||
|
static class CollectorImpl<T, A, R> implements Collector<T, A, R> { |
||||
|
private final Supplier<A> supplier; |
||||
|
private final BiConsumer<A, T> accumulator; |
||||
|
private final BinaryOperator<A> combiner; |
||||
|
private final Function<A, R> finisher; |
||||
|
private final Set<Characteristics> characteristics; |
||||
|
|
||||
|
CollectorImpl(Supplier<A> supplier, BiConsumer<A, T> accumulator, BinaryOperator<A> combiner, |
||||
|
Function<A, R> finisher, Set<Characteristics> characteristics) { |
||||
|
this.supplier = supplier; |
||||
|
this.accumulator = accumulator; |
||||
|
this.combiner = combiner; |
||||
|
this.finisher = finisher; |
||||
|
this.characteristics = characteristics; |
||||
|
} |
||||
|
|
||||
|
CollectorImpl(Supplier<A> supplier, BiConsumer<A, T> accumulator, BinaryOperator<A> combiner, |
||||
|
Set<Characteristics> characteristics) { |
||||
|
this(supplier, accumulator, combiner, castingIdentity(), characteristics); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public BiConsumer<A, T> accumulator() { |
||||
|
return accumulator; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public Supplier<A> supplier() { |
||||
|
return supplier; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public BinaryOperator<A> combiner() { |
||||
|
return combiner; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public Function<A, R> finisher() { |
||||
|
return finisher; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public Set<Characteristics> characteristics() { |
||||
|
return characteristics; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
public static <T> Collector<T, ?, BigDecimal> summingBigDecimal(ToBigDecimalFunction<T> mapper) { |
||||
|
return new CollectorImpl<>(() -> new BigDecimal[1], (a, t) -> { |
||||
|
if (a[0] == null) { |
||||
|
a[0] = BigDecimal.ZERO; |
||||
|
} |
||||
|
a[0] = a[0].add(mapper.applyAsBigDecimal(t)); |
||||
|
}, (a, b) -> { |
||||
|
a[0] = a[0].add(b[0]); |
||||
|
return a; |
||||
|
}, a -> a[0], CH_NOID); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,19 @@ |
|||||
|
package com.xiaowuler.interviewdemo.test.util; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
|
||||
|
/** |
||||
|
* @author: xiaowuler |
||||
|
* @createTime: 2022-05-31 17:32 |
||||
|
* @describe: bigDecimal 接口类 |
||||
|
*/ |
||||
|
@FunctionalInterface |
||||
|
public interface ToBigDecimalFunction<T> { |
||||
|
/** |
||||
|
* Applies this function to the given argument. |
||||
|
* |
||||
|
* @param value the function argument |
||||
|
* @return the function result |
||||
|
*/ |
||||
|
BigDecimal applyAsBigDecimal(T value); |
||||
|
} |
@ -0,0 +1 @@ |
|||||
|
|
@ -0,0 +1,13 @@ |
|||||
|
package com.xiaowuler.interviewdemo; |
||||
|
|
||||
|
import org.junit.jupiter.api.Test; |
||||
|
import org.springframework.boot.test.context.SpringBootTest; |
||||
|
|
||||
|
@SpringBootTest |
||||
|
class InterviewDemoApplicationTests { |
||||
|
|
||||
|
@Test |
||||
|
void contextLoads() { |
||||
|
} |
||||
|
|
||||
|
} |
Loading…
Reference in new issue