前端面试题第一季

1. JS面试题

1.1 javascript的原始类型由哪些

  • boolean
  • null
  • undefined
  • number
  • string
  • symbol

原始类型存储的都是值,是没有函数可以调用的

给一些原始数据类型调用方法的时候,js 给这些原始数据类型隐式转换了,所以有一些原始数据类型可以使用方法,但是它在使用 这些方法的时候已经不是原始类型了

1.2 typeof和instanceof的区别

typeof 可以用来判断原始数据类型的基本类型

除了null,其他的原始类型都可以正确的判断出来,但是typeof 在判断对象的时候,除了函数可以正确的判断以外,其他的数据类型都是无法正确判断的,返回结果都是object

instanceof是通过原型链的方式判断数据类型的

所以instanceof可以正确的判断对象数据类型,缺点就是无法准确的判断原始数据类型

1.3 js中的哪些数据是false

undefined、null、false、NaN、’’、0、-0

1.4 ===和 == 的区别

  • 在使用进行比较时,如果双方类型不一样,就会进行类型转换,也就是只判断值是否相等
  • ===,就是判断二者的数据和类型是否相同

2. HTML+CSS 面试题

2.1 你做的页面在哪些流览器测试过? 这些浏览器的内核分别是什么?

  • IE: trident 内核
  • Firefox: gecko 内核
  • Safari:webkit 内核
  • Opera:以前是 presto 内核, Opera 现已改用 Google Chrome 的 Blink 内核
  • Chrome:Blink(基于 webkit, Google 与 Opera Software 共同开发)

2.1 Doctype

每个 HTML 文件里开头都有个很重要的东西, Doctype, 知道这是干什么的吗?

声明位于文档中的最前面的位置, 处于 标签之前。 此标签可告知浏

览器文档使用哪种 HTML 或 XHTML 规范。 (重点: 告诉浏览器按照何种规范解析页面)

2.2 div+css 的布局较 table 布局有什么优点?

  • 改版的时候更方便 只要改 css 文件。
  • 页面加载速度更快、 结构化清晰、 页面显示简洁。
  • 表现与结构相分离。
  • 易于优化(seo) 搜索引擎更友好, 排名更容易靠前

2.3 img 的 alt 与 title 有何异同? strong 与 em 的异同

  • a:alt(alt text):为不能显示图像、 窗体或 applets 的用户代理(UA) , alt 属性用来指 定替换文字。
    替换文字的语言由 lang 属性指定。 (在 IE 浏览器下会在没有 title 时把 alt 当成 tool tip 显示)
  • title(tool tip):该属性为设置该属性的元素提供建议性的信息。
  • strong:粗体强调标签, 强调, 表示内容的重要性
  • em:斜体强调标签, 更强烈强调, 表示内容的强调点

2.4 简述一下 src 与 href 的区别

src 用于替换当前元素, href 用于在当前文档和引用资源之间确立联系。

src 是 source 的缩写, 指向外部资源的位置, 指向的内容将会嵌入到文档中当前标签所在 位置; 在请求 src 资源时会将其指向的资源下载并应用到文档内, 例如 js 脚本, img 图片 和 frame 等元素。

<script src =” js.js” ></script>

当浏览器解析到该元素时, 会暂停其他资源的下载和处理, 直到将该资源加载、 编译、 执行 完毕, 图片和框架等元素也如此, 类似于将所指向资源嵌入当前标签内。 这也是为什么将 js 脚本放在底部而不是头部。

href 是 Hypertext Reference 的缩写, 指向网络资源所在位置, 建立和当前元素(锚点) 或当前文档(链接) 之间的链接, 如果我们在文档中添加

<link href=” common.css” rel=” stylesheet” />

那么浏览器会识别该文档为 css 文件, 就会并行下载资源并且不会停止对当前文档的处理。 这也是为什么建议使用 link 方式来加载 css, 而不是使用@import 方法

2.5 知道的网页制作会用到的图片格式有哪些?

png-8, png-24, jpeg, gif, svg

但是上面的那些都不是面试官想要的最后答案。 面试官希望听到是 Webp,dpg(京东图片)。 (是否有关注新 技术, 新鲜事物)

