當前位置:首頁 » 網頁前端 » 前端遍歷樹
擴展閱讀
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數據)

遞歸吧般樹都遞歸