你没饰八
为什么nslookup可以解析域名但ping失败?
有可能服务器的防火墙开启了不响应 "ping" 的规则。
关键词是 "ICMP ECHO" (https://segmentfault.com/search?q=ICMP%20ECHO)
你没饰八
微服务的五大组件好多都停用了,还需要学吗?
这些组件停用是有原因的,然后并非指的它们所提供的功能没有意义,你要学习新的替代组件:
以下是对上述微服务五大组件中已停用部分的原因分析及替代品介绍:
一、Eureka(注册中心,停用原因及替代品)
停用原因:
1. 社区活跃度下降:随着时间的推移,Eureka 的维护和更新逐渐减少,社区对其关注度降低。
2. 功能局限性:在一些复杂的微服务架构场景下,Eureka 可能在高可用、动态配置等方面表现出一定的局限性。
替代品:
1. Consul:Consul 是一个功能强大的服务发现和配置工具。它提供了服务注册与发现、健康检查、键值存储等功能。Consul 具有高可用、易扩展的特点,适用于大规模的微服务架构。
2. Nacos:Nacos 既可以作为服务注册中心,又可以作为配置中心。它支持动态服务发现、服务配置管理和服务元数据管理。Nacos 具有易于使用、性能高的优势,并且在国内得到了广泛的应用。
二、Zuul(服务网关,停用原因及替代品)
停用原因:
1. 性能问题:随着微服务架构的不断发展,Zuul 在处理大量请求时可能会出现性能瓶颈。
2. 功能单一:相比一些新的服务网关技术,Zuul 的功能相对较为单一,缺乏一些高级特性。
替代品:
1. Spring Cloud Gateway:它是基于 Spring 5.0、Spring Boot 2.0 和 Project Reactor 等技术实现的新一代服务网关。Spring Cloud Gateway 具有高性能、低延迟的特点,并且支持多种路由规则和过滤器功能。
2. Kong:Kong 是一个开源的、可扩展的 API 网关和微服务管理平台。它提供了强大的路由、负载均衡、安全等功能,可以与多种微服务框架集成。
三、Ribbon(负载均衡,停用原因及替代品)
停用原因:
1. 功能整合:在新的微服务架构中,负载均衡功能往往被整合到其他组件中,以实现更高效的服务调用和管理。
2. 技术更新:随着技术的不断发展,出现了一些更先进的负载均衡技术和解决方案。
替代品:
1. Spring Cloud LoadBalancer:它是 Spring Cloud 体系中的负载均衡组件,与 Spring Cloud 其他组件无缝集成。Spring Cloud LoadBalancer 提供了多种负载均衡策略,可以根据实际需求进行选择。
2. Kubernetes Service:在 Kubernetes 环境中,服务的负载均衡可以通过 Kubernetes Service 来实现。Kubernetes Service 具有自动发现、动态调整等功能,能够有效地管理微服务的负载均衡。
四、Hystix(熔断器,停用原因及替代品)
停用原因:
1. 功能集成:类似的功能逐渐被集成到其他组件中,以提供更统一的微服务治理解决方案。
2. 技术演进:新的容错和故障处理机制不断出现,Hystix 在某些方面可能无法满足现代微服务架构的需求。
替代品:
1. Resilience4j:Resilience4j 是一个轻量级的容错库,提供了断路器、限流器、重试机制等功能。它可以与 Spring Boot 等框架集成,并且具有良好的性能和可扩展性。
2. Sentinel:Sentinel 是阿里巴巴开源的流量控制和熔断降级组件。它提供了丰富的流量控制规则、熔断策略和系统保护功能,适用于大规模的微服务架构。
你没饰八
nacos2.2.3 支持jdk17吗?
我使用openjdk17启动nacos报错
/home/software/java-17-openjdk/bin/java -Djava.ext.dirs=/home/software/java-17-openjdk/jre/lib/ext:/home/software/java-17-openjdk/lib/ext -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/software/nacos/logs/java_heapdump.hprof -XX:-UseLargePages -Dnacos.member.list= -Xloggc:/home/software/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/home/software/nacos/plugins,/home/software/nacos/plugins/health,/home/software/nacos/plugins/cmdb,/home/software/nacos/plugins/selector -Dnacos.home=/home/software/nacos -jar /home/software/nacos/target/nacos-server.jar --spring.config.additional-location=file:/home/software/nacos/conf/ --logging.config=/home/software/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
-Djava.ext.dirs=/home/software/java-17-openjdk/jre/lib/ext:/home/software/java-17-openjdk/lib/ext is not supported. Use -classpath instead.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
环境变量配置:
export JAVA_HOME=/home/software/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH
你没饰八
php正则如何匹配:除(中文加冒号)格式之外的字符串?
比如我要匹配两个td之间的内容,单td之间不能含有中文加冒号这个格式。
我是张三分
张无忌: 你真的是张三分?
如果我用"/.+/"匹配的话会匹配到中文加冒号,
我想用"/[^(\x{4e00}-\x{9fa5}[::])]+/"却不起作用,哪位大神可以赐教一下。感激不尽。
你没饰八
现在还在实习阶段,前端方向怎么能让自己成长的快点?
想让自己尽快成长起来
你没饰八
有关Docker构建Answer社区时的问题?
各位大佬,在构建answer问答社区时,每次在docker构建的过程中,不论是在wsl中的Ubuntu环境中,还是本机的windows下都会出现报错
在经过几次修改后,错误变成了
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241231/dad886f6a31534c9c55aeeb429e8f0d4.png)
以下是我的dockerfile
# 阶段一:构建应用程序
FROM golang:1.19-alpine AS golang-builder
LABEL maintainer="aichy@sf.com"
ARG GOPROXY
# ENV GOPROXY ${GOPROXY:-direct}
ENV GOPROXY=https://proxy.golang.com.cn,direct
ENV GOPATH /go
ENV GOROOT /usr/local/go
ENV PACKAGE github.com/answerdev/answer
ENV BUILD_DIR ${GOPATH}/src/${PACKAGE}
ENV ANSWER_MODULE ${BUILD_DIR}
ARG TAGS="sqlite sqlite_unlock_notify"
ENV TAGS "bindata timetzdata $TAGS"
ARG CGO_EXTRA_CFLAGS
COPY . ${BUILD_DIR}
WORKDIR ${BUILD_DIR}
RUN apk --no-cache add build-base git bash nodejs npm && npm install -g pnpm corepack \
&& pnpm config set registry https://registry.npm.taobao.org \
&& pnpm config set proxy http://your-proxy-url:port # 设置 pnpm 的代理,替换为你的代理信息
RUN make install-ui-packages clean build
RUN chmod 755 answer
RUN ["/bin/bash","-c","script/build_plugin.sh"]
RUN cp answer /usr/bin/answer
RUN mkdir -p /data/uploads && chmod 777 /data/uploads \
&& mkdir -p /data/i18n && cp -r i18n/*.yaml /data/i18n
FROM alpine
LABEL maintainer="maintainers@sf.com"
ENV TZ "Asia/Shanghai"
RUN apk update \
&& apk --no-cache add \
bash \
ca-certificates \
curl \
dumb-init \
gettext \
openssh \
sqlite \
gnupg \
&& echo "Asia/Shanghai" > /etc/timezone
COPY --from=golang-builder /usr/bin/answer /usr/bin/answer
COPY --from=golang-builder /data /data
COPY /script/entrypoint.sh /entrypoint.sh
RUN chmod 755 /entrypoint.sh
VOLUME /data
EXPOSE 80
ENTRYPOINT ["/entrypoint.sh"]
你没饰八
NVIDIA-SMI 显示的cuda version 是指当前的 cuda 版本还是最大可以支持的 cuda 版本?
不一样可能是由于 Ubuntu 仓库里的 nvidia-cuda-toolkit 包版本和你的 NVIDIA 驱动支持的 CUDA 版本不匹配。你可以去
NVIDIA 官网下载和你的驱动匹配的 CUDA 版本就行。
/usr/local/cuda/version.txt 文件找不到可能是因为 CUDA 安装时候没有建这个文件,或者 CUDA 的安装路径不是
/usr/local/cuda。你试一下用find 命令来找 version.txt 文件:
sudo find / -name version.txt
你没饰八
在vue环境下,如何将两个表格内的元素对齐?
问题
如下所示,如何将框1和框2的元素对齐
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241224/d7e70c70181d67d38a1da5468acdc0aa.png)
具体环境和代码
我是使用ant-design-vue组件, 具体代码如下
html部分:
0">
changeSelectedDetailPurchaseIds(selectedDetailsPchPlanIds, detail)"
>
*所属项目
{{ detail.projectName }}
*采购金额
{{ formatMoney(detail.purchaseMoneySum) }}
*采购内容
*数量
*金额
品牌
规格型号
计量单位
单价
css部分:
.my-table {
flex: 1;
width: 100%;
border-collapse: collapse;
}
.label{
padding: 10px 15px;
height: 40px;
line-height: 40px;
border: #cccccc solid 1px;
border-radius: 5px;
box-shadow: 0 1px 5px rgba(0, 0, 0, 0.15);
}
你没饰八
ts 提示在赋值前使用了变量 startTime 那我要判断startTime是否赋值怎么判断?
比如
let startTime: number
然后在循环中判断是否赋值
if (!startTime) { // 报:在赋值前使用了变量"startTime"
startTime = xxx
} else {
xxx
}
你没饰八
刷新数据uniapp?
在uniapp中,某一个页面是统计数据,很多页面随便改什么这个页面就要改变,这个页面是tarbar页面
可以使用拦截器监听路由
onLaunch(){
uni.addInterceptor('navigateTo', { //监听跳转
invoke(e) {
console.log('******** invoke-navigateTo ********', e.url)
},
})
//2
uni.addInterceptor('redirectTo', { //监听关闭本页面跳转
invoke(e) {
console.log('******** redirectTo ********', e.url)
}
})
/**
* 3
* 拦截uni.switchTab本身没有问题。
* 但是在微信小程序端点击tabbar的底层逻辑并不是触发uni.switchTab。
* 所以误认为拦截无效,此类场景的解决方案是在tabbar页面的页面生命周期onShow中处理。
*/
uni.addInterceptor('switchTab', { //监听tabBar跳转
invoke(e) {
console.log('******** switchTab ********', e.url)
}
})
//4
uni.addInterceptor('navigateBack', { //监听返回
invoke(e) {
console.log('******** navigateBack ********', e.url)
}
})
}
但是拦截器是全局的拦截器,我只想写在这一个页面中监听,有什么办法呢?
你没饰八
electron实现区域录屏,我使用ffmpeg,有其他方法吗?
我用electron 实现了一个录屏软件,使用 desktopCapturer 可以录制全屏,但是我想局部或者区域录屏,就不太行,electronjs
好像不能使用 CropTarget 这个类,只能比较曲折的用ffmpeg实现的。大佬们,有什么优雅的方法吗?
你没饰八
页面加载时出现了很多莫名其妙的style标签?
这应该是框架自带的吧。
切换路由 "style" 标签变多应该是用了 "CSS Module" 的原因。
那些没有意义的注释是 "Source Map"。
«通俗的来说, Source Map 就是一个信息文件,里面存储了代码打包转换后的位置信息,实质是一个 json 描述文件,维护了打包前后的代码映射关系。»
你没饰八
SaaS和云计算有什么区别?
SaaS和云计算有什么区别?
你没饰八
vue history模式访问404问题?
location / {
try_files $uri $uri/ /index.html;
}
nginx配置了吗
你没饰八
vue2项目,为什么window下会挂在vue,Vuex,ELEMENT这些对象?
配置config.externals意思是:
因为在webpack在打包时不将这些库打包进最后的输出文件,而是在运行时从外部引入,所以在运行时通过全局变量window访问
你没饰八
go的正则匹配换行和js不一样吗?
又没有可能是你的"getContent()"内容未转译?
我按照你的方式在本地直接使用字符串是可以匹配的;
package main
import (
"fmt"
"regexp"
)
func main() {
const str = `tetsdfdsf
## Contents
- [test](#test)
- [Contents](#contents)
- [test2](#test2)
- [fdf and dfdf](#dfdf-and-dffd)
- [dfdf](#dfdf)
- [dfdf Building](#dfdf-building)
- [Build dfdf](#build-dfdf)
- [dfdf Line](#df-dfd)
- [dfd dfdf dfd](#advanced-console-dfd)
- [dfdf dfdf](#standard-cli)
- [dfdf](#configuration)
- [Continuous Integration](#continuous-integration)
- [dddd Preprocessors](#dddd-preprocessors)
**[⬆ back to top](#contents)**
`
reg := regexp.MustCompile(`Contents\n\n(.|\n)+?\n\n`)
fmt.Printf("%#v", reg.FindSubmatch([]byte(str))[0])
}
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241203/242bb4036f8c7f4aab2aaf416727fc9e.png)
你没饰八
写前端html css js代码时用哪个ai工具最靠谱,求教?
没有绝对靠谱的,就我个人感受而言。如果只是要解决某个模块或者实现代码片段,那么可以尝试一下。楼上有不少推荐了,都可以试试,符合自己使用习惯就好。
如果不考虑后期维护的话,随便整。如果要维护呢,就拿代码片段做一些调整优化。
你没饰八
如何使一个元素不撑高父元素?
无论是图片还是文字,都是元素,既然是元素,只要没脱离了父元素,并且不是背景,同时父元素的高度没有一个固定值的话,那么父元素将会被最大高度的子元素撑开。所以,如果你想要父元素不被某一个子元素撑开高度,那么可以考虑下面几个点:
* 把不想要撑开父元素的那个子元素通过 "absolute" 绝对定位方式,脱离文档流;
* 如果子元素是图片的话,可以考虑使用背景图的方式(有可能被裁切,但也有办法处理,但按照这个效果图的情况来看,背景图应该不合适);
所以,简单来说,使用定位的方式应该是比较简单直接的。
你没饰八
k8s 如何设置「尽量反亲和性」?
k8s 的反亲和性非常的愚蠢
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution: #设置调度策略。
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- imdb-match-api
topologyKey: kubernetes.io/hostname
是强制反亲和的
比如我有 10个 node,需要部署 12个一样的pod
我希望这 8个节点各部署一个 pod,另外 2 个节点各部署两个 pod
但是 k8s 设置了反亲和性,就最多只能部署 10 个 pod 了,另外两个 pod 就永远是 pending 状态了
我只是希望尽量部署在不同机器上,避免一台机器挂了,导致这些 pod 被一锅端,但不强求一个 node 只能部署一个 pod
我该怎么做呢?
你没饰八
vite打包疑问?
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20241127/62ef8ae3c9f778880e25a0c095057147.png)
package.json 写两个 script ,再写一个 script 通过 && 合并起来
然后通过 command 定义的不同写两份不同的 build 配置文件
你没饰八
pda app开发技术选型,有开发过的给给经验,给点经验建议?
之前有个pda用的app用uniapp+uview开发、vue2,开发后的效果体验不是很好,特别是需求有很多地方要求聚焦(uniapp聚焦会弹出键盘,这个做的隐藏事件感觉我写的不好,肉眼能看到键盘弹出又隐藏,但是找不到其他的解决方法,nextTick事件触发好像也会有问题,有时候要nextTick嵌套nextTick才可以),回车聚焦。整体的流畅度体验下来也很差(可能是我技术的问题),pda
android版本是7以上,一般是9。
想知道大家有用java或kotlin原生开发,或者flutter等其他开发出来app的体验怎么样、开发效率怎么样
你没饰八
echarts地图阴影会在区域块内部显现出来怎么解决?
将边框置为0
regions: [
{
name: 'New Mexico',
itemStyle: {
areaColor: '#eee',
shadowBlur: 2,
shadowColor: 'green',
shadowOffsetY: 15,
shadowOffsetX: -15,
opacity: 1,
borderWidth:0 //边框置为0
}
}
]
你没饰八
Echarts dataZoom事件如何只获取拖动结果?
加个判断
recentEntryBarGog.on('dataZoom', function (event) {
if (event.start !== undefined && event.end !== undefined) {
// 仅在拖动结束后的事件中执行
console.log('[REZoom] section S2 dataZoom event start');
const temp = getXAxisRange(this);
console.dir(temp);
console.log('[REZoom] section S2 dataZoom event end');
}
});
你没饰八
有没有离线的文字识别库,可以在浏览器环境中使用的?
Tesseract.js
«"https://github.com/naptha/tesseract.js/" (https://link.segmentfault.com/?enc=yZSrfuTHb4wnVjAPgsLPbw%3D%3D.3jRCEUG%2BJPQcwre4sL6HF0KRHjSSQk0Nu%2Bxxx1qA0TksSLryhhoH2Yh3zX4JtikH)»
你没饰八
正则表达式问题使用new RegExp与字面量test结果不一致?
正则表达式问题使用new RegExp与字面量test结果不一致,new出来是true,使用字面量是false
//new
new RegExp("^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\\W_]+$)(?![a-z0-9]+$)(?![a-z\\W_]+$)(?![0-9\\W_]+$)[a-zA-Z0-9\\W_]{8,15}$",'g').test("123#kjdsls")
//字面量
/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\\W_]+$)(?![a-z0-9]+$)(?![a-z\\W_]+$)(?![0-9\\W_]+$)[a-zA-Z0-9\\W_]{8,15}$/g.test("123#kjdsls")
你没饰八
为啥两个type不一样?
因为"Distributive Conditional
Types" (https://link.segmentfault.com/?enc=zvS8YrYCmi6FQLDFYGflSQ%3D%3D.ezfeZn2Cfh6CUVN0AMsZBrSVkcQM6n02blTt4WpTjLnVmZEjy1%2BThhEdSD6B54S966iEuCT%2F56sFfgy%2BcUCWT4xbk93QtEpFYZTRyE%2B3ABEap39JCINOuo4%2FURk8ftm8KyDI%2B38xSk%2BB9HUvwLU1%2BA%3D%3D)
// 所以 type res2 = MyExclude 相当于
type res2 = ('a' extends a ? never : 'a') | ('b' extends a ? never : 'b') | ('c' extends a ? never : 'c')
你没饰八
如何批量给Excel文件添加数字签名?
public void AddSignature() {
Workbook wb = new Workbook();
ISignature signature = wb.getSignatures().addSignatureLine(wb.getActiveSheet(), 100, 50);
ISignatureSetup setup = signature.getSetup();
setup.setShowSignDate(false);
setup.setAllowComments(false);
setup.setSigningInstructions("Please check the content before signing");
setup.setSuggestedSignerEmail("example@example.com");
setup.setSuggestedSignerLine2("Commander (Balanced)");
wb.save("output/SignatureLines.xlsx");
}
参考资料:"https://www.grapecity.com.cn/developer/grapecitydocuments/exc..." (https://link.segmentfault.com/?enc=riPDu2KwaXbSnXEJ3An58Q%3D%3D.JkH%2FA4eqUKMacoeHRdJ7S%2B5E3wy%2Bt6G8a4otFzjGFIXQFfpYU3%2FRM%2BxKXCNUBpF5DjGCmkKXrtEFtIpPuWztJPtB69BbOyYAZlzMREXbb4EhnZHPTYkGn8R1KjM4TCp%2B1WawXQfXTIMdrD7DnzwVGA%3D%3D)
你没饰八
如何在chrome element面板调试一个需要页面交互才能显示,交互结束会立刻消失的节点?
参考之前的一个回答,弄一个延时的 debugger ,然后把鼠标放上去,等待 debugger 生效,就会暂停在那里了。
* "前端 - 浏览器怎么在控制台修改日历弹框样式? - SegmentFault 思否" (https://segmentfault.com/q/1010000043716985/a-1020000043717947)
你没饰八
为什么 windows 非得 utf-8 带 bom才能编译?
为什么 windows下 visual studio 非得 utf-8 带 bom才能编译?
你没饰八
在原型上实现 filter 方法?
https://wmlx-new-image.oss-cn-shanghai.aliyuncs.com/images/20241030/47ea4782759aea34542557b2b7221656.png
应该怎么修改代码呀?才能运行过去
解决问题
你没饰八
使用 apache 服务器执行 python 的 cgi 脚本时出现中文乱码?
可能是默认使用gbk编码,然后输出确设置为utf,导致编码方式不同造成的
你没饰八
docker 构建镜像出现 INTERNAL_ERROR 失败?
我用你这个代码测试了一下,能正常编译
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241015/380e5da56af11e7ada5231382e68697d.png)
所以大概率是你的网络的问题,或者 docker hub 被墙了。
***
补充回答:根据附件,我终于知道问题的根因了。请看图。
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241015/ebae651060416eb338c3dcd09cce45b2.png)
这个 "Dockerfile" 编码不是通常的 "UTF-8" 而是 "UTF-16 LE"。
这就是根因了,你可以试试将出问题的那个文件夹中的 Dockerfile 改成 UTF-8 编码再试。
你没饰八
网络测速需要前端如何设计?
如果不考虑兼容性的话,"Network Information
API" (https://link.segmentfault.com/?enc=1c%2FevK8yioLBJTxX8id16g%3D%3D.%2B3crbccgixX7%2FP3m0YemXbOjS0W088dqGHOf7Gv1TXGnVyWnZyXe9p5aBujFdBanZ1EBPm4if2PP5CBncojPYU3KYOaiFCma45F7o1Ada%2FY%3D)
下的
"downloadlinkMax" (https://link.segmentfault.com/?enc=bztMWU8YoSxR%2F%2FmYU5rVFg%3D%3D.UIa3ZO5kXJhfc3i26o3fANKLovn8veE5KTo5DCy0JbO%2F9J52vk%2F9EBz7Z3Miw55L4fU8eAHnHdnagUmWU4CZveks6aj57hsM7kacbUyBqhk%3D)
属性,可以获得当前网络下的最大下行速度。
navigator.connection.downlinkMax;
如果要考虑兼容问题,个人认为是通过下载一定大小的资源,通过下载时间来计算下行速度。
毕竟为了测试下载速度,真的下载了100m的文件,有点不合适。
你没饰八
如何让网页的滚动条只在滚动的时候才显示出来?
我修改了滚动条的颜色,但是修改后它就变成常驻的了,我希望它和之前一样,只在滚动的时候才显示出来。
下面是我的代码:
import { Component } from 'react';
import styles from './style.less';
export default class DraftPage extends Component {
render() {
return (
DraftPage
hehh
);
}
}
.container {
overflow: auto;
}
body::-webkit-scrollbar {
width: 6px;
}
body::-webkit-scrollbar-thumb {
background-color: red;
}
我该如何修改?
你没饰八
centos stream 9 PHP8.3 安装PHP扩展卡死?
centos stream 9 PHP8.3 安装PHP扩展卡死。
在LNMP扩展安装中勾选fileinfo安装,控制台滚动一会儿以后就会卡死,
服务器CPU一直保持在70%左右占用,硬盘则保持100MB左右的读取,没有写入,
此时刷新网页无法加载面板,FTP与SSH也无法连接,系统无响应,重启服务器后才恢复正常。
如何才能正常安装扩展?
你没饰八
如何实现云存储 txt下载而不是直接打开?
改一下云存储的文件头就行了
你没饰八
css多行文本溢出,内部放入行内块元素显示异常?
css多行文本溢出,内部放入行内块元素显示异常
设置2行文本溢出,在文字头部放入view,样式设置inline-block,2行文本溢出是可以,但是神奇的是第一行竟然也显示...了,去掉这个view元素就正常2行显示...,
优惠活动
文本本文文本本文文本本文文本本文文本本文文本本文文本本文
有没有大佬知道这是什么情况。小程序代码
你没饰八
如何在mysql中统计json数组中某些值的计数?
如何在mysql中统计json数组中某些值的计数?
json数据如下:类型是json
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241013/0f2d13b7460eed1023bbaf8f9fe79c3c.png)
我想统计比如一个集合中:{"3467562849402896",
"3467562861985809","3465044211793921"}的每个元素 被使用了几次?上述集合中的元素个数是不固定的,是输入的参数
方案:
我知道mysql8的JSON_TABLE是可以的,但是我的版本是5.7
我想到一个方案是这个:先用下面的sql找出来谁用了这个id,然后在代码中处理统计次数
where JSON_CONTAINS(tags ,'"3467562849402896"' , '$')
OR JSON_CONTAINS(tags, '"3467562861985809"', '$')
OR JSON_CONTAINS(tags, '"3465044211793921"', '$');
还没有更好的方案呢?
你没饰八
用户角色登录的数据库设计方案选择?
一个Java springboot程序,需要用户根据角色登录 ,用户角色有管理员、学生、教师三种
目前数据库表有如下两种构建方式:
1. 直接整一个用户表然后加一个权限字段
2. 除用户表外,对于角色分成老师学生管理员三个表,将其与用户表进行关联
从程序的健壮性及后期维护成本来说,请问哪种方案好一点
你没饰八
如何在断网状态下播放缓存的音频?
转base64后存localstorage了
你没饰八
抱歉。安装 AMH 失败了.?
只是报错权限不够,要查系统是否有做过什么限制,有没安装过一些安全软件限制编译等,
也排查/tmp目录是否有权限。最好用纯净的系统安装amh。
你没饰八
使用 Bootstrap 5 创建下拉菜单后无法收回?
使用 Bootstrap 5 创建下拉菜单后,点击可以展开,但是再次点击无法收回。
这是我的代码:
{% load static %}
Title
1 Python 解释器
1.1 调用解释器
1.2 解释器的运行环境
2 Python 速览
2.1 Python 用作计算器
2.2 走向编程的第一步
如何解决这个问题?
你没饰八
为什么 Python subprocess.Popen 调用 exe 文件未正常结束?解决方案?
Python subprocess.Popen 调用的 exe 文件没有成功运行结束
我先写了一个 C++ 的程序
#include
using namespace std;
int main() {
int n;
scanf("%d",&n);
printf("%d",n);
return 0;
}
然后成功将其编译成 exe
手动在命令行调用 ""F:\\Online_Judge\\static\\code\\1" "F:\\Online_Judge\\static\\code\\1_1.out""
(保证文件存在且可以正常调用,并且权限足够)
可以成功运行,将 1.in 中的数据读入并写到 1_1.out 中,用 Python 运行以下代码
"subprocess.Popen(['F:\\Online_Judge\\static\\code\\1', 'F:\\Online_Judge\\static\\code\\1_1.out'])"
使用列表传参的方式运行命令行,但是该 exe 并没有成功运行结束,在 cmd 的 tasklist 中可看见 exe 卡住了
Python 使用 subprocess.Popen 调用 exe 文件后,exe 文件卡住没有成功运行结束,请问这是什么原因?
你没饰八
react 父子组件传参,由于父组件传递的参数类型有些问题,不能直接使用,需要做些改变,在哪个阶段处理比较好?
如果 "arr2" 单纯是基于 "arr" 推导出来的,用 "useMemo" 就行了,不需要子组件再定义一个状态
import React, { useState } from "react";
export default function Child(props) {
const arr2 = useMemo(() => {
// TODO...
}, props.arr)
return (
21
)
}
如果 "arr2" 本身是归属与 "子组件" 的状态,但 "父组件" 某个状态更新时,也需要更新 "子组件" 的状态 那你这种写法时可以的
你没饰八
为什么TCP/IP 总是绑定在一起说呢?
1、来自百度百科-万方:
TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,
只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
它们俩经常绑定在一起是因为常常结合起来使用。
2、UDP可以认为是TCP的一个子集,复杂度上不如TCP,要选较有代表性的就选TCP了
你没饰八
使用 vue/cli-service 做代理转发的时候,遇到 403 如何解决?
同事给我解决了
"图片.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241007/79bceb1a4aae24eea142e565ee9a997d.png)
加个选项,xfwd: false
"图片.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241007/7b0e0c0964fa1d02b78e475c273363d2.png)
"https://github.com/http-party/node-http-proxy" (https://link.segmentfault.com/?enc=thz%2FrAWNXgUxmTVQkja78A%3D%3D.2%2F8i7TPkgueNLC0VAwAATUSDQH0TSzhv40uFX2aNFjfAg9CrMTnVU8kA5O9SFsIm)
你没饰八
element弹窗嵌套表格关闭后还会再调用一次嵌套组件?
使用element弹窗嵌套表格,触发弹窗打开事件后,控制台打印调用了嵌套表格获取数据的方法10次(10次不知道根据什么循环出来的),并且关闭弹窗的时候又调用了嵌套表格获取数据的方法10次。在关闭的时候,弹窗还会在调用一变嵌套组件,并数据缓存给下一个嵌套表格,只有二次点击才会获取拿到对应数据
弹窗嵌套:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241007/746e43b9f1c60389ec705314ce721066.png)
在表格外部的弹窗
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241007/d6e97d3e024654b09a29803c665186d3.png)
触发点击事件给嵌套组件传值并打开弹窗:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241007/c840808faf80e698ef41ed8060545ff7.png)
在引用组件内给表格赋值:
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241007/19460c927739bd0ad40316137dda0f6a.png)
弹窗关闭动画时的回调
"image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241007/601167d318f2e659fb89442ea316a0f4.png)
把弹窗放到表格外部,解决多次调用嵌套表格获取数据方法。
你没饰八
echarts堆叠图,数据变化不大的情况下,如何设置趋势变化明显一点?
用 2套 Y轴
一套 的坐标数值范围改成 30 - 40
另一套 坐标数值范围改成 60 - 70
你没饰八
Webpack 中 vendor 跟 DLL 如何取舍?
dll好处有两点
1. 能提升打包效率,因为不参与项目构建的,所以大部分场景可以将频次最低的npm包放到dll(react全家桶)
2. 如果部门有很多前端项目,也可以考虑共用这个dll,还能通过缓存提高页面性能
vendor则是参与构建过程的,同样也可以放一些比DLL修改频次更高的包,目的是为了控制包体积,提升页面性能,当然打出来的hash值同样可以做缓存控制
具体选择什么方式还得看你们项目的实际情况而定
你没饰八
处理登陆页面首次登陆白屏的问题,有知道的怎么处理的么?
准备项目结构与拆分路由
定义登录页面组件 在项目中创建并配置登录页面组件,例如将其放在 src/views/Login.vue 文件中。
路由配置 在路由配置文件中,为登录页面设置一个带有特殊meta属性的路由,表示该路由需要进行服务器端渲染(SSR):
// router.js 或相关路由配置文件
import Login from '@/views/Login.vue';
import { createRouter, createWebHashHistory } from 'vue-router';
const router = createRouter({
history: createWebHashHistory(),
routes: [
// 其他非SSR路由...
{ path: '/', component: () => import('@/views/Home.vue') },
// 登录页SSR路由
{ path: '/login', component: Login, meta: { ssr: true } },
],
});
编写服务端渲染入口
创建一个服务端渲染入口文件(如 server-entry.js),实现SSR逻辑:
// 导入相关模块
import Login from '@/views/Login.vue';
import { createApp } from './app';
import { createServerRenderer } from '@vue/server-renderer';
import { router } from '../router'; // 引入路由配置
// 判断是否为SSR路由的方法
function isSSRRoute(routeMeta) {
return routeMeta && routeMeta.ssr;
}
// 创建服务器渲染器
export default createServerRenderer(async context => {
// 创建应用实例和路由实例
const { app, router: _router } = createApp();
// 根据请求路径决定是否进行SSR渲染
const matchedComponent = router.getMatchedComponents({ path: context.url })[0];
if (isSSRRoute(matchedComponent.meta)) {
// 设置当前路由并等待数据加载完成
_router.push(context.url);
await _router.isReady();
}
// 执行服务器端渲染并将结果转换为HTML字符串
return renderToString(app);
});
数据预取与服务端环境配置
数据预取 如果登录页面在渲染时需要从服务器获取数据,可以在组件中使用 asyncData 或 fetch 钩子方法,确保在服务器端渲染前获取所需数据。
在登录页面组件中使用asyncData钩子:
在Login.vue组件的标签内添加asyncData方法,该方法会在服务器端渲染时被调用,并在组件实例化前同步数据。
export default {
data() {
return {
// 初始化数据
};
},
async asyncData({ store, params, query }) {
// 使用Vuex Store、路由参数或查询参数来获取数据(如果有)
// 根据实际情况替换以下示例API请求
const response = await this.$axios.get('/api/login-preload-data');
// 返回一个对象,其属性将合并到组件的data对象中
return {
initialFormData: response.data, // 假设这是登录页面需要的初始数据
};
},
methods: {
// 登录逻辑等其他方法
},
};
在非Nuxt.js项目中处理SSR时的数据预取:
如果不是在Nuxt.js环境下,需要在自定义的服务器端渲染逻辑中手动触发asyncData的执行。在调用renderToString方法前,先执行asyncData并等待其返回结果。
// server-entry.js
import { createApp } from './app';
import { createServerRenderer } from '@vue/server-renderer';
import { router } from '../router';
import Login from '@/views/Login.vue';
// 创建一个通用的处理函数,用于执行asyncData
async function executeAsyncData(component, context) {
if (component.options.asyncData) {
const asyncDataResult = await component.options.asyncData(context);
return Object.assign({}, context, asyncDataResult);
}
return context;
}
export default createServerRenderer(async context => {
const { app, router: _router } = createApp();
// 获取匹配的组件
const matchedComponent = router.getMatchedComponents({ path: context.url })[0];
// 如果是登录页面并且需要SSR
if (matchedComponent === Login && matchedComponent.options.meta.ssr) {
// 执行asyncData
context = await executeAsyncData(matchedComponent, context);
}
_router.push(context.url);
await _router.isReady();
return renderToString(app);
});
服务端环境
安装依赖 安装 @vue/server-renderer 包,用于在服务器端渲染Vue应用。
配置Webpack 调整Webpack配置,分别构建用于客户端和服务器端的bundle文件。
npm install --save @vue/server-renderer
用yarn:
yarn add @vue/server-renderer
Webpack配置调整
分别构建客户端和服务器端bundle
webpack.client.config.js:
const { VueLoaderPlugin } = require('vue-loader');
const path = require('path');
module.exports = {
target: 'web',
entry: './src/client-entry.js',
output: {
filename: 'client-bundle.js',
path: path.resolve(__dirname, 'dist'),
},
resolve: {
alias: {
'vue$': 'vue/dist/vue.esm-bundler.js', // or vue.runtime.esm-bundler.js for runtime-only build
},
},
module: {
rules: [
{
test: /\.vue$/,
use: 'vue-loader',
},
// other loaders for CSS, images, etc.
],
},
plugins: [
new VueLoaderPlugin(),
],
};
webpack.server.config.js:
const { VueSSRServerPlugin } = require('vue-server-renderer');
const path = require('path');
module.exports = {
target: 'node',
entry: './src/server-entry.js',
output: {
libraryTarget: 'commonjs2',
filename: 'server-bundle.js',
path: path.resolve(__dirname, 'dist'),
},
resolve: {
alias: {
'vue$': 'vue/dist/vue.runtime.common.prod.js', // use the production version of Vue with server rendering capabilities
},
},
module: {
rules: [
{
test: /\.vue$/,
use: 'vue-loader',
},
// other loaders for CSS (usually extract-text-webpack-plugin for SSR), images, etc.
],
},
externals: nodeExternals(), // 忽略node_modules目录,只打包应用程序依赖
plugins: [
new VueSSRServerPlugin({
filename: 'vue-ssr-server-bundle.json', // 输出Vue SSR编译后的JSON文件
}),
],
};
// Node.js外部模块解析器,通常需要安装对应的包:npm install --save-dev nodeExternals
function nodeExternals() {
return ({ context, request }, callback) => {
if (request.match(/\.(css|scss|sass|jpg|png|gif)$/i)) {
return callback(null, 'empty-module');
}
if (/^vue/.test(request)) {
return callback();
}
callback();
};
}
上面只是示例,可以参考,然后还需要在项目中创建相应的client-entry.js和server-entry.js文件,分别作为客户端和服务器端的入口点。在服务器端入口文件中,通常会包含服务端渲染的相关逻辑,包括引入Vue组件、创建应用、处理请求并调用@vue/server-renderer进行渲染。
构建Node.js服务器
创建Node.js服务器 使用Express或其他框架创建一个HTTP服务器,监听客户端请求。
// server.js
import express from 'express';
import serverRenderer from './server-entry.js';
const app = express();
// 处理请求并返回SSR渲染的HTML
app.use(async (req, res) => {
const html = await serverRenderer(req, res);
res.send(html);
});
// 启动服务器
app.listen(3000, () => {
console.log('Server is listening on port 3000');
});
整合客户端逻辑
客户端接管
确保在HTML模板中注入客户端脚本,当脚本加载并执行时,Vue应用将识别并接管已经存在于DOM中的服务器端渲染内容,从而实现无缝切换至客户端渲染模式。
综上所述,差不多就ok了。。。。。。通过对登录页面进行特别标记、编写服务端渲染逻辑、预取数据、配置服务端环境并启动服务器,以及在客户端进行正确的接管,Vue项目中的登录页面就可以成功实现服务器端渲染。这样不仅提高了SEO效果,还能让用户更快地看到登录页面的初始内容。