前端面试高频50题,嘎嘎香

目录

  1. HTML相关问题
  2. CSS相关问题
  3. JavaScript相关问题
  4. Vue.js相关问题
  5. React相关问题
  6. 浏览器相关问题
  7. 性能优化相关问题

1. HTML相关问题

1. 什么是Doctype?有什么作用?

Doctype(文档类型声明)是一种标准通告,它告诉浏览器当前文档的类型及版本。它的作用是使浏览器以正确的模式(标准模式或兼容模式)渲染页面内容。

<!DOCTYPE html>

2. HTML5有哪些新特性?

HTML5增加了一些新的语义元素(如 <article><section><header><footer>),新的表单控件(如 <date><email><url>),新的API(如本地存储、音视频支持、Canvas绘图)。

3. 行内元素和块级元素的区别?

行内元素(inline element)不占据整个宽度,仅占据自身的内容宽度;而块级元素(block element)占据其父容器的整个宽度。行内元素不能包含块级元素,但块级元素可以包含行内元素。

4. 如何在HTML中嵌入SVG?

可以使用 <svg> 标签直接嵌入SVG代码,或者使用 <img> 标签引用外部SVG文件。

<svg width="100" height="100"><circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
</svg>

5. HTML5中的自定义数据属性是什么?

自定义数据属性可以使用 data- 前缀在HTML元素上定义,这些属性可以通过JavaScript轻松访问。

<div data-user-id="12345">User Info</div>

2. CSS相关问题

6. CSS选择器有哪些?请举例说明。

常见的CSS选择器包括:

  • 元素选择器:div
  • 类选择器:.className
  • ID选择器:#idName
  • 属性选择器:[type="text"]
  • 伪类选择器::hover
  • 伪元素选择器:::before

7. CSS的盒模型是什么?

CSS的盒模型包括内容(content)、内边距(padding)、边框(border)和外边距(margin)。这些属性共同决定了元素的总大小和布局。

.box {width: 100px;padding: 10px;border: 5px solid black;margin: 20px;
}

8. 如何实现一个水平居中的div?

可以使用 margin: auto 或者使用 flexbox

.center {width: 200px;margin: 0 auto;
}

9. 什么是Flexbox布局?它有哪些优点?

Flexbox是一种用于一维布局的CSS布局模式,它使得盒子在容器中可以根据可用空间动态排列和调整大小。优点包括:便捷的水平和垂直对齐、简单的元素排序、适应不同屏幕尺寸等。

.container {display: flex;justify-content: center;align-items: center;
}

10. 如何使用CSS实现响应式设计?

可以使用媒体查询(media queries)来针对不同屏幕尺寸应用不同的样式。

@media (max-width: 600px) {.responsive {font-size: 14px;}
}

3. JavaScript相关问题

11. JavaScript的数据类型有哪些?

JavaScript的基本数据类型包括:undefinednullbooleannumberstringsymbolobject

12. 如何判断一个变量的类型?

可以使用 typeof 运算符和 instanceof 运算符。

typeof 42; // "number"
typeof "hello"; // "string"
[] instanceof Array; // true

13. 什么是闭包(closure)?

闭包是指一个函数可以记住并访问其词法作用域,即使这个函数在其词法作用域之外执行。闭包使得函数拥有私有变量。

function outerFunction() {let outerVariable = 'I am outside!';function innerFunction() {console.log(outerVariable);}return innerFunction;
}
const closureFunction = outerFunction();
closureFunction(); // 输出 "I am outside!"

14. JavaScript中的事件循环(Event Loop)是什么?

事件循环是JavaScript处理异步操作的机制。它不断检查调用堆栈和消息队列,如果调用堆栈为空,就将消息队列中的第一个任务推入调用堆栈执行。

15. 什么是Promise?如何使用?

Promise 是一种用于处理异步操作的对象。它有三种状态:pendingfulfilledrejected。可以通过 thencatch 方法链式调用。

const promise = new Promise((resolve, reject) => {if (success) {resolve('Success');} else {reject('Error');}
});
promise.then(result => console.log(result)).catch(error => console.log(error));

16. 如何实现深拷贝一个对象?

可以使用递归函数或者第三方库如 lodash 来实现深拷贝。

