十道初学前端你必须懂的题目

本篇文章将写出十道新人学前端必须懂的题目,十道题目不能涵盖初学前端的所有知识点,因此仅供各位看官自行查漏补缺。
另外,题目所附的答案仅为本人自己所答,若有错误和补充,欢迎指出和批评~

第 1 题

请写出一个符合 W3C 规范的 HTML 文件,要求

1.页面标题为「我的页面」
2.页面中引入了一个外部 CSS 文件,文件路径为 /style.css
3.页面中引入了另一个外部 CSS 文件,路径为 /print.css,该文件仅在打印时生效
4.页面中引入了另一个外部 CSS 文件,路径为 /mobile.css,该文件仅在设备宽度小于 500 像素时生效
5.页面中引入了一个外部 JS 文件,路径为 /main.js
6.页面中引入了一个外部 JS 文件,路径为 /gbk.js,文件编码为 GBK
7.页面中有一个 SVG 标签,SVG 里面有一个直径为 100 像素的圆圈,颜色随意
注意题目中的路径

第一题答案:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <meta charset="UTF-8">
    <link rel="stylesheet" href="./style.css">
    <link rel="stylesheet" href="./print.css" media="print">
    <link rel="stylesheet" href="./mobile.css" media="only (max-width: 500px)">
    <script src="./main.js"></script>
    <script src="./gbk.js" charset="GBK"></script>
    <title>我的页面</title>
</head>
<body>
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
        <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
    </svg>
</body>
</html>



第二题

2016年腾讯前端面试题
移动端是怎么做适配的?

回答要点:

  1. meta viewport
  2. 媒体查询
  3. 动态 rem 方案

第二题答案:

1.meta viewport

<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">

2.媒体查询

<style>
    @media (max-width:800px){
        /* 满足上面条件时会应用此处样式 */
    }
</style>

3.动态rem方案
利用动态rem来适配不同屏幕大小的移动端,来得页面整体缩放。
思路:rem —> html font-size=(通过JavaScript)page width
代码实现:

<script>
    var pageWidth=window.innerWidth
    document.write('<style>html{font-size:'+pageWidth+'px;}</style>')
 </script>

通过加入以上代码,即可使得1rem=html font-size=1 page width
从而在布局的时候使用rem来布局即可适配不同的移动端。


第三题

2017年腾讯前端实习面试题(二面)
用过CSS3吗? 实现圆角矩形和阴影怎么做?

第三题答案:

利用border-radius和box-shadow来实现,具体实现代码如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
  .boxtest{
    width:200px;
    text-align:center;
    border:2px solid red;
    border-radius:5px;
    box-shadow: 10px 10px 5px 0px rgba(0,0,0,0.75);
  }
  </style>
</head>
<body>
<div class="boxtest">
  圆角矩形和阴影测试
</div>
</body>
</html>



第四题

出处同上(一面二面都问了):
什么是闭包,闭包的用途是什么?

第四题答案:

"函数"和“函数内部能访问到的变量”(也叫环境)的总和,就是一个闭包。

var hi='hi'
!function sayHi(){
    console.log(hi)
}.call()

例如以上代码就是一个闭包,他由一个sayHi函数和函数范围外的变量hi组成的整体就叫闭包。
闭包的优点是可以从外部访问到函数内部的值,这种访问是间接的,因此他可以很好地隐藏这个变量,使他不能被轻易地更改。
例如:

function f1(){
  var n=999
  function f2(){
    return n
  }
        return f2
}
var result=f1.call()
result.call(); // 999

这里就是充分使用闭包函数f2的特性,使得能在外部间接访问到函数内的变量n,又能保证变量n不会在外部被改变,很好地隐藏了n。


第五题

出处同上:
call、apply、bind 的用法分别是什么?

第五题答案:

1.call
call的用处是用来调用一个函数,正常来说,JS(ES5)里面有四种函数调用形式:

func(p1, p2) 
obj.child.method(p1, p2)
func.call(context, p1, p2) 
func.apply(context, [argsArray])

