当前位置:首页 » 网页前端 » 前端遍历树
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

前端遍历树

发布时间: 2022-09-28 16:22:17

‘壹’ 2022前端开发面试记录(深圳篇)

2022年来到深圳,感觉到了与之前所在城市的差异,心里多少有点落差。虽然时机不太对吧,但是相信一切都会好起来的,给自己加油呀!
整理了一些面试被问到的问题,虽然很多是无效面试,但是我也强行问了面试官,从他们的回答中猜测了一下他们关注的面试点,所以也算是有点收获吧,只是浪费了很多简历和路费,哭唧唧。

——1、区块链——
1-1、vue生命周期;
1-2、vuex属性;
1-3、用户开始登录到登录成功都发生了什么;
1-4、git常用的命令;

——2、金融:vue——
笔试:
2-1、深浅拷贝的区别,为什么会出现深浅拷贝,浅拷贝的优势;
2-2、强制中断 foreach 遍历;
2-3、多处组件复用;
2-4、你对前端是什么概念,前端在整个软件生态内是什么角色;
2-5、Vue2 中数据变化但视图没有发生同步更新,描述一下出现的场景,解决方式,以及该问题发生的可能原因;
2-6、nextTick 是如何确保开发者能够获取到最新的 DOM 状态的;
2-7、如何使用 mixins,有何利弊;
2-8、使用 Hooks 模式开发时,useMemo,useCallback 常用来作为优化的手段。描述一下它们各自的适用场景,以及背后的原理实现?;
2-9、前端从 Jquery 时代演变至如今的三大框架,这种演变的根源是什么,jquery 解决了什么问题,如今的三大框架又是为了解决什么问题出现的?
视频面试:
2-10、js遍历树形结构,每个节点都有一个唯一ID,只能遍历一次;
2-11、组件封装的意义;

——3、知识产权:vue2、vue3、ts、react——
3-1、说一说面向对象的理解,包括继承、封装、多态等;
3-2、说一说promise;
3-3、webpack优化;
3-4、vuex使用场景;
3-5、描述一下对vue响应式原理的理解;
3-6、vue生命周期;
3-7、父子组件钩子函数执行顺序;
3-8、v-if和v-show;
3-9、js数据类型;
3-10、实现深拷贝;

——4、物流——
4-1、vue生命周期;
4-2、生命周期-修改元素样式在生命周期的哪个阶段;
4-3、生命周期-修改数据在哪个阶段;
4-4、生命周期-destroy里面会做哪些操作;
4-5、怎么修改title的内容;
4-6、父子组件传参的具体写法;
4-7、v-model的多种写法;
4-8、js数据类型;
4-9、判断数组的方法;
4-10、实现左边固定右边自适应的布局;
4-11、实现div垂直水平居中;
4-12、flex:1;
4-13、flex详解;
4-14、call,apply,bind是干什么的;

——5、新兴产业——
5-1、封装路由,怎么拦截路由;
5-2、浏览器缓存有哪些,又问localStorage和sessionStrorage的区别和应用场景;
5-3、浏览器强缓存和协商缓存;
5-4、webpack打包机制,构建过程和配置;
5-5、性能优化方法;
5-6、前端的业务和后端的API是怎么做到数据实时请求的(问的其实是前端对后端API接口的封装和管理);
5-7、computed和watch;
5-8、说了几个关于大屏的应用场景,有没有做过,怎么做的;

——6、某水果:vue2、vue3、ts、各种前沿技术都用——
6-1、怎么封装一个组件库/工具类库,比如vue封装过什么复杂组件,jquery封装过什么类库;
6-2、get和post的区别,传参格式等;
6-3、promise怎么用的;
6-4、原型链,test()的原型链;
6-5、websocket;
6-6、es6中的generator;
6-7、es6中的set和map有啥区别,set为什么能去重;
6-8、项目难点;