function deepClone(obj) {if (obj === null || typeof obj !== 'object') {return obj;}const clone = Array.isArray(obj) ? [] : {};for (let key in obj) {clone[key] = deepClone(obj[key]);}return clone;
}

17. 什么是this关键字?它在不同场景下的值分别是什么?

this 是一个特殊的关键字,它的值取决于函数的调用方式。在全局环境中,它指向 window 对象;在方法调用中,它指向调用该方法的对象;在构造函数中,它指向新创建的实例对象。

18. JavaScript中的作用域链(Scope Chain)是什么?

作用域链是指在函数执行时,沿着函数声明的位置向上查找变量的过程。每个函数都会形成一个新的作用域,当前作用域没有找到的变量,会沿着作用域链依次向上查找。

19. 如何实现继承?

可以使用 class 语法和 extends 关键字,或者通过构造函数和 prototype 实现继承。

class Parent {constructor(name) {this.name = name;}sayName() {console.log(this.name);}
}class Child extends Parent {constructor(name, age) {super(name);this.age = age;}
}const child = new Child('John', 25);
child.sayName(); // 输出 "John"

20. JavaScript中的原型链(Prototype Chain)是什么?

原型链是指对象的原型对象的链条。当访问对象的属性时,如果属性不存在于对象本身,会沿着原型链向上查找,直到找到属性或达到原型链的顶端(null)。

4. Vue.js相关问题

21. 什么是Vue的双向绑定?

Vue的双向绑定是指数据模型和视图之间的同步更新。通过 v-model 指令,表单输入元素可以与数据进行双向绑定。

22. Vue组件的生命周期有哪些?

Vue组件的生命周期分为四个阶段:创建、挂载、更新和销毁。常用的钩子函数包括 beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyed

23. Vue中的计算属性(computed)和侦听属性(watch)有什么区别?

计算属性用于基于其他属性的值计算新值,并且具有缓存特性。侦听属性用于观察和响应数据变化,但不会缓存值。

computed: {fullName() {return `${this.firstName} ${this.lastName}`;}
}
watch: {firstName(newVal, oldVal) {console.log(`firstName changed from ${oldVal} to ${newVal}`);}
}

24. Vue中的指令有哪些?请举例说明。

常用的Vue指令包括:

  • v-if: 条件渲染
  • v-for: 列表渲染
  • v-bind: 动态绑定属性
  • v-on: 事件绑定
  • v-model: 双向绑定

  1. Vue中的v-for指令中使用key有什么作用?
    key 属性用于在 v-for 循环中为每个节点提供唯一标识,帮助Vue更高效地更新和复用节点,避免不必要的重渲染。

26. 如何在Vue中实现父子组件通信?

可以通过 props 向子组件传递数据,通过 $emit 向父组件发送事件。

// 父组件
<template><child-component :message="parentMessage" @child-event="handleEvent"></child-component>
</template>
<script>
export default {data() {return {parentMessage: 'Hello from parent'};},methods: {handleEvent(data) {console.log('Received event from child:', data);}}
};
</script>// 子组件
<template><div><p>{{ message }}</p><button @click="sendEvent">Send Event</button></div>
</template>
<script>
export default {props: ['message'],methods: {sendEvent() {this.$emit('child-event', 'Hello from child');}}
};
</script>

27. Vue中如何使用插槽(slots)?

插槽用于在组件模板中嵌入父组件的内容。

// 父组件
<template><child-component><template v-slot:header><h1>Header Content</h1></template><p>Main Content</p></child-component>
</template>// 子组件
<template><div><header><slot name="header"></slot></header><main><slot></slot></main></div>
</template>

28. Vue中的动态组件是什么?

动态组件是指根据条件动态加载和渲染不同的组件。可以使用 component 组件和 :is 属性实现动态组件。

<template><component :is="currentComponent"></component>
</template>
<script>
export default {data() {return {currentComponent: 'componentA'};},components: {componentA,componentB}
};
</script>

29. Vue中的混入(mixins)是什么?

混入是指将可复用的代码片段分离出来,在多个组件中共享。混入对象可以包含任意组件选项,混入时会与组件自身的选项合并。

const myMixin = {created() {console.log('Mixin hook called');}
};export default {mixins: [myMixin],created() {console.log('Component hook called');}
};

