前端面试题干货总结(一)

1.什么是模块化开发?
模块化开发就是Js文件按照不同功能分离在不同文件中,按照不同需求加载引入

NodeJs中的模块:通常就是一个js或Json文件
angularjs中的模块:一系列配置和代码块的集合
react中的模块:将Js,html,css融合在一起具有某个功能的代码块

模块化开发的好处:高内聚低耦合,代码易于重用,后期易于维护

2.刚开始先要提到commonjs规范,nodejs就是根据commonjs规范编写的,
commonjs的模块输出:module.exports;文件导入:require()
但是commonjs是服务于服务器端的规范,它是同步加载的,放在浏览器端问题很大,
容易让用户因为网速问题加载文件慢而体验差

AMD和CMD解决的问题都是浏览器端的模块化开发,这有两个问题:
(1)多个js文件可能有依赖关系,被依赖的文件要在依赖文件之前被加载
(2)js加载的时候浏览器页面会停止渲染,文件加载越多,等待时间越长

为了能让模块文件能够异步加载,出现了AMD规范(异步模块定义),
AMD是在推广Requirejs过程中对模块定义的产出。
Requirejs的核心原理是用require(依赖文件数组,回调函数),采用异步方式加载模块,
模块的加载不影响它后面语句的执行;所有
依赖这个模块的语句,都定义在回调函数中,等待模块加载完成后执行;

与此同时:浏览器端模块化开发的另一种CMD(通用模块定义),
CMD是在推广sea.js过程中对模块定义的产出。


AMD和CMD的区别:
共同点:都是为了浏览器端的模块化开发
不同点:
(1)AMD推崇依赖前置,CMD推崇就近依赖
(2)对于依赖的模块:AMD是提前执行,CMD是延迟执行

AMD和CMD最大的区别是对依赖模块的执行时机不同!(注意不是加载时机或方式不同!)
两者都是异步加载模块,只不过AMD依赖前置,用户体验好!而CMD就近依赖,
用到哪个才require哪个,性能好了但是体验差了
AMD加载完模块后立即执行,且模块顺序不确定,但主逻辑一定在所有依赖加载完成后才执行
CMD加载完模块后不执行,遇到require才会执行!

-------------------------------------------------------------------------------------------

3.cookie和session的区别
session的运行依赖sessionID,但sessionID是在cookie中的

(1)cookie数据存放在用户本地,而session数据存放在服务器(
服务器自动生成session id来标示该数据)
(2)cookie数据不安全,容易被恶意使用,安全敏感的信息由session存储
(3)cookie数据大小有限制,不能超过4K

应用场景:免登陆cookie,购物车确认用户:session(http是无状态协议,
用户操作购物车服务器是无法判断谁操作的,这时候就需要session
来标示用户,而session又需要用session ID来标示,这就需要cookie了,
第一次创建session的时候,服务器端就会Http协议里告诉客户端
需要在cookie里记录一下sessionId,这样以后都能通过sessionID判断是谁了)
--如果用户禁用了cookie,就需要用url重写的技术了,即在
url问号后携带上id信息!

4.cookie和localStorage,sessionStorage的区别
共同点:都是同源的
不同点:
(1)存储大小不同:cookie的大小有限制,不得超过4K,而后两者要大很多
(2)数据有效期不同:cookie数据在过期时间之前都有效,localStorage数据永久有效,
sessionStorage数据在关闭浏览器页面时就失效
(3)作用域不同:cookie和localStorage在同源页面(不同标签页)之间是共享数据的
,而sessionStorage数据无法共享
(4)cookie数据始终在http请求中携带,即使不需要也会携带,浪费带宽

-------------------------------------------------------------------------------------------

5.icon-font字体图标的优缺点:
优点:(1)矢量图,无损缩放(2)体积小,与图片相比没有http请求,性能好
(3)css样式可修改
缺点:(1)不能完全符合设计稿(2)后期若改动成本太高
阿里巴巴矢量图库

利用icoMoon或者gulp也可以自动生成svg雪碧图,会生成svg文件,然后下载到电脑中,
修改svg文件里的fill属性就可改变图标颜色
svg文件的代码里有x和y属性,这就是background-position

6.rem移动端适配
rem是一个相对单位,相对于根元素的字体大小,em也是一个相对单位,
相对于父元素的字体大小

一般来说可以js进行rem适配,也可以css媒体查询动态控制html字体的fontSize

function rem(){
var width=window.innerWidth;
document.getElementsByTagName('html')[0].style.fontSize=width*(100/设计图宽度)+'px';
}
window.οnresize=rem;

css设置5rem,相当于500px


7.websocket
webscoket是h5的一种新的协议,它允许服务器端“主动”向客户端发送信息,
实现了客户端和服务器端双工通讯。

它弥补了http不支持长连接的缺点!所以它只需要一次客户端和服务器端的握手,
然后两者就可以互相通讯

websocket如何兼容低浏览器?
(1)Adobe flash socket
(2)基于长轮询的XHR

