牛客_京东前端开发试卷题(仅个人学习记录)

1.模式串的长度是m,主串的长度是n(m<n),使用KMP算法匹配的时间复杂度是

KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。
next[1]=0;next[j]=前j-1个数据首尾重合部分+1
KMP算法的时间复杂度O(m+n),朴素字符串匹配(暴力匹配)时间复杂度为O(mn)。
参考字符串匹配KMP算法及求next值算法

2.在对问题的解空间树进行搜索的方法中,一个活点有多次机会成为活结点的是

回溯法:深度优先搜索
分支限定法:广度优先搜索;1)FIFO;2)LIFO;3)优先队列式搜索
分支限界法思想:以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。
分支限界法中,每一个活结点只有一次机会成为扩展结点,活结点一旦成为扩展结点,就一次性产生其所有儿子结点,其中导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中,然后从活结点表中取下一结点成为当前扩展结点
重复上述结点扩展过程,直至到找到所需的解或活结点表为空时为止。从中可以看出,广度优先且不满足的被舍弃,满足的找其儿子节点,所以其不可能再次成为活结点。

3.在软件开发过程中,我们采用不同的过程模型,关于增量模型的描述:

一、边做边改模型(Build-and-Fix Model)
1.模型的表现
在这个模型中,开发人员拿到项目立即根据需求编写程序,调试通过后生成软件的第一个版本。在提供给用户使用后,如果程序出现错误,或者用户提出新的要求,开发人员重新修改代码,直到用户满意为止。
2.缺点
这是一种类似作坊的开发方式,对编写几百行的小程序来说还不错,但这种方法对任何规模的开发来说都是不能令人满意的,其主要问题在于:
缺少规划和设计环节,软件的结构随着不断的修改越来越糟,导致无法继续修改;
忽略需求环节,给软件开发带来很大的风险;
没有考虑测试和程序的可维护性,也没有任何文档,软件的维护十分困难。
二、瀑布模型(Waterfall Model)
1.表现
将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
在瀑布模型中,软件开发的各项活动严格按照线性方式进行,当前活动接受上一项活动的工作结果,实时完成所需的工作内容。当前活动的工作结果需要进行验证,如果验证通过,则该结果作为下一项活动的输入,继续进行下一项活动,否则返回修改。
2.缺点
瀑布模型强调文档的作用,并要求每个阶段都要仔细验证。但是,这种模型的线性过程太理想化,已不再适合现代的软件开发模式,几乎被业界抛弃,其主要问题在于:
各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;
由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;
早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。
三、快速原型模型(Rapid Prototype Model)
1.表现
快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。
2.特点
快速原型方法可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显著的效果。快速原型的关键在于尽可能快速地建造出软件原型,一旦确定了客户的真正需求,所建造的原型将被丢弃。因此,原型系统的内部结构并不重要,重要的是必须迅速建立原型,随之迅速修改原型,以反映客户的需求。
四、增量模型&演化模型(Incremental Model)
把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。具备回溯性。
1.表现和优点
与建造大厦相同,软件也是一步一步建造起来的。在增量模型中,软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成。
增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。整个产品被分解成若干个构件,开发人员逐个构件地交付产品,这样做的好处是软件开发可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险。
在使用增量模型时,第一个增量往往是实现基本需求的核心产品。核心产品交付用户使用后,经过评价形成下一个增量的开发计划,它包括对核心产品的修改和一些新功能的发布。这个过程在每个增量发布后不断重复,直到产生最终的完善产品。
例如,使用增量模型开发字处理软件。可以考虑,第一个增量发布基本的文件管理、编辑和文档生成功能,第二个增量发布更加完善的编辑和文档生成功能,第三个增量实现拼写和文法检查功能,第四个增量完成高级的页面布局功能。
2.缺点
但是,增量模型也存在以下缺陷:
由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。
在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。
五、螺旋模型(Spiral Model)
1.表现
它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。
螺旋模型刚开始规模很小,当项目被定义得更好、更稳定时,逐渐展开。
“螺旋模型”的核心就在于您不需要在刚开始的时候就把所有事情都定义的清清楚楚。您轻松上阵,定义最重要的功能,实现它,然后听取客户的意见,之后再进入到下一个阶段。如此不断轮回重复,直到得到您满意的最终产品。
(1)制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件;
(2)风险分析:分析评估所选方案,考虑如何识别和消除风险;
(3)实施工程:实施软件开发和验证;
(4)客户评估:评价开发工作,提出修正建议,制定下一步计划。
螺旋模型很大程度上是一种风险驱动的方法体系,因为在每个阶段之前及经常发生的循环之前,都必须首先进行风险评估。
六、喷泉模型(fountain model)
1.表现
喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。
喷泉模型与传统的结构化生存期比较,具有更多的增量和迭代性质,生存期的各个阶段可以相互重叠和多次反复,而且在项目的整个生存期中还可以嵌入子生存期。就像水喷上去又可以落下来,可以落在中间,也可以落在最底部。
2.缺点
由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。

