自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 NestJS使用gRPC实现微服务通信

gRPC 基于 Protocol Buffers(protobuf)作为接口定义语言(IDL),意味着你可以使用 protobuf 来定义你的服务接口,gRPC生成的代码可以用于多种语言(C++, Java, Python, Go, C#, Ruby, Node.js),所以使用gRPC就能实现跨语言之间进行微服务通信。此时启动项目还是会报错的,因为我们还没有创建proto文件和内容的写入,如下是对proto文件的配置。gRPC 基于根据可远程调用的功能(方法)定义服务的概念。

2023-12-13 20:55:16 484

原创 NestJS的微服务实现

微服务基本概念:微服务就是将一个项目拆分成多个服务。举个简单的例子:将网站的登录功能可以拆分出来做成一个服务。微服务分为提供者和消费者,如上“登录服务”就是一个提供者,“网站服务器”就是一个消费者。你可能注意到了客户端和网站服务器通信使用的是http,为什么服务器之间使用的是tcp,这主要和性能、传输灵活度相关。在nestjs中传输方式还有很多中,比如通过grpc、rabbitmq、redis等技术来传输数据。补充:登录服务可以部署在同一台服务器也可以在其他服务器,但只要拆分出来了就称之为微服务。

2023-12-09 16:37:55 622 1

原创 websocket与node.js实现

websoket 是一种网络通信协议,基于 tcp 连接的全双工通信协议(客户端和服务器可以同时收发信息),值得注意的是他不基于 http 协议,websocket 只有在建立连接的时候使用到 http 协议进行连接。只建立一次连接,后续会一直保持连接状态没有同源限制,可以跨域可以接受发送任何类型数据协议是 ws 或 wss,wss 是加密的,增加了 ssl 协议。

2023-11-22 15:39:43 750

原创 “node-sass“: “^4.14.1“安装报错

1. 先删除 node_modules/.bin 目录中所有名字包含 node-sass 的文件2. 通过 12.0.0 的node安装 **node-sass3. 再切换回 14.16.1 版本,再次安装 node-sass

2023-10-16 19:17:45 856

原创 JWT与Token详解

1. JWT用于登录身份验证。2. 用户登录成功后,后端通过JWT机制生成一个token,返回给客户端。3. 客户端后续的每次请求都需要携带token,携带在authorization中。4. 后端从authorization中拿到token后,通过secret进行解密验证身份。

2023-04-10 16:41:01 1490 1

原创 js函数递归结果为NaN

递归指的就是函数自己调用自己。递归必须要有中断条件该函数处理的数据规模必须在递减或递增js写递归的时候要注意“中断条件”,不其他语言这样的情况js是不会给你报错的,js会给你返回一些莫名其妙的结果。...

2022-08-29 14:27:02 357

原创 js中的原型

原型就是每个对象都拥有一个属性,被称为原型,原型指向的对象称为“原型对象”。原型分为“隐式原型”和“显示原型”。JavaScript中每一个对象都有一个特殊的内置属性,这个属性指向的对象称为隐式原型对象。早期ECMA规范没有规定如何去查看,但是大部分浏览器给对象提供了 属性,可以查看这个对象的原型对象(实际开发不要使用因为有部分游览器没有提供,兼容性有问题)。后期ECMA提供了 ,可以查看原型对象。原型对象就相当于是对象的父类,当我们获取对象没有的属性时,对象就会自动去原型对象中查找(沿着原型链查找)代码

2022-07-08 16:57:41 987

原创 JS严格模式(精简分析,快速掌握)

js的严格模式会使得代码在严格的模式下运行,严格模式是通过 "use strict";开启。严格模式可以在js文件中开启严格模式,也可以对某一个函数开启严格模式

2022-07-04 23:25:50 621 1

原创 手动实现call、apply、bind方法

apply、call、bind方法的作用是改变函数中this的指向apply()方法bind()方法代码中注释有超详细解析,如有不足欢迎补充

2022-07-03 15:09:24 237

原创 js 中的 this 指向

文章源于 coderwhy ”js高级视频“ 总结在大多情况下,this出现在函数中。this指向什么,跟函数定义的位置无关,跟函数调用方式有关(绑定规则相关)。this的绑定规则默认绑定:函数独立调用方式,this指向window隐式绑定:通过对象调用方法,会隐式的将this指向当前对象显示绑定:通过函数的apply、call、bind方法改变函数中this的指向apply/call:会自动调用,第一个参数都是设置this的指向,apply第二个参数为数组,call后面传入为参数列表。bi

2022-06-24 16:55:10 382 1

原创 C语言实现链表的基本操作(增删改查)

链表属于线性结构,由多个节点构成,与数组不同,他是离散存储,通过指针相连链表的节点必须包含两个信息“有效数据和指针”,也就是“数据域和指针域 ”每一个节点都有前驱节点和后续节点,首节点没有前驱节点,尾节点没有后续节点链表的“首节点”前面还有一个“头节点”,头节点不存放有效数据,头节点指针域为NULL,作用是方便对链表进行操作双链表:每一个节点有两个指针域,一个指针域指向上一个节点,一个指针域指向下一个节点循环链表:能通过任何一个节点找到其他所有节点(也就是最后一个节点指向第一个节点形成了一个循环).....

2022-06-10 13:38:31 2667

原创 指针与二维数组

指针与二维数组本文探讨的是如何通过指针访问二维数组中的元素,以及二维数组如何在内存中存储指向一维数组的指针:我们先来看下如何通过指针访问一维数组#include <stdio.h>int main(){ int arr[] = {4, 3, 2, 1}; // 由于数组名是第一个元素的指针,对数组名进行解引用(*arr:此操作称为解引用)就能拿到第一个元素 printf("*arr=%d arr[0]=%d\n", *arr, arr[0]); // 对指针+1

2021-10-07 13:13:14 310 1

原创 axios 封装,API接口统一管理,支持动态API!

分享一个自己封装的 axios 网络请求主要的功能及其优点:将所有的接口放在一个文件夹中管理(api.js),并且可以支持动态接口。动态接口写法模仿的是vue的动态路由,如果你不熟悉动态路由可以看看我的这篇文章:Vue路由传参详解(params 与 query)1.封装请求:首先在 src 目录下创建 http 目录。继续在 http 目录中创建 api.js 文件与 index.js 文件。然后再 main.js 文件中导入 http 目录下的 index.js 文件。将请求注册为全局组件。

2021-09-11 11:07:10 2669 1

原创 通过一个案例,彻底理解Vue中 sync 修饰符

前言:看此文章之前我希望你比较熟悉:父子组件之间的传值(prop与$emit)。在看文章时你需要一边敲一边看。可以先直接复制我的代码快速过一遍(代码并没有难度都是基础),然后再自己敲。如下的代码是在脚手架中运行,复制前你需要搭建好 vuecli 脚手架为了深入理解,我们需要两个组件 myDialog.vue(对话框组件) 与 test.vue。其中 myDialog.vue 为子组件, test.vue为父组件。需要完成的功能:当我们点击父组件的显示按钮会弹出对话框组件。并且当我们点对话框的“.

2021-08-27 13:25:10 881

原创 Vue路由传参详解(params 与 query)

Vue路由传参详解(params 与 query)前言:路由传参分为 params 传参与 query 传参params 传参类似于网络请求中的 post 请求,params 传过去的参数不会显示在地址栏中(但是不能刷新)。params 只能配合 name 使用,如果提供了 path,params 会失效。query 传参类似于网络请求中的 get 请求,query 传过去的参数会拼接在地址栏中(?name=xx)。query 较为灵活既可以配合 path 使用,也能配合 name 使用(亲测可用

2021-08-19 18:30:22 28807 17

原创 彻底缓存与协商缓存(浏览器缓存)

强缓存与协商缓存(http缓存)前言:在游览器向服务器请求资源的时候,许多静态的资源是长时间不会更改的。如果重复的发起请求,不断从服务器获取长时间不会改变的资源,不仅会浪费宽带,增加服务器的压力,甚至影响到用户的体验。通过 http 缓存就能设置资源缓存。缓存后能减少资源的请求、减少响应的时间。http缓存:客户端向服务器发起请求时,会根据HTTP响应头的字段加载缓存的资源。http 缓存从第二次开始。第一次请求从服务器加载所有资源,第二次请求游览器根据响应头的字段加载缓存资源。http

2021-08-09 16:43:10 462

原创 mongodb 5安装配置+设置自动启动(最新最简单的安装、配置方法)

文章目录一、下载MongoDB二、创建目录及配置文件三、添加到服务(开机自动启动)四、检查一、下载MongoDB这里我推介下载zip版本,解压到任意盘,由于C盘容易满,所以我放到了D盘。我在D盘创建了一个 mongoDB 的目录,并将压缩包解压到了这个目录里面。下载地址:https://www.mongodb.com/try/download/community[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-scGvl6kI-1627282083483)(assets/

2021-07-26 14:49:20 11721 52

原创 重绘与回流总结(前端性能优化)

快速掌握重绘与回流(前端性能优化)这篇文章非常适合复习,以及面试的小伙伴们游览器渲染过程如下:解析html,生成 DOM 树解析css,生成 CSS 树合并 DOM 树与 CSS 树,生成渲染树(render tree)节点布局页面渲染重绘与回流渲染过程解析:游览器解析html会生成 DOM 树,解析css会生成 CSS 树,然后合并成为一个渲染树(render tree)。**注意!!**渲染树只会包含可视化节点,比如 script、head、meta、link 这些非可视化

2021-07-21 22:23:25 558 2

原创 Flex布局中如何设置主轴单个元素的对齐方式?justify-self在Flexbox中无效。

今天在写vue项目的时候遇到了一个样式布局的问题,如下我想使用flex布局,并且 “去计算” 这个元素可以右对齐(如下是设置好了的结果)。然后我就想着既然侧轴可以通过 align-self 对单个元素进行对齐,那么我能不能使用grid布局中的属性 justify-self 对主轴的元素进行单个对齐呢?试了一下发现是不行的,然后我查了 MDN 发现在 Flexbox 中 justify-self 是无效的,下面是我对MDN的一些总结和理解:为什么justify-self 在 Flexbox布局中失效?

2021-07-04 21:21:50 6666 5

原创 vue返回顶部的组件BackTop

直接看代码:<template> <div @click="backTopBtn(move)"> <slot /> </div></template><script>export default { name: "BackTop", props: { move: { type: Number, default: 300, }, }, methods: {

2021-06-15 21:40:28 1208 3

原创 js动画requestAnimationFrame详解

看这篇文章之前我希望你会用setTimeout做简单的动画,也就是利用递归来代替setInterval做动画。requestAnimationFrame() 他的作用就是代替定时器做更加流畅高性能的动画,做可以匹配设备刷新率的动画,他解决了定时器做动画时间间隔不稳定的问题(也就是解决定时器做动画不流畅的问题)。他的用法与setTimeout差不多。与setTimeout一样的是都会返回一个唯一标识,setTimeout可以通过clearTImeout()关闭定时器。那么requestAnimatio.

2021-06-15 21:36:07 8982 3

原创 JS异步与Promise基础,循序渐进带你掌握promise

JS异步编程与PromisePromise是异步编程的一种解决方案什么是异步编程?首先我们要理解什么是同步编程。同步指的是代码一行一行执行,下面的代码必须等待上面代码的执行完成。当遇到一些耗时比较长的任务时,比如网络请求就容易发生阻塞,必须等数据请求过来后才能执行后面的操作。那么这里异步执行是在请求数据的同时还能执行后面的任务。拿现实生活来举例,比如你又要煮饭又要炒菜。如果是同步执行,那么你必须先等饭煮完才能炒菜,或者是先炒完菜才能再去煮饭,这显然是非常耽搁时间的。如果是异步执行的话,你可以在遇到煮

2021-05-27 18:02:01 2985

原创 利用面向对象方式实现js计算器

利用面向对象思维实现js计算器后面代码更新都会放在我的 GitHub 求个star<!DOCTYPE html><html lang=""><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, in

2021-05-05 17:17:59 605 1

原创 JavaScript异步与同步解析

js异步执行与同步执行的解析:基本概念:微任务队列中的任务可称为微任务消息队列中的任务可称为宏任务调用栈也可以称为主线程单线程:单线程指的是只有一个主线程的线程,代码的执行由一个主线程来完成。JavaScript就是一个单线程的语言为什么js是单线程?如果一个线程在一个节点中添加内容,另一个线程要删除这个节点。所以为了不必要的麻烦,js就是一门单线程语言。js的异步执行分析:拿现实生活来举例,比如一个人在家(单线程),你既要煮饭又要炒菜。那么你可以怎么做呢?你可以把煮饭分为两

2021-04-10 20:24:48 3045 11

原创 超详细Node.js入门适合新手(Nvm,进程与线程,模块化,NPM)

文章目录学习node.js[可以配合这里的视频一起学习](https://www.bilibili.com/video/BV1bs411E7pD)Node.js入门node.js是基于chrome V8引擎的JavaScript执行软件node.js也就是JavaScript的解析器,提供了js的运行环境node.js的特性:Nvm(node.js version management,node的版本管理工具)进程与线程进程(process)是资源分配的最小单位,线程(thread)是cpu进行运算调度的最

2021-03-31 23:57:52 422 1

原创 js事件目标查找方式,事件代理,e.target与e.currentTarget的区别,阻止冒泡与捕获,取消默认事件一次搞懂,看这个就够了

文章目录EventTarget 事件目标的查找方式(冒泡与捕获)冒泡与捕获:冒泡事件捕获事件:addEventListener(type,listener,useCapture) 简单分析:参数useCapture详解:冒泡与捕获的顺序:代码演示:事件代理机制利用事件冒泡完成事件代理机制:关于事件对象的知识点:e.target与e.currentTarget的区别:阻止冒泡与捕获为什么要阻止冒泡或捕获?阻止冒泡或捕获的方法event.stopPropagation()阻止冒泡:event.stopPropa

2021-03-30 16:20:25 4871 20

空空如也

空空如也

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

TA关注的人

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