自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(210)
  • 资源 (1)
  • 收藏
  • 关注

原创 windows 开发环境整理

(书籍是屹立在时间的汪洋大海中的灯塔。——惠普尔)windows开发环境终端篇Windows Terminal对于习惯于使用linux终端开发的程序员来说,windows的dos命令实在反人类,但好在windows 10在2019年祭出了windows linux子系统 windows terminalWindow Terminal是微软在Build 2019大会上发布的面向Windows10的新命令行程序,terminal集成了Windows上的PowerShell、cmd、Windo

2020-12-13 01:41:21 3567 13

原创 Nodejs 中文分词

ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ(生活只有在平淡无味的人看来才是空虚而平淡无味的。 —— 车尔尼雪夫斯基)ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ中文分词器引用百度的说明 ~~中文分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂得多、困难得多与英文为

2020-07-05 21:20:47 4017 2

原创 Nodejs debug调试

ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ(有些梦想,纵使永远也没办法实现,纵使光是连说出来都很奢侈。但如果没有说出来温暖自己一下,就无法获得前进的动力。——九把刀)ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ什么是debug名字的由来一位名叫葛丽丝·霍波(Grace Hopper)的美国海军准将及计算机科学家,同时也是世界最早的一批程序设计师之一。有一天,她在调试设备时出现故障,拆开继电器后,发现有只飞蛾被夹扁在触点中间,从而“卡”住了机器的运行。于是,霍波诙谐的把程序故障统称为“臭

2020-06-06 00:46:54 4827 2

原创 Nodejs V8虚拟机

ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ(人的理想志向往往和他的能力成正比。——约翰逊)ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤv8虚拟机的历史...

2020-04-25 21:55:59 4240

原创 TypeScript 高级类型用法

