Fork me on GitHub

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

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 即可实现
(这个方法是在父元素中进行设置)
 
使用 css 画一个 loading 的图标
 
.loading{
  width:35px;
  height:35px;
  border:5px solid rgba(189, 189, 189, 0.25);
  border-left-color: rgba(3, 155, 229, 1);
  border-top-color: rgba(3, 155, 229, 1);
  border-radius: 50%;
  animation: rotate 600ms infinite linear;
}
@keyframes rotate{
  to {
    transform: rotate(1turn);
  }
}
animation 的第一个参数表示动画的名称是什么
animation 的第二个参数表示旋转的周期是多少
animation 的第三个参数表示 animation-iteration-count(动画播放次数),它的属性值有两种:
(1) 直接写数字,自定义想要播放动画的次数
(2) infinite: 设置动画无线循环播放
animation 的第四个参数表示 animation-iteration-function(动画以何种运行轨迹完成一个周
期)
(1) linear: 表示动画从头到尾的速度都是相同
(2) ease-in: 表示动画以低速开始
(3) ease-out:表示动画以低速结束
(4) ease-in-out: 表示动画以低速开始和结束
transform 表示动画的执行方式,后面跟的参数为 rotate(135deg)表示旋转 135 度,1turn 表示
旋转一周

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

 

posted @ 2023-02-04 12:39  广东靓仔-啊锋  阅读(110)  评论(0编辑  收藏  举报