4.用计算机解决问题的一般步骤为:分析问题;设计算法;编写程序;调试程序

5.栈的特点是先进后出。栈底至栈顶依次存放元素A、B、C、D, 在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是:

EDCBA;DBCAE;DECBA;DCEBA;DCBEA;DCBAE

6. 用俩个栈模拟实现一个队列,如果栈的容量分别是O和P(O>P),那么模拟实现的队列最大容量是

用两个栈实现一个队列&用两个队列实现一个栈

栈VS队列
1.区别与联系
相同点:(1)栈和队列都是控制访问点的线性表;(2)栈和队列都是允许在端点处进行数据的插入和删除的数据结构;
队列是先进先出的线性表,只允许在端点进行操作运算,队头删除,队尾插入
不同点:(1)栈遵循“后进先出(LIFO)”的原则,即只能在该线性表的一头进行数据的插入和删除,该位置称为“栈顶”,而另外一头称为“栈底”;根据该特性,实现栈时用顺序表比较好;
(2)队列遵循“先进先出(FIFO)”的原则,即只能在队列的尾部插入元素,头部删除元素。根据该特性,在实现队列时用链表比较好
2.应用场景
栈:括号匹配;用于计算后缀表达式等数据结构中
队列:应用于类似现实生活中一些排队问题,例如Linux中我们学习进程间通信的时候,有一种通信方式就是“消息队列”等。

7.网卡实现的主要功能:物理层与数据链路层的功能

8.JavaScript实现继承的方式:原型式继承、构造函数继承、组合继承、原型链继承、寄生式继承、寄生组合式继承
参考JavaScript实现继承的6种方式

9.websocket的特性 参考HTML5 WebSocket

WebSocket 是基于 TCP 的协议,WebSocket 只需要服务端和客户端一次握手,就可以自由进行数据传送和接收,允许服务端主动发送数据,不需要使用轮询的方式。另外,WebSocket 客户端基于事件的编程模型与 node 类似

10.ES6

ES6即ECMAScript 6,是 JavaScript 的下一个版本标准。
ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效, var是在全局范围内有效。
let只能声明一次变量, var可以重复声明多次变量;for循环计数器很适合用let
const声明一个只读的常量。一旦声明,常量的值就不能改变。const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。
ES6有六种申明变量的方法:ES5 只有两种声明变量的方法:var命令和function命令。ES6 除了添加letconst命令,此外还有另外两种声明变量的方法:import命令和class命令。
ES6 提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成 Set 数据结构。

11.setTimeout与console.log之间的执行先后顺序

页面中所有由setTimeout定义的操作,都将放在同一个队列中依次执行。而这个队列的执行时间需要等到函数调用栈执行完毕后才会执行,也就是等待所有的可执行代码执行完毕,才会轮到setTimeout执行其内部操作,并且按照其时延时间长短顺序执行代码!
参考settimeout(function(){console.log(i)},0);
setTimeout与console.log之间执行先后顺序

1.	setTimeout(function(){
2.	        console.log(2);
3.   },0);
4.	 console.log(1);
5.	 //输出顺序:1,2
for(let i=0;i<2;i++){ 
setTimeout(function(){ 
console.log(i) 
},100 
); 
} 
for(var i=0;i<2;i++){ 
setTimeout(function(){ 
console.log(i) 
},100 
); 
}

问:控制台打印的结果是?

12.iframe标签
iframe标签用法详解