——7、医疗健康:vue——
7-1、vue自定义指令配置;
7-2、webpack的理解;
7-3、对node的了解,用过express吗;
7-4、项目中的拖拽是怎么做的;
7-5、websocket和socket的区别;
7-6、听过mqtt吗,因为没听过所以解释了一下activemq的用法;
7-7、二维地图的聚合,如果有十万个点,会做什么优化;
7-8、地图实现多个点连成一条线会怎么做;
7-9、地图实现一条曲线;
7-10、内网下git怎么用的;
7-11、openlayers渲染机制;
7-12、父子组件通信方法;
7-13、router中实现拦截;
7-14、对象合并的方法;
7-15、父子组件的生命周期执行顺序,渲染阶段为什么会先执行父组件再执行子组件;
7-16、vue生命周期;
7-17、npm run dev, run build可以在项目中的什么位置找到;
7-18、vue中跳转页面的方法;
7-19、mixins用过吗;
7-20、判断引用类型的方法;
7-21、js数据类型;
7-22、判断基本数据类型的方法;
7-23、for in和for of的用法和区别,两者遍历的是索引还是属性值,两者都可以遍历对象吗;
7-24、foreach和map的区别,两者会不会改变原数组;
7-25、主要用什么技术栈;
7-26、行内元素和块级元素的区别,分别都有哪些,行块级元素有哪些;
7-27、div垂直水平居中,grid知不知道怎么用;
7-28、splice和slice;

——8、智慧园区:vue2、vue3、ts、uniapp——
8-1、flex了解吗,flex布局方向,flex:1 0的页面效果是怎样的;
8-2、做过移动端吗,了解uniapp吗;
8-3、keep-alive;问了一个没听明白的,可能和keep-alive有关系;
8-4、vuex中的action;不用vuex,怎么代替vuex;
8-5、promise.all和promise.on;
8-6、防止表单重复提交;
8-7、async,await的使用;
8-8、vue3和ts的了解;
8-9、防抖怎么控制时间;
8-10、vue中的data为什么要设计成一个函数;

——9、智慧工地:vue、uniapp、小程序——
9-1、Vuex是干什么的;
9-2、openlayers怎么用的;
9-3、性能优化;
9-4、spa首屏加载优化;
9-5、bundler.js太大,打包怎么优化;
9-6、加密方式了解多少,比如md5,base64等,一大堆没听过的;
9-7、冒泡排序的实现原理;
9-8、js设计模式;

——10、某快递公司外包——
10-1、一棵树的数据,给的是列表格式,转换成树形结构;
10-2、项目相关的,聊天怎么做的,拖拽怎么做的,拖拽的数据怎么渲染的,拖拽重叠怎么处理的;
10-3、js设计模式;

——11、三维:vue、cesium——
11-1、一棵树的数据,给的是列表格式,转换成树形结构;
11-2、openlayers怎么用的,发布过wms吗,发布流程是怎样的;
11-3、openlayers转换经纬度的方法名是什么;
11-4、cesium常用的函数;
11-5、vue数据双向绑定原理;
11-6、Vue中data属性如果改变一个数组的下标,会不会马上发生变化,不变化可以怎么解决
11-7、数组常用方法有哪些;
11-8、 map和filter的区别;
11-9、es6常用的方法;
11-10、父子组件通信,兄弟组件通信;
11-11、new具体进行了什么操作;

——12、医疗:vue、angular——
12-1、js渲染机制和运行机制;
12-2、vue数据绑定原理;

——13、建设行业:vue、uniapp——
笔试:
13-1、||与&运算符;
13-2、垂直居中方案;
13-3、let a=arr, b=a, c=arr.concat(), a[0]=3,打印b和c,应该是深浅拷贝;
13-4、实现font-size:12;
13-5、接口路径,给一个地址 http://localhost/projectname/resource/index(http://localhost/projectname/resource/index).html ,根据url请求接口路径写出完整路径,’/ geturl.do ’,’ geturl.do ’,’../ geturl.do ’;
13-6、微信小程序流程和主要文件;
13-7、获取url参数及内容;
13-8、$(function(){}) / (function(){}) / (function(){})()的区别;
13-9、前端优化方案;
面试:
13-10、项目难点;
13-11、git工作流;
13-12、jquery项目会不会用webpack打包;
13-13、webpack优化;
13-14、web优化;

