后台运行jar包与停止运行
将运行的 jar 错误日志信息输出到 log.file 文件中,然后(>&1)就是继续输出到标准输出(前面加的&,是为了让系统识别是标准输出),最后一个&,表示在后台运行。
nohup java -jar 包名.jar > log.file 2>&1 &[1] 669 #669表示运行的pid
相同数据整合示例
需求:多个对象,这些对象中的部分某个特定的属性相同。把所有的对象根据这个特定的属性整合成多个分组(或统计其他)
方法示例:
public void demo1(List<Integer> ids) { List<TYwglYsXlfinfo> tYwglYsXlfinfos = new ArrayList<>(); List<WlHzVO> exportList = new ArrayList<>(); if (tYwglYsXlfinfos.size() > 0) { WlHzVO wlHzVO = new WlHzVO(); BeanUtils.copyProperties(tYwglYsXlfinfos.get(0), wlHzVO); for (int i = 0; i < tYwglYsXlfinfos.size(); i++) { TYwglYsXlfinfo tYwglYsXlfinfo = ...
区段合并算法
需求:将不连续的一维数组整合为多个连续的二维数组示例:
public static void main(String[] args) { Integer[] arr = {1}; // Integer[] arr = {1, 2}; // Integer[] arr = {1, 3}; // Integer[] arr = {1, 2, 4}; // Integer[] arr = {1, 3, 4}; // Integer[] arr = {1, 2, 3}; // Integer[] arr = {1, 2, 4, 5}; // Integer[] arr = {1, 2, 4, 6, 7}; // Integer[] arr = {1, 4, 6, 7}; // Integer[] arr = {1, 2, 4, 5, 7& ...
区段过滤算法
需求:一个大的区段有小半径曲线段,复合曲线,平曲线和竖曲线各个不同数量不同长度的多个区段这些区段可能覆盖,交叉或完全不重叠
求:不与任意特殊区段有关联的多个直线段
公共方法:
public List<ImportSectionVO> filterQd(List<ImportSectionVO> filterList, List<ImportSectionVO> zxdList, String name) { ImportSectionVO zxd; ImportSectionVO filter; for (int i = 0; i < filterList.size(); i++) { filter = filterList.get(i); for (int j = zxdList.size() - 1; j >= 0; j--) { zxd = zxdList.get(j); if (filter.getEndMile ...
npm常用命令
检查前 NPM 源:npm get registry
设置镜像命令npm config set registry http://registry.npm.taobao.org/ #设置淘宝镜像npm config set registryhttps://registry.npmjs.org #设置默认镜像
初始化项目建立一个空文件夹,在命令提示符进入该文件夹 执行命令初始化npm init按照提示输入相关信息,如果是用默认值则直接回车即可。name: 项目名称name: 项目名称description: 项目描述keywords: {Array}关键词,便于用户搜索到我们的项目最后会生成 package.json 文件,这个是包的配置文件,相当于 maven 的 pom.xml我们之后也可以根据需要进行修改。如果想直接生成 package.json 文件,那么可以使用命令npm init -y
当从 git/svn 下载源码的时候,此时没有 node_modules 目录,使用此命令能根据 package.json 里的配置的依赖版本下载所有的依赖包npm install
( ...
vue组件公共模板
<template> <div></div></template><script>export default { name: 'index'}</script><style scoped></style>
二进制文件流转文件并触发下载
/** * word/doc * data就是后台返回的二进制流 * fileName就是你想要把这个流转为二进制的名称 */export function downloadDoc(data, fileName) { let blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' }) let link = document.createElement('a') link.href = window.URL.createObjectURL(blob) link.style.display = 'none' link.setAttribute('download', fileName + '.doc') link.click()}
/** * excel/xlsx * data ...
vue自定义下载功能
返回整体文件流,通过浏览器转成二进制触发下载该方式和传统的方式不同。
传统是读取服务器返回的流,这里是服务器流都已经整体返回了,然后才通过 js 转成文件触发下载
该方式只适合下载小文件(一般是小于 10M),如果文件过大,会导致浏览器占用内存过大,页面崩溃
以下载 excel 为例子
前台代码
/** * 下载数据导入模板 */export function downloadImportTemplate(url, fileName) { return request({ type: 'get', url, responseType: 'blob' }).then((res) => { const url = window.URL.createObjectURL(new Blob([res])) const link = document.createElement('a') link.style.display = 'none&# ...
vue自定义上传功能
export function importData(params) { return axios.post('/engineeringCar/importData', params, { headers: { 'Content-Type': 'multipart/form-data' } })}
<template> <div> <el-button @click="importData">导入</el-button> <input v-show="false" name="file" ref="selectFile" type="file" @change="changeFile" /> </div& ...
Date类型
两个日期之间相差的天数,日期为单位(比如相差两秒,可能就相差一天,12:23:59:59 和 13:01:00:00 就相差一天)/** * date2比date1多的天数 * @param date1 * @param date2 * @return */private static int differentDays(Date date1,Date date2) { Calendar cal1 = Calendar.getInstance(); cal1.setTime(date1); Calendar cal2 = Calendar.getInstance(); cal2.setTime(date2); int day1= cal1.get(Calendar.DAY_OF_YEAR); int day2 = cal2.get(Calendar.DAY_OF_YEAR); int year1 = cal1.get(Calendar.YEAR); int year2 = cal2.get(Calendar.YEAR); ...
局部导入css
<template> <div></div></template><script>export default { name: 'index'}</script><style scoped>@import '~@/assets/css/single_block.css';</style>
上传组件设置token
<el-upload class="uploadBtn" accept="xlsx" action="http://127.0.0.1:82/lineDic/sstjq/importData" :on-success="importData" :show-file-list="false" :limit="1" :headers="headers" :file-list="fileList"> <el-button size="small" type="primary">导入</el-button></el-upload>data(){ return{ headers: { Authorization: null }, } } methods: { s ...
get请求的url经常会过长,导致数据丢失
解决方案:采用 post 请求,来解决该问题,写一个采用 post 请求的函数即可
function sendByPost(url, ids) { var oForm = document.createElement('form') oForm.method = 'post' oForm.action = url var hasitemsids_input = document.createElement('input') hasitemsids_input.type = 'hidden' hasitemsids_input.name = 'ids' hasitemsids_input.value = ids oForm.appendChild(hasitemsids_input) document.body.appendChild(oForm) oForm.submit()}
也可以使用 formData
isNaN()
sNaN() 函数其实并不能像它的描述中所写的那样,数字值返回 false,其他返回 true。
实际上,它是判断一个值能否被 Number() 合法地转化成数字。
这中间有什么区别呢,主要提现在一些特别的情况如下:
1、数字形式的字符串。例如 “123”、”-3.14”,虽然是字符串型,但被 isNaN() 判为数,返回 false。(”12,345,678”,”1.2.3” 这些返回 true)
2、空值。null、空字符串””、空数组[],都可被 Number()合法的转为 0,于是被 isNaN 认为是数,返回 false。(undefined、空对象{}、空函数等无法转数字,返回 true)
3、布尔值。Number(true)=1,Number(false)=0,所以 isNaN 对布尔值也返回 false。
4、长度为 1 的数组。结果取决于其中元素,即:isNaN([a])=isNaN(a),可递归。例如 isNaN([[“1.5”]])=false。
5、数字特殊形式。例如”0xabc”、”2.5e+7”,这样的十六进制和科学计数法,即使是字符串也能转数字,所以也返 ...
利用本地的html文件通过ajax访问服务器
在 chrome 的快捷方式上右键属性,选中快捷方式 tab,在目标栏的最后添加以下参数,然后重启 chrome,用来测试的文件就放在下面配置的 data-dir 里
注意:每个—前面都有一个空格
注意:服务器必须开启跨域访问
--user-data-dir="C:\Users\13551\Desktop" --test-type --disable-web-security
后台接口返回的数据出现了$ref,$data.xxx的字样
分析原因:个人理解是如果后台返回了个 map,map 里面放了两个 key 值,但是这两个 key 所对应的 value 指向的是同一个目标地址,概括为两个 key 所对应的 value 是同一个,或者说一个 value 对象(值相同,地址相同)用 map 的两个 key 值存储,那么返回前台时,第二个 key 的值不会是 value 而是第一个 key 的 value 的地址。
可以简单理解为:map 里面有重复的 value,那么就会出现如标题所示的字样。
常用的区段查询表单验证
1.正整数区段查询支持全不填,全填,和单独填任意一个
html 代码
<div class="layui-input-inline"> <input type="text" id="sjtjStartMile" placeholder="开始里程(m)" autocomplete="off" class="layui-input" /></div><div class="layui-form-mid">-</div><div class="layui-input-inline"> <input type="text" id="sjtjEndMile" placeholder="结束里程(m)" autocomplete="o ...
某个dom全屏或者整体页面全屏
//如果dom没有就让整个页面全屏const full = document.querySelector('#box') || document.documentElementif (full.RequestFullScreen) { full.RequestFullScreen() //兼容Firefox} else if (full.mozRequestFullScreen) { full.mozRequestFullScreen() //兼容Chrome, Safari and Opera等} else if (full.webkitRequestFullScreen) { full.webkitRequestFullScreen() //兼容IE/Edge} else if (full.msRequestFullscreen) { full.msRequestFullscreen()}
常见的前端手写功能
1、防抖function debounce(fn, delay) { let timer return function (...args) { if (timer) { clearTimeout(timer) } timer = setTimeout(() => { fn.apply(this, args) }, delay) }}// 测试function task() { console.log('run task')}const debounceTask = debounce(task, 1000)window.addEventListener('scroll', debounceTask)
2、节流function throttle(fn, delay) { let last = 0 // 上次触发时间 return function (...args) { ...
获取时间
var getDate = function getNowFormatDate() { //获取当前时间 var date = new Date() var seperator1 = '-' var seperator2 = ':' var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1 var strDate = date.getDate() < 10 ? '0' + date.getDate() : date.getDate() var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate + ' ' + date.getHours() + seperator2 + da ...