首页 > 其他分享 >前端面试套题系列(第二篇)

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

时间:2023-02-04 12:44:06浏览次数:41  
标签:居中 vue minStack DOM stack2 面试 组件 第二篇 套题

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]
    }
}

 

 

 

标签:居中,vue,minStack,DOM,stack2,面试,组件,第二篇,套题
From: https://www.cnblogs.com/cczlovexw/p/17091282.html

相关文章

  • C++面试八股文快问快答のSTL篇
    文章目录​​STL篇​​​​vector的底层原理(此题本人踩坑,需重视)​​​​vector中的reserve和resize的区别​​​​vector中的size和capacity的区别​​​​vector中erase方......
  • 「 每日一练,快乐水题 」面试题 17.11. 单词距离
    文章目录​​......
  • 最基本的25道深度学习面试问题和答案
    近年来,对深度学习的需求不断增长,其应用程序被应用于各个商业部门。各公司现在都在寻找能够利用深度学习和机器学习技术的专业人士。在本文中,将整理深度学习面试中最常被问......
  • 前端面试套题系列(第一篇)
    1、进程、线程和协程之间的区别与联系进程:直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单......
  • 8个你可能不知道答案的常见JavaScript面试问题
    不管你喜不喜欢,棘手的问题仍然会被野外的面试官问到。 原因是,这些问题可以告诉你很多关于你对语言的核心理解,因此你是否适合这份工作。这些问题中涉及的常见概念包括......
  • 面试重点
    新生代Eden与两个Survivor区的解释为什么会有年轻代我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC......
  • HTML面试知识点
    参考自CavsZhouyou/Front-End-Interview-NotebookHTML面试知识点目录目录HTML面试知识点目录DOCTYPE的作用HTML5为什么只需要写<!DOCTYPEHTML>,而不需要引入DTD?H5与H......
  • #yyds干货盘点# LeetCode面试题:无重复字符的最长子串
    1.简述:给定一个字符串s,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为......
  • #yyds干货盘点# LeetCode程序员面试金典: 递归乘法
    题目:递归乘法。写一个递归函数,不使用*运算符,实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。示例1:输入:A=1,B=10输出:10示例2:输入:A=3,B=4......
  • DevOps与CICD面试题
    DevOps术语和定义1. 什么是DevOps答:用最简单的术语来说,DevOps是产品开发过程中开发(Dev)和运营(Ops)团队之间的灰色区域。DevOps是一种在产品开发周期中强调沟通,集成......