而只有第三种和第四种调用方式才是函数的正常调用形式,其余两种都为语法糖。
用call来调用函数传入的第一个参数为this,可以在函数中通过使用this来取到它的值。
而除了第一个参数,后面传入的参数会被放入一个名为arguments的伪数组当中,可以通过使用伪数组arguments来取到后面传入的参数值。

2.apply
apply和call的用法类似,也是一种调用函数的正常形式,他与call一样,传入的第一个参数在函数中也能通过使用this而被调用。
不同之处是,apply的第二个参数为一个数组字面量或者数组对象,数组里面是所要传入的参数的集合。

func.call(context,p1,p2)
//等同于
func.apply(context,[p1,p2])

这个数组对象也可以通过使用arguments来取到,与call类似。

3.bind
call() 和apply()都是立马就调用了对应的函数,而 bind() 不会, bind() 会生成一个新的函数,bind() 函数的参数跟 call() 一致,第一个参数也是绑定 this 的值,后面接受传递给函数的不定参数。 bind() 生成的新函数返回后,可以随时调用。bind()函数也可以只绑定this,详情见下面实例:

var m = {   
    "x" : 1
};
function foo(y) {
    alert(this.x + y);
}
var foo1 = foo.bind(m, 5);
var foo2 = foo.bind(m)
foo1(10); //6
foo2(10); //11

这里值得再次强调和注意的是,与call()和apply()不同,bind()只是创建一个新的函数,并不会立即执行这个函数。bind()需要另外执行它。


第六题

出处同上:
请说出至少 8 个 HTTP 状态码,并描述各状态码的意义。
例如:
状态码 200 表示响应成功。

第六题答案:

学生的回答
1、状态码 200 表示请求已经成功,请求所希望的响应头或数据体将随此响应返回。
2、状态码 204 表示服务器成功处理了请求,没有返回任何内容。
3、状态码 301 表示被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。
4、状态码 302 表示要求客户端执行临时重定向,临时暂时性无法访问。
5、状态码 304 表示表示资源未被修改,和上次访问的内容一样,因为请求头指定的版本If-Modified-Since或If-None-Match。
6、状态码 403 表示服务器已经理解请求,但是拒绝执行它。
7、状态码 404 表示请求失败,请求所希望得到的资源未被在服务器上发现,但允许用户的后续请求。
8、状态码 500 表示通用错误消息,服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。
9、状态码 502 表示作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
10、状态码 503 表示由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是暂时的,并且将在一段时间以后恢复。


第七题

出处同上:
请写出一个 HTTP post 请求的内容,包括四部分。
其中
第四部分的内容是 username=ff&password=123
第二部分必须含有 Content-Type 字段
请求的路径为 /path

第七题答案:

POST /path HTTP/1.1
Host: baidu.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Content-Length: 24

username=ff&password=123



第八题

请说出至少三种排序的思路,这三种排序的时间复杂度分别为

1.O(n*n)
2.O(n log2 n)
3.O(n + max)

第八题答案:

1.冒泡排序,思路:假设有一个length长度为n的,数组成员不为空的数组,首先会对数组进行一次遍历,在遍历时把最大值通过相邻数组成员的两两比较和交换数值来选出,并把这个最大值移至数组末端,同理,接下来进行(n-1)次遍历,遍历成员的个数为(n-1),每次遍历都选出其中的最大值并移至遍历结束的末端,通过n次遍历,便可得到一个从小到大排列的数组,输出该数组即可,这种排序方法为冒泡排序,时间复杂度为O(n*n)。

2.快速排序,思路:快速排序使用的是二分法的思想,假设有一个length长度为n的,数组成员不为空的数组,快速排序会先选择第一个数组成员的值,假设他为x,然后往后遍历,把小于x值的数值和大于x值的数值分开两边,然后把这个x值插入在这分界线上,从此,x值排序后的位置就被确定了且不会被改变了,然后对改变位置之后的x值的上下两边的数组成员进行相同的操作,即把代码分区块地进行排序,直至最后得到一个从小到大排列的数组,即排序完成,输出该数组即可,这种排序方法称为快速排序,时间复杂度为O(n log2 n)。

