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