其实很简单 我以我这边使用的ws库为例子 新建一个 shims.d.ts 文件
import ws from "ws";
declare module "ws" {
export interface WebSocket extends ws {
$id: string;
}
}
这样就可以实现扩展了,成功的在ws 上扩展了$id属性
另外注意一点 d.ts文件不要和.ts文件一样命名 不推荐通过后缀区分文件
还有疑问可以加群讨论 秋秋群:768901972
其实很简单 我以我这边使用的ws库为例子 新建一个 shims.d.ts 文件
import ws from "ws";
declare module "ws" {
export interface WebSocket extends ws {
$id: string;
}
}
这样就可以实现扩展了,成功的在ws 上扩展了$id属性
另外注意一点 d.ts文件不要和.ts文件一样命名 不推荐通过后缀区分文件
还有疑问可以加群讨论 秋秋群:768901972
随缘更新,记录下自己的刷题记录
刷题要有思路的刷题,这轮刷题的目的就是熟悉题型,没事造造火箭。所以我选择的刷题思路是按照tag进行刷题。每个tag刷一个月。刷题的频率暂定是每个工作日刷一题,不论简单或难,总之要有一题,纯粹当爱好。
更新-2020-06-09
//这题是考常见的排序,冒泡,快排,插入排序等常见的排序都可以
// https://leetcode-cn.com/problems/kth-largest-element-in-an-array/submissions/
/**
* @param {number[]} nums
* @param {number} k
* @return {number}
*/
var findKthLargest = function(nums, k) {
return nums.sort(compareNumbers)[nums.length - k]
};
function compareNumbers(a, b) {
return a - b;
}
sort 的源码实现目前有新旧两版 旧版的是根据数组的长度,内部调用的不同的算法来实现的,数组小于10的时候调用的是插入排序 数组大于10的时候 使用的是快排
具体可以看这里https://github.com/v8/v8/blob/ad82a40509c5b5b4680d4299c8f08d6c6d31af3c/src/js/array.js
新版的看这里 https://github.com/v8/v8/blob/master/third_party/v8/builtins/array-sort.tq
更新-2020-06-08
// 这题是leetcode第一题 https://leetcode-cn.com/problems/two-sum/
// 可以使用暴力穷举法进行,也可以采用HashMap,这里采用的是HashMap来实现
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function (nums, target) {
let myMap = Object.create({});
var index = 0;
for (var value of nums) {
if (myMap[target - value] !== undefined) {
return [myMap[target - value], index]
}
myMap[value] = index;
index += 1;
}
};
执行用时 :60 ms, 在所有 JavaScript 提交中击败了97.56%的用户
内存消耗 :37.9 MB, 在所有 JavaScript 提交中击败了5.08%的用户
北京54坐标系 是参心坐标系 因为原点离国内太远,所以国内使用实际误差较大
西安80坐标系 是参心坐标系 换了一个大地基准面,大地原点设在陕西省泾阳县永乐镇 基准面采用的是青岛验潮站1952年到1979年确定的黄海平均海水面 也叫85高程
国家CGCS2000的坐标系原点 是整个地球的质量中心 也叫地心坐标系 参考椭球参数基本与WGS84椭球体差不多 两个坐标系的坐标精度要求不高的情况下可以直接使用
两个不同的三维空间直角坐标系之间转换时,通常使用七参数模型,需要知道7个未知参数
3个坐标的平移量 3个坐标轴的旋转角度 加上一个尺度因子K 一共七个参数
denoDeno 的目标是为现代程序员提供一个高效、安全的脚本环境。
它始终以单个可执行文件形态,作为分发文件,并且该可执行文件,足够运行任何 deno 程序。
给定一个 deno 程序的 URL,您应该能够用不超过 50MB 的 Deno 可执行文件,来执行它。
Deno 明确承担运行时,和包管理器的角色。它用标准的浏览器兼容协议,来加载模块:URLs。
Deno 为提供了程序访问系统的安全保证,默认情况下,它是最严格的安全沙盒。Deno 提供一套经过评审(审核)的标准模块这保证了与 Deno 的合作。
windows 下安装Deno 在 OSX、Linux 和 Windows 上工作。deno 是单个二进制可执行文件。它没有外部依赖关系。deno_install提供方便的脚本,来下载和安装二进制文件。
使用 Shell:
$ curl -fsSL https://deno.land/x/install/install.sh | sh
使用 PowerShell:
> iwr https://deno.land/x/install/install.ps1 | iex
使用Scoop(Windows):
scoop install deno
也可以通过github.com/denoland/deno/releases下载 tarball 或 zip 文件,手动安装 deno。这些包只包含一个可执行文件。您必须在 Mac 和 Linux 上,设置可执行的环境变量(PATH)。
安装完成之后初体验
新建一个 helloworld.ts在里面写下
console.log("hello world");
终端中运行
deno run .\helloworld.ts
新建一个 a.ts
export const a = { name: "i am a",};
在helloworld.ts中引入
import { a } from "./a.ts";
console.log("hello world",a.name);
注意a.ts 的后缀目前版本并不能省略,需要明确写出
先体验到这里,后续在更新
项目模板:https://github.com/gothinkster/realworld
博客:V8: https://v8.dev/
Chromium:https://blog.chromium.org/
Google:https://web.dev/blog/
React Dan:https://overreacted.io/
Chrome Manager:https://medium.com/@addyosmani
Google Chrome Developer: https://jakearchibald.com/
Vue: https://zhuanlan.zhihu.com/evanyou
设计模式:https://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html
司徒正美:https://www.cnblogs.com/rubylouvre/
Egg:https://www.yuque.com/egg
Taobao: https://fed.taobao.org/blogs/?spm=taofed.homepage.header.3.7eab5ac8VeGZCx
腾讯:http://www.alloyteam.com/page/0/
网易:https://zhuanlan.zhihu.com/musicfe
编码规范 https://github.com/ecomfe/spec
JavaScript权威指南pdf版 http://rjxz7.gds.name/2015/JavaScriptqwzn6.pdf
git 简易指南 http://rogerdudler.github.io/git-guide/index.zh.html
svn 手册 http://svnbook.red-bean.com/nightly/zh/index.html
史上最全设计模式导学目录 https://blog.csdn.net/lovelion/article/details/17517213
koa实战项目教程 https://github.com/ikcamp/koa2-tutorial
博客工具
git book http://www.chengweiyang.cn/gitbook/index.html
vuepress https://www.vuepress.cn/
《CSS选择器》作者 张鑫旭:https://www.zhangxinxu.com/
木易杨前端进阶 https://muyiy.cn/blog/
冴羽 https://github.com/mqyqingfeng/Blog
cesium介绍 http://cesium.marsgis.cn/go.html?id=cesium-started
Vue 相关源码地址:
vue2.0 https://github.com/vuejs/vue
Vue3.0 https://github.com/vuejs/vue-next
Vuex https://github.com/vuejs/vuex
Vue-Router https://github.com/vuejs/vue-router
Nuxt https://github.com/nuxt
LRU缓存机制:
介绍:https://baike.baidu.com/item/LRU
LeetCode: https://leetcode-cn.com/problems/lru-cache/solution/lru-huan-cun-ji-zhi-by-leetcode/
最佳实践: https://github.com/isaacs/node-lru-cache
function campare(value1,value2){
if(value1>value2){
return 1;
}else if(value1 == value2){
return 0;}else{
return -1;
}}
function campare(value1,value2){
if(value1<value2){
return 1;}else if(value1 == value2){
return 0;
}else{
return -1;
}}
function sort(arr) {
for (let i = 0; i < arr.length – 1; i++) {
for (let j = 0; j < arr.length – 1; j++) {
if (arr[j] > arr[j + 1]) {
let temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
其实按照网上的教程基本都能成功启动,为了方便下次查找我在整理下
docker pull verdaccio/verdaccio
首先
docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio
这样就可以运行了,但是这样文件和更改不能持久化,一重启动就没了,肯定不是我们想要的效果
-v /home/verdaccio/storage:/verdaccio/storage
-v /home/verdaccio/config:/verdaccio/conf
-v /home/verdaccio/plugins:/verdaccio/plugins
这样就可以了。
然后你兴高采烈的一敲命令,报错了。
这个由于启动时容器会去找 /home/verdaccio/config/config.yaml
文件,所以在 config
文件夹新建该文件,填入以下内容:
storage: /verdaccio/storage
auth:
htpasswd:
file: /verdaccio/conf/htpasswd
uplinks:
npmjs:
url: https://registry.npm.taobao.org/
packages:
'@*/*':
access: $all
publish: $authenticated
proxy: npmjs
'**':
proxy: npmjs
logs:
- {type: stdout, format: pretty, level: http}
htpasswd
文件是用来存储 npm 用户及密码信息的文件uplinks
上游源改为了淘宝的镜像源,这样在下载找不到的包的时候就会从淘宝下载。这样打开你本地的 4873 就可以访问了,更多的设置建议看官方文档
参考链接
No installed build tools found. Install the Android build tools version
有时候,新电脑编译apk的时候会报这些错,这其实都是环境变量没配置好导致的
首先先找到自己的sdk安装位置
打开环境变量配置
%ANDROID_HOME%\platform-tools
%ANDROID_HOME%\tools
修改完终端记得关闭下软件再重新打开才可以生效,当然直接重启电脑也是没问题的
function say(text, lang) {
var synth = speechSynthesis;
var utter = new SpeechSynthesisUtterance(text);
utter.voice = synth.getVoices().find(v => v.lang === lang);
synth.speak(utter)
}
用法示例
say(‘你好’,’zh-CN’);
当我们开发完一个Angular应用的时候,如果有vue开发经验的,vue-cli有 npm run build 命令,一键式将资源打包成生产模式。同样,在angular的应用中,如果是angular-cli构建的项目,也有 ng build 命令,但是如果不加参数,默认是dev环境打包,所以我们在线上环境的时候,需要用 ng build –prod 命令。同样是构建,你知道 ng build –dev 与 ng build –prod 的打包区别吗?
总结下来应该有以下5点:
dev模式在打包的时候会生成map文件,而生产模式则不会打包。不熟悉map文件作用的这里做简单的介绍,map文件的作用就是为了在应用资源在压缩后,如果出现错误,因为是压缩的资源,变量及方法名称都经过最简化处理,所以我们很难定位,这时map文件就将发挥作用,它可以帮我们在资源文件快速定位到错误的具体行号。
source map文件帮我们快速定位线上bug。但是你不想生成source map文件的话,我们可以使用 ng build –dev -sm false。同样,如果你想在prod环境生成source map文件,则也可以将其设置为true即可。
在开发环境构建的时候,css文件是不会单独抽出来打包成css文件,而是融合在js文件中,而在生产环境则相反。
当然在开发环境build的时候,我们也可以通过 ng build –dev -ec true 来将样式文件单独抽离出来打包成css文件,只不过在prod环境默认设置成了true而已。
在生产环境打包的时候代码是经过压缩及beatufiy的。这里简单说下,代码压缩包括对代码的空格、换行及注释的处理,beautify处理就是将我们的代码变量及方法名、参数名经过最简化处理。这两个过程都是为了减少及压缩线上代码体积的大小。
生产环境打包模式的时候,代码是经过tree shaking处理的,而开发环境打包模式是没有的。这里讲一个概念,什么是tree shaking?打过比方,tree shaking就是相当于去除我们实际在线上没有用过到的代码。举一例子:比如我们在写代码的过程中,写了一个组件,但是我们在实际过程中没有用到这个组件,那么在实际打包过程,是不会将这个组件打包到最终的bundle里面的。tree shaking形象化来理解就是通过摇曳去除那些枯叶【没用的代码】。
开发环境模式的编译模式是JIT编译模式,而生产环境的编译模式是AOT编译模式。这里说明下什么是AOT、JIT编译模式。AOT编译模式是指angular的模块及组件都是提前编译好的,所以当浏览器在懒加载到某个模块或组件的时候,它的响应相对来说会快些;而JIT编译模式则不会,它会相应的编译后才会出现来。当然AOT编译模式还具有其他的优势,比如减少实际的打包体积,同时如果应用本身在打包的过程如果出错的话,是会编译报错,不会打包成功。