局限:
1、创建比一般的 DOM 元素慢了 1-2 个数量级
iframe 的创建比其它包括 scripts 和 css 的 DOM 元素的创建慢了 1-2 个数量级,使用 iframe 的页面一般不会包含太多 iframe,所以创建 DOM 节点所花费的时间不会占很大的比重。但带来一些其它的问题:onload 事件以及连接池(connection pool)
2、阻塞页面加载
及时触发 window 的 onload 事件是非常重要的。onload 事件触发使浏览器的 “忙” 指示器停止,告诉用户当前网页已经加载完毕。当 onload 事件加载延迟后,它给用户的感觉就是这个网页非常慢。
window 的 onload 事件需要在所有 iframe 加载完毕后(包含里面的元素)才会触发。在 Safari 和 Chrome 里,通过 JavaScript 动态设置 iframe 的 SRC 可以避免这种阻塞情况
3、唯一的连接池
浏览器只能开少量的连接到 web 服务器。比较老的浏览器,包含 Internet Explorer 6 & 7 和 Firefox 2,只能对一个域名(hostname)同时打开两个连接。这个数量的限制在新版本的浏览器中有所提高。Safari 3+ 和 Opera 9+ 可同时对一个域名打开 4 个连接,Chrome 1+, IE 8 以及 Firefox 3 可以同时打开 6 个
绝大部分浏览器,主页面和其中的 iframe 是共享这些连接的。这意味着 iframe 在加载资源时可能用光了所有的可用连接,从而阻塞了主页面资源的加载。如果 iframe 中的内容比主页面的内容更重要,这当然是很好的。但通常情况下,iframe 里的内容是没有主页面的内容重要的。这时 iframe 中用光了可用的连接就是不值得的了。一种解决办法是,在主页面上重要的元素加载完毕后,再动态设置 iframe 的 SRC。
4、不利于 SEO
搜索引擎的检索程序无法解读 iframe。另外,iframe 本身不是动态语言,样式和脚本都需要额外导入。综上,iframe 应谨慎使用。

