![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
软件研发
文章平均质量分 55
软件研发知识
张驰Terry
这个作者很懒,什么都没留下…
展开
-
不同类型的测试
例如,它可以在执行大量请求时观察响应时间,也可以查看系统在处理大量数据时的行为。这些类型的测试的运行成本更高,因为它们需要应用的多个部分才能启动并运行。但是,他们也可以更进一步,衡量系统的性能,并在某些目标未实现时拒绝变更。建议进行一些关键的端到端测试,更多地依赖较低级别的测试类型(单元和集成测试),以便能够快速识别重大变更。单元测试的级别非常低,接近应用的源代码。冒烟测试可以在创建新版本后立即用于决定是否可以运行更昂贵的测试,或者在部署之后立即使用,以确保应用在新部署的环境中正常运行。原创 2022-12-28 14:51:56 · 679 阅读 · 1 评论 -
书摘 - 重新定义公司:谷歌是如何运营的
比如 :“我们的使命 ,是通过企业成员的知识 、创意及努力 ,为客户建立起坚韧无比的合作关系 ,为客户带来无可匹敌的价值 ,为股东创造可观的利益。在一家普通的公司 ,如果首席执行官看到某款产品有问题 ,便会把负责人叫来问责 ,还会召开两三次会议 ,商讨可行的解决方案 ,然后决定应该采取的行动。这份解决方案的细节烦冗且专业性强 ,但其大意就是 :我们准备计算出 “广告相关度数值 ” ,以此来评估广告与搜索请求的相关性 ,然后根据得出的数值来决定广告是否出现 ,以及出现在页面的什么位置。原创 2022-09-14 09:16:56 · 777 阅读 · 0 评论 -
Linux 主要目录含义
名称的来源:/bin - 二进制文件。 /boot - 启动所需的文件。 /dev - 设备文件。 /etc - 该名称继承自最早的 Unix,当时它成为放置配置文件的地方。 /home - 保存主目录的位置。 /lib - 保存代码库的地方。 /media - 一个更现代的目录,但是安装了可移动媒体。 /mnt - 安装临时文件系统的位置。 /opt - 安装可选附加软件的位置。这与 /usr/local/ 是不同的。 /run - 保存运行时变量数据的地方。 /sbin - 超级原创 2022-05-30 10:19:40 · 355 阅读 · 0 评论 -
关于 assert 断言的思考
关于 assert 断言的思考断言的作用assert模块主要用于编写程序的单元测试时使用,通过断言可以尽早发现错误。一般在测试环境使用,正式环境禁用。断言的使用场景使不使用断言可以先考虑以下如果断言的条件不满足,程序是否可以正常运行,如果可以,就不用使用了,如果不可以,就可以使用。工程实践在开发的过程中,如果输入参数不符合期望,尽量在第一时间断言中断执行。比如:function getBlock(blockId: string): Block { assert(blockId, ".原创 2022-05-23 09:58:31 · 288 阅读 · 0 评论 -
高可用的 Saas Web 应用的经验总结
1.CDN 容灾前端资源所使用的的CDN根目录支持多个运营商,例如阿里云,七牛云,AWS,UClound等等,当部分用户CDN节点不可用,支持部分用户直接访问源站2.图像支持多域名,避开浏览器并发限制对于应用包含大量图像请求的情况,应对图片请求随机分配域名,例如a1.ycdn.com/images/ a2.ycdn.com/images/ a3.ycdn.com/images/ a4.ycdn.com/images/ a5.ycdn.com/images/3.短信发送业务安全限制原创 2022-05-16 21:22:19 · 395 阅读 · 0 评论 -
使用 JavaScript 构建一个组织架构树节点
Demohttps://jsfiddle.net/me7jb6f8/Code<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" cont.原创 2022-05-05 09:48:07 · 722 阅读 · 0 评论 -
使用 JavaScript 实现一个消消乐游戏
示例地址https://jsfiddle.net/7fm1px5d/https://jsfiddle.net/7fm1px5d/源码<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewpo.原创 2022-04-18 15:26:27 · 4136 阅读 · 1 评论 -
使用 JavaScript 模拟光标随机移动端
1.效果预览https://jsfiddle.net/0qmaytco/https://jsfiddle.net/0qmaytco/2.代码运行<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="v..原创 2022-04-11 09:29:48 · 646 阅读 · 0 评论 -
使用 JavaScript 搜索网页上 a 或者 d 标签的集合
function scanTagsByKeywords(node) { const set = new Set(); const isTargetNode_ = function (tagName) { return ( ["a", "d"].indexOf( tagName.charAt(0) ) > -1); }; const scanTagsByKeywor...原创 2022-04-04 12:11:18 · 956 阅读 · 0 评论 -
快速扩展在线文档产品特性的9个开源项目
在线文档,笔记应用近几年发展迅速,这些产品的内容创造与管理也不再仅仅局限于文字或者图片,诸如科学公式,多维表格,流程图,思维导图,电子表格等元素也逐步被引入文档内容中。而这些元素的编辑与展示在各个特定的领域都是需要长期的积累才能做到优秀可用,为了给用户快速去提供这些能力,工程师们会选择在开源项目上去做集成,而本文整理了9个开源项目揭开文档新元素背后的秘密。一、代码块https://github.com/codemirror/CodeMirror是在JavaScript 中实现的多功能文本编辑器.原创 2022-03-28 10:25:29 · 2659 阅读 · 0 评论 -
EasySync协同技术指南(译)
EasySync协同技术指南(译)1 文档 一个文档(document)是一个字符(char)列表或一个字符串(string) 一个文档也可以被表示为一个变更集(changeset)列表 2 变更集 一个变更集表示对文档的一个更改 一个变更集可以被应用于一个文档以产生一个新的文档 当一个文档被表示为一个变更集列表时,我们认为第一个变更集应用于空文档 []。 3 变更集表示(l→l′)[c1, c2, c3, ...]l代表文档更改前的长度,原创 2022-03-21 11:20:07 · 692 阅读 · 0 评论 -
Etherpad and EasySync Technical Manual
AppJet, Inc., with modifications by the Etherpad FoundationDecember 9, 2018ContentsDocuments 2 Changesets 2 Changeset representation 2 Constraints on Changesets 2 Notation 3 Composition of Changesets 3 Changeset Merging 3 Follows 4 System Ov.原创 2022-03-14 11:26:43 · 711 阅读 · 1 评论 -
常用的一些 linux 指令
压缩与解压文件## 压缩tar -czvf ${sourceName}.tar.gz ${sourceName}## 解压 example## tar -xzvf ${sourceName}.tar.gzlinux查看目录或文件大小## du -→ disk usagedu -h --max-depth=1 echuandan ## 查看文件大小linux 批量重命名rename 's/\\.jpg/.gif/' *.jpg本地nginx 配置文件 vi.原创 2022-03-10 10:20:28 · 294 阅读 · 0 评论 -
chrome 升级后如果配置自由设置cookie
在chrome最新版本升级后,在 Application→Cookie中自由设置cookie受到了限制,为了解决这个问题,我们可以通过访问 chrome://flags/ ,修改以下配置即可原创 2022-03-01 10:07:34 · 530 阅读 · 0 评论 -
计算机中的字符和字节的关系
一个字符占几个字节?在ASCII码编码方案中,一个英文字符占用一个字节,一个汉字字符占用两个字节的空间;在Unicode编码方案中,一个英文字符或一个汉字字符都占用两个字节的空间;3.在UTF-8编码方案中,一个英文字符占用一个字节,一个汉字字符占用三个字节的空间。如何理解信息通常以字符编码的方式存在于计算机中,并进行信息传播。而字符编码又有不同的方案,鉴于世界上有各种各样的语言字符信息,为了把这些符号信息编码到计算机中,并进行互相传播,字符的编码方案也层出不穷。下面对以下三种字符编码方案加原创 2022-02-24 19:17:19 · 2214 阅读 · 0 评论 -
32位操作系统和64位操作系统的区别
文章目录一、32位和64位的关系二、32位和64位的“位”是什么三、32位和64位操作系统的区别1、支持的系统不同2、运行数据的速度不同3、支持内存大小不同4、软件5、系统体积大小不同一、32位和64位的关系32位和64位指的是处理器 CPU,32位处理器每次最多能处理32位数据,而64位处理器每次最多处理64位数据。电脑系统,也针对32位处理器和64位处理器,分别开发了32位操作系统和64位操作系统,这样系统与处理器匹配,可以使处理器的性能发挥到最大程度。二、32位和64位的“位”是什么“位”,原创 2022-02-13 12:40:09 · 5044 阅读 · 0 评论 -
从典型软件来看 SaaS 的私有化部署方式
1. 部署可执行程序1.1 confluenceConfluence 是一个专业的企业知识管理与协同软件,也可以用于构建企业wiki。使用简单,但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息、文档协作、集体讨论,信息推送。安装方式:安装环境依赖,例如安装 Java + MySQL 开放网关端口 启动 jar 包进程 完成配置流程1.2 JenkinsJenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软.原创 2022-02-07 13:27:18 · 1385 阅读 · 0 评论 -
npm init <initializer>的含义
npm init <initializer>等同于npx create-<initializer>例如npm init qwik等同于npx create-qwik原创 2022-01-26 09:52:35 · 478 阅读 · 0 评论 -
OOP 设计模式:接口与类的封装和重写(override)以及重载(overload)
要点 子类是 extends 父类出来的 子类会集成父类所有 public 类型的实例变量和方法,但不会集成父类所有 private 类型的变量和方法 继承下来的属性可以被覆盖掉,但实例变量不能被覆盖掉 类的多态性可以从方法override 和 overload 来体现 一个类可以继承另外一个类或者实现多个接口 重写 Overr...原创 2022-01-18 15:47:26 · 933 阅读 · 0 评论 -
在线文档 - Google 文档的数据协议设计
在线文档 - Google 文档的数据协议设计Google 文档作为 G Suite 重要的产品套件之一,作为优秀的在线协作文档而经常被开发者所讨论,在 Google 文档背后,有着一整套优秀的相关架构设计支撑,数据协议设计就是其中之一,非常具有学习和研究价值。前言截至 2020 年,Google 旗下的 G Suite 用户量达到 20 亿,而 Google 文档作为其重要的产品套件之一,作为优秀的在线协作文档而经常被开发者所讨论,在Google文档背后,有着一整套优秀的相关架构设计支撑,数据协原创 2022-01-13 10:36:09 · 733 阅读 · 0 评论 -
Tailwind.css 体验总结
为什么使用 Tailwind.csshtml 与 css 融为一体 强大的原子class 生产环境按需按需构建 完整的响应式布局 支持hover以及focus状态 在前端框架实现充分复用 使用@apply融入业务css 支持深色模式 通过配置易于扩展、调整和改变 支持 CSS grid 以及更多的现代选择器,例如 :focus-visible VSCode 集成代码片段提示 付费或者免费的组件库代码片段 组合 figma 使用中文站Tailwind CSS - 无需离开您的原创 2021-12-23 11:21:13 · 1096 阅读 · 0 评论 -
如何统计web fps变化
核心知识点requestAnimationFrame统计一秒内的frame次数fps → Frames Per Second示例代码在线地址 https://jsfiddle.net/zhangchi/1gm9a84L/14/<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" co原创 2021-12-15 20:47:45 · 344 阅读 · 0 评论 -
Web 中读取 e.clipboardData.files 耗时过长原因分析与解决
原因分析在chrome浏览器引擎的底层实现中,这一步隐含了转Blob的操作,当文件非常大时,耗时惊人// data_transfer.ccFileList* DataTransfer::files() const { auto* files = MakeGarbageCollected<FileList>(); if (!CanReadData()) return files; for (uint32_t i = 0; i < data_object_->原创 2021-12-07 10:54:19 · 577 阅读 · 0 评论 -
通过 matchMedia 获取 Web 中系统主题
JavaScript 中的 APIif (window.matchMedia('(prefers-color-scheme)').media !== 'not all') { console.log('???? Dark mode is supported');}CSS 媒体查询.day { background: #eee; color: black; }.night { background: #333; color: white; }@media (prefers-color-原创 2021-11-29 16:22:37 · 630 阅读 · 0 评论 -
在线画布自定义选区 Selection 的主要设计与 Demo
选区主要设计Selection 的 UISelection 的 Rect(width,height) 变化Selection 的 Position 变化在浏览器的 DOM 中,Selection 在鼠标点击位置的垂直线右侧变化于左侧变化的计算Demo 演示<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-原创 2021-11-19 12:44:32 · 589 阅读 · 0 评论 -
什么是ClickHouse?
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。在传统的行式数据库系统中,数据按如下顺序存储: Row WatchID JavaEnable Title GoodEvent EventTime #0 89354350662 1 Investor Relations原创 2021-11-16 14:41:46 · 1849 阅读 · 0 评论 -
WebGL 和 Canvas 的关系
定义Canvas 是 HTML5 提供的一个特性,你可以把它当做一个载体,简单的说就是一张白纸。而 Canvas 2D 相当于获取了内置的二维图形接口,也就是二维画笔。Canvas 3D 是获取基于 WebGL的图形接口,相当于三维画笔。你可以选择不同的画笔在上面作画。OpenGL是 底层的驱动级的图形接口(是显卡有直接关系的) 类似于 DirectX但是这种底层的 OpenGL 是 寄生于浏览器的JavaScript无法涉及的但是为了让 Web 拥有更强大的 图形处理能力 2010年时候Web原创 2021-11-16 12:26:30 · 7247 阅读 · 2 评论 -
requestIdleCallback 是什么?
window.requestIdleCallback()方法插入一个函数,这个函数将在浏览器空闲时期被调用。这使开发者能够在主事件循环上执行后台和低优先级工作,而不会影响延迟关键事件,如动画和输入响应。函数一般会按先进先调用的顺序执行,然而,如果回调函数指定了执行超时时间timeout,则有可能为了在超时前执行函数而打乱执行顺序。你可以在空闲回调函数中调用requestIdleCallback(),以便在下一次通过事件循环之前调度另一个回调。返回值一个ID,可以把它传入Window.can.原创 2021-11-11 11:51:06 · 1095 阅读 · 0 评论 -
协作文档功能背后的思考
原创 2021-10-27 22:12:44 · 228 阅读 · 0 评论 -
LaTeX 符号命令大全
函数、符号及特殊字符声调语法 效果 语法 效果 语法 效果 \bar{x} \acute{\eta} \check{\alpha} \grave{\eta} \breve{a} \ddot{y} \dot{x} \hat{\alpha}原创 2021-10-20 13:36:47 · 29681 阅读 · 1 评论 -
如何开展性能优化专项
本文将性能优化专项从定义目标,拆解任务,执行落地三个角度来给开发者提供思路一、定义目标如果一件事你无法衡量他,你就无法改进它,所以在定义目标前,我们需要去量化目标,目标通常有两种,一种是已形成共识的目标(可量化),一种没有共识的目标(未量化)。什么是有共识的目标,比如 Google 指定的LCP(Largest Contentful Paint) 和 CLS(Cumulative Layout Shift)。什么是没有共识的目标,比如评估一个协同表格的多人编辑体验,那这时候怎么做?此时就需要在定义目原创 2021-09-28 21:20:40 · 319 阅读 · 0 评论 -
centos7如何安装MongoDB
[mongodb-org]name=MongoDB Repositorybaseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/4.2/x86_64/gpgcheck=0enabled=1将以上内容保存$ vi /etc/yum.repos.d/mongodb-org-4.2.repo使用yum安装MongoDB使用yum安装:$ sudo yum install -y mongo.原创 2021-09-27 10:49:16 · 147 阅读 · 0 评论 -
PixiJS - HTML5 创作引擎
PixiJS的目的是提供一个快速并且轻量的 2D 库,并且它可以在所有设备上运行。PixiJS 渲染器让每个用户都可以享受硬件加速的力量,并且不需要了解 WebGL的细节。更重要的是,它真的非常快.PixiJS 可以干什么?并且什么时候使用它?PixiJS 是一个渲染库,可让你创建丰富的交互式图形、跨平台应用程序和游戏,而无需深入研究 WebGL API 以及处理浏览器和设备的兼容性问题。PixiJS 具有完整的WebGL支持,并在需要时无缝降级到 HTML5 的Canv...原创 2021-09-23 15:14:36 · 856 阅读 · 0 评论 -
不可不知的 ShareDB
ShareDB是一个整合了前后端的 OT 框架,可以很方便地自行搭建服务端和客户端。框架基于 Node.JS 实现。ShareDB 使用服务端搭建步骤新建 Node 项目npm init -y安装依赖npm install --save sharedb ws websocket-push-stream ot-text创建 app.js 文件var ShareDB = require('sharedb');var WebSocket = require('ws');var原创 2021-09-14 10:39:32 · 2733 阅读 · 0 评论 -
词法分析和语法分析是什么
JavaScript 是如何执行的对于常见编译型语言(例如:Java)来说,编译步骤分为:词法分析->语法分析->语义检查->代码优化和字节码生成。对于解释型语言(例如 JavaScript)来说,通过词法分析 -> 语法分析 -> 语法树,就可以开始解释执行了。AST词法分析var AST= 'is Tree'; 这样一段代码,我们要先把它分成一个个不能细分的单词(token),也就是 var, AST, =, ‘is Tree’,这个过程是词法分析,按照单词的原创 2021-09-13 20:05:36 · 828 阅读 · 0 评论 -
不可不知的快捷登陆虚拟机方式
背景拥有一套虚拟机的root权限,并且掌握密码情况,如果通过编写互动式脚本,执行脚本完成一键登陆互动脚本#!/usr/bin/expectset jump_server_pwd Zhang2019catch {spawn ssh zhangc@11.124.32.65} # 登录跳板机expect { "(yes/no)?" {send "yes\n";exp_continue} "*assword:*" {send "$jump_server_pwd\n";}}原创 2021-09-13 15:36:38 · 522 阅读 · 0 评论 -
如何解决npm脚本卡主不执行的问题
问题现象npm start 执行卡住不执行解决方式1. 重启电脑 - 无效2. 删除node_modules -起效原创 2021-09-06 17:00:40 · 977 阅读 · 0 评论 -
Nginx中如何执行JavaScript
关于本文作者:@whilefor原文:https://zhuanlan.zhihu.com/p/393788937Nginx 作为市场占有率最高的Web服务器,主打高性能、可扩展。自带了很多核心功能模块,并且也有大量的第三方模块。Web 服务中灰度方案的实现,很多会采用 Nginx + Lua + Redis 方案。Lua 是一个轻量级的脚本语言,体积小、启动速度快、性能高。通过 lua-nginx-module 模块将 Lua 语言嵌入到 Nginx 中,可以使用 Lua 脚本扩展 Nginx原创 2021-09-05 19:50:02 · 1652 阅读 · 0 评论 -
在线协作软件的三个核心引擎
在线协作软件的三个核心引擎总览纵观市面上的所有协作软件,无论是Google Docs 还是 Notion,还是 Mira 或者Evernote,优秀的协作软件必然由三个核心引擎构建:渲染引擎,协同引擎以及数据引擎如何理解三个核心引擎,我们从用户视角来看:渲染引擎: 对于在线文档,渲染引擎就是文字编辑器。 对于在线表格,渲染引擎就是电子表格编辑器。 对于在线幻灯片,渲染引擎画布编辑器。 对于在线脑图,渲染引擎就是mind编辑器。 对于.原创 2021-08-31 22:05:54 · 661 阅读 · 0 评论 -
在线文档编辑器分级
L0 类型由于技术门槛低,所以短时间可以完成研发,但是可定制的空间非常有限,不满足现有协作产品的商业化迭代。L1 充分利用浏览器的特性,基本能满足 99%业务场景,但是布局渲染的能力和性能受限于浏览器本身L2 所有的特性皆由开发者实现,拥有非常强大的布局渲染能力,但是开发成本和技术挑战大,基本可以理解为在浏览器内部重新开发一个浏览器。Google Docs、WPS 以及 Office Online 之所以体验性能极致,产品体验丰富,也源于投入极大的研发成本。 分级 优原创 2021-08-31 21:33:49 · 205 阅读 · 0 评论