莫克先森
Vue2 源码里 patchVnode 旧节点有 text ,无新节点的情况?
Vue2.6.14 源码 core/vdom/patch.js 文件里
patchVnode 方法中,五种新旧节点比较的情况,其中一种旧节点有 text ,无新节点的情况,我无法模拟出具体的应用场景,请教下各位。
// 省去了部分代码
function patchVnode(oldVnode, vnode) {
if (isUndef(vnode.text)) {
if (isDef(oldVnode.text)) {
nodeOps.setTextContent(elm, '')
}
}
}
比如这个例子,
{{name}}
name 从有值到为空的情况,这匹配到的是
if (oldVnode.text !== vnode.text) {
nodeOps.setTextContent(elm, vnode.text)
}
莫克先森
使用lldb调试阵列时,设置的lower bound为何无效?
在 GitHub 上提了 issue:"https://github.com/llvm/llvm-project/issues/65713" (https://link.segmentfault.com/?enc=uLTUH7eH8UMSqLybEyosgA%3D%3D.%2Fm%2Fn86lSUF30e4uBASg0vmozJUxezNI8XN%2FkaSBUb0ZgBXn5u5b7G2dOsAlmrBE3sw1aUKbGSIk6DLYB7QpcRg%3D%3D)
目前 lldb 限制下想到的解决方案就是 debug 界面包一层自己的 reproducer 了。
莫克先森
如何查看一个动态链接库中的依赖的其他动态链接库是绝对地址引用还是名字引用?
ldd 列出来的始终都是绝对路径。
你误解 "linux-vdso.so" 了是“相对路径”可能是因为它开头没带着 "/" 吧。这是因为它在内核里,是个虚拟的文件(VDSO 全称就是
Virtual Dynamic Shared Object ,虚拟动态共享对象),并不在文件系统里。
***
至于怎么看这我不太了解,帮你艾特搞 C 的吧 "@fefe" (/u/fefe_5d0b30d7515e7)
莫克先森
vue实现树结构展开行?
vuehttps://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241221/85354b541dec929c9258a9dd419bea35.png
vue 有什么插件可以满足树结构表格并且点击每一行可以展开显示详细内容,或者有什么方法可以实现吗?
莫克先森
vscode ts突然没有校验了?
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241217/1be489a85dac3246eb7faf27c5ee961e.png)
1. 声明一个布尔类型的值,将它改为123不会提示报错
2. 鼠标放到pagination组件上去没有任何显示,之前可以ctrl+鼠标左键可以跳转到组件里面去了,现在所有的import都不行了,这是为啥
莫克先森
antd组件库页码怎么设置下一页和箭头一起有背景色,还有跳转xx页加字?
想实现这个效果
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241215/b0da450ed46123fc0a0e9212a411c904.png)
现在是这样的
"1696900729985.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241215/8c4feabf0ddf8e2a602771bbd65711c3.png)
怎么才能给跳至多少页变成跳转到第几页,还有移动到下一页 箭头和文字一起有背景色,现在是下一页和箭头分开有背景色
莫克先森
阿里云视频点播VOD视频加密和播放问题?
请教用过阿里云视频点播VOD功能的大神以下问题:
目前阿里云视频加密有三种方式:
1. 阿里云私有加密(IOS平台浏览器不支持播放)
2. HLS标准加密(不知道怎么做到自适应,问客服说可以使用DRM加密)
3. DRM商业加密(开发门槛高,苹果收费,播放好像有额外收费)
另:
1. 文档中说要实现自适应播放,需要使用"视频打包转码模板",但是"视频打包转码模板"又不支持HLS标准加密,HLS标准加密需要使用"普通转码模板"
2. 如果使用"普通转码模板",又无法实现多码率自适应
就没有即加密又可以自适应的方案吗?
莫克先森
vue history模式访问404问题?
我第一次用vue router
history模式,build打包输出后,放到nginx指向的目录,能访问到首页,但是从首页访问其他页面,就显示404了,有知道是什么回事的大佬请解惑一下,谢谢啦。
莫克先森
echarts 如何实现点击之后保留shadow?
在github上有一样的issue
"点击跳转" (https://link.segmentfault.com/?enc=oK%2FH5DEvzgxx1FOflQZOqQ%3D%3D.sby03wvd7MWZQSEDiVx6igsHFa%2BmueOxsA0GOp0yIe5HU5zcLNZMrjh5jnWPL0FR)
但是下面没有解决方案,issue就被关了
想问问大佬们这该如何实现?
就是这样的效果:
点击改变柱子颜色已经实现 ,但是如何保留背后的阴影 ,即使鼠标移走了阴影也不消失 ?
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241202/e9e977dd30a91cc788d875897c843af1.png)
莫克先森
nodejs往数据库插入数据的问题?
拿到了一份敏感词的json文件,想通过nodejs循环插入数据库中
但是每次都会报错,不知道是怎么回事,有大佬帮忙看看呗
connection.connect((err) => {
if (err) throw err;
console.log("Connected!", err);
// 读取JSON文件
fs.readFile("data.json", "utf8", (err, data) => {
if (err) throw err;
const jsonData = JSON.parse(data); // 将JSON字符串转换为JavaScript对象
console.log("jsonData!", jsonData);
for (let i = 1; i {
if (error) throw error;
console.log(results.insertId); // 插入操作后返回的新行ID,可用于关联其他数据或用于计数等
});
}
});
});
报错
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241127/72a4fc134c7cfb7ae15a6f469bc186e9.png)
设计的表
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241127/4dba760f470374a335c23c6bd7a0de3c.png)
莫克先森
使用vite构建vue2项目报错,为何?
"create-vue@2"的router模板文件里确实是写了ts,应该是个bug,这个文件已经两年没有修改过了
"https://github.com/vuejs/create-vue/blob/bef9f17bb8ffaff56a0439ecadef8763325afa72/template/code/router/src/views/HomeView.vue" (https://link.segmentfault.com/?enc=XeBB0rPDz2q0MWESVmOMSg%3D%3D.UZ5%2BlZ9kBTk6EQh9pU2eMIABvAEjc558s009Jb88qG8uu6JI8P%2FctD8LFXwHDJjEdu6NV6eRMlpYDDO5e1%2FHRs0wNUwXMFm3vhp1flKDYTr8MthUoZeFK3QbbNuuJsFWXllEP04NIaUSC%2FrnAiQTRR2ltM%2BUSlcfMRbnV91nYx8%3D)
莫克先森
RN中tabView组件点击tab无法切换View内容?
ReactNative 中的tabview点击tab无法切换view,
import React, { useCallback, useEffect, useMemo, useState } from 'react';
import { View, StyleSheet, Dimensions, Text } from 'react-native';
import { TabView, SceneMap, TabBar } from 'react-native-tab-view';
type Route = {
key: string;
title: string;
};
type State = {
index: number;
routes: Route[];
};
const initialTabState: State = {
index: 0,
routes: [
{ key: 'tab1', title: 'Tab 1' },
{ key: 'tab2', title: 'Tab 2' },
{ key: 'tab3', title: 'Tab 3' },
{ key: 'tab4', title: 'Tab 4' },
{ key: 'tab5', title: 'Tab 5' },
{ key: 'tab6', title: 'Tab 6' },
{ key: 'tab7', title: 'Tab 7' },
{ key: 'tab8', title: 'Tab 8' },
],
};
const FirstRoute = () => (
);
const SecondRoute = () => (
);
const ThirdRoute = () => (
);
const FourthRoute = () => (
);
const FifthRoute = () => (
);
const SixthRoute = () => (
);
const SeventhRoute = () => (
);
const EighthRoute = () => (
);
const TabScreen: React.FC = () => {
const [tabState, setTabState] = useState(initialTabState);
const renderScene = SceneMap({
'1': FirstRoute,
'2': SecondRoute,
'3': ThirdRoute,
'4': FourthRoute,
'5': FifthRoute,
'6': SixthRoute,
'7': SeventhRoute,
'8': EighthRoute,
});
const renderTabBar = (props: any) => (
{
console.log(route)
const index = initialTabState.routes.findIndex(item => item.key == route.key);
handleIndexChange(index);
}}
/>
);
const handleIndexChange = (index: number) => {
setTabState({ ...tabState, index });
};
useEffect(() => {
console.log(tabState.index);
}, [tabState])
return (
);
};
const styles = StyleSheet.create({
scene: {
flex: 1,
},
tabStyle: {
width: 'auto',
},
indicatorStyle: {
backgroundColor: '#000',
},
tabBarStyle: {
backgroundColor: '#fff',
},
labelStyle: {
color: '#000',
},
});
export default TabScreen;
"react": "18.2.0",
"react-native": "0.72.6",
"react-native-tab-view": "^3.5.1",
去除自定义tab改成原生的也不行
莫克先森
阿里云服务器实例?
没看懂,你如果买了阿里云服务器的话,那就已经有一个实例,不需要再创建了
莫克先森
Vite配置文件中的404错误怎麽解决?
当前发起的请求不是跨域问题了,看起来是因为代理转发的时候 "rewrite" 重写有问题导致的 "404"。
确认一下请求的URL中确实不需要 "/moon-server/" 这一段吗?
另外是不是应该写成 "(path) => path.replace(/^\/moon-server/, "/")" 或者 "(path) => path.replace(/^\/moon-server, "")"吗?
你这样替换path后前后的 "/" 都没有了,转发出去的地址应该是有问题的吧?
莫克先森
Vue为何打包后的样式不一致?
有两个组件""和"",代码如下:
export default {
name: 'Layout',
}
.header {
background: linear-gradient(135deg, #7f7fd5, #86a8e7, #91eae4);
height: 100px;
display: flex;
align-items: center;
}
Installed CLI Plugins
import Layout from './Layout.vue'
export default {
name: 'HelloWorld',
components: { Layout },
}
.header {
background: rgb(38, 57, 224);
height: 200px;
}
此时打包后样式应用如下:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241112/b43f3f926d5669b22b4258c87f06579d.png)
第一个"header"使用第一组样式,第二个"header"在继承的基础上覆盖了部分样式
但将"layout"最外一层"div"标签去掉后:
变成
再次打包,得到的结果是
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241112/a82c9225388c2eba9cbfe01fad94ba48.png)
两个"header"应用相同的样式
请问为什么多了一层"div"标签会造成打包结果不同?
莫克先森
vue+element+admin脚手架 axios发送POST请求后 springboot后台获取不到请求体内的参数 ?
axios 向springboot后台发送post请求传入json格式的值 后台@RequestBody获取不到传入的参数,不报错也不向下执行
第五天
(为了让大家读到我的问题最新发展我选择倒着排序)
下面是本项目的 mock-server.js文件
const chokidar = require('chokidar')
const bodyParser = require('body-parser')
const chalk = require('chalk')
const path = require('path')
const Mock = require('mockjs')
const mockDir = path.join(process.cwd(), 'mock')
function registerRoutes(app) {
let mockLastIndex
const { mocks } = require('./index.js')
const mocksForServer = mocks.map(route => {
return responseFake(route.url, route.type, route.response)
})
for (const mock of mocksForServer) {
app[mock.type](mock.url, mock.response)
mockLastIndex = app._router.stack.length
}
const mockRoutesLength = Object.keys(mocksForServer).length
return {
mockRoutesLength: mockRoutesLength,
mockStartIndex: mockLastIndex - mockRoutesLength
}
}
function unregisterRoutes() {
Object.keys(require.cache).forEach(i => {
if (i.includes(mockDir)) {
delete require.cache[require.resolve(i)]
}
})
}
// for mock server
const responseFake = (url, type, respond) => {
return {
url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
type: type || 'get',
response(req, res) {
console.log('request invoke:' + req.path)
res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
}
}
}
module.exports = app => {
// parse app.body
// https://expressjs.com/en/4x/api.html#req.body
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
extended: true
}))
const mockRoutes = registerRoutes(app)
var mockRoutesLength = mockRoutes.mockRoutesLength
var mockStartIndex = mockRoutes.mockStartIndex
// watch files, hot reload mock server
chokidar.watch(mockDir, {
ignored: /mock-server/,
ignoreInitial: true
}).on('all', (event, path) => {
if (event === 'change' || event === 'add') {
try {
// remove mock routes stack
app._router.stack.splice(mockStartIndex, mockRoutesLength)
// clear routes cache
unregisterRoutes()
const mockRoutes = registerRoutes(app)
mockRoutesLength = mockRoutes.mockRoutesLength
mockStartIndex = mockRoutes.mockStartIndex
console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
} catch (error) {
console.log(chalk.redBright(error))
}
}
})
}
最后发现把 vue.config 里面的 before: require('./mock/mock-server.js'),这一句干掉
devServer: {
port: port,
open: true,
overlay: {
warnings: false,
errors: true
},
// before: require('./mock/mock-server.js'),
proxy: {
'/api': {
target: "http://localhost:8088",
sercure: false,
changeOrigin: true,
pathRewrite: {
"^/api": ""
}
}
}
},
然后访问就正常了。
所以问题出现在mock,但是我依旧需要mock做数据模拟,故而只有研究到底是哪儿的代码导致请求体里面的数据变为空。
第四天
研究了好几天研究了好久,发现更基础的点(为了让大家读到我的问题最新发展我选择倒着排序)
首先: 问题是“vue框架采用的axios,利用proxy做了跨域代理,前台使用axios先后台提交各种申请(除了get方式外)将传递参数需要放入
请求body传输 的请求后台通过 Springboot接受一律接受不到 ”
前台展示(不知是否有二次封装的影响,所以尝试原生axios提交请求)
//输入进来的data为一个键值对对象
//第一种尝试
return axios({
method: 'post',
url: 'api/user/login',
data:qs.stringify(data) //此时Content-Length为application/x-www-form-urlencoded
})
//输入进来的data为一个键值对对象
//第二种尝试
return axios({
method: 'post',
url: 'api/user/login',
data:JSON.stringify(data),
headers:{
"Content-Type":"application/json"
}//此时 Content-Type 为 application/json
})
后台为方便一律采用HttpServletRequest 接收
@RequestMapping ("/user/login")
public String login(HttpServletRequest paramLogin) throws IOException {
System.out.println(System.currentTimeMillis()+"\n");
System.out.println("收到参数");
System.out.println(paramLogin.getReader().readLine()+" [
{
rel: 'preload',
// to ignore runtime.js
// https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/cli-service/lib/config/app.js#L171
fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
include: 'initial'
}
])
// when there are many pages, it will cause too many meaningless requests
config.plugins.delete('prefetch')
// set svg-sprite-loader
config.module
.rule('svg')
.exclude.add(resolve('src/icons'))
.end()
config.module
.rule('icons')
.test(/\.svg$/)
.include.add(resolve('src/icons'))
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({
symbolId: 'icon-[name]'
})
.end()
config
.when(process.env.NODE_ENV !== 'development',
config => {
config
.plugin('ScriptExtHtmlWebpackPlugin')
.after('html')
.use('script-ext-html-webpack-plugin', [{
// `runtime` must same as runtimeChunk name. default is `runtime`
inline: /runtime\..*\.js$/
}])
.end()
config
.optimization.splitChunks({
chunks: 'all',
cacheGroups: {
libs: {
name: 'chunk-libs',
test: /[\\/]node_modules[\\/]/,
priority: 10,
chunks: 'initial' // only package third parties that are initially dependent
},
elementUI: {
name: 'chunk-elementUI', // split elementUI into a single package
priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
},
commons: {
name: 'chunk-commons',
test: resolve('src/components'), // can customize your rules
minChunks: 3, // minimum common number
priority: 5,
reuseExistingChunk: true
}
}
})
// https:// webpack.js.org/configuration/optimization/#optimizationruntimechunk
config.optimization.runtimeChunk('single')
}
)
}
}
第三天
....
第二天
继续尝试:添加判断用HttpServletRequest获取请求报文的相关信息。
String contentLength = paramLogin.getHeader("Content-Length");
if (contentLength != null && Integer.parseInt(contentLength) > 0) {
// 可以读取请求体
BufferedReader reader = paramLogin.getReader();
System.out.println(reader+" this is reader");
System.out.println("contentLength: "+contentLength);
String line;
if ((line = reader.readLine()) != null) {
// 进入循环
while ((line = reader.readLine()) != null) {
System.out.println("while+1");
System.out.println(line);
}
} else {
// 请求体为空,不需要读取
System.out.println("失败");
}
// 进行读取操作
} else {
System.out.println("出错啦");
// 不需要读取请求体
}
1.对于axios发送过来的信息
成功获取Header,对Body做数据流读取的时候失败,依旧是无数据
收到参数
application/json
org.apache.catalina.connector.CoyoteReader@21bc0330 this is reader
contentLength: 35
收到参数
null
出错啦
2.用IDEA自带的Http服务测试功能测试
###
POST http://localhost:8088/user/login
Content-Type: application/json
{
"user_name": "qwee",
"password": "21"
}
成功有数据结果
收到参数
application/json
this is reader: org.apache.catalina.connector.CoyoteReader@21bc0330
contentLength: 45
"user_name": "qwee",
"password": "21"
由此可以判断我的axios发送的请求报文似乎有问题,现在继续尝试。qaq帮帮孩子
前台
export function login(data) {
//输入进来的data为一个键值对对象
return request({
url: '/user/login',
method: 'post',
data,
headers:{
"Content-Type":"application/json"
}
})
}
发送的请求信息为user_name:rose password:1
https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241108/bc49b5654c52b2ae7119ac651e84ee9f.png
https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241108/d06a26feaba2de30e241ce7978da1112.png
后台
@PostMapping ("/user/login")
public void login(@RequestBody ParamLogin paramLogin){
System.out.println("收到参数");
System.out.println(paramLogin.getUser_name()+" "+paramLogin.getPassword());
}
@Data
@EqualsAndHashCode(callSuper = false)
public class ParamLogin implements Serializable {
// @JsonProperty("user_name")
private String user_name;
// @JsonProperty("password")
private String password;
}
结果就是后台输出执行不到 System.out.println("收到参数"); 我主观觉得 @RequestBody 为和获取到值。
尝试使用过HttpServletRequest request获取请求的body,但是 request.getInputStream().available() 又为 0表示body里面没值。
同时用apifox测试过后端API 可以接收到post 的json数据。
https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241108/e0262b0260bc74254929f7831a9b829a.png
"能够解析json" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241108/625d92ec2f7753a2755f6e32be5106c0.png)
但是axios的无论是封装后还是原生的都无法接收到post的值。
莫克先森
ant checkbox 的使用疑惑?
«checkedList 为什么会自己补全?»
"截屏2023-12-06 20.10.52.png" (https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241105/99182621dde4a52d096fa7eccf81fadb.png)
看下这两行代码,数组是引用类型,你给"checkedList"赋值的是数组的引用,而不是copy一份,所以你对"plainOptions"的修改都会同步到"checkedList",解决方法是赋值时拷贝"[...plainOptions]";
«下面的报错是什么意思?
这是ant的bug吗»
报错是bug,这个你看报错堆栈都是ant里就八九不离十了,然后去github上搜下issue就搜出来了
"https://github.com/vueComponent/ant-design-vue/issues/7106" (https://link.segmentfault.com/?enc=UdSD9YNOa14I%2FfzuwSg68g%3D%3D.%2FEYFuHqAw75UA9Hccni8mdGDZZ3aTWMurwOvpdoosr8NSFxXdloCT%2BiWuXnxmNF5OZCge6P%2FOF%2BY0%2F%2FDlCL44Q%3D%3D)
莫克先森
关于MutationObserver 引发的 IntersectionObserver和ResizeObserver的callback类型?
MutationObserver 我们知道,他的callback会被加入到微任务队列中,后面在逛帖子的时候又遇到了
IntersectionObserver和ResizeObserver的callback
,我在想他们俩得callback是什么类型,然后去MDN上面看文档,发现MutationObserver
MDN上面也没有明确说明(也可能是我看漏了)。IntersectionObserver和ResizeObserver也没有说明
,所以才有了这个问题!
莫克先森
AMH 主机面板规则管理页面点击环境列表出错,怎么办?
AMH主机面板 规则管理页面,不能点击 环境列表,点击就出错了。
不知道算不算是一个问题,还是问一下吧。
https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241016/d1fcfb18079df58a45cd87f74e87cfde.png
不知道算不算是一个问题,总之,也可以说没问题,不点那个地方就行了。
莫克先森
为什么我在一个开源库中提交pr,会显示有两个人提交?
下面那个是你提交 commit 时(即执行 "git commit")用的账号。
上面那个是你在 github 上点击 open pull request (或者类似按钮)时 github 记录的 github 账号。
莫克先森
请问vue+Electron打包exe后页面路径没有指向vue,如何解决?
在开发我的 electron 和 vue 是同一文件目录,通过运行 "npm run electron:dev" 和 "npm run serve"
使应用可以显示正常,相当于 "electron" 内嵌了一个 "vue"
但是打包 "npm run electron:build" 后的 exe 页面指向了默认的 "./electron/index.html" ,并没有将我
"vue" 开发的页面展示出来
有点想不明白这个打包逻辑,我的理解 "vue3 + electron" 只是个嵌套关系,那是如何打包到一起的呢?
还望解答,万分感谢!
莫克先森
如何精确测量Canvas中带拼音的字体高度?
可以看下这个是不是能用
"https://opentype.js.org/" (https://link.segmentfault.com/?enc=olswOFJp3gUs4hKwrUOoHQ%3D%3D.ch7n3rB5HkYMEs0NhvTodDjDhaxrSMbJ8hte9MVxh68%3D)
"Font.draw(ctx, text, x, y, fontSize, options)"
«Create a Path that represents the given text.ctx: A 2D drawing context, like Canvas.
x: Horizontal position of the beginning of the text. (default: 0)
y: Vertical position of the baseline of the text. (default: 0)
fontSize: Size of the text in pixels (default: 72).
Options is an optional object containing:kerning: if true, takes kerning information into account (default: true)
features: an object with OpenType feature tags as keys, and a boolean value
to enable each feature. Currently only ligature features "liga" and "rlig"
are supported (default: true).
hinting: if true uses TrueType font hinting if available (default: false).»
"Glyph.getBoundingBox()"
«Calculate the minimum bounding box for the unscaled path of the given glyph.
Returns an opentype.BoundingBox object that contains x1/y1/x2/y2. If the
glyph has no points (e.g. a space character), all coordinates will be zero.»
莫克先森
数据类型相关问题?
"muliplication expression
*" (https://link.segmentfault.com/?enc=Zb9w0hNM4zq06V009YOyYA%3D%3D.I2yCbLYidEzq2LKJTsqi1FRXToytj44s8y98IJ2YQI8qkL2Evw%2FF%2B6o3Sqxqzs9uKT4%2FvL1rSVyavKYyLXClfgQTzMpLYydc5YrAxPdNFyg%3D)
«If an integer multiplication overflows, then the result is the low-order
bits of the mathematical product as represented in some sufficiently large
two's-complement format. As a result, if overflow occurs, then the sign of
the result may not be the same as the sign of the mathematical product of
the two operand values.»
就是按照足够大的位数算一个精确结果,然后只取低位。
不同语言的规定会不太一样,所以要看语言自己的规定。
但是结果通常都是类似的,因为这样实现起来最方便。
莫克先森
java代码我这样的场景如何异步转同步?
首先我觉得轮询也并不是不能接受的方案,很多时候外部程序就是没办法回调,这种情况下轮询也没什么不好。
然后来到你这个场景,我理解你应该是想优雅地实现一个异步过程的回调。我猜你现在的做法是控制器发消息到MQ后,控制器的线程持续轮询redis看是否有结果,直到有结果或超时才返回。这种情况下,可以考虑让当前线程阻塞,通过消费者的行为通知到本地,比如使用redis的pub/sub,或者消费者写一个处理完成的消息到MQ,再由消费到这个消息的线程唤起阻塞线程。
我之前做过一个异步过程是本地程序另起一个http接口用来接收完成消息,控制器启动异步过程后让线程阻塞在一个对象上,异步过程结束的最后会通过这个额外的接口接收成功消息。等另起的接口收到请求后,找到之前用来阻塞的那个对象,唤醒阻塞在对象上的线程即可。
莫克先森
阿里云ubuntu18.04安装AMH,编译到这个进度就卡死了什么原因?怎么办?
阿里云ubuntu18.04安装AMH,编译到这个进度就卡死了什么原因?怎么办?
[ 71%] Building CXX object
libmysqld/CMakeFiles/sql_embedded.dir/__/sql/item_geofunc_buffer.cc.o
莫克先森
前端引入第三方js跨域问题,如何解决?
纠正一点,这不是跨域,是属于 内容安全策略 中的
"混合内容" (https://link.segmentfault.com/?enc=9g5Ypp1rn%2FZCbrxyvOqoFQ%3D%3D.gS9zKB1BML8HQos9wHPSqjx2Kzx0fG6JXfDUpOxDaIriY%2B4LqYDntZzjr1oIi%2BRUqq3AuKwPo8WT0EatXuL62fV9JQdnxI8RfLe%2FeWlMBA8%3D)。
如果对方站点只有 http 资源,那没办法,你只有自己在后端或者网关上像类似于跨域那样,使用反向代理来获取。
但是,这个网站看起来是有 https 的,你直接把 URL 里面的 http 换成 https 就好了啊,试了一下用 https 是可以访问的。
* "混合內容 - Web 安全 | MDN" (https://link.segmentfault.com/?enc=G0U9cCbmOzLV%2F4M7L60PdQ%3D%3D.5qntvwJ%2By8qfqbC87e630Xd72rD9MmdcANVrzhf%2BvEdz43KJ6y2dd9EBUVKPHEkRfWoia61wsCgfHdNARtQNGahdFyKRZcBPLjeEnRHO7T4%3D)
莫克先森
vue2开发公式编辑器有没开源可供参考的?
"1be02da24e5e86906a1f5be10e58a60.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241009/87e94985b0a36da172d4880c2442f87e.png)
莫克先森
FFmpeg合并视频质量太低?
有个透明视频 text.mov 和一个背景图
bg.jpg(将作为视频背景),合并之后视频的质量明显降低,设置了帧率、码流、编码方式都不行,有没有解决过类似问题的,悬赏千元求解,谢谢诸位!!!
莫克先森
求助,我不确定自己是否正确理解了数据库的锁机制?
求后端前辈帮忙看一下我绘制的时序图中,我对数据库锁的理解是否正确???
今天看见一篇讲解 “先删除缓存还是先更新数据库” 的文章看不懂,
我主要是没搞懂“数据库的‘锁’机制”在“并发删除缓存+更新数据库”这个问题中,究竟是怎么运作的??
因为我在学习mysql时,了解到进行更新操作时,会加上互斥锁,所以理论上更新和查询操作必定是串行的,但按照这篇文章的描述,似乎出现了“数据库更新操作”与“数据库查询操作”同时发生的情况????
我绘制了如下的并发时序图,希望大家判断一下我对于数据库锁的的理解是否正确????
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241008/a2cc0f5eac37af5408e99cf49c1c65ae.png)
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241008/552718865c4675f385027db69ebe1cd0.png)
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241008/995b5ce1ec3eacf42fc29b668fa439af.png)
以下是原文链接,请各位大佬直接跳去阅读“「先删缓存,再更新数据库」”这段描述:
"https://mp.weixin.qq.com/s?__biz=MzU1NTA0NTEwMg==&mid=2247484..." (https://link.segmentfault.com/?enc=P3x%2FdSJRAkIh%2B1QUQAuWXQ%3D%3D.0AKl4GmDq%2FSU%2BKK%2Be2tqcCRNYc2b9uw8eGbaDWCe%2BOhf%2BsSntBsszQTFw8iZYSkwh%2BJ5xyV%2F%2FdPcEeoMeFhZO6cZdb67YadOBqcymewYDvvThjVWwG5E%2F2RkDqcUw%2BXR%2Fr%2FblUY0atmg4OZaJCo%2BLratfRGXWJdp9%2FdzTOmlI0%2F5s2Ww9%2FE3IDv0LHsQyjqsaaB0sFDo7BFI0ff8UMn2mVl61ZCQ0V1NEM6RhYYv7RqeFBrjAVhLliqvjAqNNTVUSMuSwzTk%2FQc7orrOxwSkulWN9MDTqAfj7SZj2BxVHBykTaHnENIFUJsLy31RP%2F7z4Zd33QB9x4C1IyV20gavzg%3D%3D)
我比较希望知道我绘制的详细版时序图是不是正确理解了数据库中的 “锁” 对于 “先删除缓存还是先更新数据库” 这个问题产生的影响。
莫克先森
如何使用 yarn 安装 ant-design/icons-vue ?
原来是要加 @
╰─➤ yarn add @ant-design/icons-vue 128 ↵
yarn add v1.22.21
[1/4] 🔍 Resolving packages...
[2/4] 🚚 Fetching packages...
[3/4] 🔗 Linking dependencies...
warning " > less-loader@11.1.3" has unmet peer dependency "webpack@^5.0.0".
[4/4] 🔨 Building fresh packages...
success Saved lockfile.
success Saved 1 new dependency.
info Direct dependencies
└─ @ant-design/icons-vue@7.0.1
info All dependencies
└─ @ant-design/icons-vue@7.0.1
✨ Done in 4.94s.
莫克先森
请教一下,鸿蒙OS在previewer里测试,每改一句代码都要点击运行吗?
请教一下,鸿蒙OS在previewer里测试,每改一句代码都要点击运行吗?
在哪里可以设置 hot reload 吗?
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241007/7ff068ca4cf7c942e953c859f22ca159.png)
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241007/29d20770d889e45729660220443e00c5.png)
本文参与了"思否 HarmonyOS
技术问答马拉松" (https://segmentfault.com/a/1190000044600728),欢迎正在阅读的你也加入。
莫克先森
有什么办法可以和外部人员基于不同的 git 仓库协作吗?
有什么办法可以和外部人员基于不同的 git 仓库协作吗?
假设有一个仓库 crawler 在我们自己公司的 gitlab 上,我们有一些外包需要给我们的 crawler 添加更多的爬虫脚本和修复爬虫脚本,但是
gitlab 的权限不能给他们,所以就去 github 建了一个 crawler 仓库
但是问题来了 github 和 gitlab 之间怎么同步代码呢?因为两边的不是完全的镜像仓库,因为我们的 gitlab 的 crawler 仓库下,是有
config.yaml 这种配置文件的,里面有数据库的账号密码等等信息
莫克先森
el-dropdown @command 事件触发两次的原因是什么?
因为你的 "el-dropdown-item" 里面嵌套了 "el-dropdown-item",所以会触发两次,一次是父级的,一次是子级的。所以把外面的
"el-dropdown-item" 去掉自己写一个 "flex" 布局的 "div" 元素就好了。
"🔗
这里是问题复现Demo" (https://link.segmentfault.com/?enc=mvtaFMVy7bVlmOsXPWJd4Q%3D%3D.zMDURih4VDhsh0xbQiGAzanYImY0HLB5v7heH%2FjHyeZiiBqxkDFdlvhJFeSL0S28U9CzNk1uqrvlvVcdiUUs7q3YW8pS%2FBoKEGxODZlbL4P5ht0wFmUVnRAyd994MwcTDgj1oEfaKbLtzW2qfDIIxNYW8yu4RGeip8KktrPw2DbCNPxZ8y9Zk%2BF3rx1Jk8JoJ%2FkcBXyw0vE1tOV13qI7ytey3ItraVnITP0nFJV1vVvtia71kNjTEsBXoI8iU%2FK0E6%2BqGvG%2BkAiAnR9o8SVrPU4N8Hji2pz81fu7KVuGR7F4KeaKxDG9WpVRjFhh45VX1jqAnQ%2FsZmUqOTziWAWEHoAmXMKKvl0SS39C3zJ397PO858Haz%2ByKRE1t%2FjTKklQj3VzVj3K%2FDCp5Gm9VlleWTWNB4QCwKoWb4NoIYDWkQz5ah8Kk4BMtfPnEg5tuozADsdEQAaefcoDw0R2GIc3%2BfyPtCwJQJ7wlRIOXsDPownjYpA77v2jgjeM2zszeW68jmyG7YoAqZjJ3fu3Qkyu6T8TJl4K2A6twT4Z2IAVN2qfaNPeb4RaL9WUWIcc%2BIDEsNrDJEbRr9YKvtZyKPgLrvaPb1NAGnu%2BoETBuC9cV167MNXCWDUcXw%2BXGTBWxP98ermtlsfMb0snEorctlmYrhg1yMQe3UqiO7tw7PvBEjp7Gu6UMxxvseedGMog2Sd6D7yA3dpXsOIM7n2SMaZl%2FaWzMHdcY9tLUwqHL1Co7GWB96c1ZtOIn4KABo7Qisw7GiJTpKtVV%2FRLFXWHTy1YjgqupysXJEs8HijJ93TdHaOphv7TcKLMxX79d13XBnyMA51%2BNfPi5oXRSF7wrg7ny65NjjTyqXJBvcTVrkp4fSkWg1VvnVH1GEhgHcVbOZ58RxM63c%2FULWAbRXH8YMrM1hMHp%2FL%2FiXTSFEidFcsuJNCi8iUprDHYnmLFUnfwQQGXxtPm6uKDwEEHecQBbt0XlsNBNh2aQ2hKpvNopAZKRj5gnTn1It7eYrwjjs4H8ENa9FIHrk%2BfFhzV2rgBvnN3zw2B3DC%2FfT%2BZwUnLTqC12sSRYoDgItmOk7zVvRh307wreHKKUNT2W7zhNbIj05pAU58egzy2Ra7Hvw0peK%2BbFOCxmQ55t0L7giPAbRinBpF%2FnYgPajzn4Qa9YPbzmK9ClmO2VZXSK%2BK%2BBHxG%2Bx58T3dea8cCISKnA%2BeJ6UYV0ZiT%2FblZRBBqz9dnNteYfEDmWnGbWmeqBLk2rDkHZDL5Yr4kD6ReWva8r9zuahkuI5R7oJls2Yxoz%2FVQAZeLPnrJ%2BoZdH7%2BgiLekKho0iomG%2Bh%2B%2Bm7dDYGmOvyh61%2BtahVgSI5D%2By3GYHLEkWlvbPcLNKwKOgpLI0yJWPvN6APWgauR83kZ809HpleYuI9I06KmrSzIOFvP8fWvwA9NeFp%2BDEckI223YBZ0T4HW%2Bsk9ubAauwnaGYbHEIjJDdbVGFm9NxQxrV7fcUBFQMYlD%2Bycb9mokfl0Mk66vn1SCTyCOT24Hlfg4iZ0FTbwbDdJeMSXqjg2dKMRBC6v1y3%2FC8PvJtBku5fRmvJqaI4c%2FCPKSH8syRRinnXH8AhRISLThDEXuDUuMru5uinFDi13IpqaSqDlmaw%2BA9Vm%2F0NuTO42g0UPDItzvqADVnxis1qS59LRZMqtPGETHgc9ikXwcAtHeP0mTrbBdRynZK0aofqCGRDs5RugjamjMMLZepmsja6JFu6eXNQZicnuVPA%2BwsS1kZkUxKXlr07qZdNfWVAOtrhfLG%2Fzz%2FsjbZ3nfj9AUWYxOZ4xg6kHvWAxudifYsYG%2FYc0%2BO2d8t3NbWrRVBlwYxdra8MPsjB7UyPS%2FpxRB1qgfT6doHcEo5VfIu8cLAnfV2EqWpdyqHKiNGTgN4qdwUSYV%2BlSPYCvqvx2chflQBBxYkZxYn%2F3ZE0PqC8JaDSQDpLHcdHcgxB4Yoa%2FqvrQklqBFrOOxrYTJyC7QMmDipar%2FV%2BNlZD9bQjwVNDMSXmrFQ2qdXTGUGeBYayf2YxasXw32HYtLFI3moEcSNoWCUM66JOC%2Bd5FOZCl2jJokkgab%2FOkI%2BRcq38KG9vBlaxuAHWL1VwWE6EuqsB3WV8fts6EVO7RK6SuN7nTXpLLhradnDzFUmhO4eIkr5Ov5Gz4U1bHjw2bzMZGIiIBpvAoir3INpRIqNtUu%2BaT5xYa3ykWwUYAd8ccUHi9kBc%2B%2FOAe%2FOnj5VnAsRIe%2F%2BlCFca7A6sRcRx7ZnQuy9%2FU3hpsSmhfTayAyjOyvRRiq37zEaPbIZv28VXBXIgfnGdAqCztu5VdGQhoZ3cbVhtH6BvKGev4kd63eCVpdnyZBjQKUE3%2F5WjjVQRLauS6PYogZZ5QjRnjrcuhpeWReZa4tWzw%2B9Ug8vgmXiO1RgUjakv88Sq9lUlJ2b5VsXVZ24RN72MwcWxmudbbgTW7a4u42%2FoO4p3de7E7f%2F%2Fz1CEm5SCK3rlc9%2BdSBGsq7pywlPLDRi60EbrpieKN5s5pbZzWo%2FY4o29tH8ITO4av6SauV%2FVzDuWJgYaoT%2F9hu6HlvD%2FfZjTGnUadFM2B7P5q5mLJZch4JfPhc0modhjQPjAIdtwDlGxfb%2FsHLU4rd9llLLn94R5zMi6IH20WMkYZ%2FtHx4FHiIK00Kt8EllLX1a4UitMb%2BebQ%2BYGUKgKvDj4c2QAaf%2FhFqFBE7dhSbEYgy9xTLxcQiK4u9xf67aKLmdPGRCHTrNrklTDvKW%2BI5xQOplFi2f5XOfWyzFerChMCP0BvoghETXrDuR2cGx4L8Je0SdxJL%2FPpJGNGbCCwbN4Q5tbcv6WeJBmZtbwMKmn3FzffxGLWeke12aP7J53FNflEZ5HT5lixHqeuDGK%2B92Zxc3whRB%2FNyphYsAU1eIsxlhSZoW5qDzsMXvhrQ4mRQFANVN6%2B2BMwXam1TwO2lRuIPdYCgU5%2Frf7uwUYGTmqEkt0B4fF%2B76s7t9iD2Zb%2BdC0oQGtjtMwL7FIYU%2Bzyh0kUbKHnLbdVBuJOHNsf%2FcAMsBmJZEOk1H7BqOw%3D%3D)
莫克先森
横着的堆叠柱状图怎么画出立体感?
可以参考这两个"demo" (https://link.segmentfault.com/?enc=9ntBT5%2FpdWtw7B5LoY5J9Q%3D%3D.O66mH0TxzS3RPV42i5LeccsMoQ4lKky5XDOdvXrK0dRmmy3HhCWOAikhCSIrLOyz)、"demo1" (https://link.segmentfault.com/?enc=9AzyWHtcBvVu3TwvEtl9lg%3D%3D.7m1bFj%2Brw4IU%2BgIexi%2FMoNl31JreNUKGU3%2Bt9UOxxzzNC6Bz3p0Uoy2sUJk%2B09eM)
莫克先森
这种效果如何实现呢?
这种效果如何使用"THREEjs"实现?
https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241004/34bd0241ceb9d84f0b3f938da23c5342.png
莫克先森
tinymce 官方插件如何显示图标文字?
最简单的就是直接换掉图标
https://blog.csdn.net/qq_43520928/article/details/107304931
莫克先森
如何判断H5是否通过通用链接成功唤起了app?
你在唤起APP的时候执行以下代码,在urlschemes后面携带一个参数
唤起app
在app端获取参数
let args = plus.runtime.arguments;
console.log(plus.runtime.arguments, typeof args, 'plus.runtime.arguments');
if (typeof args == 'string' || typeof args == 'object') {
args = args.split('entry?');
console.log(args,'args');
if (args.length == 2 && args[1]) {
args = args[1];
try {
//获取到参数,处理跳转逻辑
} catch (e) {
console.log('处理参数失败', e);
}
}
//值清空这里有坑的,可能是官方bug
plus.runtime.arguments = null;
plus.runtime.arguments = '';
return false;
}
莫克先森
gin 的 ctx.Stream 为啥要等方法执行完后才一次性输出结果?
gin 的ctx.Stream 为啥不起作用,也就是说必须要等控制器方法执行完成后,"ctx.Stream" 输出才会一次性的依次性输出?
莫克先森
Vue 获取机器 IP 地址的方法?
以前看到过相关的文章,貌似WebRTC在某些条件下可以拿到客户端本地IP。实际操作起来是不是能成功就不太清楚了(我猜大概率不行吧)。
如果非要获取的话,在客户本地网络上部署一个后端服务,一般内网在内网情况下不会经过nat,服务端可以拿到客户端IP,然后Vue从后端服务上拿也可以。具体操作就是让你们的后端写个getip的接口,客户端请求的时候给返回一下客户端请求的源IP就行了。
如果这里是打包成apk包,在android系统上运行,前端应该是可以通过js去调用android提供的方法,由android这边客户端IP。
莫克先森
rancher-desktop with k3s 如何做基于hostpath的本地持久化?
rancher-desktop with k3s 如何做基于hostpath的本地持久化?
我希望用rancher-desktop,搭配k3s,在我的mac上部署一个postgres,并且创建数据库所需的文件我希望持久化到一个我指定的路径"/Users//Workspaces/postgres/pg_data"
但持久化到我的Mac上这个需求始终不能解决,每次rancher-desktop都是自己创建了一个映射到lima虚拟机内的"/var/lib/rancher/k3s/storage/"pv,但是我如果把rancher-desktop with k3s换成Docker-desktop with k8s,就没有问题,可以顺利完成,yaml文件是一样的:
# 安装postgres
# 定义一个命名空间
apiVersion: v1
kind: Namespace
metadata:
name: postgresd
---
# 定义配置
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
namespace: postgresd
data:
POSTGRES_DB: postgres
MAX_CONNECTIONS: "10000"
LOG_MIN_DURATION_STATEMENT: "500ms"
---
# 定义存储卷
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgres-data-pv
spec:
capacity:
storage: 10Gi # 根据实际需求设置存储容量
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
# storageClassName: local-path
hostPath:
path: "/Users/hulei/Workspaces/postgres/pg_data"
# nodeAffinity:
# required:
# nodeSelectorTerms:
# - matchExpressions:
# - key: kubernetes.io/hostname
# operator: In
# values:
# - lima-rancher-desktop
---
# 定义用户名、密码等敏感信息
apiVersion: v1
kind: Secret
metadata:
name: postgres-secret
namespace: postgresd
type: Opaque
data:
postgres-user: cG9zdGdyZXM= # Base64编码的用户名,这里是"postgres"
postgres-password: U2VjdXJlUGFzc3dvcmQ= # Base64编码的密码,这里是"SecurePassword"
--- apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres-statefulset
namespace: postgresd
spec:
replicas: 1
selector:
matchLabels:
app: postgres
serviceName: postgres-serive
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgresd
image: postgres:16.2-alpine3.19
ports:
- containerPort: 5432
name: postgresd-port
env:
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: postgres-secret
key: postgres-user
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-secret
key: postgres-password
- name: POSTGRES_DB
valueFrom:
configMapKeyRef:
name: postgres-config
key: POSTGRES_DB
volumeMounts:
- name: postgres-data
mountPath: /var/lib/postgresql/data
subPath: data
volumeClaimTemplates:
- metadata:
name: postgres-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 5Gi
# storageClassName: local-path
---
# 定义将5432端口映射到kind cluster 5432端口的service
apiVersion: v1
kind: Service
metadata:
namespace: postgresd
name: postgres-service
spec:
selector:
app: postgres
ports:
- port: 5432
targetPort: 5432
type: ClusterIP
我想知道如何在rancher-desktop中实现基于hostpath的本地持久化?
在我的mac上运行上述yaml文件后,"kubectl get pv" 总是得到如下结果:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241002/505ec739119cb7782cece189834cb696.png)
k3s会自己创建一个pv,不会用我创建的pv,这是为什么?
莫克先森
如何解决 Nginx 访问静态页面被重定向到登录页?
nginx 访问静态页面被重定向ruoyi登录页
# Settings for a TLS enabled server.
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name xxx.top;
root /usr/share/nginx/html;
ssl_certificate "/etc/nginx/cert/server.crt";
ssl_certificate_key "/etc/nginx/cert/server.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers PROFILE=SYSTEM;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
#
location / {
root /app/ruoyi-ui;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/{
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://139.9.141.96:8080/;
}
location /protocol/ {
index index.html;
alias /app/ruoyi-ui/protocol/;
autoindex on;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
访问"https://xxx.top/protocol/" (https://link.segmentfault.com/?enc=qmIxdpWxLmj9lSUf7oB7hg%3D%3D.nR%2BEJIy3Sb4%2BhUqPHiuSV2qlmsr7Q%2B2A%2FLcB7GhS5fw%3D)的时候,被重定向到登录页了就,求大佬给看看,我想访问到protocol/下的index.html
求大佬给看看,我想访问到protocol/下的index.html 而不是重定向到登录页
莫克先森
如何配置 MyBatis Plus 实现字段名自动转换?
这里,字段名为什么没有自动转换成下划线呢,"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241002/cef6286f669700c65d7a476a63d5c434.png)
这里是mybatis_plus不会自动转换呢,还是我配置错了?
如果这种情况不会自动转换,那么自动转换使用在什么情况下呢?"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241002/9bb2ca27161158e875907060a80421c4.png)
莫克先森
window.getSelection(); 获取鼠标选中文本后 给文本添加 span标签 实现高亮 第一次获取的时候 下标正常 加完span标签后 下标位置就不对了?
参考这个代码
js实现 选中文本 加样式
* {
margin: 0;
padding: 0;
}
.toolBox {
height: 30px;
display: flex;
/* display: none; */
cursor: pointer;
z-index: 999;
}
.toolBox button {
width: auto;
height: 100%;
text-align: center;
line-height: 30px;
color: green;
margin-left: 10px;
}
下划线
标注背景色
改变字体颜色
先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。
宫中府中,俱为一体,陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。
侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。
将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。
亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。
臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。
先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明,故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。
愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。
今当远离,临表涕零,不知所言。今当远离,今当远离
let toolBox = document.getElementsByClassName('toolBox')[0]
console.log('toolBox:', toolBox)
let textDom = document.getElementsByClassName('text')[0]
let val = ''
toolBox.onclick = function (e) {
console.log(e, 1111111)
let tool = e.target
let toolTxt = tool.innerText
if (toolTxt.indexOf('划线') > -1) {
add(1, val)
} else if (toolTxt.indexOf('标注背景色') > -1) {
add(2, val)
} else {
add(3, val)
}
}
//鼠标监听,当释放鼠标的时候,调用testSelection()方法。
textDom.onmouseup = function () {
val = testSelection()
console.log(val)
}
function testSelection() {
//获取Selection对象
let selection = window.getSelection()
//调用selection对象的toString()方法就可以获取鼠标拖动选中的文本。
console.log('选中的文本为:----', selection.toString())
//选中的值
let str = selection.toString()
return str
}
function add(type, str) {
let textDom = document.getElementsByClassName('text')[0]
let text = textDom.innerHTML
//匹配传入的搜索值不区分大小写 i表示不区分大小写,g表示全局搜索 匹配标签
let rReg = new RegExp(`${str}`, 'g')
//替换后的值
let rHtml = ''
if (type == 1) {
rHtml = text.replaceAll(
rReg,
`${str}`
)
} else if (type == 2) {
rHtml = text.replaceAll(
rReg,
`${str}`
)
} else {
rHtml = text.replaceAll(rReg, `${str}`)
}
console.log(rHtml, '替换后')
textDom.innerHTML = rHtml
}
莫克先森
js 并发控制怎么依次得到每个请求的结果?
100次 "for" 循环是同步执行的,也就是说一开始就会产生 100 个 "并发任务",但由于并发数的控制,只能进去 5 个,后 95 个的
"Promise" 都被丢弃了,当后面 95 次 "异步任务" 触发的时候实际上都是用的前面 5 次 "闭包" 中的 "reslove" 和
"reject"
因此这里需要用一个 "map" 缓存一下 "Promise" 的 "resolve" 和 "reject"
const createPool = (task, { concurrency } = {}) => {
let runningCount = 0;
const pool = [];
const promiseMap = new Map();
return function (i) {
return new Promise((resolve, reject) => {
promiseMap.set(i, { resolve, reject });
pool.push(() => task(i));
function run() {
while (pool.length && runningCount {
const { resolve } = promiseMap.get(val)
resolve(val)
})
.catch((e) => reject(e))
.finally(() => {
runningCount--;
run();
});
}
}
run();
});
};
};
莫克先森
请问大家,微信小程序 有提供对页面某个元素进行拖拽的方法吗?
请问有人做过小程序 某个元素在页面上的拖拽功能吗?比如我有个页面,有个固定的悬浮图标,需要对这个图标进行拖拽,这个小程序有提供原生方法吗?
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241001/5e959e599ff8f3cb7b210a7cd72fd43c.png)
莫克先森
如何在Win11系统的VM虚拟机上实现与Debian12的文件共享互通?
win11系统VM虚拟机运行debian12如何实现共享文件互通?
samba配置有问题,win11登录时需要输入密码,密码不正确
莫克先森
wireshark 中高亮的这些包是什么含义?
我并没有手动设置什么,这些不同颜色的包有什么特殊含义吗?
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240927/802ee925685e76d88d5921e318150215.png)