3.计数排序,思路:假设有一个length长度为n的,数组成员不为空的数组,首先我们会另外设置一个hash数组,然后hash数组的成员的个数的值为待排序数组的成员里的最大值,遍历待排序的数组,然后把每个遍历到的值所对应hash数组里的成员的值加一,即如果遍历到的值为2,那么hash[2]=hash[2]+1,如果该hash数组的成员里面的值原本为undefined,则将其变成1,等到待排序数组遍历完毕之后,遍历hash数组,把数组成员中value不是undefined的key值按顺序输出,输出个数为value的值,例如hash[3]=2则输出2个3,输出的序列则为排序之后的序列,这种排序称为计数排序,时间复杂度为O(n + max)。


第九题

著名前端面试题:
一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?

这一题是在挖掘你的知识边界,所以你知道多少就要答多少。

可以先查阅一些资料再查,但是不要把自己不懂的东西放在答案里,面试官会追问的。

第九题答案(答案缺少本地有缓存的情况,之后补充):

一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了:
1.浏览器补全URL地址
在输入完URL之后,浏览器会自动检查该地址是否完整,例如是否有添加https协议,若发现不完整,会自动补全。

2.向DNS查询IP地址
每个域名都对应一个或多个提供相同服务服务器的 IP 地址,只有知道服务器 IP 地址才能建立连接,所以需要通过 DNS 把域名解析成一个 IP 地址。
3.得到IP地址后,建立连接,进行三次握手
即每次建立连接前,客户端和服务端都要先进行三次对话才开始正式传输内容,三次对话的内容大概是这样的:
(1)客户端:我要连接你了,可以吗?
(2)服务端:嗯,我准备好了,连接我吧。
(3)客户端:那我连接你咯。

4.向该IP地址发送请求
客户端会通过IP地址向服务端发送一个GET请求,服务端会在80端口接收到这个请求并作出响应。

5.服务器在80端口接收请求,传送相应内容至浏览器

6.浏览器解析内容,并继续搜索页面内是否有请求,有的话继续通过IP地址发送至服务器

7.接受完从服务器发送至浏览器的内容之后,浏览器渲染网页,把网页内容呈献给用户

8.客户端与服务端断开连接,进行四次挥手
即每次断开连接前,客户端和服务端都要先进行四次对话才正式断开连接,四次对话的内容大概是这样的:
(1)主机向服务器发送一个断开连接的请求。(不早了,我该走了)
(2)服务器接到请求后发送确认收到请求的信号。(知道了)
(3)服务器向主机发送断开通知(我也该走了)。
(4)主机接到断开通知后断开连接并反馈一个确认信号(嗯,好的),服务器收到确认信号后断开连接。


第十题

著名面试题:
如何实现数组去重?
假设有数组 array = [1,5,2,3,4,2,3,1,3,4]
你要写一个函数 unique,使得
unique(array) 的值为 [1,5,2,3,4]
也就是把重复的值都去掉,只保留不重复的值。
要求:
不要做多重循环,只能遍历一次
请给出两种方案,一种能在 ES 5 环境中运行,一种能在 ES 6 环境中运行(提示 ES 6 环境多了一个 Set 对象)

第十题答案:

第一种:

array = [1,5,2,3,4,2,3,1,3,4]
function unique(array){
    let n = []
    for(let i = 0;i < array.length; i++){
        if(n.indexOf(array[i]) == -1) {
            n.push(array[i])
        }
    }
    return n
}
console.log(unique(array))

第二种:

var array = [1,5,2,3,4,2,3,1,3,4]
function unique(arr){
    return Array.from(new Set(arr))
}
console.log(unique(array))




本教程版权归宣泽彬所有,转载须说明来源

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354