8、HTML5的离线储存怎么使用,工作原理能不能解释一下?

在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,
更新用户机器上的缓存文件。

原理:HTML5的离线存储是基于一个新建的.appcache文件的缓存机制(不是存储技术),
通过这个文件上的离线存储资源清单解析,
这些资源就会像cookie一样被存储了下来。之后当网络在处于离线状态下时,
浏览器会通过被离线存储的数据进行页面展示。

如何使用:

(1)页面头部像下面一样加入一个manifest的属性;
(2)在cache.manifest文件的编写离线存储的资源;
CACHEMANIFEST
#v0.11
CACHE:
js/app.js
css/style.css
NETWORK:
resourse/logo.png
FALLBACK:
//offline.html
(3)在离线状态时,操作window.applicationCache进行需求实现。

9、浏览器是怎么对HTML5的离线储存资源进行管理和加载的呢?

在线的情况下,浏览器发现html头部有manifest属性,它会请求manifest文件,
如果是第一次访问app,
那么浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储。
如果已经访问过app并且资源已经离线存储了,
那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的manifest文件与
旧的manifest文件,
如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件
中的资源并进行离线存储。
离线的情况下,浏览器就直接使用离线存储的资源。

10.iframe有什么缺点,怎么解决?
(1)会影响主页面的onload事件
(2)搜索引擎检索程序无法解读这种页面,不利于SEO;
(3)即使内容为空,加载也需要时间

解决方法:使用javascript动态创建iframe的src属性

11.label的作用是什么?怎么用的?
用来定义表单控件之间的关系,可自动获得焦点
< label >aaa < input type = ' checkbox ' ></ label >

12.如何用css将一张图片变为灰色,且将点击事件禁用,且鼠标为手指状

{
opacity:0.6;
pointer-events:none;
cursor:pointer;
}

13.页面可见性(Page Visibility)API有什么用处?
(1)通过VisibilityState的值来判断页面是否可见
(2)可以用于控制页面视频音频在离开页面时暂停,重回页面时开始
(3)可以计算在线时长

14.如何实现页面上一个圆形?

(1)
注意图片热区需要Img标签(包含src+usemap),map标签(包含name+id属性),
area标签(包含shape+coords+href+alt属性)
< img src = " 1.jpg " alt = " 图片热区 " usemap = ' li1 ' >
< map name = " li1 " id = ' li1 ' >
< area shape = " circle " coords = " 100,200,200 " href = "" alt = " 圆形 " >
< area shape = " rect " coords = " 50,50,100,100 " href = "" alt = " 四边形 " >
< area shape = " poly " coords = " 10,20,30,0,40,0,30,50 " href = "" alt = " 多边形 " >
</ map >
(2)svg
(3)border-radius:50%;


15.new操作符都干了什么?
(1)创建一个空对象,并用this引用该对象,继承了该函数的原型
(2)给this添加属性和方法
(3)隐式返回this

由代码来表示:
var obj={};
obj.__proto__=Obj.prototype;
Obj.call(obj);

16.什么是内存泄露?怎么会导致内存泄露?
(1)内存泄露指任何对象在不再需要或拥有后依然存在
简述垃圾回收机制--浏览器垃圾回收机制会定期检查每个对象的引用次数,
如果该对象引用次数为0,或者唯一引用是循环的,则回收该变量

导致内存泄露的原因:
(1)闭包
(2)两个对象互相引用时
(3)setTimeout第一个参数使用字符串而不是函数的时候

17.web应用有哪些从服务器端主动向客户端发送数据的方式?
(1)websocket协议
(2)SSE,服务器推送数据新方式
(3)Commet,基于http长连接的服务器推送技术

18.一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?
分为4个步骤:
(1)当发送一个URL请求时,不管这个URL是Web页面的URL还是Web页面上每个资源的URL,
浏览器都会开启一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查询。
这能使浏览器获得请求对应的IP地址。
(2)浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/IP连接。
该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在
浏览器和服务器之间传递。该握手首先由客户端尝试建立起通信,而后服务器应答
并接受客户端的请求,最后由客户端发出该请求已经被接受的报文。
(3)一旦TCP/IP连接建立,浏览器会通过该连接向远程服务器发送HTTP的GET请求。
远程服务器找到资源并使用HTTP响应返回该资源,值为200的HTTP响应状态表示一个
正确的响应。
(4)此时,Web服务器提供资源服务,客户端开始下载资源。
请求返回后,便进入了我们关注的前端模块;
简单来说,浏览器会解析HTML生成DOM Tree,其次会根据CSS生成CSS Rule Tree,
而javascript又可以根据DOM API操作DOM;

19.异步加载和延迟加载
1,异步加载的方案: 动态插入script标签;
2,通过ajax去获取js代码,然后通过eval执行;
3,script标签上添加defer或者async属性;
4,创建并插入iframe,让它异步执行js;
5,延迟加载:有些 js 代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才
需要的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警中心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥中心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值