《前后端面試題
》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,MySQL,Linux… 。
文章目錄
- 一、本文面試題目錄
- 21. Vuex中如何實現state的持久化
- 22. 如何優化Vue應用的性能
- 23. 什么是Vue的自定義指令
- 24. 如何實現Vue組件的拖拽功能
- 25. Vue如何監聽鍵盤事件
- 26. 如何實現Vue組件的過渡動畫
- 27. Vue項目中如何處理跨域問題
- 28. 如何在Vue中實現圖片懶加載
- 29. Vue項目如何進行SEO優化
- 30. 如何在Vue中實現無限滾動加載
- 31. Vue的響應式原理是什么
- 32. Vue如何處理異步更新
- 33. 如何實現Vue組件的懶加載
- 34. Vue項目中如何進行單元測試
- 35. 如何實現Vue組件的全局注冊和局部注冊
- 36. Vue中如何處理表單驗證
- 37. Vuex的嚴格模式是什么?有什么作用
- 38. 如何實現Vue組件的動態加載
- 39. Vue中如何處理錯誤捕獲
- 40. 如何實現Vue項目的權限控制
- 二、150道面試題目錄列表
一、本文面試題目錄
21. Vuex中如何實現state的持久化
實現方式:使用vuex-persistedstate插件。該插件可以將store中的state存儲到localStorage、sessionStorage或其他存儲中,實現state的持久化。
安裝與配置:
npm install vuex-persistedstate
import Vuex from 'vuex'
import createPersistedState from 'vuex-persistedstate'const store = new Vuex.Store({// ...store配置plugins: [createPersistedState()]
})
22. 如何優化Vue應用的性能
路由懶加載:將路由組件改為異步加載,減少首屏加載時間。
組件懶加載:對于大型組件,使用異步組件實現按需加載。
合理使用v-show與v-if:頻繁切換用v-show,不常切換用v-if。
Object.freeze():凍結不需要響應式處理的對象,減少Vue的響應式監聽開銷。
虛擬列表:對于大量數據列表,使用虛擬列表只渲染可視區域內容。
事件銷毀:在beforeDestroy鉤子中銷毀自定義事件和定時器。
壓縮代碼:生產環境使用UglifyJs壓縮JS代碼。
Vue Devtools限制:生產環境禁用Vue Devtools。
23. 什么是Vue的自定義指令
定義:Vue自定義指令是一種復用邏輯的方式,用于操作DOM。
示例:
// 注冊全局指令
Vue.directive('focus', {inserted: function (el) {el.focus()}
})// 使用
<input v-focus>
鉤子函數:bind、inserted、update、componentUpdated、unbind。
24. 如何實現Vue組件的拖拽功能
方法:結合自定義指令和原生DOM事件。
示例:
Vue.directive('drag', {inserted: function(el) {let offsetX, offsetY;el.style.cursor = 'move';el.onmousedown = function(e) {offsetX = e.clientX - el.offsetLeft;offsetY = e.clientY - el.offsetTop;document.onmousemove = function(e) {el.style.left = (e.clientX - offsetX) + 'px';el.style.top = (e.clientY - offsetY) + 'px';};document.onmouseup = function() {document.onmousemove = null;document.onmouseup = null;};};}
});
25. Vue如何監聽鍵盤事件
全局監聽:在mounted鉤子中使用window.addEventListener監聽鍵盤事件。
組件內監聽:使用v-on綁定鍵盤事件,如@keyup.enter。
自定義鍵盤修飾符:
Vue.config.keyCodes.f1 = 112;
26. 如何實現Vue組件的過渡動畫
transition組件:
<transition name="fade"><div v-if="show">hello</div>
</transition>
.fade-enter-active, .fade-leave-active {transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {opacity: 0;
}
動畫庫:結合Animate.css使用:
<transition enter-active-class="animated fadeIn" leave-active-class="animated fadeOut"><div v-if="show">hello</div>
</transition>
27. Vue項目中如何處理跨域問題
開發環境:使用vue-cli配置proxyTable:
// vue.config.js
module.exports = {devServer: {proxy: {'/api': {target: 'http://api.example.com',changeOrigin: true,pathRewrite: {'^/api': ''}}}}
}
生產環境:配置后端CORS策略或使用Nginx反向代理。
28. 如何在Vue中實現圖片懶加載
插件實現:使用vue-lazyload插件。
安裝與配置:
npm install vue-lazyload
import VueLazyload from 'vue-lazyload'Vue.use(VueLazyload, {loading: 'loading.gif',error: 'error.gif'
})
使用:
<img v-lazy="imageUrl">
29. Vue項目如何進行SEO優化
服務端渲染(SSR):使用Vue SSR或Nuxt.js實現服務端渲染。
預渲染:使用prerender-spa-plugin在構建時生成靜態HTML頁面。
動態meta標簽:通過vue-meta等插件動態設置meta標簽。
靜態站點生成:使用Nuxt.js的靜態生成模式。
30. 如何在Vue中實現無限滾動加載
自定義指令實現:
Vue.directive('infinite-scroll', {inserted: function(el, binding) {const options = {root: null,rootMargin: '0px',threshold: 0.1};const observer = new IntersectionObserver((entries) => {if (entries[0].isIntersecting) {binding.value();}}, options);observer.observe(el);}
});
使用:
<div v-infinite-scroll="loadMore">加載更多</div>
No. | 大劍師精品GIS教程推薦 |
---|---|
0 | 地圖渲染基礎- 【WebGL 教程】 - 【Canvas 教程】 - 【SVG 教程】 |
1 | Openlayers 【入門教程】 - 【源代碼+示例 300+】 |
2 | Leaflet 【入門教程】 - 【源代碼+圖文示例 150+】 |
3 | MapboxGL 【入門教程】 - 【源代碼+圖文示例150+】 |
4 | Cesium 【入門教程】 - 【源代碼+綜合教程 200+】 |
5 | threejs 【中文API】 - 【源代碼+圖文示例200+】 |
31. Vue的響應式原理是什么
Object.defineProperty():Vue通過Object.defineProperty()對data對象的屬性進行劫持,實現數據的響應式。
核心流程:
- 初始化時遍歷data對象的所有屬性,使用Object.defineProperty()將這些屬性轉換為getter/setter。
- 當這些屬性的值發生變化時,Vue會觸發相應的setter,通知所有依賴更新。
- 每個組件實例都有一個watcher實例,它會在組件渲染過程中記錄依賴的所有屬性。
- 當依賴的屬性值發生變化時,setter會通知watcher,watcher會觸發組件的重新渲染。
32. Vue如何處理異步更新
異步更新隊列:Vue實現了一個異步更新隊列,當數據發生變化時,Vue不會立即更新DOM,而是將watcher的更新操作放入隊列中。
nextTick:Vue提供了nextTick方法,用于在DOM更新完成后執行回調函數。
this.message = 'new value';
this.$nextTick(() => {// DOM已更新
});
33. 如何實現Vue組件的懶加載
異步組件:
const AsyncComponent = () => import('./AsyncComponent.vue');export default {components: {AsyncComponent}
}
路由懶加載:
const routes = [{path: '/about',component: () => import('./views/About.vue')}
];
34. Vue項目中如何進行單元測試
測試工具:使用Jest或Mocha作為測試運行器,結合Vue Test Utils。
示例:
import { shallowMount } from '@vue/test-utils';
import HelloWorld from '@/components/HelloWorld.vue';describe('HelloWorld.vue', () => {it('renders props.msg when passed', () => {const msg = 'new message';const wrapper = shallowMount(HelloWorld, {propsData: { msg }});expect(wrapper.text()).toMatch(msg);});
});
35. 如何實現Vue組件的全局注冊和局部注冊
全局注冊:
Vue.component('my-component', {// 組件選項
});
局部注冊:
export default {components: {'my-component': MyComponent}
}
36. Vue中如何處理表單驗證
自定義驗證:在組件中實現驗證邏輯。
<input v-model="email" @blur="validateEmail">
methods: {validateEmail() {const re = /^.+@.+$/;if (!re.test(this.email)) {this.error = '請輸入有效的郵箱地址';} else {this.error = '';}}
}
插件:使用vee-validate插件。
37. Vuex的嚴格模式是什么?有什么作用
嚴格模式:在Vuex中開啟嚴格模式后,任何 mutation 以外的方式修改 store 的 state 都會拋出錯誤。
啟用:
const store = new Vuex.Store({// ...strict: true
});
作用:幫助開發者遵循Vuex的規范,確保所有狀態修改都通過mutation進行,便于調試和維護。
38. 如何實現Vue組件的動態加載
動態組件:使用實現組件動態切換。
<component :is="currentView"></component>
export default {data() {return {currentView: 'Home'}},components: {Home: () => import('./Home.vue'),About: () => import('./About.vue')}
}
39. Vue中如何處理錯誤捕獲
全局錯誤捕獲:
Vue.config.errorHandler = function(err, vm, info) {// 處理錯誤console.log('Global error caught:', err);
};
組件內錯誤捕獲:
export default {errorCaptured(err, childVm, info) {// 處理子組件錯誤return false; // 阻止錯誤繼續向上傳播}
}
40. 如何實現Vue項目的權限控制
路由守衛:在路由配置中使用beforeEach守衛。
router.beforeEach((to, from, next) => {if (to.meta.requiresAuth && !isAuthenticated()) {next('/login');} else {next();}
});
自定義指令:控制DOM元素的顯示權限。
Vue.directive('permission', {inserted: function(el, binding) {if (!hasPermission(binding.value)) {el.parentNode.removeChild(el);}}
});
Vuex狀態管理:存儲用戶權限信息。
二、150道面試題目錄列表
文章序號 | vue2面試題150道 |
---|---|
1 | vue2 面試題及詳細答案(01 - 20) |
2 | vue2 面試題及詳細答案(21 - 40) |
3 | vue2 面試題及詳細答案(41 - 60) |
4 | vue2 面試題及詳細答案(61 - 70) |
5 | vue2 面試題及詳細答案(71 - 80) |
6 | vue2 面試題及詳細答案(81 - 90) |
7 | vue2 面試題及詳細答案(91 - 100) |
8 | vue2 面試題及詳細答案(101 - 120) |
9 | vue2 面試題及詳細答案(121 - 130) |
10 | vue2 面試題及詳細答案(131 - 140) |
11 | vue2 面試題及詳細答案(141 - 150) |