技术点

归纳些技术碎片,留待查阅,不定时更新

前端

代码规范

参考 掘金

ESLint
1
npm install eslint --save-dev
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
module.exports = {
root: true,
env: {
node: true
},

// "extend": ["airbnb-base"],
extends: ["plugin:vue/essential", "eslint:recommended"],
rules: {
"no-console": process.env.NODE_ENV === "production" ? "error" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "error" : "off",
//强制使用单引号
quotes: ["error", "single"]
//强制不使用分号结尾
// semi: ['error', 'never']
},
parserOptions: {
parser: "babel-eslint"
}
};
Husky

can prevent bad git commit, git push

1
2
3
4
5
6
7
8
9
10
11
// package.json
{
"scripts": {
"lint": "eslint . --cache"
},
"husky": {
"hooks": {
"pre-commit": "npm lint",
}
}
}

也可结合 lint-staged:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.js|{lib,setup,bin,hot,tooling,schemas}/**/*.js|test/*.js|{test,examples}/**/webpack.config.js}": [
"eslint --cache"
],
"*.{ts,json,yml,yaml,md}|examples/*.md": [
"prettier --check"
],
"*.md|{.github,benchmark,bin,examples,hot,lib,schemas,setup,tooling}/**/*.{md,yml,yaml,js,json}": [
"cspell"
]
}
}
gitlab CI
1
2
3
4
5
6
lint:
stage: lint
only:
- /^feature\/.*$/
script:
- npm lint

Linux

进程

  • 查看进程:ps -ef|grep xxx
  • 跟踪进程内部的系统调用和信号:strace
  • 打印出运行中程序的堆栈信息:pstack pid
  • 按树形结构打印运行中进程结构信息:pstree
  • /proc/pid 文件了解进程的运行时信息和统计信息
  • pgrep -u xx,相当于 ps -ef | egrep '^hchen' | awk '{print $2}'

找出当前系统内存使用量较高的进程:ps -aux | sort -rnk 4 | head -20
找出当前系统CPU使用量较高的进程:ps -aux | sort -rnk 3 | head -20

垃圾文件删除

tmpwatch 用于删除 /tmp 目录下的文件,以及其它地方其他无用的文件,如旧的日志文件,不要在 /(根目录)中运行

网络工具

netcat:检查开放端口,可以扫描单个端口或端口范围。
ping,tracert,nslookup
mtr

同时查看多个日志或数据文件

multitail

进程管理

yum install supervisor

电商 SKU 算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
let names = ["iPhone X", "iPhone XS"]

let colors = ["黑色", "白色"]

let storages = ["64g", "256g"]

let combine = function (...chunks) {
let res = []

let helper = function (chunkIndex, prev) {
let chunk = chunks[chunkIndex]
let isLast = chunkIndex === chunks.length - 1
for (let val of chunk) {
let cur = prev.concat(val)
if (isLast) {
// 如果已经处理到数组的最后一项了 则把拼接的结果放入返回值中
res.push(cur)
} else {
helper(chunkIndex + 1, cur)
}
}
}

// 从属性数组下标为 0 开始处理
// 并且此时的 prev 是个空数组
helper(0, [])

return res
}

console.log(combine(names, colors, storages))

前端电商 sku 的全排列算法

图形算法(邻接矩阵)

-------------本文结束感谢您的阅读-------------