——14、文化:uniapp——
14-1、ssr渲染;
14-2、ajax和axios的区别;
14-3、cookie和session的区别;
14-4、vue生命周期;
14-5、数据请求写在哪个生命周期中;
14-6、router的history模式和hash模式;
14-7、工作中的开发流程;
14-8、uniapp的开发流程和坑;
14-9、uniapp滑动问题,下滑切换视频不生效,一般是什么原因;
14-10、uniapp加载速度慢,点击加载图片速度太慢,一般是什么原因;

——15、企业平台某外包:vue,node,性能优化——
15-1、说一说websocket;
15-2、vue数据双向绑定原理;
15-3、项目难点;
15-4、对mvvm、mvc、mvp等的理解;
15-5、vue的常见指令;
15-6、computed和watch;
15-7、class和style怎么绑定;
15-8、ajax和axios的区别;
15-9、axios拦截器,axios的post请求;
15-10、对前端渲染,服务端渲染的理解;

——16、智慧城市:vue,node,three.js——
16-1、vue生命周期;
16-2、vue组件通信方法;
16-3、js的继承;
16-4、oracle、mysql、sqllite的区别;
16-5、oracle连表查询;
16-6、openlayers项目场景;
16-7、cesium项目场景;

——17、租房:jquery+layui,vue2——
17-1、笔试:
17-2、foo打印题;
17-3、this打印题;
17-4、变量提升打印题;
17-5、let arr=[1,2,[5,8,[9,[3,5,]7,]20,37]] 把数组扁平化成一个数组,并进行去重升序;
17-6、let a=[1,2,3,4,5,6,7]; let b=[4,5,6]; 求b在a中第一次出现的位置;
17-7、面试:主要问项目

——18、跑腿:vue2,vue3+ts——
18-1、对html5语义化的理解;
18-2、css实现一个三角形;
18-3、css怎么实现0.5px的线,为什么有这种需求,涉及到兼容性问题;
18-4、怎么解决变量提升的问题;
18-5、es6新增了哪些定义变量的方式;
18-6、const定义的变量可以被修改吗;
18-7、map和filter的区别,会改变原数组吗;
18-8、es6去重的方法;
18-9、谈一谈对promise的理解;
18-10、除了链式调用,promise还可以怎么处理同步请求(async/await);
18-11、对vue响应式原理的理解,核心是什么;
18-12、对vue生命周期每个阶段的理解;
18-13、为什么要用key,key有什么作用;
18-14、v-if和v-show;
18-15、Vue中data为什么是一个函数;
18-16、vue各场景下的传值方式有哪些,比如父子组件,兄弟组件,祖孙组件;
18-17、对vuex的理解和使用场景;
18-18、vue常见修饰符;
18-19、Vue3用过吗(因为没用过,所以就只针对响应式原理说了一下vue3和vue2的区别);