30. Vue Router的基本使用方法是什么?

Vue Router 是 Vue.js 的官方路由管理器,用于创建SPA(单页应用)。基本使用包括定义路由、创建路由实例并挂载到Vue实例。

import Vue from 'vue';
import VueRouter from 'vue-router';
import Home from './components/Home.vue';
import About from './components/About.vue';Vue.use(VueRouter);const routes = [{ path: '/', component: Home },{ path: '/about', component: About }
];const router = new VueRouter({routes
});new Vue({el: '#app',router,render: h => h(App)
});

5. React相关问题

31. React的生命周期有哪些阶段?

React组件的生命周期分为挂载、更新和卸载三个阶段。主要的生命周期方法包括 componentDidMountcomponentDidUpdatecomponentWillUnmount

32. 什么是React Hooks?举例说明如何使用useState和useEffect。

React Hooks是React 16.8引入的一种全新API,允许在函数组件中使用state和其他React特性。

import React, { useState, useEffect } from 'react';function Example() {const [count, setCount] = useState(0);useEffect(() => {document.title = `You clicked ${count} times`;}, [count]);return (<div><p>You clicked {count} times</p><button onClick={() => setCount(count + 1)}>Click me</button></div>);
}

33. React中的虚拟DOM(Virtual DOM)是什么?

虚拟DOM是React中的一种轻量级的JavaScript对象表示,它与真实DOM保持同步。在状态变化时,React会先更新虚拟DOM,再通过diff算法找到最小的变更并更新真实DOM。

34. 如何在React中实现组件通信?

可以通过props在父子组件之间传递数据和回调函数,或者使用Context在深层嵌套组件中传递数据。

35. React中高阶组件(Higher-Order Component, HOC)是什么?

高阶组件是一个函数,它接受一个组件并返回一个新的组件。HOC通常用于组件逻辑的复用。

function withLogging(WrappedComponent) {return class extends React.Component {componentDidMount() {console.log('Component mounted');}render() {return <WrappedComponent {...this.props} />;}};
}

36. 什么是React中的Context API?

Context API用于在组件树中传递数据,而无需通过props逐层传递。它包括React.createContextProviderConsumer

const MyContext = React.createContext();function Parent() {return (<MyContext.Provider value="Hello from context"><Child /></MyContext.Provider>);
}function Child() {return (<MyContext.Consumer>{value => <p>{value}</p>}</MyContext.Consumer>);
}

37. React中的Ref是什么?如何使用?

Ref用于访问DOM节点或React实例。可以通过React.createRef创建Ref,并在组件中通过ref属性使用。

class MyComponent extends React.Component {constructor(props) {super(props);this.myRef = React.createRef();}componentDidMount() {this.myRef.current.focus();}render() {return <input ref={this.myRef} />;}
}

38. React中的Fragment是什么?它有什么作用?

Fragment允许将多个子元素分组,而不在DOM中添加额外的节点。可以使用<React.Fragment><>语法。

function MyComponent() {return (<><p>First paragraph</p><p>Second paragraph</p></>);
}

39. React中的Portals是什么?如何使用?

Portals用于将子节点渲染到父组件以外的DOM节点中。可以使用ReactDOM.createPortal方法。

ReactDOM.createPortal(<div>Portal Content</div>,document.getElementById('portal-root')
);

40. 如何在React中处理异步请求?

可以使用useEffect钩子(在函数组件中)或componentDidMount生命周期方法(在类组件中)来处理异步请求。

useEffect(() => {async function fetchData() {const response = await fetch('https://api.example.com/data');const data = await response.json();setData(data);}fetchData();
}, []);

6. 浏览器相关问题

41. 浏览器的渲染过程是什么?

浏览器的渲染过程包括以下几个步骤:解析HTML生成DOM树、解析CSS生成CSSOM树、将DOM树和CSSOM树合并生成渲染树、布局计算和绘制。

42. 什么是重绘(Repaint)和重排(Reflow)?

重绘是指元素外观的改变(如颜色),不会影响布局。重排是指布局的改变,会影响到部分或整个页面的布局,需要重新计算布局。

43. 浏览器的同源策略是什么?

