# 前言 之前使用过基于 Mosquitto2.0 的 MQTT 协议,安装软件极其麻烦. 所以寻找一个简单快捷的方式搭建一个 MQTT 服务器,刚好 Mosca 就是一个最好的选项. Mosca 实现了 MQTT 协议,并且支持多种发布 / 订阅提供商,在应用上也更方便快捷. 缺点是 Mosca 已经不再维护了,最新只支持 MQTT3.1.1 的版本,对 MQTT5.0 的支持就没那么好了,不过也够用就是了. # 安装 Mosca 安装还是很方便的,这里我们使用 redis 作为发布 / 订阅的提供商. h$ npm install mosca redis --save# 写一个最简单的...

# 前言 最近因为工作的关系 家里的树莓派也吃灰很久了 Arduino 和 esp8266 之前摆弄过几次,有一定基础了 这次就深入研究一下子,做个智能家居服务 首先第一步,搭建开发环境! 以下开发均使用该开发板 40 多元一块还挺贵的 Arduino esp8266 开发库文档 # 搭建 Arduino 开发环境 下载 Arduino IDE, 到官网下载即可 接下来要下载 esp8266 的开发包,打开 IDE...

# 题目 给你一个 m x n 的整数网格 accounts ,其中 accounts [i][j] 是第 i 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。 客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。 # 自己解题 这个很简单,使用 reduce 就可以,在循环中逐一比对. tfunction maximumWealth(accounts: number[][]): number { let max = 0; for(let item of accounts){ let num...

# 题目 给定一个头结点为 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 # 自己解题 完全按照题意,先循环一遍链表,得到链表的长度,然后除以 2 之后再循环一遍,得到链表后面的部分. t/** * Definition for singly-linked list. * class ListNode { * val: number * next: ListNode | null * constructor(val?: number, next?: ListNode | null) { * this.val =...

# 题目 给你两个字符串: ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 # 自己解题 拿到题略一思考,可以将 magazine 转为数组,然后循环 ransomNote 的每一个字符,判断是否在数组里即可,每次循环需将查找到的字符串从数组里去掉,还是挺简单的. tfunction canConstruct(ransomNote: string, magazine: string):...

# 题目 给你一个数组 nums 。数组「动态和」的计算公式为: runningSum[i] = sum(nums[0]…nums[i]) 请返回 nums 的动态和。 示例: n输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。# 自己解题 这个算是比较简单的,循环原数组,设置一个临时变量,每次和临时变量求和即可 tfunction runningSum(nums: number[]): number[] { let res = []; let tem = 0; for(let i =...

# 题目 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而 123 不是。 示例: n输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。# 自己解题 略一思考,可以把数字转成字符串,从中间一分为二,再把右边的字符串倒序排列一下,对比即可 tfunction isPalindrome(x: number): boolean { const str =...

# 题目 给定一个整数数组 nums 和一个整数目标值 target ,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例: n输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。# 自己解题 看到这个题目,感觉还是挺简单的,感觉用 2 个 for 循环就可以了,于是花了 2 分钟写了一个 tfunction twoSum(nums:...

# 前言 目前工作中使用 vue2 的居多,为了巩固 vue3 的基础和要时刻保持自己学习的习惯,打算基于 vue3 与 serverless 开发一个全栈开源项目 ( 资源管理项目 ) 前后端采用前后分离的交互模式,后端采用 nest9 框架,使用 RESTful 风格接口,数据库暂定 mysql 与 redis (mysql 可能替换为 mongodb ) 前端主要采用 vue3 + naiveui 来开发 # 项目简介 这是一个小项目,包含用户登录,各种类型的文件上传及管理,通过权限机制分配文件给不同的用户,在其他平台可以方便选取文件复制 url 或下载 文件的存储暂时只使用 七牛云...

开发项目经常要用到 https 协议,这时就需要使用到 ssl 证书,通常我们申请证书需要通过域名提供商,例如阿里云,腾讯云都可以在后台进行申请,也很方便,如果不通过后台的话,就需要用到 acme.sh , 这是一个非常好用的工具,在这里转载它的使用说明,也方便日后查看. 以下是该工具的说明 acme.sh 实现了 acme 协议,可以从 letsencrypt 生成免费的证书. 主要步骤: 安装 acme.sh 生成证书 copy 证书到 nginx/apache 或者其他服务 更新证书 更新 acme.sh 关于修改 ReloadCmd 更新...