——19、实业:jquery,vue2,vue3——
笔试:需要解释
19-1、html5新标签,css3新特性;
19-2、js+css3实现某元素以50px每秒的速度左移100px;
19-3、css实现左中右布局,不改变文档流;
19-4、js兼容性有哪些,以及常见的解决方案;
19-5、描述一下事件循环机制eventloop,eventloop解决了什么问题;
19-6、给了一个题,大概是后端返回的接口数据,data的格式有很多,比如null,对象,数组,字符串等,怎么处理这种问题;
19-7、前端性能优化方法,首屏页面怎么优化;
19-8、用js写一个方法实现数据去重并排序(用es5和es6+实现);
19-9、给定一个数组,把数组中为0的往后排,其他值按顺序排序; (示例:[1,0,4,0,5,3]转换结果为[1,3,4,5,0,0])
19-10、用0,1,2代表红黄蓝三种颜色,实现以下排序,不能用array.sort实现;(示例:[0,1,0,2,0,1,2]转换结果为[0,0,0,1,1,2,2])
面试:
19-11、flex布局;flex:1对应的属性;
19-12、讲一下原型链; proto 和prototype有什么区别;字符串有没有原型;给定一个str,str.test()调用的谁的test方法;
19-13、讲一下闭包;什么情况下才能算是闭包;形成闭包的条件;列了三个题让你判断是不是闭包;
19-14、v-if和v-show是干什么的;应用场景有哪些;给定一对父子组件,默认值是false,另外有一个ajax请求,值发生了以下变化(false true false true true),在v-show和v-if中,父子组件的哪个阶段里会请求ajax;
19-15、computed的实现原理,怎么实现一个computed;
19-16、css中,transform,margin,position的都是怎么渲染的,渲染机制是什么;amd,cmd,commonjs了解吗;

‘贰’ js广度遍历生成树,树的定义

先序,后序,中序针对二叉树。
深度、广度针对普通树。深度遍历:从树根开始扫描,顶层扫描完了,从一层最左(也可以右)面的结点往下层扫描,直到下层已无结点,这时所有靠最左(右)的结点全部扫描完毕,从树梢往上退一层,看这层旁有无兄弟结点,有的话还是一样从最左(右)边开始扫描,这是个递归概念,利用这一方法来遍历整棵树。广度遍历:从树根开始扫描,顶层扫描完了,扫描一层的所有结点,扫描二层的所有结点,,扫描最底层的结点。

‘叁’ js中在dom原型链编写一个可以遍历节点树的方法怎么写呢

DOM(即 Document Object Mode) 是 W3C(万维网联盟)的标准。

DOM 定义了访问 HTML 和 XML 文档的标准:“W3C文档对象模型(DOM) 是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。”

W3C DOM 标准被分为 3 个不同的部分:

  • 核心 DOM - 针对任何结构化文档的标准模型

  • XML DOM - 针对 XML 文档的标准模型

  • HTML DOM - 针对 HTML 文档的标准模型

‘肆’ js, 遍历树形数组 根据id获取单个

//传入要查找的数据集,目标id,返回目标ID对应的数据集合
//jsonData:数据集
//destID:目标ID
//json:目标ID结果集
function GetSubJson(jsonData, destID, json) {
for (var i = 0; i < jsonData.length; i++) {
if (jsonData[i].id == destID)
json.push(jsonData[i]);
else {
if (jsonData[i].hasOwnProperty("children")) {
GetSubJson(jsonData[i].children, destID, json);
}
}
}
}
//例如
var json = [];
GetSubJson(a, "2016", json);

‘伍’ 一棵具有n个结点的完全二叉树以数组存储,试写一个非递归算法实现对该树的前序遍历

#include "stdafx.h"
#include <stack>
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
//构建完全二叉树,层数是三,7个节点
int a[7] = {0,1,2,3,4,5,6};

//前序遍历,先访问左儿子,再访问自己,再访问右儿子
//左儿子的位置是自己游标*2+1,右儿子是自己的游标*2+2

//队列作为缓冲
stack<int> Temp;

Temp.push(0);//根节点

while(!Temp.empty())
{
int node = Temp.top();

if(2*node+1 <6)//有左儿子
{
Temp.push(2*node+1);
}
else
{
cout<<a[node]<<endl;
Temp.pop();

if(Temp.empty())
{
getchar();
return 0;
}

int parent = Temp.top();

cout<<a[parent]<<endl;

Temp.pop();

Temp.push(2*parent+2);

}
}

getchar();

return 1;
}

‘陆’ 求最简单的方法进行原生js 循环遍历树(json数据)

递归吧般树都递归