2024年Web前端最新Node(57),面试Web前端岗
最后
在面试前我花了三个月时间刷了很多大厂面试题,最近做了一个整理并分类,主要内容包括html,css,JavaScript,ES6,计算机网络,浏览器,工程化,模块化,Node.js,框架,数据结构,性能优化,项目等等。
包含了腾讯、字节跳动、小米、阿里、滴滴、美团、58、拼多多、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中级前端技术点。
-
HTML5新特性,语义化
-
浏览器的标准模式和怪异模式
-
xhtml和html的区别
-
使用data-的好处
-
meta标签
-
canvas
-
HTML废弃的标签
-
IE6 bug,和一些定位写法
-
css js放置位置和原因
-
什么是渐进式渲染
-
html模板语言
-
meta viewport原理


})
//打开test.txt文件里面内容为hello Node.js
注:写入成功err为Null,写入失败为错误对象
- 示例:
text.txt中内容为小红=78 小蓝=45 小绿=76 小黑=99
const fs=require(‘fs’)
fs.readFile(‘test.txt’,‘utf-8’,function(err,datastr){
if(err){
return console.log(‘读取失败’+err)
}
// console.log(datastr);
const oldarr=datastr.split(’ ')
const newarr=[]
oldarr.forEach(item=>{
newarr.push(item.replace(‘=’,‘:’))
})
const newstr=newarr.join(‘\r\n’)
fs.writeFile(‘test.txt’,newstr,‘utf-8’,function(err,datastr){
if(err){
console.log(‘写入出错’,err.message);
}
console.log(‘写入成功’,datastr);
})
})
//结果为
//小红:78
//小蓝:45
//小绿:76
//小黑:99
===========================================================================
-
先引入内部模块const path=require(‘path’)
-
将多个路径片段拼接成一个完整的路径path.join()
const pathStr=path.join(‘/a’,‘/b’,‘…/’,‘/c’)
//结果\a\c
注: …/会抵消到上一个相邻位置
const pathStr=path.join(__dirname,‘./test.txt’)
//当前目录下的test.txt文件
- 获取路径中的文件名path.basename()
const route=‘/a/b/c/test.js’
let textName=path.basename(route)
console.log(textName)
//结果test.js
let name=path.basename(route,‘.js’)
console.log(name)
//结果test
- 获取文件扩展名path.extname()
const route=‘/a/b/c/test.js’
let extName=path.extname(route)
console.log(extName)
//结果.js
- 示例:提取一个html文件,并将其改为外联式后重新存储
//引入模块fs
const fs=require(‘fs’)
//引入模块path
const path=require(‘path’)
//定义正则表达式
const styleReg=/
const scriptReg=/
//拿到HTNL文件内容
fs.readFile(path.join(__dirname,‘./test/test.html’),‘utf-8’,function(err,datastr){
if(err){
return console.log(‘读取出错’,err.message)
}
//解析CSS,JS,重写HTML
resolveCSS(datastr)
resolveJS(datastr)
resolveHTML(datastr)
})
function resolveCSS(htmlstr){
//匹配内容
let str1=styleReg.exec(htmlstr)
//删除样式标签
let newStr1=str1[0].replace(‘’,‘’)
//重写CSS文件
fs.writeFile(path.join(__dirname,‘./test/css.txt’),newStr1,‘utf-8’,function(err){
if(err){
console.log(‘写入css出错’,err.message);
}else{
console.log(‘写入CSS成功’);
}
})
}
function resolveJS(htmlstr){
let str2=scriptReg.exec(htmlstr)
let newStr2=str2[0].replace(‘’,‘’)
fs.writeFile(path.join(__dirname,‘./test/js.txt’),newStr2,‘utf-8’,function(err){
if(err){
console.log(‘写入JS出错’,err.message);
}else{
console.log(‘写入JS成功’);
}
})
}
function resolveHTML(htmlstr){
//更改内部式为外链式
let str3=htmlstr.replace(styleReg,‘’).replace(scriptReg,‘’)
//重写HTMl
fs.writeFile(path.join(__dirname,‘./test/index.html’),str3,‘utf-8’,function(err){
if(err){
console.log(‘写入HTML文件成功’,err.message);
}else{
console.log(‘写入HTML文件成功’);
}
})
}
=========================================================================
-
ip地址:互联网中每台WEB服务器都有唯一ip地址
-
域名和域名服务器
ip地址太长并且无语义化,所以出现了域名,域名服务器就是将域名和ip两者进行转换
- 端口号
一台服务器有成百上千服务,每个端口号就对应一个服务
注:一个端口一个服务,80端口可以省略
-
先调用内部模块require(‘http’)
-
创建服务http.createServer()
-
打开监听server.listen()
示例:
//调用内部模板
const http=require(‘http’)
//创建服务
const server=http.createServer()
//服务启动
server.on(‘request’,function(req,res){
console.log(‘someone visit our web server’)
})
//调用监听
server.listen(80,function(){
comsole.log(‘server running at http://127.0.0.1:80’)
})
//在浏览器输入 http://127.0.0.1:80会响应,但没内容
- req请求对象包含与客户端相关的数据和属性
const http=require(‘http’)
const server=http.createServer()
serner.on(‘request’,(req)=>{
let url=req.url
let method=req.method
let str=you request url is${url},request method is${method}
console.log(str)
})
数据结构与算法
这一块在笔试、面试的代码题中考核较多,其中常考的数据结构主要有:数组、链表、队列、栈、Set、Map、哈希表等,不同数据结构有不同的方法以及储存原理,这些算是技术岗的必备知识。算法部分主要分为两大块,排序算法与一些其他算法题。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
排序算法根据考频高低主要有:快速排序、归并排序、堆排序、冒泡排序、插入排序、选择排序、希尔排序、桶排序、基数排序、Timsort这十种,这类考核点要么是算法的时间、空间复杂度、稳定度,要么是直接手写代码,故在理解算法原理的同时,对JS语言版的排序算法代码也要加强记忆。
- 二叉树层序遍历
- B 树的特性,B 树和 B+树的区别
- 尾递归
- 如何写一个大数阶乘?递归的方法会出现什么问题?
- 把多维数组变成一维数组的方法
- 知道的排序算法 说一下冒泡快排的原理
- Heap 排序方法的原理?复杂度?
- 几种常见的排序算法,手写
- 数组的去重,尽可能写出多个方法
- 如果有一个大的数组,都是整型,怎么找出最大的前 10 个数
- 知道数据结构里面的常见的数据结构
- 找出数组中第 k 大的数组出现多少次,比如数组【1,2, 4,4,3,5】第二大的数字是 4,出现两次,所以返回 2
- 合并两个有序数组
- 给一个数,去一个已经排好序的数组中寻找这个数的位 置(通过快速查找,二分查找)

、稳定度,要么是直接手写代码,故在理解算法原理的同时,对JS语言版的排序算法代码也要加强记忆。
- 二叉树层序遍历
- B 树的特性,B 树和 B+树的区别
- 尾递归
- 如何写一个大数阶乘?递归的方法会出现什么问题?
- 把多维数组变成一维数组的方法
- 知道的排序算法 说一下冒泡快排的原理
- Heap 排序方法的原理?复杂度?
- 几种常见的排序算法,手写
- 数组的去重,尽可能写出多个方法
- 如果有一个大的数组,都是整型,怎么找出最大的前 10 个数
- 知道数据结构里面的常见的数据结构
- 找出数组中第 k 大的数组出现多少次,比如数组【1,2, 4,4,3,5】第二大的数字是 4,出现两次,所以返回 2
- 合并两个有序数组
- 给一个数,去一个已经排好序的数组中寻找这个数的位 置(通过快速查找,二分查找)
[外链图片转存中…(img-gGfFH0Eb-1715426878672)]
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)