科普一下 Webp: WebP 格式, 谷歌(google) 开发的一种旨在加快图片加载速度的图片格式。 图片压缩体积大约只有 JPEG 的 2/3, 并能节省大量的服务器带宽资源和数据空间。 Facebook Ebay 等知名网站已经开始测试并使用 WebP 格式。 在质量相同的情况下, WebP 格式图像的体积要比 JPEG 格式图像小 40%

2.6 你如何理解 HTML 结构的语义化?(大概能说出几点即可)

去掉或样式丢失的时候能让页面呈现清晰的结构:

html 本身是没有表现的, 我们看到例如 h1 是粗体, 字体大小 2em, 加粗; strong是加粗 的, 不要认为这是 html 的表现, 这些其实 html 默认的 css 样式在起作用, 所以去掉或样式 丢失的时候能让页面呈现清晰的结构不是语义化的 HTML 结构的优点, 但是浏览器都有有默 认样式, 默认样式的目的也是为了更好的表达 html 的语义, 可以说浏览器的默认样式和语 义化的 HTML 结构是不可分割的。

屏幕阅读器(如果访客有视障) 会完全根据你的标记来“读” 你的网页.

例如,如果你使用的含语义的标记,屏幕阅读器就会“逐个拼出” 你的单词,而不是试着去对 它完整发音.

PDA、 手机等设备可能无法像普通电脑的浏览器一样来渲染网页(通常是因为这些设备对 CSS 的支持较弱)

使用语义标记可以确保这些设备以一种有意义的方式来渲染网页.理想情况下,观看设备的 任务是符合设备本身的条件来渲染网页.

语义标记为设备提供了所需的相关信息,就省去了你自己去考虑所有可能的显示情况(包括 现有的或者将来新的设备) .例如,一部手机可以选择使一段标记了标题的文字以粗体显示. 而掌上电脑可能会以比较大的字体来显示.无论哪种方式一旦你对文本标记为标题,您就可 以确信读取设备将根据其自身的条件来合适地显示页面.

搜索引擎的爬虫也依赖于标记来确定上下文和各个关键字的权重

过去你可能还没有考虑搜索引擎的爬虫也是网站的“访客” ,但现在它们他们实际上是极其 宝贵的用户.没有他们的话,搜索引擎将无法索引你的网站,然后一般用户将很难过来访问.

你的页面是否对爬虫容易理解非常重要,因为爬虫很大程度上会忽略用于表现的标记,而只 注重语义标记.

因此,如果页面文件的标题被标记,而不是,那么这个页面在搜索结果的位置可能会比较靠后. 除了提升易用性外,语义标记有利于正确使用 CSS 和 JavaScript,因为其本身提供了许多“钩 钩” 来应用页面的样式与行为.

SEO 主要还是靠你网站的内容和外部链接的。

便于团队开发和维护

W3C 给我们定了一个很好的标准, 在团队中大家都遵循这个标准, 可以减少很多差异化的东 西, 方便开发和维护, 提高开发效率, 甚至实现模块化开发

2.7 设置 CSS 样式的几种方式

  • 外部样式表, 引入一个外部 css 文件
  • 内部样式表, 将 css 代码放在 标签内部
  • 内联样式, 将 css 样式直接定义在 HTML 元素内部

2.8 CSS 都有哪些选择器?

派生选择器( 用 HTML 标签申明)

id 选择器( 用 DOM 的 ID 申明)

类选择器( 用一个样式类名申明)

属性选择器( 用 DOM 的属性申明, 属于 CSS2, IE6 不支持, 不常用, 不知道就算了)