13.HTTP状态码中500表示 HTTP状态码大全
TCP需要___握手,___挥手 (参考TCP的三次握手与四次挥手

握手

A:喂,我要跟你建立连接,SYN=1。我给你发送的数据从x开始编号,seq=x
B:喂,我也可以和你建立连接,SYN=1。我收到了你的消息,告诉你一声,ACK=1。我的数据从y开始编号,seq=y。我希望你再给我发x+1的数据,ack=x+1
A:我也收到了你的消息,告诉你一声,ACK=1。我给你发送x+1的数据,seq=x+1。我期待你给我发送y+1的数据,ack=y+1。咱们开始唠吧。

挥手

A:我数据发送完了,准备释放连接,FIN=1;这条数据包的编号是u,seq=u
B:我接收到你的数据了,确认一下,ACK=1;这条数据包的编号是v,seq=v;你下次给我发的数据包需要是u+1,ack=u+1
接着B向上层进程通知,并且进行等待操作,防止A继续发消息
B:我同意释放连接,FIN=1;确认收到消息,ACK=1;这条数据包的编号是w,seq=w;你下次给我发的数据包需要是u+1,ack=u+1
A:接收到你的消息,确认一下,ACK=1;这条数据包的编号是u+1,seq=u+1;你下次给我发的数据包需要是w+1,ack=w+1

ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。

域名系统DNS采用的是____传输协议
在这里插入图片描述
14.HTTP协议
参考HTTP详解

HTTP协议工作在TCP/IP体系的应用层

HTTP是无连接的:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
HTTP是媒体独立的:意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
HTTP是无状态的:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。

15.要求匹配以下16进制颜色值,正则表达式可以为

#ffbbad
#Fc01DF
#FFF
#ffE

按照解释来说,十六进制颜色值可以简写,因此用来表示颜色值的十六进制可以为6位,也可以为简写的3位。题目中四个颜色值,两个6位,两个3位。ABCD四个选项都考虑了这个问题,因此每个选项都用|分隔成两部分,一部分为{3},一部分为{6}。题目中前两个6位的颜色值,当中出现了数字、小写字母、大写字母,因此表达式中{6}的一端需要包含这三部分才可以;题目中后两个3位的颜色值,当中出现了小写字母、大写字母,因此表达式中{3}的一端需要包含这两部分才可以。四个选项只有B中,在|的前后两端都包含了三部分,而其他选项都在前端或后端出现了缺失的部分。

16.从字符串 const str = ‘qwbewrbbeqqbbbweebbbbqee’;中能得到结果 [“b”, “bb”, “bbb”, “bbbb”] 以下错误语句是?
在这里插入图片描述

+表示出现至少1次b,1次或多次
*表示可以出现0次b,也可以出现一次或多次,0次或多次
{n,m}表示最少出现n次b,最多出现m次b

17.DOM,文件对象模型,提供了树状结构的表示方法,以下描述正确

知识点:
DOM树中总共分为如下几种节点格式:Element类型(元素节点)、Text类型(文本节点)、Comment类型(注释节点)、Document类型(document节点)。
document可以说是一种节点格式,但节点树的根节点也叫document。
所有的HTML elements(元素节点,其实就是HTML标签)都是element。
comments属于注释节点。
参考DOM及DOM树

18.DOM事件流包括几个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段
参考DOM事件流

19.HTML DOM的event事件:onclick();onblur();onfocus()
参考HTML DOM event

20.创建带有id属性的DOM元素有什么副作用

创建的id会成为全局变量的属性,所以会有使得全局变量带有重复属性的风险。因此可能会创建同名的全局变量。
误区:会造成DOM树分支过多;会增加内存负担。

21.在HTML 表格里,表格行(row)的标签:

table标签定义 HTML 表格。
一个简单的 HTML 表格包括 table 元素,一个或多个 tr、th 以及 td 元素。tr 元素定义表格行,th 元素定义表头,td 元素定义表格单元。

22.页面导入样式时,使用link和@import有什么区别?

(1)来源:link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS;
(2)顺序:link是页面加载时同时执行的,而@import引用的CSS是在页面加载完之后,才会执行的(所以容易导致样式闪烁,即开始页面没有样式,突然会闪烁一下,然后就有了样式)
(3)import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题;
(4)js控制的差别:当页面需要使用javascript控制DOM改变样式的时候,只能使用link标签,因为@import不是js操作DOM可以控制的,也不支持js操作DOM来控制。

23.在新窗口打开链接:

target="_blank" 新窗口打开

<a href="链接的页面" target="_blank">新窗口打开</a>

target="_self" 当前窗口打开 或者不需要加, 默认是同一窗口打开

<a href="链接的页面" target="_self">当前窗口打开</a>

24.问123的颜色

<style>
.main{
color:blue
}
span{
color:green
}
</style>
<div style="color:red !important"
class=""main"">
<span>123</span>
</div>

优先级顺序:
!important>行内样式>id选择器>类选择器>标签选择器>通配符>继承
在这道题目:
对于span有两种种影响样式的方式,
(1)继承自父div的color
而对于color而言,它受到类选择器和一个内联样式的影响,并且在这个内联样式中又有一个!important,最为最高级影响 (!important>内联>类选择器),这就使得div的颜色为red,而作为其子元素的span也应该继承自父元素的color
(2)标签选择器span
但比较这两种影响,(1)作为样式继承的优先级为0,(2)作为标签选择器的优先级为1,所以(2)的优先级以微弱优势高于(1),所以最终采用标签选择器定义的green

25.参考CSS可以和不可以继承的属性

26.手动写动画最小时间间隔

多数显示器默认频率是60Hz,即1秒刷新60次,所以理论上最小间隔为1/60*1000ms = 16.7ms

27.如何产生带有正方形的项目的列表

list-style-type:square

28.linux下文件目录的作用:

/bin 存放普通用户可以使用的指令(可以直接被执行)。
/usr 这个目录中包含了命令库文件和在通常操作中不会修改的文件,其地位类似Windows上面的”Program Files”目录(安装程序的时候,默认就是安装在此文件内部某个子文件夹内。输入命令后系统默认执行/usr/bin下的程序。
/etc 全局的配置文件存放目录。存放系统和软件的配置
/boot 引导程序,内核等存放的目录。
参考Linux文件目录

编程题1:
拉齐有一个01序列,他可以对这个序列进行任意多次变换,每次变换都是把序列的最后若干个元素放到最前面,例如:010011,将最后3个元素011放到最前面,序列变为011010。所有变换结束后,拉齐需要挑出一个全为1的连续区间,要求最大化区间长度。

编程题2:
已知一个奇怪的队列,这个队列中有n个数,初始状态时,顺序是1,2,3,4,…n,是1-n按顺序排列。这个队列只支持一种操作,就是把队列中的第i号元素提前到队首(1<i<=n),如有4个元素,初始为1,2,3,4,可以将3提前到队首,得到3,1,2,4 。 现在给出一个经过若干次操作之后的序列,请你找出这个序列至少是由原序列操作了多少次得到的。

发布了8 篇原创文章 · 获赞 1 · 访问量 238

猜你喜欢

转载自blog.csdn.net/weixin_41614466/article/details/105241827