InfraPub 为您找到相关结果 631

技术部门的 SEO 规范

遵守的SEO规范,开发网站或修改网站时,即使不与SEO部门协同,也至少不能违反SEO规范,以防产生灾难性的后果。以前为客户写过一些技术部门SEO规范,现在简单整更新一下,分享给大家,希望对其它公司也有帮助。 技术部门SEO规范 本SEO规范适用于公司所有新建网站及对现有网站的更新、改版。本SEO规范不是建议,是强制性规定。编程、前端、运维等技术相关部门务必遵守。 对本SEO规范中的内容有疑义时,请与SEO部门沟通,不可自行解释有疑义部分。 域名及服务器相关 只解析公司因业务需要决定开通的子域名。未开通子域名一律不解析。不要使用泛解析(以通配符*代替子域名)。不能有两个或两个以上域名显示同样网站内容(无论以哪种方式实现,如解析至相同根目录、上传同样文件和数据库)。用于测试的子域名使用...阅读全文

博文 2019-03-28 13:58:51 debian.cn

Gitlab CI 配置文件 .gitlab

本文档是描述 .gitlab-ci.yml 详细用法的下半部分,上半部分的内容请参考这里。.gitlab-ci.yml 文件被用来管项目的 runner 任务。如果想要快速的了解GitLab CI ,可查看快速引导。 该文件存放于项目仓库的根目录,它定义该项目如何构建。 参考阅读:Gitlab CI 配置文件 .gitlab-ci.yaml 详解(上) artifacts 注意: 非Windows平台从GitLab Runner v0.7.0中引入。 Windows平台从GitLab Runner V1.0.0中引入。 在GItLab 9.2之前,在artifacts之后存储缓存。 在GItLab 9.2之后,在artifacts之前存储缓存。 目前并不是所有的executors都支持...阅读全文

博文 2018-12-12 21:09:02 ci.yaml 详解(下)

HTML 5.1 — 14 项新增特性及使用案例

。 < ahref="#" target="_blank" rel="noopener"> The link won't make trouble anymore 13. 灵活处图片标题

标签表示与
元素关联的标题或图例,通常作为例如图片、图表、插图等视觉元素的容器。在早期的 HTML 版本中,
只能用作第一个或最后一个
的子标签。HTML5.1 已放宽此限制,现在您可以在
容器中的任何位置使用

The Headline of todays news

阅读全文

博文 2021-01-28 17:50:20 debian.cn

三个技巧 大幅减少 Docker 镜像体积

需要的只是 Node.js。Docker 容器应该只包含一个进程以及用于运行这个进程所需的最少的文件,你不需要整个操作系统。实际上,你可以删除 Node.js 之外的所有内容。 但要怎么做?所幸的是,谷歌为我们提供了 distroless。以下是 distroless 存储库的描述: “distroless”镜像只包含应用程序及其运行时依赖项,不包含程序包管器、shell 以及在标准 Linux 发行版中可以找到的任何其他程序。 这正是你所需要的!你可以对 Dockerfile 进行调整,以利用新的基础镜像,如下所示: FROM node:8 as build WORKDIR /app COPY package.json index.js ./ RUN npm install FROM...阅读全文

博文 2018-09-06 10:50:29 debian.cn

2017 热门开源自动化测试框架优缺点对比

。 优点: 启动和测试执行速度快。 自带断言和注释。 支持并行测试。 支持测试驱动开发(TDD)。 缺点: 非跨平台,仅适用于 .Net 语言。 未集成到 Visual Studio echo 系统中,意味着使用它需要更多的维护。 一个很好的 C#开源单元测试框架,历史悠久,口碑较高。 不过,如果你正准备使用 .NET 语言,也可以考虑 MSTest 。 5. TestNG TestNG 是一个 Java 自动化测试框架,受 JUnit 和 NUnit 的启发,但又改进和新增了一些功能。旨在涵盖所有自动化测试类别:单元测试、功能测试、端到端、集成测试等。 优点: 容易整合到 maven 循环中。 使开发人员能够编写灵活而强大的测试。 支持数据驱动测试(DDT)。 注释很容易解。 测试用例可以轻...阅读全文

博文 2017-11-15 08:52:47 debian.cn

Chrome浏览器中新增反恶意软件广告功能