@event 高级类型核心keyof和in@description keyof产生联合类型,in则可以遍历枚举类型/ 测试数据const chunk = { _id: '5d9959be7895f045ca81c0e8', name: 'zzw', dayId: '1575129600', count: 2};let chunks = [ {...

2019-12-29 19:07:51 1017

原创 kubernetes 灰度发布设计方案

从效果层面上看到的灰度,就是不同客户可以使用我们不同的软件版本。这样系统升级的时候,可以从不同的客户群体开始升级,等该用户群体运行一段时间以后(也就是新的系统经过线上的某些客户验证后没有问题,理论上后续出问题的概率就比较小,如果这部分客户出问题,也只影响这部分客户,不影响其它客户),再逐步升级到后续其它的客户。例如升级的客户群分别是 内部客户(3天)→ 小客户(7天) → VIP客户(7天) → VVIP客户(7天)这样一个步骤。

2024-01-17 18:21:25 1051 1

原创 NodeJs导出xlsx,行列合并,内容居中,字体颜色,字体加粗,字体大小,批量任务

这次我们将演示如何使用NodeJs将一组数据使用以下样式导出。

2023-12-24 16:20:08 696

原创 NodeJs导出PDF

根据订单参数生成账单PDF。

2023-08-17 19:10:19 1580

原创 Mongodb管道函数操作数组,过滤,数组截取,条件分支,字符串合并

其中features内value的数据结构是可变的。

2023-08-10 15:35:14 403

原创 Mongodb 分页查询数据重复

其中排序一致性指的是,如果被排序的字段值是重复的,那么在进行分页查询时,可能会出现数据重复的情况,也就是第一页和第二页可能会有相同的数据出现。那么解决这个问题的方案有两个。

2023-08-10 15:23:26 381

原创 Mac unsupported architecture

但随着nodejs新版本对m系列芯片的支持,npm生态的工具包也逐渐都兼容了arm64架构,但部分比较旧的没有兼容,依然会出现此问题,唯一的解决方案是使用兼容arm64架构的包或使用较新的nodejs版本。在mac的m系列芯片中容易出现此类问题,因为m系列是arm64的芯片架构,而有些nodejs版本或npm包的芯片架构是x86的,所以导致此类问题频发。比如这个包的3.0.0版本就不支持arm64芯片,升级为3.1.0后解决。

2023-08-06 19:16:12 1268

原创 NodeJs执行Linux脚本

比如以下场景,在传统k8s容器化服务的架构下,每次服务的发布都需要重新安装依赖,快则两三分钟,慢则十分钟甚至更久,在没有专业运维的情况下,我们可以使用NodeJs来执行命令脚本,在每次发布前,对比两个版本的package.json文件,如果不一致,则再安装依赖,否则直接跳过安装阶段,使用当前目录下的node_moodules进行发布,这样在最优的情况下,就能省去依赖安装的时间,极大的提升了服务发布速度。

2023-08-06 18:47:11 640

原创 Stripe订阅支付和WebHook事件

Stripe是由20多岁的两兄弟Patrick Collison和John Collison创办的Stripe为公司提供网上支付的解决方案。Stripe向服务的公司收取每笔交易的2.9%加上30美分的手续费。

2023-08-06 17:57:48 720

原创 NestJs Debug配置文件

【代码】NestJs Debug配置文件。

2023-08-06 16:39:40 173

原创 微信小程序事件总线

接收事件的一方必须被渲染,否则事件将会丢失。

2023-06-16 17:40:05 300

原创 阿里飞猪三面

整体来说,阿里的面试官态度非常好,在你回答不上的时候会适当给你一些提醒,就算确实回答不了的,多半也会告诉你答案,在面试结尾,通常会给你一些改进的建议等。技术上就更别说了,很是厉害,下一轮的面试官会根据你上一轮的面试结果进行针对性的提问,会尽可能的考察你各个技术维度的边界,快速找到你的技术壁垒和弱项。在做完面试题的第二天就收到了不合适的反馈,作者题做的没问题,很大可能是二面的问题没有回答好导致错失了offer。以下出现的观点,仅是作者本人的观点,如果有不合适的地方请及时提出,作者会及时进行反馈和解决。

2023-06-14 17:28:50 4477 2

原创 B+树单表超过2500万行的性能影响

MySQL采用了索引组织表的形式组织数据,叶子节点存储数据,非叶子节点存储主键与页面号的映射关系。若用户的主键长度是8字节时,MySQL中页面偏移占4个字节,在非叶子节点的时候实际上是8+4=12个字节,12个字节表示一个页面的映射关系。但为什么都说是到2500w之后才出现呢?只有数据量达到24576000条时,深度才会增加为4,所以,索引深度没有那么容易增加,详细数据可参考下表。MySQL默认是16K的页面,抛开它的配置header,大概就是15K,因此,非叶子节点的索引页面可放15。

2023-06-12 15:23:29 472

原创 TypeScript 自定义装饰器

装饰器一种更现代的代码模式,通过使用@的形式注入在属性,寄存器,方法,方法参数和类中,比如在Angular,Nestjs和midway等流行框架中也都用到了装饰器。由于Reflect.decorate装饰器反射机制还不支持,且相关资料较少,所以在本文中不进行深入研究。装饰器目前已经在阶段3,相信不久的将来,js中也会支持装饰器。Stage 0 - 设想(Strawman):只是一个想法,可能有 Babel插件。Stage 3 - 候选(Candidate):完成规范并在浏览器上初步实现。

2023-06-11 15:37:44 2386

原创 NodeJs性能分析工具

针对第三种情况,我们无法快速的定位到问题代码,但可以借助排查工具,head-dump和chrom的memory等一起分析内存使用情况,排查内存空间占用大的对象,再利用该对象定位业务代码进行排查。模拟一个后端服务内存泄漏场景,初始化全局变量customGlobalList,每次访问接口都向该数组添加100w个数字,随着接口访问频次的增加,该数组的容量也随之增加,从而造成内存泄漏的问题。左侧是已经加载好的内存快照,其中192mb的是有内存泄漏问题的,13.4m的是服务刚启动时的快照。对象自身占用的内存大小。

2023-05-30 19:34:48 1019

原创 NodeJs服务链路追踪日志

后端多服务通信或第三方通信时,为了快速定位问题,往往需要统一多服务间日志的链路id,假如A->B->C,A服务将生成的traceId放在请求头中交给B服务,B服务再获取请求头中的id进行业务处理,C服务也进行相同的处理,那么三个服务的日志id相同,就能够在日志排查中大大降低排查难度。在过去,node服务的链路追踪通常会做类似koa框架的ctx上下文变量,通过每一层的传递来维护上下文,达到链路追踪的目的。针对nestjs做了优化,在模块化的基础上,做了ts检查和其他定制化的api。链路id业界通常称为。

2023-05-27 22:43:52 852

原创 NestJs 自定义装饰器

使用自定义装饰器对接口的权限进行校验import {/*** 接口权限校验装饰器* role 该装饰器入参,接口的角色参数* ctx 装饰器的上下文,包含请求体等信息// get请求参数默认挂载在query上 const queryParam = request . query;// 这里获取用户token const userToken = queryParam . token;

2023-05-26 20:30:06 285

原创 JavaScript 数组最大值算法

【代码】JavaScript 数组最大值算法。

2023-05-25 23:24:37 95

原创 微信云数据库高级应用

微信云开发数据库属于NoSQL类型,并且在微信云开发模式内自动集成。

2023-05-11 21:07:50 274

原创 微信云开发技术架构

后端也可以使用这个sdk对接微信侧提供的一些功能,因为云函数内部集成了微信的鉴权,所以后端可以免去鉴权工作进行对接,提高开发效率。很明显的是生态问题,比如没有框架支持,一些第三方的npm包不支持,扩展较难,比如添加自定义的日志监控,服务监控等。可以看到,微信云开发有自己的生态,不仅不需要维护服务器,并且对微信类的开发提供了免鉴权等入口,提高对接微信的效率。微信云开发有着自己的代码编辑器,它内部集成了vscode的内核,然后再上面进行拓展,开发了微信特有的一系列功能。回档期间,数据库的数据访问不受影响。

2023-05-11 20:04:04 1902

原创 JavaScript 链表

这是因为链表是一种动态的数据结构,不同于数组的是,链表分配内存空间的灵活性,它不会像数组一样被分配一块连续的内存。当你想在数组的任意位置,插入一个新值的时候,必须对数组中的各个元素进行相应的位置移动才能达到目标,开销显然是很大的。然而链表的灵活性在于它的每个元素节点分为两部分,一部分是存储元素本身,另一部分是指向下一个节点元素的引用,也可以称为指针,当你要插入数据时,把上一个节点的向下指针指向新数据节点,新数据节点的向下指针指向原有数据。众所周知,数组的查询比链表快,但插入比链表慢。

2023-05-11 15:38:54 685 1

原创 JavaScript 损失精度的问题和解决方案

也可以使用第三方库,比如Math.js或者Bignumber.js等。他们内部的实现原理也是将小数先转换成拆分两个字符串,然后计算小数部分的字符串的长度,然后利用这个长度将小数变成整数。这是因为在实际的运算过程中,js会把0.1+0.2当作二进制来运算,所以实际上是这样的。那么为了解决损失精度的问题,我们可以先转换成整数再进行运算。比如0.1+0.2应等于0.3,但实际上却等不是如此。

2023-05-11 12:20:59 75

原创 TypeScript extends和implements区别

比如以下代码,定以了抽象类AbstractAnimal,然后Dog和Cat分别实现AbstractAnimal,Mouse继承AbstractAnimal,Pig继承AbstractAnimal并实现Dog, Cat。implements是一个类实现一个接口用的关键字.实现一个接口,必须实现接口中的所有方法。我们也可以定义interface接口来进行多实现。

2023-05-10 18:01:31 657

原创 JavaScript ==和===区别

当进行双等号比较时候,先检查两个操作数数据类型,如果相同,则进行全等于比较,如果不同,则为你进行一次类型转换,转换成相同类型后再进行比较,而===比较时,如果类型不同,直接就是false。

2023-05-10 17:24:52 62

原创 V8 过去版本的性能提升汇总

可是也不能将所有代码都进行缓存,这样占用的内存空间又太大了,所以之前的优化方式是只解析声明部分,执行部分在用到的时候再进行解析。不幸的是,参数适配是以性能为代价的,并且在现代前端和中间件框架中通常需要。事实证明,通过巧妙的设计(比如颠倒堆栈中参数的顺序),我们可以删除这个额外的框架,简化 V8 代码库,并几乎完全消除开销。在此之前每次使用super进行属性或者方法的查找都是基于原型链,那么现在,对于热点(经常被调用)的属性或者方法v8会生成缓存,不再依赖原型链,而是直接通过缓存进行查找,性能更佳。

2023-05-10 16:50:41 873

原创 NodeJs 最近各版本特性汇总

通过加载程序 ( ) 提供的 ESM 挂钩–experimental-loader=foo.mjs现在在与主线程隔离的专用线程中运行。这为加载程序提供了一个单独的范围,并确保加载程序和应用程序代码之间没有交叉污染。

2023-05-09 17:18:27 8372 1

原创 ECMA 各版本特性汇总

ecma官方网站ecma github版本记录w3schoolsECMAScript是由网景的布兰登·艾奇开发的一种脚本语言的标准化规范;最初命名为Mocha,后来改名为LiveScript,最后重命名为JavaScript。1995年12月,升阳与网景联合发表了JavaScript。1996年11月,网景公司将JavaScript提交给欧洲计算机制造商协会进行标准化。ECMA-262的第一个版本于1997年6月被Ecma组织采纳。ECMA Script是ECMA-262标准化的脚本语言的名称。尽管J

2023-05-09 15:43:23 1174

原创 TypeScript 最近各版本主要特性总结

TypeScript版本更新记录以下最近每个版本都举例3-4个常用特性,可能是重大更新,也可能是优化或者bug修复等。更详细的请直接查看官网。TypeScript 4.7 现在支持moduleSuffixes自定义模块说明符查找方式的选项。鉴于上述配置,如下所示的导入将尝试查看相关文件./foo.ios.ts,./foo.native.ts最后./foo.ts。

2023-05-08 17:53:49 2261 5

原创 JavaScript super

需要注意的是,如果子类构造器中this访问出现super之前,就会造成this引用的相关父类状态成员没有完成初始化,所以super一定要在构造器中首先调用。这是ES6的规范,必须先初始化父类才能再加载子类。super 关键字用于访问对象字面量或类的原型(Prototype)上的属性,或调用父类的构造函数。

2023-05-06 18:47:54 72

原创 JavaScript 箭头函数

更确切的说是箭头函数的外层如果有普通函数,那么箭头函数的this就是这个外层的普通函数的this,箭头函数的外层如果没有普通函数,那么箭头函数的this就是全局变量。可以看出,因为箭头函数自身没有arguments,所以它的arguments指向了外层函数的arguments。箭头函数表达式的语法比函数表达式更简洁,并且没有自己的this,super。箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数。相比较传统的函数,箭头函数在部分场景下可以直接省去返回值和花括号,写法更简洁明了。

2023-05-06 18:01:09 692

原创 JavaScript class和继承的原理

类是用于创建对象的模板。他们用代码封装数据以处理该数据。JS 中的类建立在原型上,但也具有某些语法和语义未与 ES5 类相似语义共享。实际上,类是“特殊的函数”,就像你能够定义的函数表达式和函数声明一样,类语法有两个组成部分:类表达式和类声明。

2023-05-06 14:22:47 903

原创 JavaScript call,callee,caller,apply,bind之间的区别

bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。通过以上的代码结果得知,每次callee得到的this都不相同,并且如果一个业务中有多个不同的arguments.callee嵌套,那么维护的成本也是巨大的。所以callee出现了,它可以引用该函数的函数体内当前正在执行的函数上下文,比如以下代码,通过记录内部上下文也可以达到递归的目的。它可以用于引用该函数的函数体内当前正在执行的函数。

2023-05-05 21:30:01 710 1

原创 JavaScript in和hasownproperty区别

可以看出,in方法不仅能对属性进行检测,还能对原型上的方法进行检测。检查方法是优势也是劣势,因为在实际编码中,有些属性和方法的名称可能相同,这就导致对同名的属性进行判断时,会出现意想不到的结果。所以in和hasOwnProperty还是要分场景使用,in用来检测方法,hasOwnProperty用来检测属性。相比较in,hasOwnProperty更为严格,只检测对象的属性,比如以下代码。早期的in用来判断属性是否在指定的对象或原型链上。对于原型的方法和自定义方法都返回false。

2023-05-05 17:10:30 113

原创 JavaScript isArray

在es5以前,传统的判断数组的方式多是.length或者Object.prototype.toString.call()。使用.length判断时,我们还需要对属性自身先做判断,这样才能避免undefind错误。使用Object.prototype.toString.call()可以直接对数组做判断,但写法较为复杂。所以在es5规范中推出了Array.isArray方法,用来快速对数组进行判断。以下是源码示例。

2023-05-05 15:52:36 160

原创 JavaScript判断是否为NaN

业务中不可避免的有些字段是空值,但经过转换后会变为NaN值,而在js中NaN的类型无论怎么判断都是数字,并且奇怪的是NaN并不等于NaN。所以,在后续的js编码中,对NaN的处理我们也可以尽量使用Number.isNaN了。但我们发现,因为每次都先将值进行数字强转,导致一些非NaN的值也被误判成了NaN。NaN的字面意思是Not-a-Number,其在计算机科学中属于计算中的缺失值。因为在js中,只有NaN是不等于自身的,所以Number.isNaN更为严谨。在js中可以是同isNaN方法来进行判断。

2023-05-04 22:11:47 529

原创 JavaScript 数据类型判断

typeof是在javascript编码过程中最常用的判断数据类型的方法,常用来判断数字,字符串,布尔值和undefind但不能用来判断复杂数据类型,比如以下案例这是因为javascript中的数据类型为两大类,原始值和对象值,其实也就是基础类型和引用类型。基础类型有undefined,null,boolean,number,string引用类型有array,object,date,regexp,function等。

2023-05-04 21:34:16 415

省市区县完整数据json

省市区县完整数据json

2023-02-20

省市县字段数据JSON

省市县字段数据JSON

2023-01-15

nodejs os 操作系统模块示例

这是nodejs操作系统os的示例模块,该文件包含了nodejs对os操作系统的各种调用方法示例,在安装好nodejs的前提下,可以直接使用ts-node运行查看

2020-07-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除