var timer = setTimeout(() => {
console.log(1)
}, 2000)
// 清除一次性定时任务
// clearTimeout(timer)
// 在实践队列开始之前,立即执行
setImmediate(() => {
console.log(2)
})
// 在主进程结束后立即执行
process.nextTick(() => {
console.log(7)
})
====================================================================
模块(包)是 Node.js 中具有特定功能的对象
-
模块(包)是 Node.js 应用程序的基本组成部分
-
大部分前端工程化的工具,是以模块的形式存在的
Node.js 模块的划分方式
-
Node.js 模块
-
内置模块
-
官方提供的,跟随 Node.js 一起安装
-
http://nodejs.cn/api/
-
自定义模块
-
工程师自己写的
-
第三方模块
-
社区维护的,需要单独下载才能使用
-
https://www.npmjs.com/
Web 端 与 Node.js 端的类比
-
Web 端
-
宿主对象
-
document、window …
-
自定义对象
-
工程师自己写的
-
第三方库
-
jQuery、Bootstrap …
-
Node.js 模块
-
内置模块
-
fs、path、os、http …
-
自定义模块
-
工程师自己写的
-
第三方模块
-
Less、Babel、Express …
内置模块也叫核心模块,跟随 Node.js 一起安装
=========================================================================
-
控制台中输出的内容,通过不同的颜色标识不同的变量类型
-
控制台中可以一次输出多个变量,多个变量之间,用逗号间隔
-
官方文档:
http://nodejs.cn/api/console.html
console.log(“1”)
console.log(1)
var obj = {
name: ‘Tom’,
age: 18
}
console.log(obj)
console.table(obj)
// 计时函数
console.time(‘for’) // 计时开始
for (let i = 0; i < 1000000; i++) {
}
console.timeEnd(‘for’) // 计时结束
console.time(‘while’)
var i = 0
while (i < 1000000) {
i++;
}
console.timeEnd(‘while’)
=========================================================================
-
process 提供了有关当前 Node.js 进程的信息
-
process 是全局变量,使用时无需 require 引入
-
官方文档:
http://nodejs.cn/api/process.html
// process 是全局变量,使用时,无需引入
// const process = require(‘process’)
// console.log(process)
// 输出 node 版本
console.log(process.version)
// 输出操作系统架构
console.log(process.arch)
// 输出操作系统平台
console.log(process.platform)
// 输出当前工作目录 cwd = current working directory
console.log(process.cwd())
// 环境变量
console.log(process.env)
// 自定义环境变量
process.env.NODE_ENV = ‘develop’
console.log(process.env)
// 获取进程的编号
console.log(process.pid)
// 杀死进程 process.kill(进程编号)
======================================================================
-
path 模块提供了有关路径操作的函数
-
当前目录
./
-
上一级目录
../
-
使用之前,需要通过 require 引入
-
官方文档:
http://nodejs.cn/api/path.html
// 引入 path 模块
const path = require(‘path’)
// 获取当前文件所在的路径
console.log(process.cwd())
// dir = directory 目录
console.log(__dirname) // 获取当前文件所在的路径
// D:\cliu\Desktop\node\03.core_module\path.js
console.log(__filename) // 获取当前文件的完整路径
// 获取文件的扩展名 ext = extension
console.log(path.extname(__filename))
// 获取路径中的目录部分
console.log(path.dirname(__filename))
// 获取路径中的文件名
console.log(path.basename(__filename))
const t = path.join(__dirname, ‘…’)
console.log(t)
// 将多个路径合并起来
const a = path.join(‘D:/’, ‘a’, ‘b’, ‘c.png’)
console.log(a)
====================================================================
-
fs (file system) 提供了稳健操作的 API
-
文件操作
-
目录操作
-
使用之前,需要通过 require 引入
-
官方文档:
http://nodejs.cn/api/fs.html
写文件_清空写入
// 文件的写操作
const fs = require(‘fs’)
// 清空写入
// fs.writeFile(‘文件路径’, ‘写入内容’, 回调函数)
fs.writeFile(‘./1.txt’, ‘曾经有一首歌,她感动了我’, (err) => {
if (err) throw err
console.log(‘写入成功’)
})
写文件_追加写入
const fs = require(‘fs’)
// 追加写入
// 语法: fs.appendWrite(‘文件路径’,‘写入内容’, 回调函数)
fs.appendFile(__dirname+‘/2.txt’, ‘曾经有一首歌,她是这样唱的\n’, (err) => {
if (err) throw err
console.log(‘追加写入成功’)
})
读文件
const fs = require(‘fs’)
const path = require(‘path’)
// 读文件
// 指定目标文件所在的路径
// var filename = __dirname + ‘/1.txt’
var filename = path.join(__dirname, ‘1.txt’)
// 语法:fs.readFile(‘文件路径’, 回调函数)
fs.readFile(filename, (err, data) => {
if (err) throw err
// data 是二进制数据,默认输出时,以十六进制的方式展示
console.log(data.toString())
})
删文件
const fs = require(‘fs’)
// 语法: fs.unlink(‘文件路径’, 回调函数)
fs.unlink(__dirname+‘/1.txt’, (err) => {
if (err) throw err
console.log(‘删除成功’)
})
创建目录
const fs = require(‘fs’)
// 创建目录
// 语法:fs.mkdir(‘目录路径’, 回调函数)
fs.mkdir(‘./d1’, (err) => {
if (err) throw err
console.log(‘创建成功’)
})
删除目录
const fs = require(‘fs’)
// 删除目录
// 语法: fs.rmdir(‘目录路径’, 回调函数)
fs.rmdir(‘./d1’, (err) => {
if (err) throw err
console.log(‘删除成功’)
})
// 声明: rmdir 只能删除空目录
// 1. 先删除目录下的普通文件(清空目录)
// 2. 通过 rmdir 删除空目录
重命名目录
const fs = require(‘fs’)
// 重命名目录
// 语法: fs.rename(旧名称, 新名称, 回调函数)
fs.rename(__dirname+‘/d1’, __dirname+‘/d2’, (err) => {
if (err) throw err
console.log(‘重命名成功’)
})
读目录
const fs = require(‘fs’)
// 读目录
// 语法:fs.readdir(‘目录路径’, 回调函数)
fs.readdir(__dirname, (err, data) => {
if (err) throw err
// console.log(data)
data.map((d) => {
// console.log(d)
fs.stat(__dirname+“/”+d, (err, stat) => {
if (err) throw err
if (stat.isDirectory()) {
// 判断当前文件是否是目录
console.log(‘目录:’, d)
} else if (stat.isFile()) {
// 判断当前文件是否是普通文件
console.log(‘文件:’, d)
}
})
})
})
同步函数(synchronization)
-
同步异步
-
文件函数
-
同步
-
writeFileSync
-
readFileSync
-
appendFileSync
-
…
-
异步
-
writeFile
-
readFile
-
appendFile
-
…
-
目录函数
-
同步
-
mkdirSync
-
rmdirSync
-
readdirSync
-
…
-
异步
-
mkdir
-
rmdir
-
readdir
-
…
-
同步函数
-
在主程序中自上而下运行
-
例如:去火车站排队买票
-
异步函数
-
通过回调函数在事件队列中运行
-
例如:委托黄牛买票,票买好后通知我(无需等待,可以做其他事)
=========================================================================
const fs = require(‘fs’)
const path = require(‘path’)
// 把 src/style.css 复制到 dist/ 目录下
const dist = path.join(__dirname, ‘dist’)
fs.readFile(‘./src/style.css’, (err, data) => {
if (err) {
throw err
} else {
console.log(data.toString())
// 确保 dist 目录存在
if (!fs.existsSync(dist)) {
fs.mkdirSync(dist)
}
// 对文件进行压缩: 将无用的注释或空格去掉
// /* 注释的内容 */
var mydata = data.toString().replace(/\s+/g, ‘’).replace(//*{1,2}[\s\S]**//g, ‘’)
// 将读到的内容,写入目标文件
fs.writeFile(dist+‘/style.min.css’, mydata, (err) => {
if (err) throw err
console.log(‘成功’)
})
}
})
=============================================================
缓冲 VS 流
-
文件操作——缓冲方式
-
源文件->内存缓冲->目标文件
-
文件操作——流方式
-
A->B
为什么选择 “流”
-
内存效率提高
-
无需加载大量数据
-
流把大数据切成小块,占用内存更少
-
时间效率提高
-
接获数据后立即开始处理
-
无须等到内存缓冲填满
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
Vue 面试题
1.Vue 双向绑定原理
2.描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程?
3.你是如何理解 Vue 的响应式系统的?
4.虚拟 DOM 实现原理
5.既然 Vue 通过数据劫持可以精准探测数据变化,为什么还需要虚拟 DOM 进行 diff 检测差异?
6.Vue 中 key 值的作用?
7.Vue 的生命周期
8.Vue 组件间通信有哪些方式?
9.watch、methods 和 computed 的区别?
10.vue 中怎么重置 data?
11.组件中写 name 选项有什么作用?
12.vue-router 有哪些钩子函数?
13.route 和 router 的区别是什么?
14.说一下 Vue 和 React 的认识,做一个简单的对比
15.Vue 的 nextTick 的原理是什么?
16.Vuex 有哪几种属性?
17.vue 首屏加载优化
18.Vue 3.0 有没有过了解?
19.vue-cli 替我们做了哪些工作?
…
算法
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
- 冒泡排序
- 选择排序
- 快速排序
- 二叉树查找: 最大值、最小值、固定值
- 二叉树遍历
- 二叉树的最大深度
- 给予链表中的任一节点,把它删除掉
- 链表倒叙
- 如何判断一个单链表有环
- 给定一个有序数组,找出两个数相加为一个目标数
…
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以帮忙点赞+评论666
修改数据–刷新页面 UI 的过程?
3.你是如何理解 Vue 的响应式系统的?
4.虚拟 DOM 实现原理
5.既然 Vue 通过数据劫持可以精准探测数据变化,为什么还需要虚拟 DOM 进行 diff 检测差异?
6.Vue 中 key 值的作用?
7.Vue 的生命周期
8.Vue 组件间通信有哪些方式?
9.watch、methods 和 computed 的区别?
10.vue 中怎么重置 data?
11.组件中写 name 选项有什么作用?
12.vue-router 有哪些钩子函数?
13.route 和 router 的区别是什么?
14.说一下 Vue 和 React 的认识,做一个简单的对比
15.Vue 的 nextTick 的原理是什么?
16.Vuex 有哪几种属性?
17.vue 首屏加载优化
18.Vue 3.0 有没有过了解?
19.vue-cli 替我们做了哪些工作?
…
[外链图片转存中…(img-WmM8Gz5r-1710688078542)]
算法
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
- 冒泡排序
- 选择排序
- 快速排序
- 二叉树查找: 最大值、最小值、固定值
- 二叉树遍历
- 二叉树的最大深度
- 给予链表中的任一节点,把它删除掉
- 链表倒叙
- 如何判断一个单链表有环
- 给定一个有序数组,找出两个数相加为一个目标数
…
[外链图片转存中…(img-IawzY5tg-1710688078543)]
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以帮忙点赞+评论666