向用户。 谷歌指出,这些(误导性UI元素)包含伪装成播放键或其它网站控制的第三方站点的链接,或者是网站上的透明覆盖图,抓取所有的点击和开放的新页签或窗口。 在谷歌上注册了站点的网站所有人将会在谷歌控制台的“滥用体验报告”部分收到关于这种误导性质的UI元素的警告信息。谷歌表示从明年1月份开始,没有处这些报告的网站所有人将会通过Chrome内置弹出消息拦截器经由这些误导性元素触发重定向。...阅读全文

博文 2017-11-18 09:00:06 debian.cn

使用 tmate 分享你的终端会话

/DeBucoyRfdOtlUmb5D214NC8 magi@magi-VirtualBox The key's randomart image is: +---[RSA 2048]----+ | | | | | . | | . . = o | | *ooS= . + o | | . =.@*o.o.+ E .| | =o==B++o = . | | o.+*o+.. . | | ..o+o=. | +----[SHA256]-----+ 如何安装 tmate tmate 已经包含在某些发行版的官方仓库中,可以通过包管器来安装。 对于 Debian/Ubuntu,可以使用 apt-get 命令或者 apt 命令来安装。 $ sudo apt-get install software-properties-common $ sudo...阅读全文

博文 2017-12-06 10:33:33 debian.cn

Go1.16 新特性:一文快速上手 Go embed

embed.FS func main() { print(s) print(string(b)) data, _ := f.ReadFile("hello.txt") print(string(data)) } 输出结果: 吃煎鱼 吃煎鱼 吃煎鱼 我们同时在一个代码文件中进行了多个 embed 的注解声明。 并且针对 string、slice、byte、fs 等多种类型进行了打包,也不需要过多的处,非常便利。 拓展用法 除去基本用法完,embed 本身在指令上也支持多种变形: //go:embed hello1.txt hello2.txt var f embed.FS func main() { data1, _ := f.ReadFile("hello1.txt") fmt.Println...阅读全文

博文 2021-02-17 08:44:12 CSDN

AD:为什么说 CoinEx 是一家很有潜力的数字货币交易所?

