前端面试套题系列(第二篇)

news/2024/7/7 19:25:06

1、HTML 语义化标签

语义化标签,旨在让标签有自己的含义,优势是:
(1) 使得在没有 CSS 的情况下,页面也能呈现出很好的内容结构、代码结构
(2) 有利于 SEO:和搜索引擎建立良好沟通,有助于爬虫抓取更多的有效信息
(3) 方便其他设备(比如盲人阅读器来解析)来解析 HTML 内容,从而渲染出页面
(4) 方便团队的开发和维护,使得代码更具可读性
常见的语义化标签有:
<p></p>
<a></a>
<header>
<footer>
<h1><h2><h3><h4><h5>
<article><section>
<strong><ol><li><ul>
HTML 的 meta 属性
meta 用于定义页面的说明,关键字,最后修改日期,和其他的元数据。这些元数据将服务于
浏览器(如何布局或重载页面),搜索引擎和其他网络服务。
meta 标签共有两个属性,分别是 http-equiv 属性和 name 属性。
name 属性更为常用:name 属性主要用于描述网页,比如网页的关键词,叙述等。与之对应
的属性值为 content,content 中的内容是对 name 填入类型的具体描述,便于搜索引擎抓
取。meta 标签中 name 属性语法格式是:
<meta charset='utf-8'>
<meta name='参数' content='具体的描述'>
<meta name='viewport' content='width=device-width,initial
scale=1'>
<meta name='keywords' content='个性主页,学习,记录,成长'>
<meta name='description' content='热爱前端与编程。目前大二,这是我的前
端博客'>
<meta name='robots' content='none'>
<meta name='author' content='xxx'>
<meta name='copyright' content='xxxx'>// 代表该网站为 xxx 个人版权所有
keywords 是网站的关键词
description 是网站的描述
上述两个属性都有助于搜索引擎读取网页。
robots 用来告诉爬虫哪些页面需要索引,哪些页面不需要索引。content 的参数有all,none,index,follow 等,默认是 all
 

2、CSS

w 100 b 10 p 20 m 30问怪异盒子和标准盒子下该盒子的宽度是多少

标准的盒子模型的大小是:content(区域内容大小)+padding(内边距)+border(边框)+margin(外边距);
怪异盒子(IE模型)宽高大小包含:content(区域内容大小)+padding、border大小在内,但不包含margin的大小
 

css的水平垂直居中的几种方式

1. 利用 flex 的 align-items:center 垂直居中,justify-content:center 水平居中
2. 利用相对定位和绝对定位的 margin:auto
父组件用相对定位,子组件用绝对定位,然后子组件内设置 top,right,bottom,left 都是
0,margin:auto 即可使子组件水平垂直居中
3. 利用相对定位和绝对定位,再加上外边距和平移的配合
父组件用相对定位,子组件用绝对定位,利用 margin 偏移外容器的 50%,再利用 translate
平移回补自身宽高的 50%即可4. 利用 textAlign 和 verticalAlign---使行内元素水平垂直居中
利用 textAlign:center 实现行内元素的水平居中,再利用 vertical-align:middle 实现行内
元素的垂直居中,前提是要先加上伪元素并给设置高度为 100%,用过 elementUI 的可以去
看看其消息弹窗居中实现方式就是如此。
5. 上面都是在未知外容器和自身宽高下实现水平垂直居中的,如果已知其宽高,可以有更多种
简单的方式实现居中,其原理无非是利用绝对定位的 top/left 偏移、margin 偏移、padding
填充,在此就不分析了。还有就是单纯文字的居中利用 lineHeight 和 textAlign 即可实现
(这个方法是在父元素中进行设置)
 

3、虚拟地址和物理地址

物理地址:物理内存就是真实的内存,CPU的地址线可以直接进行寻址的内存空间大小。比如在32位平台下,寻址的范围是2^32也就是4G,并且这是固定的。

虚拟地址:操作系统会给每个进程分配一个虚拟地址空间,这个虚拟地址空间不同于其他进程。每个进程包含的栈、堆、代码段这些都会从这个地址空间中被分配一个地址。

很多的应用程序都比较大,计算机实际所配置的内存空间无法满足。所以出现了虚拟内存技术。经过不断有目的的换入和换出,处理器似乎是拥有了一个大于实际物理内存的内存空间。于是,这个存储空间叫做虚拟内存空间。

由于存在两个内存地址,因此一个应用程序从编写到被执行,需要进行两次映射。第一次是映射到虚拟内存空间,第二次时映射到物理内存空间。在计算机系统中,第两次映射的工作是由硬件和软件共同来完成的。承担这个任务的硬件部分叫做存储管理单元MMU,软件部分就是操作系统的内存管理模块了。

虚拟地址和物理地址的关系

分页就是把整个虚拟和物理内存切成一段段固定大小的空间,连续且尺寸固定的内存空间叫页,Linux下每一页大小4KB。

虚拟内存和物理内存之间通过页表来映射;虚拟地址分为:页号和页内偏移。

 

4、React 框架和 Vue 框架在设计理念上有哪些不同点和相同点

vue: vue是一种渐进式框架,采用自底向上增量开发的设计;

react: 采用函数式编程,推崇纯组件,数据不可变,单向数据流;

相同点:

1、两者都是用了Virtual DOM,Virtual DOM是一个映射真实DOM的JavaScript对象,如果需要改变任何元素的状态,那么是先在Virtual DOM上进项改变,而不是直接改变真实的DOM。当有变化产生时,一个新的Virtual DOM对象会被创建并计算新旧Virtual DOM之间的差别。之后这些差别会应用在真实的DOM上。

Tips: 

VUE可以更快地计算出Virtual DOM的差异,这是由于它在渲染过程中,会跟踪每一个组件的依赖关系,不需要重新渲染整个组件树。

而对于REACT而言,每当应用的状态被改变时,会全部子组件会重新渲染。当然,这也可以通过shouldComponentUpdate这个生命周期方法来进行控制,但VUE将此视为默认的优化。

2、REACT与VUE都鼓励组件化应用。建议将应用拆成一个个功能明确的模块,每个模块之间可以通过合适的方式互相联系。

Tips: 

在REACT中,这是必须的,它以来一个”单一数据源“作为它的”状态“

而在vue中,PROPS略有不同,它们一样是在组件中被定义,的vue依赖与模板语法,你可以通过模板的循环函数更高效地展示传入的数据。

3、REACT和vue都有PROPS的概念,properties的简写。props在组件中是一个特殊的属性,语序父组件往子组件传送数据。

在REACT中,是必须的,它以来一个”单一数据源“作为它的”状态“

而在vue中,PROPS略有不同,它们一样是在组件中被定义,的vue依赖与模板语法,你可以通过模板的循环函数更高效地展示传入的数据。

 

不同点:

1、REACT与vue最大的不同是模板的编写:模板 VS JSX

2、监听数据变化的实现原理不同;

Tips:

Vue通过getter,setter以及一些函数的劫持,能精确知道数据的变化。
React是通过比较引用方式(diff)进行的,当应用的状态改变时,全部组件都会重新渲染。

3、数据流不同;

Tips:

Vue实现双向绑定,在vue1.0中有两种方法可以实现双向绑定,父子组件之间的props以及组件与DOM直接的v-model。vue2去掉了第一种双向绑定方法,通过v-model实现数据双向绑定。

 4、state处理不同;

Tips:

React中,state对象需要用setState方法更新状态;
在Vue中,state对象不是必须的,数据由data属性在vue对象中管理。

 

5、定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.min();   --> 返回 -2.
代码如下: 
class MinStack {
    stack1 : Array<number>
    stack2 : Array<number>
    constructor() {
        this.stack1 = []
        this.stack2 = [Infinity]
    }

    push(x: number): void {
        this.stack1.push(x)
        let MinNumber = Math.min(this.stack2[this.stack2.length - 1], x)
        this.stack2.push(MinNumber)
    }

    pop(): void {
        this.stack1.pop()
        this.stack2.pop()
    }

    top(): number {
        return this.stack1[this.stack1.length - 1]
    }

    min(): number {
        return this.stack2[this.stack2.length - 1]
    }
}

 

 

 


http://lihuaxi.xjx100.cn/news/803987.html

相关文章

【信管11.1】项目采购相关知识及过程

项目采购相关知识及过程项目采购管理过程做为十大知识领域的最后一部分内容&#xff0c;含金量也是不容忽视的。在这一大章节中&#xff0c;除了普通的采购管理过程之外&#xff0c;我们还要学习采购相关的一些法规知识、合同相关知识等。总之&#xff0c;内容不少&#xff0c;…

【Python学习笔记】12. 字符串

前言 字符串是 Python 中最常用的数据类型。我们可以使用引号( ’ 或 " )来创建字符串。 Python3 字符串 字符串是 Python 中最常用的数据类型。我们可以使用引号( ’ 或 " )来创建字符串。 创建字符串很简单&#xff0c;只要为变量分配一个值即可。例如&#xf…

python爬虫正则表达式

博主简介&#xff1a;博主是一个大二学生&#xff0c;主攻人工智能领域研究。感谢缘分让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;C&#xff0c;python&#xff0c;爬虫等方面的知识分享。如果有需要的小伙伴&#xff0c;可以关注博主&#xff…

c++11 标准模板(STL)(std::multiset)(六)

定义于头文件 <set> template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class multiset;(1)namespace pmr { template <class Key, class Compare std::less<Key>> usi…

#14环形链表#

环形链表 1题目链接 链接 2思路 slow和fast指向链表的开始 slow一次走一步 fast一次走两步 不带环 fast就会为空 带环 fast就会在环里追上slow 3实现 bool hasCycle(struct ListNode* head) {struct ListNode* slow head, * fast head;while (fast && fast->ne…

【Linux】项目自动化构建工具-make/Makefile与Linux调试器-gdb使用

文章目录Linux项目自动化构建工具-make/MakefileLinux调试器-gdb使用Linux项目自动化构建工具-make/Makefile 背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录…

【自动化测试】从0开始玩转docker—— 01软件安装

目的 CI / CD在目前各类互联网企业中已然成为推动软件开发行为的重要基础设施服务。同样的对于测试团队来说更是有着举足轻重的重大意义&#xff0c;无论是测试左移的具象化提现亦或是持续测试的顺利开展&#xff0c;掌握这一技能已是广大软件测试工程师的必修课。分享这一技术…

安全测试之浅析静态应用

SAST&#xff0c;Static Application Security Testing&#xff0c;即静态应用安全测试&#xff0c;也叫静态分析&#xff0c;是一种测试方法&#xff0c;一直是应用程序安全性工作的核心部分。根据Forrester的 The State Of Application Security, 2022一文的预测&#xff0c;…