同源策略是一种安全机制,限制来自不同源(协议、域名、端口)的脚本对当前网页资源的访问。不同源的请求会受到限制,以防止跨站脚本攻击。

44. 如何解决跨域问题?

常见的跨域解决方案包括:JSONP、CORS、服务器代理。

45. 浏览器缓存有哪些类型?

浏览器缓存包括:强缓存和协商缓存。强缓存通过Cache-ControlExpires头实现,协商缓存通过Last-ModifiedETag头实现。

7. 性能优化相关问题

46. 如何优化网页加载速度?

优化网页加载速度的方法包括:减少HTTP请求、使用CDN、压缩资源、延迟加载(lazy loading)、使用缓存等。

47. 如何优化CSS性能?

优化CSS性能的方法包括:减少CSS选择器的复杂度、避免使用低效的选择器、压缩CSS文件、减少重绘和重排等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1489361.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

安装CUDA Cudnn Pytorch(GPU版本)步骤

一.先看自己的电脑NVIDIA 支持CUDA版本是多少&#xff1f; 1.打开NVIDIA控制面板 2.点击帮助---系统信息--组件 我的支持CUDA11.6 二.再看支持Pytorch的CUDA版本 三.打开CUDA官网 下载CUDA 11.6 下载好后&#xff0c;安装 选择 自定义 然后安装位置 &#xff08;先去F盘…

一天搞定React(5)——ReactRouter(下)【已完结】

Hello&#xff01;大家好&#xff0c;今天带来的是React前端JS库的学习&#xff0c;课程来自黑马的往期课程&#xff0c;具体连接地址我也没有找到&#xff0c;大家可以广搜巡查一下&#xff0c;但是总体来说&#xff0c;这套课程教学质量非常高&#xff0c;每个知识点都有一个…

C++ 基础练习 - Chapter 7 (英文版)

Review Questions: 7.1 What is operator overloading? Answer: The mechanism of giving special meaning to an operator is known as operator overloading. 7.2 Why is it necessary to overloading an operator? Answer: We can almost create a new language of …

33.【C语言】实践扫雷游戏

预备知识&#xff1a; 第13篇 一维数组 第13.5篇 二维数组 第28篇 库函数 第29篇 自定义函数 第30篇 函数补充 0x1游戏的运行&#xff1a; 1.随机布置雷 2.排雷 基本规则&#xff1a; 点开一个格子后&#xff0c;显示1&#xff0c;对于9*9&#xff0c;代表以1为中心的去…

UDP网口(3)逻辑组包(下)

文章目录 1.ARP应答验证2.UDP实现思路3.UDP接收验证4.UDP发送验证5.总结与思考6.传送门 1.ARP应答验证 创建一个ARP应答工程&#xff0c;当PC发出ARP请求的时候&#xff0c;手动按下板卡指定按键&#xff0c;将会响应ARP应答。以此验证phy芯片的配置正常&#xff0c;硬件链路正…

【Emacs有什么优点,用Emacs写程序真的比IDE更方便吗?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

mfc100u.dll 文件缺失?两种方法快速修复丢失mfc100u.dll 文件难题

您的电脑是否遭遇了 mfc100u.dll 文件缺失的问题&#xff1f;这种情况通常由多种原因引起。在本文中&#xff0c;我们将介绍两种修复 mfc100u.dll 文件丢失问题的策略——一种是手动方法&#xff0c;另一种是自动修复的使用。我们将探讨如何有效地解决 mfc100u.dll 文件缺失的几…

CAS算法

CAS算法 1. CAS简介 CAS叫做CompareAndSwap&#xff0c;比较并交换&#xff0c;主要是通过处理器的指令来保证操作的原子性。 CAS基本概念 内存位置 (V)&#xff1a;需要进行CAS操作的内存地址。预期原值 (A)&#xff1a;期望该内存位置上的旧值。新值 (B)&#xff1a;如果旧…

Prometheus各类监控及监控指标和告警规则

目录 linux docker监控 linux 系统进程监控 linux 系统os监控 windows 系统os监控 配置文件&告警规则 Prometheus配置文件 node_alert.rules docker_container.rules mysql_alert.rules vmware.rules Alertmanager告警规则 consoul注册服务 Dashboard JSON…

