努力的大名
如何解决npm和cnpm无法卸载依赖的问题?
上面两个报错是没有操作权限的问题。
最后一个报错是node版本不被支持,切换到 node 18+ 再试试。
权限的问题看看你的终端是否使用的管理员权限。如果是受限域账户把npm的cache和global安装位置切换到自己有权限的目录下。
努力的大名
tomcat的线程池默认200,如果修改它,估算的依据是什么?
线程池大小=(CPU核心数×目标CPU利用率×线程等待时间与计算时间的比率)+缓冲线程数
努力的大名
如何配置MarkLine文字标签的位置,可以配置显示在线起点、终点或者线段中间?
解决方案 Solution
不同图表库的解决方案不一样,根据你给的demo,只需要将配置"markLine.label.``position" 为所需场景。
* "markLine.label.``position" 用来配置标注线的标签位置(标签相对线的相对位置)。
* 当文字标签显示在线的起点时,可配置"position" 为"'start'"
* 当文字标签显示在线的终点时,可配置"position" 为"'end'"
* 当文字标签显示在线段中间时,可配置"position" 为"'middle'"
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250101/6efec6ec2ec993f685e91acbdeb11b57.png)
代码示例 Code Example
代码参考 Code Example
const spec = {
type: 'scatter',
padding: [12, 20, 12, 12],
xField: 'x',
yField: 'y',
sizeField: 'z',
size: {
type: 'linear',
range: [20, 80]
},
axes: [
{ orient: 'bottom', type: 'linear', min: 60, max: 95 },
{ orient: 'left', type: 'linear', min: 0, max: 200 }
],
point: {
style: {
fillOpacity: 0.25,
lineWidth: 1,
stroke: '#6690F2',
fill: '#6690F2'
}
},
label: {
visible: true,
position: 'center',
overlap: {
avoidBaseMark: false
},
style: {
stroke: '#fff',
lineWidth: 1
}
},
markLine: [
{
x: 65,
label: {
visible: true,
position: 'end',
text: 'Safe fat intake 65g/day',
style: {
textAlign: 'left',
textBaseline: 'top',
fill: '#000',
dx: 10
},
labelBackground: {
visible: false
}
},
line: {
style: {
stroke: '#000',
lineDash: [0]
}
}
},
{
y: 50,
label: {
visible: true,
position: 'end',
text: 'Safe sugar intake 50g/day',
style: {
textAlign: 'right',
textBaseline: 'bottom',
fill: '#000'
},
labelBackground: {
visible: false
}
},
line: {
style: {
stroke: '#000',
lineDash: [0]
}
}
}
],
tooltip: {
mark: {
title: {
value: datum => datum.country
}
}
},
data: {
id: 'data',
values: [
{ x: 95, y: 95, z: 13.8, name: 'BE', country: 'Belgium' },
{ x: 86.5, y: 102.9, z: 14.7, name: 'DE', country: 'Germany' },
{ x: 80.8, y: 91.5, z: 15.8, name: 'FI', country: 'Finland' },
{ x: 80.4, y: 102.5, z: 12, name: 'NL', country: 'Netherlands' },
{ x: 80.3, y: 86.1, z: 11.8, name: 'SE', country: 'Sweden' },
{ x: 78.4, y: 70.1, z: 16.6, name: 'ES', country: 'Spain' },
{ x: 74.2, y: 68.5, z: 14.5, name: 'FR', country: 'France' },
{ x: 73.5, y: 83.1, z: 10, name: 'NO', country: 'Norway' },
{ x: 71, y: 93.2, z: 24.7, name: 'UK', country: 'United Kingdom' },
{ x: 69.2, y: 57.6, z: 10.4, name: 'IT', country: 'Italy' },
{ x: 68.6, y: 20, z: 16, name: 'RU', country: 'Russia' },
{ x: 65.5, y: 126.4, z: 35.3, name: 'US', country: 'United States' },
{ x: 65.4, y: 50.8, z: 28.5, name: 'HU', country: 'Hungary' },
{ x: 63.4, y: 51.8, z: 15.4, name: 'PT', country: 'Portugal' },
{ x: 64, y: 82.9, z: 31.3, name: 'NZ', country: 'New Zealand' }
]
}
};
结果展示 Results
在线效果参考:"https://codesandbox.io/s/mark-line-basic-srhwq3" (https://link.segmentfault.com/?enc=KE3bbdpqkMM8HJQlvvEWvQ%3D%3D.MlTVpEcsCJYwYDgaUjoezCOfiCweRWEG0uZ82hx9AKuTGwzBSUWcvFE6oDjO3HzF)
position: "start":
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250101/bc7186a6e16ccda440625932125e45f9.png)
position: "middle":
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250101/5fa3ea79e0b94e92d767de780e74dcc1.png)
position: "end":
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250101/5809065f452ff09d390f9e915ec201f8.png)
相关文档 Related Documentation
markLine demo:"https://www.visactor.io/vchart/demo/marker/mark-line-basic" (https://link.segmentfault.com/?enc=bSpspcsc%2BMv7Q0Ayg8kITw%3D%3D.2apbJfk7Dvt8CoN5%2Bt1B5tAOCJHSCgL405orL8Gg3jxLPtY2uDlCeg6hhzHWFGO4YEZHdJryBBrIMSEBgDuzcg%3D%3D)
markLine教程:"https://www.visactor.io/vchart/guide/tutorial_docs/Chart_Conc..." (https://link.segmentfault.com/?enc=xV5CuY%2F4BeGSUWiFnIFuHA%3D%3D.NuHTBJQUCgaYXnP3gcF1xNG9hw0FZ%2Fg%2BRVKMAci4%2B4%2BX37Cz%2FAJ50Zj2xZ%2FS25vHolB%2FUGK%2F7auykghuE4MPn7qeQQO0JJF%2F6EUw36Sih6M%3D)
相关api:"https://www.visactor.io/vchart/option/barChart#markLine.label..." (https://link.segmentfault.com/?enc=RiPiXHXEEKKoAWL%2BY6hGTg%3D%3D.02fX5GiXvKvfjXR7%2FC2Z8gd2lVUBrkj0TeMwRxAIxa5sEChuHV9OniMd%2F3B8cx0RO4BVsmD4cWUrncvanDzysWv5FeXyslyDUTXyfEMCB9U%3D)
github:"https://github.com/VisActor/VChart" (https://link.segmentfault.com/?enc=h6bvd5bYtjcFDybF9uqkiw%3D%3D.A1zfrzEq27NqXy23Vo%2ByvjjarnoVBpMb2DjDcIwayHW3VQV01D%2FOEigzSjnr8dTu)
努力的大名
Nuxt3 用 useFetch 同一个链接不同请求参数为什么返回的数据是同一个?
写一个接口文件 "list.js"
export const listApi = (data) => {
return new Promise(function (resolve) {
useFetch('http://127.0.0.1:8081/api/list', {
method: "post",
body: data
}).then(res => {
// console.log(res.data.value.data.list[0].title)
resolve(res);
})
});
}
然后再 "app.vue" 里面发两个请求,后台给的数据不同,但是打印的数据确实同一个
import {listApi} from "~/api/list";
listApi({page: 1, page_size: 5}).then(res => {
console.log(res.data.value.data.list[0].title)
});
listApi({page: 2, page_size: 5}).then(res => {
console.log(res.data.value.data.list[0].title)
});
...
如果直接在"app.vue"里面这样写,就正常,放回不同数据
useFetch('http://127.0.0.1:8081/api/list', {
method: "post",
body: {page: 1, page_size: 5}
}).then(res => {
console.log(res.data.value.data.list[0].title)
})
useFetch('http://127.0.0.1:8081/api/list', {
method: "post",
body: {page: 2, page_size: 5}
}).then(res => {
console.log(res.data.value.data.list[0].title)
})
...
这是为什么,应该怎么写?
努力的大名
python 如何倒着读取window的系统日志,evtx文件?
python读取window的日志文件(.evtx)的时候,如果是正常读会读到很久之前的日志。从第一行日志往后读的话会浪费很多时间因为用最近几天的日志,想问问各位大佬如何倒着读这个文档!
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250101/3e53fb6013c7f6dac2dd171a4ece29e8.png)
努力的大名
如何过滤出不可视字符并改为空字符?
指空字符串吗?
RegExp \s 不是指空字符串吗?
str.replace(RegExp(/\s/ig), '')
努力的大名
输入框滚动加载与搜索如何进行封装?
封装:
{{ item[labelKey] }}
import _ from "lodash";
export default {
props: {
placeholder: String,
apiFunction: {
type: Function,
required: true,
},
queryParams: Object,
valueKey: {
type: String,
default: 'id',
},
labelKey: {
type: String,
default: 'name',
},
initialCount: {
type: Number,
default: 10,
},
},
data() {
return {
selectedValue: null,
list: [],
count: this.initialCount,
page: 1,
total: 0,
};
},
watch: {
selectedValue(value) {
this.$emit('input', value);
},
queryParams: {
deep: true,
handler() {
this.getList();
},
},
},
created() {
this.getList();
},
methods: {
async getList(searchValue = "", page = 1) {
try {
const response = await this.apiFunction({
page,
rows: searchValue ? 0 : this.count,
name: searchValue,
});
this.list = searchValue ? response.data.rows : [...this.list, ...response.data.rows];
this.total = response.data.total;
} catch (error) {
console.error(error);
}
},
handleSearch: _.debounce(function (value) {
this.getList(value);
}, 500),
handlePopupScroll: _.debounce(function (e) {
const { target } = e;
const { scrollTop, scrollHeight, offsetHeight } = target;
if (this.page * this.count = scrollHeight) {
this.page += 1;
this.getList("", this.page);
}
}, 500),
},
};
努力的大名
如何将手机上微信的文件快速传递到linux平台?
windows平台,可以用豌豆荚等工具,将手机微信中的文件直接发送到电脑的桌面上去。
问题:我使用linux(具体一点debian),如何将手机上的微信中的文件快速发送到linux中?
我目前的做法是:
在手机上的微信中,通过qq邮件发送,linux上打开qq邮件接收。
有无更加快速的方法?就像windows平台一下,点击一下发送到pc就完成操作?
努力的大名
echarts横向柱形图怎么把文字显示到上面去?
"1695091440664.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241226/13f1d3ac09b52baea0379b98944e929f.png)这是要的效果,
但我怎么调都只能这样
"e7c8556dec80209977e1bd75c89e9e3.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241226/d85d885aa75ac4401851099cdb19ffd0.png)
应该去调series还是y轴
努力的大名
正则使用求教?
let str = 'sorter: "${$(...props)=>{timeSort(createTime)}$}$", ..$}$"."${$..';
str = str.replace(/\${\$([^$]+)\$\}\$/g, (...args) => args[1]);
console.log(str);
"企业微信截图_16950348641101.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241224/9079addf8aece9c7f6ca57753b060e1d.png)
努力的大名
元素在使用transform:rotate旋转后,如何获得其绝对定位?
我尝试使用了jquery中的offset(),但这得到的数据很奇怪,这个位置似乎会随着旋转而逐渐偏离元素的左上角,请问还有别的方法可以得到这个旋转元素的绝对定位吗?
很抱歉我不能给出任何例子,但我觉得这个问题描述得还算清晰,如果有需要的话,我愿意补充更多信息
编辑:我截图了屏幕以显示我遇到的问题,图中,我将右侧的圆点逆时针旋转了120度,其中红色的正方形是这个黑色长方形的offset位置,代码如下:
var left = $(line_inner).offset().left
var top = $(line_inner).offset().top
$("#pointer").offset({
left: left,
top: top,
})
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241224/d076356e42c424904d510262fcbd7eca.png)
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241224/c13d405fd36330cd597586344a188d27.png)
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241224/75934dd31822be6511915f6397aa8633.png)
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241224/de2f71ab2cf6a59aa62688587069b987.png)
我想知道如何让这个红色的正方形的位置随着黑色长方形一起改变,并始终在其左上角。当然,如果能够知道这个红色正方形的位置移动规律,并可以以此求得黑色长方形的某个固定位置,我也可以使用。
编辑2:AI的回答并没有效果,它给出的函数与JQuery提供的.offset()效果相同,返回的值仍然会受到旋转的影响。
我最后通过在这个黑色长方形外包裹一层没有实际大小的父元素解决了这个问题,这个父元素的绝对定位始终在黑色长方形的左上角,但我希望得到我的问题的答案,我认为经过那么久的发展,或许我们有一个更简单的或直观的方法解决这个问题。
努力的大名
js打印,window.print如何自定义页眉页脚?
自定义页眉:
«"https://blog.csdn.net/qq_33495944/article/details/104052809" (https://link.segmentfault.com/?enc=D08f%2F%2BNjHenFFxMtIP2OPg%3D%3D.1xY%2FDZrN99qlTIO1XRZu5ya9yVX5SnZMcXHa0j6uKHboZqqZv2%2BS5qLNDZiUxiEOxcqvq9Jed8j2rhgAyitfZg%3D%3D)»
努力的大名
vue2的computed里写reverse为什么会报错?
"Array.prototype.reverse" 会改变原数组,并且也是 Vue 的数组变异方法 之一。对于 computed
来说等于是你改变了依赖源、又触发 computed 钩子、钩子里你又改变了依赖源、再次触发 computed…… 如此死递归,直到爆栈。
下面 template 中的问题同理。
这种场景下正确的做法是先对原数组浅拷贝一份,得到新数组,然后对新数组再翻转。
努力的大名
h5如何实现EXCEL,word文件在线预览?不要下载直接看?
因公司有文档要实现在线预览。想问一下各位大佬们。h5如何实现EXCEL,word文件在线预览?不下载插件的要可以直接看。
努力的大名
Apifox接口测试报404?
我看到你apifox请求接口的时候是 "role/user/login",但是gateway上路由的配置却是"/api/role/**",问题应该是在这里。
努力的大名
excel导入功能,是否应该要求用户按照标准的模板和字段格式呢?
如果客户能使用你们提供的excel模板来填数据的话最好,在excel模板里把每一列的格式都改好限制死,这样客户输入不合法的数据时就会得到提示,上传的文件自然是符合处理规范的,对用户来说没什么感觉的,他会觉得这是很自然的引导。校验和导入的话用easy-poi的注解试试看。
努力的大名
请问大显示器如何藉由HDMI打开指定网页?
类似NUC的电脑棒,迷你电脑应该都行吧。或者机顶盒?不知道能不能装浏览器
***
配置开机启动项是不是就可以满足需求?就是开机后执行一个应用或者脚本命令。
比如,Python脚本打开指定网页
import webbrowser
# 指定要打开的网页URL
url = "https://www.example.com"
# 使用默认浏览器打开网页
webbrowser.open(url)
# 指定要使用的浏览器名称,例如Chrome或Firefox
browser_name = "chrome"
# 使用指定浏览器打开网页
webbrowser.get(browser_name).open(url)
努力的大名
「雪花算法分布式Id以及其产生的前端精度损失」问题只能在后端处理吗?
1. BigInt
2. "bignumber.js" (https://link.segmentfault.com/?enc=ivgQTGbbvBk1fh7NQbDQHQ%3D%3D.0zwMs%2BH4X3F82nGvbNtcrJqnU0mvc7rhBS5RpbmPz9xjQv87ICA2xQlAEAZb75YL)
努力的大名
请教下 element-plus中封装 datepicker,点击后没反应,是怎么回事?
我封装了element-plus中的datepicker的组件,代码如下:
defineProps(["modelValue"]);
const setTime = (seconds = 0) => {
const date = new Date();
if (seconds) {
date.setTime(date.getTime() + seconds * 1000);
return date;
}
return date;
};
const shortcuts = [
{
text: "现在",
value: setTime()
},
{
text: "1分钟后",
value: setTime(60)
}
];
const emits = defineEmits(["update:modelValue"]);
const select = (value: string) => {
console.log(value);
emits("update:modelValue", value);
};
使用组件:
现在的结果是点击后没反应,"change"事件没有触发
"1.gif" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241202/8456de6d379f21d6dc374138685f9165.png)
努力的大名
爬虫爬取到标签内容有时为空有时正常,请问怎么解决?
个人觉得可以直接试试爬接口
import requests
url = "https://liuyan.people.com.cn/v1/threads/list/df"
payload = "{\r\n \"appCode\": \"PC42ce3bfa4980a9\",\r\n \"token\": \"\",\r\n \"signature\": \"74de794b99edb6acabc1ce088697504c\",\r\n \"param\": \"{\\\"fid\\\":\\\"539\\\",\\\"showUnAnswer\\\":1,\\\"typeId\\\":5,\\\"lastItem\\\":\\\"\\\",\\\"position\\\":0,\\\"rows\\\":10,\\\"orderType\\\":2}\"\r\n}"
headers = {
'Accept': 'application/json, text/plain, */*',
'Accept-Language': 'zh-CN',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'Content-Type': 'application/json;charset=UTF-8',
'Cookie': 'wdcid=2cc467a9d1b73009; __jsluid_h=c785543073cdfb172a4615be09872320; sfr=1; __jsluid_s=52de5ba57ef501661168f96960f8d1c2; Hm_lvt_40ee6cb2aa47857d8ece9594220140f1=1698999857; language=zh-CN; deviceId=425032c4-6e87-46a8-8547-a85b050ea3c0; Hm_lpvt_40ee6cb2aa47857d8ece9594220140f1=1699000123; __jsluid_s=99d5863c7d4e9985a0ef216b715b00c1',
'Origin': 'https://liuyan.people.com.cn',
'Pragma': 'no-cache',
'Referer': 'https://liuyan.people.com.cn/threads/list?fid=539',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
'sec-ch-ua': '"Chromium";v="118", "Google Chrome";v="118", "Not=A?Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-gpc': '1',
'token': ''
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241127/128b78d9824b3ce585c8f3e9a21777c4.png)
努力的大名
会议预定记录钟表盘展示功能怎么实现?
用 "svg","path" 绘制圆弧:
"localhost_5173_.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241124/36e4267be253fdcb49bd1cbc1f0d04ab.png)
import { Fragment } from "react";
import "./assets/app.scss";
const a = (n: number) => Array.from({ length: n });
export default function App() {
const r = 190,
d = new Date(),
x = (rad: number) => 250 + Math.sin(2 * Math.PI * rad) * r,
y = (rad: number) => 250 - Math.cos(2 * Math.PI * rad) * r,
times: [[number, number?], [number, number?]][] = [
[[8], [10]],
[[10], [11, 10]],
[[14], [15, 10]],
[[17], [19]],
];
return (
{times.map((t, i) => {
const w = 25,
d = w / 2 / (2 * Math.PI * r);
let [r1, r2] = t.map(
([a, b]: [number, number?]) => a / 24 + (b ?? 0) / (60 * 24)
);
r1 += d;
r2 -= d;
return (
);
})}
{a(8).map((_, i) => (
{i * 3}
))}
{a(24).map((_, i) =>
i % 3 ? (
) : (
)
)}
{d.toLocaleTimeString(undefined, {
hour: "2-digit",
minute: "2-digit",
})}
{d.toLocaleDateString()}
);
}
#root {
svg {
background: #6a6a6a;
#main-circle {
stroke: #888888;
fill: transparent;
stroke-width: 25px;
}
.num,
#d,
#t {
fill: white;
font-family: sans-serif;
text-anchor: middle;
alignment-baseline: middle;
// translate: -50% -50%;
// font-size: 10px;
}
#t {
font-size: 40px;
}
#d {
font-size: 30px;
}
}
}
努力的大名
@vue/cli 4.5如何移除指定插件?
想去掉打包时生成的index.html和favicon.ico文件
可以build后再删掉就可以了
方案1、package.json scripts 中build命令后面增加 && rimraf ./dist/index.html && rimraf
./dist/favicon.ico
方案2、package.json scripts 中新增以下命令 "postbuild": "rimraf ./dist/index.html &&
rimraf ./dist/favicon.ico"
上述两种方法都用到了rimraf,需要安装依赖 npm i -g rimraf
努力的大名
进程是否存在上下文切换?
Java 程序在 JVM 中运行,不直接触发上下文切换。但是,底层的 JVM 实现和 Java
程序执行的操作(例如,与文件系统、网络等的交互)可能会导致操作系统层面的上下文切换。
JVM 会通过本地接口(Native Interface,JNI)调用本地代码。本地代码通常是 C 或 C++
编写,这些本地代码可能与操作系统进行交互,从而可能导致上下文切换。
努力的大名
鼠标滚动动画实现?
css属性:"scroll-timeline" (https://link.segmentfault.com/?enc=eaWIX%2BeLai8A9yCD1ZtmEg%3D%3D.cQRxHyY49BMmMyN6ikUsyD9v2RKTpl2xy6kdtj6m4kqhTno9sqDvuyv20jY%2Bf6u7UaeSAEixzv5ObLxZdCAQEPNcKhHFj9OfYTLhBU0sOfs%3D)
努力的大名
这种效果有没有合适的插件推荐呢?
这种自己写就行了吧,只要找到缩放的插件甚至可以自己写利用transform实现
努力的大名
如何禁用h5页面在UC浏览器上长按弹出菜单复制功能?
// 禁止长按复制
document.addEventListener('contextmenu', function(e) {
e.preventDefault();
});
// 禁止粘贴
document.addEventListener('paste', function(e) {
e.preventDefault();
});
努力的大名
有没有比较熟悉Vue3的, 麻烦帮忙看下这个需求怎么实现?
我把问题简化了一下. 设计一个 vue 组件, 模板如下:
const childRef = ref();
要求很简单: 无论外部向该组件的默认插槽中提供什么内容, "childRef.value" 始终指向插槽内的渲染的第一个元素实例或者为 null.
要求所有逻辑都实现在该组件内部
同样的问题我咨询过 ChatGPT4, 给出的方案是用 MutationOberserver 实现. 感觉确实能做, 但略牵强...
不知道有没有更优雅一点的解决方案?
努力的大名
everywhere 开启中间人读取的时候,如何避免被发现?
其实就是浏览器的安全措施,你现在就是想绕过这个安全措施,但是中间人这个手段已经是很常见的手段了,大家都知道原理,都有防范手段,你想绕过去,就是发现新漏洞,我觉得挺难的,我是怎么想的,经供参考
努力的大名
Java 如何生成 Excel 柱状图?
Java 如何生成 Excel 柱状图?
我想通过java代码在一个xlsx文件中生成柱状图,并且导出的时候要与Excel兼容。有什么建议吗?
努力的大名
nextjs 接口转发 跨域?
你可以直接使用中间件"next-http-proxy-middleware"
努力的大名
CSV文件转Html用Java怎么实现?
csv 其实就是用逗号分隔开来的数据,很好解析的,直接读取文件后,获得数据你直接写成html就行了
// 创建 reader
try (BufferedReader br = Files.newBufferedReader(Paths.get("users.csv"))) {
// CSV文件的分隔符
String DELIMITER = ",";
// 按行读取
String line;
while ((line = br.readLine()) != null) {
// 分割
String[] columns = line.split(DELIMITER);
// 打印行
System.out.println("User["+ String.join(", ", columns) +"]");
}
} catch (IOException ex) {
ex.printStackTrace();
}
努力的大名
怎么用java将 xlsx文件 转换成 csv 格式?
站内的文章教程:
«"https://segmentfault.com/a/1190000022000223" (https://segmentfault.com/a/1190000022000223)»
利用POI的;
«"https://www.cnblogs.com/xiaoma0529/p/7098518.html" (https://link.segmentfault.com/?enc=3EctRA9w5Eb%2BVl7xZz8a7Q%3D%3D.9L23OMBaLr6gDDcyf%2F7Sc0gdxOxd6H01xvARfP%2F1N0qyh%2FdzR%2BKs2YUzgc69XTi0u%2FjTeEjn8osq%2Bfz665XwCw%3D%3D)»
努力的大名
在vue项目里,有1个单独的页面请求另1个网址,会报错,networkError?
在vue项目里,正常的请求是通过
"this.$store.dispatch("login/Info")"
有1个单独的页面请求另1个网址
axios.get('https://www.baidu.com/1', {
headers: {
'auth''Authorization': 'Bearer ' + e.JSHToken
}
})
会一直获取错误 networkError,应该怎么解决?谢谢。
努力的大名
如何用Java把查询出的内容导出到Excel表格?
先导入POI相关的第三方jar包
org.apache.poi
poi
4.0.1
org.apache.poi
poi-ooxml
4.0.1
org.apache.commons
commons-compress
1.19
mysql
mysql-connector-java
5.1.26
com.alibaba
druid
1.0.9
向Excel写入文件
package excelTest;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 使用poi将数据写入excel文件中
*/
public class WriteExcelTest {
public static void main(String[] args) {
XSSFWorkbook xssfWorkbook = null;
FileOutputStream out = null;
try {
//创建工作簿
xssfWorkbook = new XSSFWorkbook();
//创建表
XSSFSheet xssfSheet = xssfWorkbook.createSheet("first_sheet");
//创建行,这里创建四行
XSSFRow row1 = xssfSheet.createRow(0);
XSSFRow row2 = xssfSheet.createRow(1);
XSSFRow row3 = xssfSheet.createRow(2);
XSSFRow row4 = xssfSheet.createRow(3);
//为第一行创建单元格并赋值
row1.createCell(0).setCellValue("姓名");
row1.createCell(1).setCellValue("年龄");
row1.createCell(2).setCellValue("性别");
//为第二行创建单元格并赋值
row2.createCell(0).setCellValue("张三");
row2.createCell(1).setCellValue("18");
row2.createCell(2).setCellValue("男");
//为第三行创建单元格并赋值
row3.createCell(0).setCellValue("李四");
row3.createCell(1).setCellValue("17");
row3.createCell(2).setCellValue("男");
//为第四行创建单元格并赋值
row4.createCell(0).setCellValue("黄蓉");
row4.createCell(1).setCellValue("20");
row4.createCell(2).setCellValue("女");
//创建一个输出流
out = new FileOutputStream("D:/output.xlsx");
//将创建的工作簿内容写入磁盘
xssfWorkbook.write(out);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
//关闭资源,需做非空判断
if (out != null) {
out.close();
}
if (xssfWorkbook != null) {
xssfWorkbook.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("输出成功!");
}
}
努力的大名
java 多线程的一个问题 ?
public class Demo01{
public static void main(String[] args) throws InterruptedException {
var q = new TaskQueue();
var ts = new ArrayList();
for (int i=0; i {
for (int i=0; i queue = new LinkedList();
public synchronized void addTask(String s) {
this.queue.add(s);
this.notifyAll();
}
public synchronized String getTask() throws InterruptedException {
while (queue.isEmpty()) {
this.wait();
}
return queue.remove();
}
}
教程这样说道:“内部调用了this.notifyAll()而不是this.notify(),使用notifyAll()将唤醒所有当前正在this锁等待的线程,而notify()只会唤醒其中一个(具体哪个依赖操作系统,有一定的随机性)。这是因为可能有多个线程正在getTask()方法内部的wait()中等待”
。
我有点疑惑的一句话是 “可能有多个线程正在getTask()方法内部的wait()中等待” , 比如A B C 三个线程,A线程进入了
getTask()方法 , 那么 B 和 C 方法就必须在外面等着啊 。
努力的大名
使用crypto-js时所有配置都一样,加密出来的值竟然不一样?
结论
情况一
就当前 "crypto-js" 例子而言,原因大概率是原文作者有一些额外的配置,但是没保留到教程代码中,也就是 代码脱敏
(正常来说,如果要脱敏那运行结果也不会使用他加盐之后生成的密文,但也可能懒得再运行一遍,反正盐没有暴露就问题不大)
情况二
还有一种可能性,就是题主所使用的版本和参考文章使用的 版本不一致 ,我使用最新的版本与题主的加密结果是一致的,(这种 可能性不大
,虽然不知道具体版本,但是 "CBC" 是确定性加密算法,基本不会有大变动的,21 年的文章也不算特别久远)
但是可能性不是 0 ,因为不同版本可能会对初始变量的迭代次数作调整,出于这点考虑,还是保留情况二作为参考
总得来说,能正常的加密解密就没有大问题
额外补充
当然,有部分算法也会设计成相同的输入能产生不同的输出,因为如果固定的输入就一定能保证固定的输出,那 安全性就相对降低
了,因为可以用大量的加密案例去套一个【字典】来暴力破解(这就是 "md5" 会有部分网站能解密的原因)
所以现在也有一些算法不会让某个加密文本输出一致(例如
"CTR",会有一个计数器,来确保每次加密都产生不同的结果),虽然加盐("salt")也足以解决大部分的情况,但从算法本身而言这种设计肯定是更安全的
当然,以上不适用于题主的例子,因为 "CBC" 在参数(秘钥、初始向量、加密值等)一致的情况下,是有固定输出的
努力的大名
Vue3 中有什么比较合适的轮播插件推荐?
一般UI库都有提供轮播组件的吧,组件名称是 "Carousel" 或者 "Swiper",默认都是支持自动轮播以及点击控制点跳转到指定图片的。
比如说 "Ele+" 的 "Carousel 走马灯 | Element Plus" (https://link.segmentfault.com/?enc=2zNxOFzN1zXxIETNW1r26A%3D%3D.%2F7jBQmDEartZq%2B8Crcrskr9spF9%2BPIS4dB9Zu3Ni35W5oDhJYT4lHVVNfo%2FMs%2Bzd5WD%2F9tcczcFGTdg54B7zTq5gruYD3Nd%2BPhpHAftWwhI%3D)
以及 "AntD4Vue" 的 "走马灯 Carousel - Ant Design
Vue" (https://link.segmentfault.com/?enc=qkE6qVIs%2BIu40HQKK3LvbA%3D%3D.ZQH3a65pqoQyP6dSnhpy78sDXpOoRDWe6Urjm0BSjRL49Oj7SIf%2BF85bPGBx4Gl%2B)
就看你使用的UI库是什么了,当然如果你觉得不满意,也可以直接用
"Swiper.js" (https://link.segmentfault.com/?enc=0athJVqLfuFz9q9aT1gRHQ%3D%3D.iFV0bU96RKRqQoBREwGnSUf34EtYMoH0jNPE1Utdsrw%3D)
但是我觉得没必要,UI库自带的就足够满足需求了。
努力的大名
为什么controller接受不到请求?
@RestController
@RequestMapping("/article")
public class ArticleController {
@RequestMapping(value="/createArticle",method=RequestMethod.POST)
public returnMsg createArticle(int articleid, String text){
String loginfo = articleid + " "+ text.trim();
try {
log4j.fatal(loginfo);
return new returnMsg(200,"success",new Object());
}catch(Exception e){
return new returnMsg(500,e.getMessage(),new Object());
}
}
}
@SpringBootApplication
public class ApplicationMain {
public static void main(String [] args){
SpringApplication.run(ApplicationMain.class,args);
}
}
请求是:
localhost:8888/article/createArticle?articleid=1&text=我是一篇文章
为什么收不到请求?
努力的大名
IIS6不能支持php7了吗?
IIS6不能支持php7了吗?
努力的大名
Electron中如何让主进程和渲染进程之间进行即时通信呢?
Electron中如何让主进程和渲染进程之间进行即时通信呢?
我查验到:
"electron
通信" (https://link.segmentfault.com/?enc=tWWbxZHqDHjnxnDz5eaVzg%3D%3D.NG0ZkY3zpQOfAdz1edY6J3VGn02fjwcqZjwIF6WQChlxGK8cHd0gxkXQVs%2BUADEf5Eo02SBboVqs5js2KHZvdA%3D%3D)
有4种方式:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241016/97fa7225611ec178cd9fc83f36fdaf93.png)
但是没有说过有即时通信的使用说明。
努力的大名
c++函数模板如何具体化?
我想具体化一个函数,我只有写好像不对
// 模板函数,用于给顶点赋值
template
T2* VertexAssign(T1& M) {
// 创建一个新的T2对象
T2* v = new T2;
// 获取模型的顶点、法线和纹理坐标
std::vector Vertices = M.getVertices();
std::vector NormalVector = M.getNormals();
std::vector Texture = M.getTexCoords();
// 获取模型的索引和索引数量
v->Index = M.getIndices();
v->VertexCount = M.getNumIndices();
// 获取模型中的顶点数量
int loop = M.getNumVertices();
for (int i = 0; i Vertex.push_back(Vertices[i].x);
v->Vertex.push_back(Vertices[i].y);
v->Vertex.push_back(Vertices[i].z);
// 将每个法线的x, y, z坐标赋值给NormalVector类中的数组
v->NormalVector.push_back(NormalVector[i].x);
v->NormalVector.push_back(NormalVector[i].y);
v->NormalVector.push_back(NormalVector[i].z);
// 将每个纹理坐标的s, t坐标赋值给Texture类中的数组
v->Texture.push_back(Texture[i].s);
v->Texture.push_back(Texture[i].t);
}
return v;
}
template
VertexClass* VertexAssign(ImportedModel& M) {
// 创建一个新的VertexClass对象
VertexClass* v = new VertexClass;
// 获取模型的顶点、法线和纹理坐标
std::vector Vertices = M.getVertices();
std::vector NormalVector = M.getNormals();
std::vector Texture = M.getTextureCoords();
// 获取模型中的顶点数量
int loop = M.getNumVertices();
v->VertexCount = loop;
for (int i = 0; i Vertex.push_back(Vertices[i].x);
v->Vertex.push_back(Vertices[i].y);
v->Vertex.push_back(Vertices[i].z);
// 将每个法线的x, y, z坐标赋值给NormalVector类中的数组
v->NormalVector.push_back(NormalVector[i].x);
v->NormalVector.push_back(NormalVector[i].y);
v->NormalVector.push_back(NormalVector[i].z);
// 将每个纹理坐标的s, t坐标赋值给Texture类中的数组
v->Texture.push_back(Texture[i].s);
v->Texture.push_back(Texture[i].t);
}
return v;
}
template
VertexCutClass* VertexAssign(T1& M) {
// 创建一个新的VertexCutClass对象
VertexCutClass* v = new VertexCutClass;
// 获取模型的顶点、法线和纹理坐标
std::vector Vertices = M.getVertices();
std::vector NormalVector = M.getNormals();
std::vector Texture = M.getTexCoords();
// 获取模型的索引和索引数量
v->Index = M.getIndices();
v->VertexCount = M.getNumIndices();
// 获取模型中的顶点数量
int loop = M.getNumVertices();
for (int i = 0; i Vertex.push_back(Vertices[i].x);
v->Vertex.push_back(Vertices[i].y);
v->Vertex.push_back(Vertices[i].z);
// 将每个法线的x, y, z坐标赋值给NormalVector类中的数组
v->NormalVector.push_back(NormalVector[i].x);
v->NormalVector.push_back(NormalVector[i].y);
v->NormalVector.push_back(NormalVector[i].z);
// 将每个纹理坐标的s, t坐标赋值给Texture类中的数组
v->Texture.push_back(Texture[i].s);
v->Texture.push_back(Texture[i].t);
}
return v;
}
这样写好像不对
template
VertexCutClass* VertexAssign(T1& M)
"1704790691659.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241015/cc879d3658fdf541b8ba959d349b56b2.png)
努力的大名
谷歌搜索首页里搜索框中的数据列表是在哪里写的?
我给你说一些基本流程:谷歌搜索的输入框中有一个绑定了"input"事件,每当我们输入内容的时候都会触发"input"事件,然后在事件函数中发起了一个请求,服务端接受到请求返回你输入内容模糊查询之后的结果,然后展示出来。
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241011/026a95134d47cba9240510b63723de7e.png)
请注意!!当你回车之后,此次查询的结果会缓存在浏览器中,使用的是"localStorage",输入框获取到光标的时候就会取缓存中的结果!!!
努力的大名
手机网页版如何选择技术实现方式?
app 部分页面需要手机网页版,如何实现好?
比如需要 文章页面
m.domain.com/post/10043
我考虑了三种方案:
1
我打算通过 nginx 配置,解析 request post/10043 到 src/pages/post/view.html,js
获取内容并输入结果到页面。尽量减少使用前端库。
2
采用 vue 单页应用。通过 vue router。但是我担心以后如果需要更多的页面,打包下来,加载的内容会过多,影响加载速度,毕竟是手机访问。
3
php 渲染模板。前端复杂的页面,再引入 js
这种情况,怎么设计合适呢?我觉得这三种都不太好。求大神指导。
还没尝试,只是思考了一下这三种方案。
努力的大名
龙蜥8.8(Anolis OS release 8.8)安装php-fpm失败?
没对AnolisOS做兼容测试,最好用amh安装页面列表列出支持的系统。
"https://amh.sh/install.htm" (https://link.segmentfault.com/?enc=KECVkDcv0noqWU9VvboT%2Bg%3D%3D.jqYBb6%2FQY5jOcZPg1Bv%2Fi3Kpng5nhb4KeqlrnQEakUo%3D)
努力的大名
这样写页面选中没有生效?
共{{brandaddlist.length}}项
全选
反选
{{v.key}}
全选
反选
const allclick = async () => {
await nextTick();
brandaddlist.value.forEach((v) => {
v.list.forEach((item) => {
item.select = 1;
});
});
console.log(brandaddlist.value);
}; 这样写页面选中没有生效
这样写页面选中没有生效
努力的大名
同时支持node和浏览器端的JS库如何写浏览器逻辑部分代码的测试用例?
"jest" 可以配置测试浏览器环境
module.exports = {
testEnvironment: 'jsdom'
}
"https://www.jestjs.cn/docs/configuration#testenvironment-string" (https://link.segmentfault.com/?enc=k%2BihojHbbBDo7vMfLRts%2BQ%3D%3D.KBKjMqU9OcoNcLf5ov2CklJaIFbIx3Z%2BsH5KPCzzGxNYHLuFHRcLlI9uWTYR1u%2FkNbVLPxWoHr33nyeSATvmfg%3D%3D)
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241007/597e9b09e16ecd7fd254d27c206288ec.png)
努力的大名
next.js页面中多出的怎么设置样式?
是 "#_next" 不是 "#next"。
努力的大名
Go语言中接口和实现的命名规范?
推荐一个谷歌的 "go best practices" 网站: "best-practices" (https://link.segmentfault.com/?enc=vA%2FKRWNwzsuhJPgRzGp6sg%3D%3D.iQaz1fuinCcvMKmX3zc3ubq7IIpzz8nuM2bAEPD%2BK7XPYk1OBR9lETR90nhjPWTDUlx%2FWnATQ2qCX9zdGGPy4Q%3D%3D),
希望对你有用。
努力的大名
GO切片问题:一个切片从中间删除用另外一个变量接收原切片值变化的原理是啥?
看官方对 "append"
描述,"Appending_and_copying_slices" (https://link.segmentfault.com/?enc=D2Ws4zNWggDDQLPCoFLnQQ%3D%3D.nFDGR%2FkzXdRA8CEp7A5%2BBVg%2BPY98bO%2BPpYTu4C3sV1O0go1MDG%2FlLRSbwgPgbewv40WncmpfomZI7VjX1OJIgw%3D%3D)
首先 "append" 用法:
«append(s S, x ...E) S // core type of S is []E»
里面这么说的:
«If the capacity of "s" is not large enough to fit the additional values,
append allocates a new, sufficiently large underlying array that fits both
the existing slice elements and the additional values. Otherwise, append
re-uses the underlying array.»
如果 "append" 之后的数据并没有超过 "s" 原本的容量,那么就会利用原本的 "底层数组",也就是你等于是在原切片的底层数据上对应位置进行了改动。
然后对于切片的解释: "slices-intro" (https://link.segmentfault.com/?enc=KE%2FcRmEHFN1QJLgvHcokRQ%3D%3D.pyBECQraD%2FxzLgeJNy7Xh5GPa%2BS87l8udwZaCf9vUoYwD%2BzAQvmPsA%2FtrmqjujbB)
golang中切片由三部分组成:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241006/343b2701b716f89a80cd3f00439115df.png)
所以结合 "append" 不超过原本切片对象的容量时候,在原本指针所指向的 "underlying array"
做了修改,并返回;如果超过原本切片的容量,那就会重新 "reallocate" 一个新的 "underlying array"予以返回。
将你的例子进行扩展,不改变容量的时候:
nums8 := append(nums[:4], 100)
fmt.Println("------", nums8, nums)
// ------ [1 2 3 4 100] [1 2 3 4 100 6]
就是这个道理。。。
努力的大名
这种监测某元素滚动位置的js代码如何写?
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241006/1c3b5e8da6c3606566b5497de16cf308.png)"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241006/def1212ef2c2119cd92657cc94aed118.png)"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241006/d851295c3fdf5022e8fb113da02c1d5f.png)"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241006/e8ab430a5b0a0aef12d44d649149fb0c.png)"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241006/bd446ed2d2a24fd1affb675d819f9172.png)
const paragraphs = document.querySelectorAll('div[dh]');
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
console.log('entry', `${entry.target.getAttribute('dh')}`, entry.boundingClientRect.y);
});
});
paragraphs.forEach((paragraph) => {
observer.observe(paragraph);
});
距离顶部距离,都为正数时取最小值,都为负数时取最大值,存在正负数时,取负数最大值