DOM 是什么
DOM (Document Object Model, 文档对象模型)是文档内容(HTML 或 XML)在编程语言上的抽象模型,它建模了文档的内容和结构,并提供给编程语言一套完整的操作文档的 API。
DOM 提供了一种便捷、高效、可跟踪的文档修改方式。
- 在浏览器方面,浏览器首次解析文档时,把文档中的标签解析成一个个节点,整个文档最终形成了一个称为 DOM 树的结构。浏览器再根据 DOM 树去呈现页面。浏览器会跟踪 DOM 树的变化,一旦 DOM 树变化,页面也会做出相应变化。
- DOM 节点对象是普通的 JS 对象,有易于操作的方法和属性,这样,在 JS 操作文档就像操作对象一样方便快捷。而且,浏览器会知道你修改了哪个节点,这样,只需要重新渲染被修改影响的局部页面就好了(即发生回流和重绘)。
DOM 组件后来发展成为一套不依托于浏览器和 JS 的规范,提供了一套完整的访问和修改文档的接口,这些 API 在浏览器中被广泛使用。 DOM 标准由 W3C 维护,目前版本 DOM4.
DOM 的两层含义:在浏览器的角度是根据文档建模出来的一个树形模型,即 DOM 树;在编程语言来看,它提供了一套操纵文档的 API。
怎么选择 DOM 节点
document.querySelector()、 document.querySelectorAll();
document.getElementById()、document.getElementByClassName()、document.getElementByTagName();
Java 有哪些集合
Collection 接口是集合类的根接口,Java 中没有提供这个接口的直接的实现类,但是却让其被继承产生了两个接口就是 Set 和 List。Set 中不能包含重复的元素。List 是一个有序的集合,提供了按索引访问的方式;
Map 是 Java.util 中的接口,它和 Collection 接口没有关系,是相互独立的,但是都属于集合类的一部分。
Iterator,所有的集合类都实现了 Iterator 接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法:
- hasNext(): 是否还有下一个元素;
- next(): 下一个元素;
- remove(): 删除当前元素;
List: ArrayList 和 LinkedList
工作中多用 ArrayList :
- 在工作中,遍历的需求比增删多,即便是增加元素,往往也是从尾部插入元素,而 ArrayList 在尾部插入元素也是 O(1);
ArrayList 增删没有没有想象中慢,ArrayList 的增删底层调用的 copyof() 被优化过,加上现代 CPU对内存可以块操作,普通大小的 ArrayList 增删比 LinkedList 更快;
Set: HashSet、TreeSet、LinkedHashSet
一般开发中最多用到的就是 HashSet。 TreeSet 是可以排序的 Set。在开发中很少管元素插入有序的问题,所以 LinkedHashSet 一般也用不上。
Map: HashMap、LinkedHashMap、TreeMap
ArrayList 与 LinkedList 的区别
- 从实现看:
LinkedList 的底层实现是双链表,ArrayList 的底层实现是动态数组;- 从扩容机制看:
LinkedList 不存在扩容的说法,因为是链表结构;ArrayList底层是动态数组存在扩容说法,默认的数组大小是10;在检测需要扩容后,如果扩容,会扩容为原来的1.5倍大小。原理就是把老数组的元素存储到新数组里面- 从优点看:
ArrayList 的查找性能好,因为底层是数组,适用于查找元素;
LinkedList 底层是双链表,对于插入或者删除元素来说,操作方便,性能高;- 从缺点看:
ArrayList 是一块连续的内存,所以需要删除或者插入一个元素,那么之前或者之后的元素都需要移动,代价很高;
LinkedList 是链表,在内存中可以是不连续的,通过指针连接节点,如果要查找元素,必须去遍历整个链表。
从安全角度来看:
ArrayList 在单线程环境下是安全的,多线程环境下不是线程安全的,容易造成脏读的问题;
LinkedList 在单线程环境下是安全的,多线程环境下不是线程安全的,容易造成脏读的问题;
讲一下归并排序
归并排序算法的核心就是“归并”,将两个有序的数列合并,形成更大的有序数组。
归并排序使用的思想是分治思想,将复杂问题分解为两个或者多个规模相同或类似的子问题,然后继续细化,当子问题足够简单,能够被求解,那么复杂的问题也就能够被求解出来。
讲一下快速排序
快速排序使用的是 分治思想,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
讲一下 React 与 Vue 的区别
两侧固定200 px,中间自适应
HTML5 有什么新的特性
- 语义标签
- 增强型表单
- 视频和音频
- Canvas 绘图
- SVG 绘图
- 地理定位
- 拖放 API
- Web Worker
- Web Storage
- WebSocket