## **常用命令**
<table cellspacing="0" style=";font-weight: bold">
<tr >
<td style="width:150px">ls</td>
<td style="width:600px"> ls -a 列出目录所有文件,包含以.开始的隐藏文件<br>
ls -t 以文件修改时间排序<br>
ls -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来</td>
</tr>
<tr >
<td >cd</td>
<td style="width:500px">cd / 进入根目录<br>
cd ~ 进入家目录(当前登陆用户)<br>
cd - 进入上一次工作路径<br>
cd .. 进入上一级目录</td>
</tr>
<tr >
<td >pwd</td>
<td style="width:500px"> pwd 查看当前路径<br>
pwd -P 查看软链接的实际路径</td>
</tr>
<tr >
<td >mkdir</td>
<td style="width:500px">mkdir -m 对新建目录设置存取权限<br>
mkdir -p 一次可以建立多个目录<br>
mkdir 当前文件夹下创建新文件夹</td>
</tr>
<tr >
<td >rm</td>
<td style="width:500px">rm -i *.log 删除任何.log文件;删除前逐一询问确认<br>
rm -rf 删除所有,包含子文件(-f, --force 忽略不存在的文件,从不给出提示,-r, -R, --recursive 指示rm将参数中列出的全部目录和子目录均递归地删除。)</td>
</tr>
<tr >
<td >rmdir</td>
<td style="width:500px"> rmdir -p parent/child/child11 当parent子目录被删除后使它也成为空目录的话,则顺便一并删除,不能删除非空目录 </td>
</tr>
<tr >
<td>mv</td>
<td style="width:500px">mv test.log test1.txt 将文件test.log重命名为test1.txt<br>
mv log1.txt log2.txt log3.txt /test3 将文件log1.txt,log2.txt,log3.txt移动到根的test3目录中<br>
mv -i log1.txt log2.txt 将文件file1改名为file2,如果file2已经存在,则询问是否覆盖<br>
mv * ../ 移动当前文件夹下的所有文件到上一级目录</td>
</tr>
<tr >
<td >cp</td>
<td style="width:500px">cp -i 提示<br>
cp -r 复制目录及目录内所有项目<br>
-a 复制的文件与原文件时间一样<br>
</td>
</tr>
<tr >
<td >cat</td>
<td style="width:500px">cat filename 一次显示整个文件<br>
cat > filename 只能创建新文件,不能编辑已有文件<br>
cat file1 file2 > file 将几个文件合并为一个文件<br>
cat -n 查看时输出所有行号</td>
</tr>
<tr >
<td >tail</td>
<td style="width:500px">tail -f 循环读取(常用于查看递增的日志文件)<br>
tail -n<行数> 显示行数(从后向前)<br>
tail -f -n 50 循环读取逐渐增加的文件内容</td>
</tr>
<tr >
<td >find</td>
<td style="width:500px">find -name 按照文件名查找文件(文件名可使用通配符,*.log)<br>
find -type 查找某一类型的文件</td>
</tr>
<tr >
<td >chmod</td>
<td style="width:500px">chmod -c 当发生改变时,报告处理信息<br>
chmod -R 处理指定目录以及其子目录下所有文件</td>
</tr>
<tr >
<td >df</td>
<td style="width:500px">df -l 显示磁盘使用情况</td>
</tr>
<tr >
<td >grep</td>
<td style="width:500px">ps -ef | grep svn 查找指定进程<br>
ps -ef | grep svn -c 查找指定进程个数<br>
<!--cat test1.txt | grep -f key.log 从文件中读取关键词<br>-->
grep -C 10 'aaaa' nohup.out 从文件中查找关键字(包含前后10行)</td>
</tr>
<tr >
<td>ps</td>
<td style="width:500px"> ps -ef 显示当前所有进程环境变量及进程间关系<br>
ps -A 显示当前所有进程<br>
ps -aux | grep apache 与grep联用查找某进程<br>
ps -aux 是用BSD的格式来显示进程,ps -ef 是用标准的格式显示进程
</td>
</tr>
<tr >
<td >kill</td>
<td style="width:500px">kill -9 $(ps -ef | grep pro1) 先使用ps查找进程pro1,然后用kill杀掉</td>
</tr>
<tr >
<td >free</td>
<td style="width:500px">free -b 以Byte显示内存使用情况<br>
free -k 以kb为单位显示内存使用情况<br>
free -m 以mb为单位显示内存使用情况<br>
free -g / -h 以gb为单位显示内存使用情况<br>
free -s<间隔秒数> 持续显示内存<br>
free -t 显示内存使用总合</td>
</tr>
<tr >
<td >reboot</td>
<td style="width:500px">重启</td>
</tr>
<tr >
<td >logout </td>
<td style="width:500px">注销 </td>
</tr>
<tr >
<td >shutdown -h now</td>
<td style="width:500px">关闭系统</td>
</tr>
<tr >
<td >tar </td>
<td style="width:500px">tar -zxvf archive.tar.gz 解压一个gzip格式的压缩包 <br>
tar -zcvf /home/abc.tar.gz 打包,并用gzip压缩</td>
</tr>
<tr >
<td >unzip</td>
<td style="width:500px">unzip file1.zip 解压一个zip格式压缩包 </td>
</tr>
<tr >
<td >rpm</td>
<td style="width:500px">rpm -ivh package.rpm 安装一个rpm包 <br>
rpm -qa 显示系统中所有已经安装的rpm包 <br>
rpm -e package_name.rpm 删除一个rpm包 </td>
</tr>
<tr >
<td>yum </td>
<td style="width:500px">yum install package_name 下载并安装一个rpm包 <br>
yum update package_name 更新一个rpm包 <br>
yum remove package_name 删除一个rpm包<br>
yum list installed 列出当前系统中安装的所有包 </td>
</tr>
<tr >
<td >vim</td>
<td style="width:500px">:q 退出<br>
:q! 强制退出<br>
:wq! 保存并强制退出<br>
/test 在文档中查找test 按n跳到下一个,shift+n上一个</td>
</tr>
<tr >
<td >scp</td>
<td style="width:500px">scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令<br>
命令格式:scp <可选参数> local_file remote_username@remote_ip:remote_folder <br>
参数:<br>
-r: 递归复制整个目录<br>
-v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
</td>
</tr>
</table>
- 计算机网络
- content-type
- cookie相关
- TCP/IP 4层模型
- HTTP2和HTTP1的区别
- http状态码
- DNS 域名解析
- URI 和 URL
- request和response
- cdn的原理
- http2和 https的区别
- 轮询 & 长轮询
- websocket 和 http 协议的区别
- 三次握手四次挥手
- https是如何加密的
- 原码、反码和补码
- Socket
- css
- 如何触发 BFC
- css 动画
- postcss-px-to-viewport、postcss-plugin-px2rem
- css 预处理器
- PostCss
- 实现一个 0.5 px的边框
- 实现10px的字体
- 实现左侧宽度固定,右侧宽度自适应的布局
- calc 的原理
- 伪类和伪元素的区别
- 层叠上下文和层叠顺序
- css 中的 meta标签
- flex
- css 画斜线
- transform 合成层
- 如何画一个三角形、正方体
- js动画和css动画的差异
- 盒模型
- 选择器的优先级
- css 选择器的解析顺序
- h5适配方案
- 适配刘海屏
- 移动端 rem 的大小是怎么计算出来的
- rem+vw
- 动态 viewport 和 REM 适配
- 深入理解viewport
- 算法
- 时间复杂度
- 排序
- 冒泡排序
- 选择排序
- 插入排序
- 快速排序
- 数组扁平化
- 二叉树
- 深度优先搜索
- 前中后序遍历
- 广度优先搜索
- 判断两个二叉树是否相等
- 计算二叉树节点个数
- 二分法查找
- 字符串
- 压缩字符串
- 一个函数,传入url和一个对象,返回以query形式的url
- 双指针算法
- 双指针算法(合并有序数组,三数求和)
- 限制同时只能并发四个请求
- 输出环形数组
- 函数坷里化
- 动态规划 - 最优解问题
- 股票利润最大
- 股票利润最大 -1
- 下台阶问题
- 连续子数组最大和
- 栈和队列
- 用两个栈模拟一个队列
- 两数求和
- 打印数组第n大的数
- 字符串包含
- 每3秒打印一个helloworld,总共执行4次
- 斐波那契
- 打印斐波那契数列前n项
- 动态规划实现输出斐波那契数列前n项
- 最长连续子字符串
- 实现一个深拷贝
- 实现一个进制转换
- js
- 基础知识整理
- for in 和 for of的区别
- js 隐式转换
- canvas
- 如何使用 Math.random() 生成 n-m,不包含 n 但包含 m 的整数?
- encodeURIComponent & encodeURI
- 为什么用 setTimeout, 不用 setInterval
- MutationObserver
- 浏览器渲染过程
- cookie
- 滚动相关
- 函数
- js有函数重载吗
- 函数柯里化的实现
- 高阶函数
- arguments
- IIFE立即执行函数
- 手写系列
- 手写 map、filter、reduce
- call、apply、bind
- 数据类型
- 基本数据类型
- 判断数据类型的typeof
- null 和 undefined
- 字符串类型
- 数字类型
- 引用数据类型
- Set、Map
- 如何判断数组类型
- instanceof 原理
- 数组的创建
- Service Worker
- JS中==、===和Object.is()的区别
- 插入节点
- 前端缓存
- script 异步加载有什么问题
- xhr 请求
- fetch
- axios
- 页面输入 url 到页面渲染都发生了什么
- 包装对象
- 错误对象
- 拖放 api
- 原型
- js new的时候都干了什么
- 屏蔽属性
- 闭包
- 应用一 - 防抖和节流
- 应用二 - 单例模式
- 创建对象
- 判断对象里是否有某个属性
- 事件循环
- node中的事件循环
- 继承
- 原型和继承的关系
- 如何基于es5实现继承
- 原型链继承
- 盗用构造函数继承
- 组合继承(函数可以重用)
- 原型式继承
- 寄生式继承
- 寄生式组合继承
- es6继承
- 继承基础
- 事件
- 自定义事件
- 事件派发
- 写一个EventEmitter类,包括on()、off()、once()、emit()方法
- 作用域
- 执行上下文
- 为什么let、const 有暂时性的死区
- 变量提升和函数声明提前
- 作用域链
- 变量提升和函数提升
- 词法作用域
- Promise
- 以往的异步编程模式
- promise的状态
- async/await
- 手写 promise
- 手写 promise all
- 输出顺序
- 垃圾回收
- 内存泄漏
- 浏览器缓存策略
- 跨域的解决方案
- options请求返回 *的弊端
- cookie 跨域
- 同源策略
- nginx反向代理时,对域名的要求
- 深浅拷贝
- Object 构造函数是深拷贝还是浅拷贝
- 手写深拷贝
- this
- 箭头函数中的this指向
- this的四种绑定机制和作用域
- 迭代器和生成器
- 文件的操作
- 文件上传
- 文件下载
- js输出题
- 操作dom为啥耗时
- 生成器
- 图片懒加载
- 前端框架类
- vuex
- getter
- mutation 和 action 的区别
- 原理分析
- vue3
- 和 vue2 key的对比
- 响应式原理
- diff 算法
- 和vue2相比 性能优化在什么地方
- 新特性
- @vue/composition-api
- 动静结合diff算法
- vue2
- 添加环境变量
- 变化侦测
- vue defineReactive 源码分析
- $delete 的原理
- $set 的原理
- $watch 的原理
- Array 的变化侦测
- object的变化侦测
- 虚拟 DOM
- patch
- vue 性能优化技巧
- vnode
- 模版编译原理
- 解析器
- 实例方法与全局api的实现原理
- 全局API实现原理
- 事件相关实例方法
- 生命周期相关实例方法
- 自定义指令是如何生效的
- 过滤器原理
- 生命周期
- 初始化阶段
- 模版编译
- 挂载阶段
- 卸载阶段
- 父子组件生命周期执行过程
- 调试源代码
- keep-live
- 组件注册原理
- render函数
- computed 原理
- 响应式是如何实现的
- errorCaptured 错误处理
- vue中的事件
- Vue中的scoped的实现原理
- 插件系统
- sync 修饰符的原理
- v-model 实现原理
- vue-router
- vue-router基础知识
- vue 路由按需加载
- vue-router 核心源码解读
- vue-router 工作原理
- 源码调试
- react-router-dom
- 基础整理
- 简介
- react(17.0.3)
- 事件机制
- react 单项数据流原理
- react diff
- react key
- react fiber
- 组件
- 受控组件和非受控组件
- 函数组件
- hooks
- useReducer
- useCallback 和 useMemo的区别
- useRef、createRef的区别
- 类组件
- pureComponent
- setState原理
- 高阶组件
- 代码分割
- 组件之间的通讯
- react 基础
- React17更新了哪些内容
- vue和react的对比
- react 生命周期
- render阶段和commit阶段
- 数据发生变更时,分别触发哪些生命周期
- context - 跨层级组件数据传递
- Profiler API
- web component
- redux
- compose 函数
- 迭代器
- useSelector
- dva-core
- redux-saga
- 性能优化
- 目的
- 常用策略
- 图片的优化
- html 的优化
- css 的优化
- js 优化
- 加载策略优化
- 关键指标
- RAIL
- 性能定位与监控
- 性能优化原则
- 长列表渲染优化
- 首屏加载优化
- 设计模式
- 策略模式
- 装饰器模式 & 如何用装饰器开发
- 观察者模式
- 如何实现发布订阅模式
- 安全相关
- DDos
- SQL 注入
- 浏览器安全
- xss 攻击
- dom 型 xss是如何攻击的
- csrf 攻击
- 服务端渲染
- next
- nuxt
- 初始化
- git
- 一个仓库里怎么同时管理了多个单独发布的包
- 常用命令
- git reset 和 git revert 的区别
- git rebase的缺点
- typescript
- typescript 之 infer
- 高级类型
- 移动端 H5
- 1. 响应式页面开发
- vw 作为css长度单位
- 响应式背景图片
- vw px rem 之间的换算
- dpr 是什么
- 背景图保持宽高比
- 动效开发
- transform + transition
- hybrid
- jsbridge 原理
- 安卓微信唤醒app
- visibilitychange
- vconsole的实现原理
- cross-env原理
- 微信小程序
- mpx
- taro
- 微信小程序底层原理
- npm
- npm 脚本
- npx
- npm link
- node
- node 单线程的优点和缺点
- 如何理解node的事件驱动、无阻塞、单线程
- 洋葱模型
- node 基础知识
- buffer
- event
- 模块机制
- 如何设置环境变量
- 网络编程
- 构建TCP服务
- 构建UDP服务
- 构建HTTP服务
- 构建WebSocket服务
- 安全
- web应用
- 内存控制
- fs
- readFile 和 createReadStream 的区别
- util
- express
- serverLess
- 微前端
- 认识微前端
- 微前端原理
- qiankun
- html entry
- 路由原理
- 整体架构
- 框架、路由开发
- 模块
- 页面的渲染
- 模块之间的耦合
- 通用的组件库
- 模块之间的通信
- store
- 性能优化部分
- 缓存机制
- 防止重复打包基础模块
- 运行、工具
- 微前端应用跟业务组件有什么区别
- 视频直播
- RTC 和 RTMP
- m3u8和mp4
- webrtc 直播
- eslint
- eslint做代码检查
- nginx
- nginx 基础知识整理
- 使用背景
- V8引擎
- 渲染进程
- event loop 、js 引擎、渲染引擎的关系
- 基础知识
- linux
- 常用 linux 命令
- 前端工程化
- webpack
- webpack 打包原理
- webpack 如何分析内部依赖图
- webpack 5个核心概念
- webpack 打包静态资源
- 打包css到单独文件
- 使用devServer
- tree shaking
- 分割代码,按需加载
- commonChunkPlugin 提取第三方库和公共模块
- webpack优化静态资源
- webpack 与 gulp 对比
- webpack周边工具
- webpack中hash、chunkhash和contenthash三者的区别
- 实现一个自己的devServer
- babel
- 词法分析和语法分析
- AST
- 核心api
- 自动在 console.log 等 api 中插入文件名和行列号的参数
- gulp
- vite
- webComponents
- lit
- 基础
- 运维
- 弹性云、物理机
- k8s
- docker
- docker 基础知识