除了前 3 种基本选择器, 还有一些扩展选择器, 包括

  • 后代选择器( 利用空格间隔, 比如 div .a{ })
  • 群组选择器( 利用逗号间隔, 比如 p,div,#a{ })
  • 那么问题来了, CSS 选择器的优先级是怎么样定义的?

2.9 CSS 中可以通过哪些属性定义, 使得一个 DOM 元素不显示在浏览器可视范围内 最基本的:

设置 display 属性为 none, 或者设置 visibility 属性为 hidden

技巧性:

设置宽高为 0, 设置透明度为 0, 设置 z-index 位置在-1000

2.10 行内元素和块级元素的具体区别是什么? 行内元素的 padding 和 margin 可设置吗

块级元素(block)特性:

总是独占一行, 表现为另起一行开始, 而且其后的元素也必须另起一行显示; 宽度(width)、 高度(height)、 内边距(padding)和外边距(margin)都可控制;

内联元素(inline)特性:

和相邻的内联元素在同一行;

宽度(width)、 高度(height)、 内边距的 top/bottom(padding-top/padding-bottom)和外边 距的 top/bottom(margin-top/margin-bottom)都不可改变( 也就是 padding 和 margin 的 left 和 right 是可以设置的) , 就是里面文字或图片的大小。 那么问题来了, 浏览器还有默认的天生 inline-block 元素( 拥有内在尺寸, 可设置高宽, 但不会自动换行) , 有哪些? 答案:

<input> 、 <img> 、 <button> 、 <texterea> 、 <label>。

2.11 display:none 与 visibility:hidden 的区别是什么?

display : 隐藏对应的元素但不挤占该元素原来的空间。

visibility: 隐藏对应的元素并且挤占该元素原来的空间。

即是, 使用 CSS display:none 属性后, HTML 元素(对象) 的宽度、 高度等各种属性值都将 “丢失” ;而使用 visibility:hidden 属性后, HTML 元素(对象) 仅仅是在视觉上看不见(完 全透明) , 而它所占据的空间位置仍然存在。

3. 浏览器渲染机制(了解即可)

浏览器请求到html和css之后是如何对他们进行处理的

  • 当浏览器拿到html之后,首先它是不认识这些东西的,所以它首先对这些html字符串进行词法分析,将其转换成标记(Token)
  • 下一步就是将生成的标记转换成节点(Node),最后将这些几点根据不同的关系构建成一颗Dom 树
  • 当遇到css的时候,就开始绘制样式树,绘制样式树的时候跟结构树差不多,都是现将字符串转换成标记再转换为节点,然后构建CSSOM 树(DOM
    树也叫结构树,CSSOM树也叫样式树)
  • 当两棵树都绘制好之后,就开始生成渲染树,生成渲染树的过程非常消耗性能,具体来说
    1、每次添加新的样式,都会造成部分结构树的重新渲染
    2、每一个节点的display:none,都不会渲染该节点
    3、m每一次重新渲染都会递归所有的DOM 树和 CSSOM 树

页面渲染完成之后,如果再对页面的样式或者结构修改的时候页面一般会发生两种情况

  • 重绘(Repaint),指的是,节点需要更改外观,但不会影响布局
  • 回流(Reflow),指的是布局或者几何属性的改变。

回流必定会发生重绘,重绘不一定引发回流,回流的成本币重绘高得多,改变父节点里的子节点 很可能会导致父节点的一系列回流

有一些操作会导致回流

  • 改变盒子大小
  • 改变字体
  • 添加或删除样式
  • 文字改变
  • 定位或者浮动
  • 盒模型
  • 添加删除标签
  • 获取盒子宽高

减少回流的方案

  • 使用css3 的transform
  • 减少display 的使用
  • CSS 选择符从又向左查找,比面节点层级过多

4. 什么是同源策略和跨域

浏览器因为安全问题,有一套策略,叫同源策略,这套策略只在浏览器端才会有,当你的请求协议、域名或者端口有一个不同就会跨域

跨域时,浏览器其实拿到了数据,但是不会将数据给你,所以就没有办法获取到数据

跨域主要的作用时防止 CSRF 攻击,简单点说,CSRG 攻击是利用用户的登录状态发起恶意请求。

跨域的解决方案:

  • JSONP:使用 script 标签向后台请求数据,但是只适用于get
  • CORS:是让服务端设置 Access-Control-Allow -Origin
  • 反向代理,搭建一个自己的服务器,让我的服务器请求数据,拿到数据之后再返回给我,因为跨域只存在于浏览器端

5. http和https 的区别

http和https 的区别

  • https 协议需要到ca申请证书,一般免费正数较少,因为需要一定费用
  • http 是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密的协议
  • http 和 https 使用的完全不同的连接方式,用的端口也不一样,前者是80,后者是443
  • http 的连接很简单,是无状态的,;HTTPS 协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络传输,比 http协议安全.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值