年7月 更是登顶全球交易所交易量排名榜首,成为全球产品布局最广泛的管平台之一。与此同时,[CoinEx](http://cet.im) 已经是一个提供币币交易、杠杆交易、永续合约等多元化衍生品交易服务,支持中/英/日/韩/俄等多国语言,为全球超过一百个国家和地区提供安全、稳定、可信赖的数字资产交易服务。 在当前的大环境下,CET飙涨一路绿灯,CET及其背后的全球数字货币交易平台CoinEx走进了更多人的视线中;同样受到关注的,还有 CoinEx 即将推出的全新支持智能合约的智能链 [CoinEx Smart Chain(CSC)](https://www.coinex.org/)。市场利好条件虽说是推动 CET 币价的因素之一,但更加关键的还是CoinEx这股厚积薄发的力量。 下面就详细为...阅读全文

Golang 应用集成 Prometheus 统计数据支持

Prometheus 客户端公开了在暴露服务指标时能够运用的四种指标类型。查看 Prometheus 的文档 以获得关于各种指标类型的深入信息。 Counter(计数器 一种累加的 metric,典型的应用如:请求的个数,结束的任务数,出现的错误数等。随着客户端不断请求,数值越来越大。例如api_http_requests_total{method="POST", handler="/messages"} Gauge(计量器) 一种常规的 metric,典型的应用如:温度,运行的 goroutines 的个数。返回的数值会上下波动。 例如 go_goroutines{instance="172.17.0.2", job="Prometheus"} Histogram(分布图) 可以解为柱状图,典型的应用如...阅读全文

博文 2022-11-24 10:33:09 CSDN博客

开源软件对于商业机构的6大好处

常是对产品供应商有利,而非客户。如果软件停止运行,或者如果供应商要求支付更多的费用,你甚至无法起诉供应商的不当行为。而像 GPL 一类的开源许可证就是为保护客户专门设计的,而不是供应商,它确保你按照自己的需求使用软件,而没有专制限制。 由于它们的广泛使用,GPL 及其衍生许可的含义被广泛解。 例如,许可证允许你现有(开源或闭源)基础设施通过定义良好的 API 与其连接,对时间或用户数量没有限制,并且不会强制你打开配置或知识产权 财产(如公司标志)。但有一个问题就是,有一些开源内核混合了 GPL 和专有软件的条款,这违反了许可证规定,会将客户置于危险境地。 使用专有软件意味着你需要面对严苛的法规遵从性条款,还有承担高额罚款的风险。...阅读全文

博文 2017-11-15 23:41:11 debian.cn

Linux 27周年:这27件有趣的事实你可能不知道

!Linus Torvalds 原本想把他的“业余爱好”项目称为“FreaX”(“ Free”和“Unix”的组合)。值得庆幸的是,他早期使用的代码托管服务器的所有者说服了他,最终取名为 “Linux”(“Linus”和“Unix”的组合)。 3、首个 Linux 版本 100% 由 Linus Torvalds 编写,但最新的版本仅包含不到 1% 的 Linus 编写的代码。他并不懈怠,现在主要是忙于管和合并其他开发者编写的代码。 4、Linux 被世界上所有主要的太空计划使用,包括 NASA 和 ESA 。 5、谈及更广阔的宇宙,有以 Linux 和 Linus Torvalds 命名的小行星。 6、Linux 的吉祥物 Tux 之所以是一只企鹅,据 Linus 回忆是因为他曾经被一只愤怒的企鹅...阅读全文

Debian的版本号及distributions

release的code name(名为code name的distribution)。每天一些叫做britney的scripts都会被运行,从sid中选出满足一定条件的packges更新到testing中。当release manager感觉合适的时候,testing被frozen,这意味这控制packages从unstable到testing的策略变紧了,too buggy的pacakges被移除,除bug fixes外其他改动不允许进入testing。根据进度一段时间过后,testing更进一步被frozen。处testing的细节被Release Team在debian-devel-announce上发布。当Release Team对当前问题的解决情况达到满意的程度后,testing就被...阅读全文

博文 2021-01-28 17:50:08 debian.cn

AWS省钱攻略:预留实例怎么玩

实例的合并,必须在相同的时间过期,换句话说,也就是该批实例必须是同期采购的相同期限的RI。 可转换RI(CRI) CRI在灵活匹配与合并拆分的基础上增加了更多维度可转换属性:实例类型、操作系统、租期、付款选项,当然价格可能可能上浮10个点左右。可以说CRI提供了最高的灵活可变性,几乎可满足所有的更变需求。唯一的限制: 新可转换预留实例的总价值(预付价格 + 每小时价格 * 剩余小时数)必须大于等于当前总价值! 换句话说客户只能在现有基础上加价,这种也是有道,AWS 总不能因为您换了小规格实例给你退钱吧。 AWS RI使用的一些建议 如果没有容量预留的需求不要选择可用区RI,否则将失去灵活匹配优势针对业务计算需求增加需要调整实例类型机型(非license ) ,无需调整已购买的RI,只需要考...阅读全文

博文 2019-08-18 18:26:19 debian.cn

如何在 Debian 中安装 DHCP 服务器

动态主机配置协议(DHCP)是一种用于使主机能够从服务器自动分配 IP 地址和相关的网络配置的网络协议。DHCP 服务器分配给 DHCP 客户端的 IP 地址处于“租用”状态,租用时间通常取决于客户端计算机要求连接的时间或 DHCP 服务器配置的时间。 DHCP 如何工作? 以下是 DHCP 实际工作原的简要说明: 一旦客户端(配置为使用 DHCP 的机器)连接到网络后,它会向 DHCP 服务器发送DHCPDISCOVER数据包。 当 DHCP 服务器收到DHCPDISCOVER请求报文后会使用DHCPOFFER包进行回复。 然后客户端获取到DHCPOFFER数据包,并向服务器发送一个DHCPREQUEST包,表示它已准备好接收DHCPOFFER包中提供的网络配置信息。 最后,DHCP...阅读全文

博文 2021-01-28 17:50:25 debian.cn

linux下查看系统socket读写缓冲区_eyucham的专栏

/proc/sys/net/core/rmem_max 131071 131071:tcp 或 udp 接收缓冲区最大可设置值的一半。 也就是说调用 setsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 时rcv_size 如果超过 131071,那么 getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 去到的值就等于 131071 * 2 = 262142 [root@ www.linuxidc.com]# cat /proc/sys/net/core/wmem_max 131071 131071:tcp 或 udp 发送缓冲区最大可设置值得一半。 跟上面同一个道 3...阅读全文

博文 2021-01-26 16:21:35 CSDN博客

使用 setfacl 管理文件的访问控制列表ACL

如果你是在一个大型组织,你运行了 NFS 或者 Samba 服务给不同的用户,你将会需要灵活的挑选并设置很多复杂的配置和权限去满足你的组织不同的需求。Linux(以及其他Unix等POSIX兼容的操作系统)有一个被称为访问控制列表(ACL)的权限控制方法,它是一种权限分配之外的普遍范式。例如,默认情况下你需要维护3个权限组:owner、group和other。 使用ACL后,你可以设置权限给其他用户或组,而不单只是简单的"other"。可以允许指定的用户A、B、C拥有写权限而不再是让他们整个组拥有写权限。 ACL支持多种Linux文件系统,包括ext2, ext3, ext4, XFS, Btrfs等。如果你不确定你的文件系统是否支持ACL,请参考文档。 首先我们需要安装工具来管ACL...阅读全文

兼容 tmux 的文件上传/下载工具 trzsz ( trz / tsz ) 使用指南 支持进度条和目录传输

择合适的缓冲区大小,但不会超过此上限。-t 超时时间trz -t 30 或 tsz -t 30 xxx 等,设置超时秒数 ( 默认 20 秒 )。在超时时间内,如果无法传完一个缓冲区大小的数据则会报错并退出。设置为 0 或负数,则永不超时。异常处方法如果 tmux 不是运行在远程服务器上,而是运行在本地电脑上,或者运行在中间的跳板机上。方案1:使用 tmux -CC 与 iTerm2 集成,请参考 iTerm2 与 tmux -CC 集成。方案2:在本地电脑上安装 trzsz-go,设置 alias ssh="trzsz ssh" 可以方便使用。如果出现了错误,且 trzsz 挂住不能动了:按组合键 control + c 可以停止服务器上的 trz 或 tsz 进程。对于 iTerm2...阅读全文

Rust 1.37.0 稳定版发布

。 cargo vendor 已经在生产中使用过很多种情况:Rust 编译器 rustc 使用它在发行版 tarball 中传递它的所有依赖项,而具有 Monorepos 的项目使用它在源代码管中提交依赖项的代码。 对宏使用未命名的 const 现在可以创建未命名的 const。相比给常量一个显式的名称,只需将其命名为 _ 。例如,在 rustc 编译器中: /// Type size assertion where the first parameter /// is a type and the second is the expected size. [macro_export] macro_rules! static_assert_size { ($ty:ty, $size:expr...阅读全文

博文 2019-08-17 21:17:23 debian.cn

深入了解Docker背后的namespace技术

+ 22:50 0:00 ps aux 在我们预期中ps aux的PID是1,或至少看不到任何从其他父进程进来的 pid 。为什么会这样?我们孵化的进程仍然会有一个来自父进程的/proc视图,也就是说 /proc挂载在主机系统上。那么如何我们解决这个问题?我们如何确保我们新的进程只可以查看在它所在的namespace内的pid呢? 我们可以通过重新挂载/proc 开始。 因为我们会用mount来处,我们可以借此机会使用从MNT namespace所了解到的内容,并结合PID namespace,以确保我们不会将其与自己的主机系统的 /proc搞混。 我们可以通过包含为PID namespace设置的clone flag和为MNT namespace设置的clone flag来启动。他们看起来像是...阅读全文

博文 2015-05-17 10:03:00 debian.cn

Golang常见的十大算法精简版

} /*** * go特有变量交换 */ func SwapGo(list []int, i, j int) { list[i],list[j]=list[j],list[i] } /*** * go变量高阶交换(不推荐,一般不好解) */ func SwapGoAdvanced(list []int, i, j int) { list[i]=list[i]+list[j] list[j]=list[i]-list[j] list[i]=list[i]-list[j] } 运行排序方法 使用终端执行go get github.com/e9ab98e991ab/go-algorithm执行touch main.go执行vim main.go拷贝下方代码块代码到main.go文件中wq保存后直接执行go run...阅读全文

博文 2019-09-05 09:31:10 debian.cn

漫画赏析:Linux 内核到底长啥样

接待了。 Port 21 而在最右侧的一个门牌号 22 的们的待遇就大为不同,居然有一只带着墨镜的小企鹅在守着,看起来好酷啊,它是黑衣人叔叔吗?为什么要这么酷的一个企鹅呢,因为 22 端口是 SSH 端口,是一个非常重要的远程连接端口,通常通过这个端口进行远程管,所以对这个端口进来的人要仔细审查。 ssh daemon 它的身上写着 52,说明它是第 52 个小企鹅。 to fs 在图片的左上角,有一个向下台阶。这个台阶是底层(地基)的文件系统中的,进程们可以通过这个台阶,到文件系统中去读取文件,进行操作。 Crontab 在这一层中,有一个身上写着 217 的小企鹅,他正满头大汗地看着自己的手表。这只小企鹅就是定时任务(Crontab),他会时刻关注时间,查看是否要去做某个工作...阅读全文

博文 2021-01-28 17:50:24 debian.cn

Python的闭包和装饰器

意,可以形象的把它解为一个封闭的包裹,这个包裹就是一个函数,当然还有函数内部对应的逻辑,包裹里面的东西就是自由变量,自由变量可以在随着包裹到处游荡。当然还得有个前提,这个包裹是被创建出来的。 在通过Python的语言介绍一下,一个闭包就是你调用了一个函数A,这个函数A返回了一个函数B给你。这个返回的函数B就叫做闭包。你在调用函数A的时候传递的参数就是自由变量。 举个例子: def func(name): def inner_func(age): print 'name:', name, 'age:', age return inner_func bb = func('the5fire') bb(26) # >>> name: the5fire age: 26 这里面调用func的时候就产生...阅读全文

博文 2014-07-23 17:06:38 debian.cn

Docker 快速入门之 Dockerfile

, LABEL, EXPOSE, ENV, ADD, COPY, ENTRYPOINT, VOLUME, USER, WORKDIR, ARG, ONBUILD, SHELL等指令,这里只选择常用的几个进行讲解,可结合上面的示例进行解。其它的请自行查阅官方文档。 3.1 FROM FROM 指令用于指定要操作的基础镜像,因为在我们构建我们自己的镜像的时候需要一个基础镜像。 语法: FROM [AS ] FROM [:] [AS ] 其中 [AS ] 为指定一个名称,在一个 Dockerfile 中多次使用 FROM 时如有需要,可用 COPY --from= 语法进行复制。 3.2 RUN RUN 指令...阅读全文

博文 2017-12-16 13:50:31 debian.cn

WebAssembly:无需容器的 Docker (下)

。WebAssembly 带来了真正的可移植性。 构建一次二进制文件,就能在任何地方运行它。 作为这种可移植性的证明,我们准备了几个通过我们为 WebAssembly 构建的 PHP 解释器运行 WordPress 的示例。当 PHP 作为独立的 Wasm 应用程序运行时,它会为 WordPress 提供服务。 它也可以在 Docker+Wasm 容器中运行。 此外,它还能在嵌入 Wasm 运行时的任何应用程序中运行。 在我们的示例中,这是 apache httpd,它可以通过 mod_wasm 使用 Wasm 应用程序作为内容处程序。 最后,PHP.wasm 也可以在浏览器中运行。通过 WasmEdge 服务 WordPress我们为本次演示准备了一个紧凑的 WordPress+Sqlite 示例。 由于它是...阅读全文

博文 2023-01-03 06:39:46 spider

Gitlab CI 配置文件 .gitlab

: "$CI_COMMIT_REF_NAME" untracked: true 缓存每个job且每个分支: cache: key: "$CI_JOB_NAME/$CI_COMMIT_REF_NAME" untracked: true 缓存每个分支且每个stage: cache: key: "$CI_JOB_STAGE/$CI_COMMIT_REF_NAME" untracked: true 如果使用的Windows Batch(windows批处)来跑脚本需要用%替代$: cache: key: "%CI_JOB_STAGE%/%CI_COMMIT_REF_NAME%" untracked: true Jobs .gitlab-ci.yml允许指定无限量jobs。每个jobs必须有一个唯一的名字,而且不能是上面提到的关键字。job...阅读全文

博文 2018-12-12 21:01:19 ci.yaml 详解(上)

Golang 中的 channel 通道详解

channel通道golang的并发模型是序列通信处CSP(communicating sequential process)——使用通信来共享内存 ,避免goroutine因竞争共享内存频繁加锁产生的性能问题。基本数据结构golang中提供了一个特殊的类型channel实现goroutine之间的通信。channel类似于队列,先进先出。channel数据结构源码在src/runtime/chan.go下。chan 使用 hchan 表示,它的传参与赋值始终都是指针形式,每个 hchan 对象代表着一个 chan。hchan 中包含一个缓冲区 buf,它表示已经发送但是还未被接收的数据缓存。buf 的大小由创建 chan 时的参数来决定。qcount 表示当前缓冲区中有效数据的总量...阅读全文

Linux下多线程程序为什么消耗大量虚拟内存

最近游戏已上线运营,进行服务器内存优化,发现一个非常奇妙的问题,我们的认证服务器(AuthServer)负责跟第三方渠道SDK打交道(登陆和充值),由于采用了curl阻塞的方式,所以这里开了128个线程,奇怪的是每次刚启动的时候占用的虚拟内存在2.3G,然后每次处消息就增加64M,增加到4.4G就不再增加了,由于我们采用预分配的方式,在线程内部根本没有大块分内存,那么这些内存到底是从哪来的呢?让人百思不得其解。 探索 一开始首先排除掉内存泄露,不可能每次都泄露64M内存这么巧合,为了证明我的观点,首先,我使用了valgrind。 valgrind --leak-check=full --track-fds=yes --log-file=./AuthServer.vlog & 然后启动测试...阅读全文

博文 2015-01-28 10:35:39 debian.cn

如何在 Debian 下配置邮件服务器

tcp 0 0 0 0.0.0.0:110 0.0.0.0:* LISTEN tcp 0 0 0 0.0.0.0:143 0.0.0.0:* LISTEN tcp 0 0 0 0.0.0.0:993 0.0.0.0:* LISTEN tcp 0 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 使用邮件用户代(MUA)连接邮件服务器 邮件服务器现在可以使用了。可以在台式机、笔记本电脑、平板电脑或手机上用你最喜爱的电子邮件客户端软件配置邮件账户。以下是与Mozilla Thunderbird配置参数的截图。 故障排除 日志文件/var/log/mail.log是你最好的朋友。任何的问题都可以在这里找到线索。 确保防火墙正确配置。 确保DNS服务器配置了适当的条目。 综上所述,本教...阅读全文

博文 2021-01-28 17:50:22 debian.cn

Debian 9 使用kubeadm创建 k8s 集群(下)

; 我们告诉kubeadm使用相同的子网。第二个任务在/home/sammy创建一个.kube目录。 此目录将保存配置信息,例如连接到群集所需的管密钥文件以及群集的API地址。第三个任务将从kubeadm init生成的/etc/kubernetes/admin.conf文件复制到非root用户的主目录。 这将允许您使用kubectl访问新创建的集群。最后一个任务运行kubectl apply安装Flannel 。 kubectl apply -f descriptor.[yml|json]是告诉kubectl创建描述descriptor.[yml|json]文件中descriptor.[yml|json]的对象的语法。 kube-flannel.yml文件包含在集群中设置Flannel所需的...阅读全文

博文 2019-05-13 22:57:41 debian.cn

Debian 向左:或将迎来根本性改革 - OSCHINA

”(procedural details)。当抉择艰难时,我们需要创造出一个能够消弭分歧的机制。这个机制甚至能够在我们失去立场的时候,发挥作用。 在 Allbery 看来,Debian 之前走错了方向。在这一层上,Allbery 聚焦在“机制”上。而从 Debian的现存机制上来看,Debian 为项目个人提供了极大的自由。 Debian 把决定权交给了个人开发者,开发者可以按照他们认为合适的方式来进行管。这种自由被 Debian 章程(consitution)和 Debian policy manual 限制,主要是为了确保开发者和他们创建的软件包都能共存并且和睦相处。 当大家分歧不大的时候,这个机制基本上都是可行(不然 Debian 也不会有效运行这么多年)。而面对一些特殊情况,Debian 社区的机制主要...阅读全文

博文 2021-12-06 13:55:01 中文开源技术交流社区