(8) ubuntu ROS 安装

文章目录 安装流程1. 进入ros官网2. 根据自己ubuntu系统选择版本&#xff08;我是20.04的ubuntu&#xff09;3.根据流程开始安装3.1 设置sources.list 4.验证ros5.安装rosdep 安装流程 1. 进入ros官网 https://www.ros.org/ 2. 根据自己ubuntu系统选择版本&#xff08;我是2…

排查C++软件异常的常见思路与方法(实战经验总结)

目录 1、概述 2、常用的C++异常排查思路与方法 2.1、IDE调试 2.1.1、Debug和Release下的调试 2.1.2、VS附加到进程调试 2.1.3、Windbg附加到进程调试 2.2、添加日志打印 2.3、分块注释代码 2.4、数据断点 2.5、历史版本比对法 2.6、Windbg静态分析与动态调试 2.6.1…

如何发现快速发现分析生产问题SQL

Performance Schema介绍 Performance Schema提供了有关MySQL服务器内部运行的操作上的底层指标。为了解释清楚Performance Schema的工作机制&#xff0c;先介绍两个概念。 第一个概念是程序插桩&#xff08;instrument&#xff09;。程序插桩在MySQL代码中插入探测代码&#xf…

Hadoop单机版环境搭建

一 . 案例信息 Hadoop 的安装部署的模式一共有三种&#xff1a; 本地模式&#xff0c;默认的模式&#xff0c;无需运行任何守护进程&#xff08; daemon &#xff09;&#xff0c;所有程序都在单个 JVM 上执行。由 于在本机模式下测试和调试 MapReduce 程序较为方便&#x…

鸿蒙开发——axios封装请求、拦截器

描述&#xff1a;接口用的是PHP&#xff0c;框架TP5 源码地址 链接&#xff1a;https://pan.quark.cn/s/a610610ca406 提取码&#xff1a;rbYX 请求登录 HttpUtil HttpApi 使用方法

PHP8.3.9安装记录,Phpmyadmin访问提示缺少mysqli

ubuntu 22.0.4 腾讯云主机 下载好依赖 sudo apt update sudo apt install -y build-essential libxml2-dev libssl-dev libcurl4-openssl-dev pkg-config libbz2-dev libreadline-dev libicu-dev libsqlite3-dev libwebp-dev 下载php8.3.9安装包 nullhttps://www.php.net/d…

基于Qt的视频剪辑

在Qt中进行视频剪辑可以通过多种方式实现&#xff0c;但通常需要使用一些额外的库来处理视频数据。以下是一些常见的方法和步骤&#xff1a; 使用FFmpeg FFmpeg是一个非常强大的多媒体框架&#xff0c;可以用来处理视频和音频数据。你可以使用FFmpeg的命令行工具或者其库来实现…

Github 2024-07-26 Java开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-26统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目9HTML项目1TypeScript项目1非开发语言项目1JavaGuide - Java 程序员学习和面试指南 创建周期:2118 天开发语言:Java协议类型:Apache…

springboot使用Gateway做网关并且配置全局拦截器

一、为什么要用网关 统一入口&#xff1a; 作用&#xff1a;作为所有客户端请求的统一入口。说明&#xff1a;所有客户端请求都通过网关进行路由&#xff0c;网关负责将请求转发到后端的微服务 路由转发&#xff1a; 作用&#xff1a;根据请求的URL、方法等信息将请求路由到…

C#初级——枚举

枚举 枚举是一组命名整型常量。 enum 枚举名字 { 常量1, 常量2, …… 常量n }; 枚举的常量是由 , 分隔的列表。并且&#xff0c;在这个整型常量列表中&#xff0c;通常默认第一位枚举符号的值为0&#xff0c;此后的枚举符号的值都比前一位大1。 在将枚举赋值给 int 类型的…

java计算机毕设课设—记账管理系统(附源码和安装视频)

这是什么系统&#xff1f; java计算机毕设课设—记账管理系统&#xff08;附源码和安装视频&#xff09; 记账管理系统主要用于财务人员可以从账务中判断公司的发展方向。对个人和家庭而言&#xff0c;通过记账可以制定日后的 消费计划&#xff0c;这样才能为理财划出清晰合理…