前端面试套题系列(第二篇)
1、HTML 语义化标签
<p></p> <a></a> <header> <footer> <h1><h2><h3><h4><h5> <article><section> <strong><ol><li><ul>
<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 个人版权所有
2、CSS
w 100 b 10 p 20 m 30问怪异盒子和标准盒子下该盒子的宽度是多少
css的水平垂直居中的几种方式
.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); } }
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实现数据双向绑定。
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] } }