2019面试题总结

HTML5面试题

一、  Doctype的作用? 严格模式和混杂模式的区分,以及如何触发这2种模式?

声明位于文档中的最前面,处于 标签之前。告知浏览器的解析器,用什么文档类型 规范来解析这个文档。

DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。

 

严格模式就是浏览器根据web标准去解析页面,是一种要求严格的DTD(文档类型定义),不允许使用任何表现层的语法,

混杂模式是一种向后兼容的解析方法。

触发标准模式或者说严格模式很简单,就是Html前申明正确的DTD,出发混杂模式可以在html文档开始不声明DTD,或者在DOCTYPE前加入XML声明

二、  请写出至少20个HTML5标签

 

 

常使用场景:

(1)   反向代理

(2)   网站负载均衡

详细参见:http://www.cnblogs.com/hobinly/p/6023883.html

移动端布局与适配

一百一十一、   iscroll安卓低版本卡顿,如何解决?

方案一:iScroll v5.1.3 设置momentum: true

方案二:配置probeType

方案三:开启硬价加速:给scroll元素增加css样式:一webkit一transform:translate3d(0,0,0);

方案四:判断手机版系统版本,应用原生CSS: overflow:scroll一y

一百一十二、   移动布局自适应不同屏幕的几种方式

(1)   响应式布局

(2)   100%布局(弹性布局)

(3)   等比缩放布局(rem)

一百一十三、   请说下移动端常见的适配不同屏幕大小的方法?

响应式布局

简而言之,就是页面元素的位置随着屏幕尺寸的变化而变化,通常会用百分比来定位,而在设计上需要预留一些可被“压缩”的空间。

Cover布局

就跟background一size的cover属性一样,保持页面的宽高比,取宽或高之中的较小者占满屏幕,超出的内容会被隐藏。此布局适用于主要内容集中在中部,边沿无重要内容的设计。

Contain布局

同样,也跟background一size的contain属性那样,保持页面的宽高比,取宽或高之中的较大者占满屏幕,不足的部分会用背景填充。个人比较推荐用这种方式,但在设计上需要背景为单色,或者是可平铺的背景。

一百一十四、   你们做移动端平时在什么浏览器上测试?

Chrome,Safari,微信X5, UC,其他手机自带浏览器

一百一十五、   说说移动端是如何调试的?

移动端调试:

(1)   模拟手机调试

(2)   真机调试之android手机+Chrome

(3)   真机调试之 iphone + safari ⑷UC浏览器

(1)   微信内置浏览器调试

(2)   debuggap

(3)   抓包

详细参考:https://segmentfault.eom/a/1190000005964730

一百一十六、   ICONFONT使用及其利与弊?

把一些零散的icon做成字体。我们调用文字的时候,渲染出来的就是icon图像,这样的显示就是iconfont(字体图标)

好处:

  1. iconfont图像放大后,不会失真。
  2. iconfont节省流量
  3. iconfont在颜色变幻方面很简单

      缺点:

  1. iconfont不能支持一个图像里面混入多重颜色
  2. iconfont的使用没有使用图片那么直接,简单。

详细参见:https://segmentfault.com/a/1190000005904616? ea=953657

一百一十七、   说说移动端Web分辨率

从以下几个方面做答:

(1)   pc到移动,渲染的变迁

(2)   可以更改的布局宽度

(3)   再次变迁的像素

(4)   又一次变迁

(5)   是时候说说安卓了

详细参见:https://segmentfault.com/a/1190000005884985

性能和效率

一百一十八、   你平时如何评测你写的前端代码的性能和效率。

Chrome DevTools的Timeline:是用来排查应用性能瓶颈的最佳工具。

Chrome DevTools的Audits:对页面性能进行检测,根据测试的结果进行优化。

第三方工具Yslow。

详细参见:

http://www.cnblogs.com/一simon/p/5883336.html

http://blog.csdn.net/ivan0609/artide/details/45508365

http://www.wtoutiao.com/p/1305TZW.html

一百一十九、   如何优化页面,加快页面的加载速度(至少5条)

(1)   优化图片资源的格式和大小

(2)   开启网络压缩

(3)   使用浏览器缓存

(4)   减少重定向请求

(5)   使用CDN存储静态资源

(6)   减少DNS查询次数

(7)   压缩css和js内容

详细参见:http://www.mahaixiang.cn/wyzz/1589.html

一百二十、 怎么保证多人开发进行内存泄漏的检查(内存分析 工具)

1)     使用xcode里面的Analyze进行静态分析

build setting ----》 automa ----》 mrc环境

product ----》 analyze ----》command + R

2)     为避免不必要的麻烦,多人开发的时候尽量使用 ARC

内存泄露:

参考:http://blog.csdn.net/panda_bear/article/details/8009421

一百二十一、   前后端性能如何调优?

1.     减少http请求数

2.     使用内容分布式网络

3.   给头部添加一个失效期或者Cache一Control

4.     Gzip压缩组件

5.     把样式表放在前面

6.     把脚本放在最后

7.     不使用CSS表达式

8.     使用外部的JavaScript和CSS

9.     减少DNS的查询

10. 缩小JavaScript和CSS

参考:http://blog.csdn.net/sonta/article/details/44454787

一百二十二、   浏览器http请求过多怎么解决?

(1)   合并JS、CSS文件

(2)   合并图片css sprite

(3)   使用 Image maps

(4)   data嵌入图片:如base64

(5)   使用CDN,减少http请求头

Web安全

一百二十三、   你所了解到的Web攻击技术

(1)   XSS攻击

(2)   CSRF攻击

(3)   网络劫持攻击

(4)   控制台注入代码

(5)   钓鱼

详细参见:http://blog.csdn.net/fengyinchao/article/details/52303118

 

一百二十四、   如何防止XSS攻击?

(1)   将前端输出数据都进行转义

(2)   将输出的字符串中的\反斜杠进行转义

(3)   从url中获取的信息,防止方法是由后端获取,在前端转义后再行输出

(4)   使用cookie的HttpOnly属性,保护好cookie

1.过滤输入  2.转义输出

详细参见:http://blog.csdn.net/fengyinchao/article/details/52303118

一百二十五、   项目中有没有用过加密,哪种加密算法?

项目中没有用过,但我了解几个加密算法:

(1)   RSA加密

(2)   MD5加密

(3)   SHA256加密

一百二十六、   聊一聊网页的分段传输与渲染

从下面几个方面说:

(1)   CHUNKED编码

(2)   BIGPIPE

(3)   分段传输与bigpipe适用场景

详细参见:https://segmentfault.com/a/1190000005989601 ? ea=984496

一百二十七、   百度移动端首页秒开是如何做到的?

从几个方面优化:

(1)   静态文件放置

(2)   缓存

(3)   外链

(4)   缓存DOM

(5)   使用 iconfont

(6)   卡片的异步加载与缓存

(7)   不在首屏的就要异步化

(8)   少量静态文件的域名

详细参见:https://segmentfault.com/a/1190000005882953

 

一百二十八、   前端速度统计(性能统计)如何做?

回答下面的两个问题:

(1)   网站都有哪些指标?

(2)   如何统计自己网站的这些指标?

详细参见:https://segmentfault.eom/a/1190000005869953

架构

一百二十九、   如果让你来制作一个访问量很高的大型网站,你会如何来管理所有css、js文件、图片?

(1)   遵循自定的一套CSS,JS和图片文件和文件夹命名规范

(2)   依托采用的前端工程化工具,依照工具脚手架规范(gulp, webpack, grunt, yeoman)

(3)   依据采用的框架规范(Vue, React, jQuery)

一百三十、 如果没有框架、怎么搭建你的项目

应用原生JS自己尝试搭建一个MVC架构:

(1)基本模块

common:公共的一组件,下面的各模块都会用到

config:配置模块,解决框架的配置问题

startup:启动模块,解决框架和Servlet如何进行整合的问题

plugin:插件模块,插件机制的实现,提供IPlugin的抽象实现

routing:路由模块,解决请求路径的解析问题,提供了 IRoute的抽象实现和基本实现

controller:控制器模块,解决的是如何产生控制器

model:视图模型模块,解决的是如何绑定方法的参数

action: action模块,解决的是如何调用方法以及方法返回的结果,提供了IActionResult的 抽象实现和基本实现

view:视图模块,解决的是各种视图引擎和框架的适配

filter:过滤器模块,解决是执行Action,返回IActionResult前后的AOP功能,提供了 IFilter 的抽象实现以及基本实现

扩展模块filters:一些IFilter 的实现

results :―些IActionResult 的实现

routes :―些IRoute 的实现

plugins:—些 IPlugin 的实现

 

 

 

一百三十一、   在选择框架的时候要从哪方面入手

影响团队技术选型有很多因素,如技术组成,新技术,新框架,语言及发布等。为了更好的 考量不同的因素,需要列出重要的象限,如开发效率、团队喜好,依次来决定哪个框架更适 合当前的团队和项目。上线时间影响框架选择,不要盲目替换现有框架。

(1)   jQuery

项目功能比较简单。并不需要做成一个单页面应用,就不需要MV*框架。项目是一个遗留 系统。与其使用其他框架来替换,不如留着以后重写项目。

(2)   AngularJS

当我们在制作一个应用,它对性能要求不是很高的时候,那么我们应该选择开发速度更快的 技术栈AngularJS,她拥有混合开发能力的ionic框架。对于复杂的前端应用来说,基于 Angular.js应用的运行效率,仍然有大量地改进空间。Angular2需要学习新的语言,需慎重 选择。

(3)   React

选择React有两个原因,一是通过Virtual DOM提高运行效率,二是通过组件化提高开发效 率。大型项目首选。选择React还有_个原因是:React Native、React VR等等,可以让 React运行在不同的平台之上。我们还能通过React轻松编写出原生应用,还有VR应用。

令人遗憾的是React只是一个View层,它是为了优化DOM的操作而诞生的。为了完成一 个完整的应用,我们还需要路由库、执行单向流库、web AP丨调用库、测试库、依赖管理库 等等,为了完整搭建出一个完整的React项目,我们还需要做大量的额外工作。

(4)   Vue.js

对于使用Vue.js的开发者来说,我们仍然可以使用熟悉的HTML和CSS来编写代码。并 且,Vue.js也使用了 Virtual D〇M、Reactive及组件化的思想,可以让我们集中精力于编写 应用,而不是应用的性能。

对于没有Angular和React经验的团队,并且规模不大的前端项目来说,Vue.js是一个非常 好的选择。

详细参见:https://zhuanlan.zhihu.com/p/25194137

一百三十二、   聊一聊前端模板与渲染

(1)   页面级的渲染,后端模板

如smarty,这种方式的特点是展示数据快,直接后端拼装好数据与模板,展现到用户面前, 对SEO友好。

(2)   异步的请求与新增模板,前端模板

如Mustache, ArtTemplate,前端解析模板的引擎的语法,与后端解析模板引擎语法一致。 这样就达到了一份HTML前后端一起使用的效果。

详细参见:https://segmentfault.com/a/1190000005916423

 

混合开发

一百三十三、   UIWebView和JavaScript之间是怎么交互的?

UlWebView是i〇S SDK中渲染网面的控件,在显示网页的时候,我们可以hack网页 然后显示想显示的内容。其中就要用至JavaScript的知识,而UlWebView与javascript交互的 方法就是 stringByEvaluatingJavaScriptFromString:

有了这个方法我们可以通过objc调用javascript,可以注入javascript。

UIWebView是iOS SDK中渲染网面的控件,在显示网页的时候,我们可以hack网页 然后显示想显示的内容。其中就要用至JavaScript的知识,而UIWebView与javascript交互的 方法就是stringByEvaluatingJavaScriptFromString,有了这个方法我们可以通过objc调用 javascript,可以注入 javascript

Js调用〇C方法原理就是利用UIWebView重定向请求,传一些命令到我们的 UIWebView,在UIWebView的delegate的方法中接收这些命令,并根据命令执行相应的objc 方法。这样就相当于在javascript中调用objc的方法。

在android中,我们有固有组件webview,经过设置可以让它支持我们的js的渲染,然 后在代码中设置(WebViewClient/WebChromeClient)让应用跳转页面时在本webview中跳 转,通过webview.loadurl (String str)方法可以在需要的地方加载我们前端的页面或者调用 前端所定义的方法(wv.loadUrl("javascript:sendDataToAndroid('我是来自js的呦,你看到了 吗')");),我们再通过JavascriptInterface接口设置我们前端和android通讯的标识,

wv.addJavascriptInterface(new MJavascriptInterface(getApplicationContext()), "WebViewFunc");

这样前端就可以在页面上调用我们的方法了,funl方法是在android中定义的 Window.WebViewFunc.fun1 ();

总之,前端和android或者ios进行结合开发,我们称之为混合开发,原理就是在原生 的开发语言中,我们提供了一个组件webview,这个组件就是我们的原生语言的浏览器,但 是我们得自行设置让其能够完美支持我们的应用,需要设置对应的标识,然后连接起来,我 们称之为 JavascriptInterfac。

一百三十四、   混合开发桥接api是怎么调用的,需要引入类库嘛? 调用的对象是什么?

Hybrid框架结构

HyBrid App = H5 App + Native 框架

H5App用来实现功能逻辑和页面渲染 Native框架提供WebView和设备接口供H5调用

方案一重混合应用,在开发原生应用的基础上,嵌入WebView但是整体的架构使用 原生应用提供,一般这样的开发由Native开发人员和Web前端开发人员组成。Native开发人

 

员会写好基本的架构以及API让Web开发人员开发界面以及大部分的渲染。保证到交互设 计,以及开发都有一个比较折中的效果出来,优化得好也会有很棒的效果。

Hybrid App技术发展的早期,Web的运行性能成为主要瓶颈!

为解决性能问题Hybrid App走向‘‘重混”。

通过多WebView:实现流畅的多页加载和专场动画。

使用Navtive UI组件:框架、菜单、日期等。

‘‘重混”的优缺点 优点:

一提升了运行性能 一增强了交互体验

缺点一

一Web和Native技术交叉混杂 一需要同时掌握Web和Native技术,学习难度增加 一一个页面有Web组件也有Native组件,编程调试困难

需要引入各自需要的各种依赖工具

方案二:轻混合应用,使用PhoneGap、AppCan之类的中间件,以WebView作为用 户界面层,以Javascript作为基本逻辑,以及和中间件通讯,再由中间件访问底层API的方 式,进行应用开发。这种架构一般会非常依赖WebView层的性能。

随着时代的发展,手机硬件、浏览器技术、无线网络技术都得到了大幅的提升,H5已经可 以支持复杂应用,并拥有良好的运行性能。使用轻混方案的App也越来越多。

目前我们要学习的Hybrid App开发就是方案二,使用H5+Js+Native框架开发当前轻 混合应用。

Phonegap 引入phonegap.js 或者 cordova.js,对象为 navigator Dcloud引入引入mui.js或者其他的js组件,对象为plus apiloud引入各种第三方插件,对象为api

顺变提一下,2012年8月,微信公众平台的上线,重新定义了移动应用:移动应用 =Iphone App + Android App + 微信 App

一百三十五、   说一下你对支付,推送(远程,本地)的理解

消息的推送主要有两种:

一种是本地推送,主要应用在系统的工具中,例如:闹钟,生日提醒等;实现本地推 送需要以下三个步骤,

  1. 实例化一个本地推送对象
  2. 设置通知对象的各个属性
  3. 添加本地推送对象

一种是远程消息推送,主要应用联网设备的信息推送,例如:邮件,各种软件的广告 或优惠信息的推送。远程推送比较复杂,需要使用开发者账号进行申请证书,获得实

现推送功能的配置文件,所以想要实现远程推送功能,必须要有开发者账号并且生成 配置文件

  1. 完成证书的申请和Xcode的配置
  2. 在Demo中注册远程服务对象,并设置其代理
  3. 找一个简单的App服务器进行消息推送(推荐使用:PushMeBaby, gitup网站上就有)
  4. 运行 PushMeBaby

参考网址:http://blog.csdn.net/u014642572/article/details/26857717

远程推送流程图如下

 

 

一百三十六、   什么是代理和通知,写一下他们基本的实现方式

代理:“一对一”,对同一个协议,一个对象只能设置一个代理delegate

六个步骤:

1.声明一个协议,定义代理方法

2.遵循协议

3.设置一个代理对象

4.调用代理方法

5.给代理赋值

6.实现代理方法

注意事项:

1.单例对象不能用代理;

2.代理执行协议方法时要使用respondsToSelector检查其代理是否符合

3.协议(检查对象能否响应指定的消息),以避免代理在回调时因为没有实现方法而造成程序崩溃

使用场景:

公共接口,方法较多也选择用delegate进行解耦 iOS最常用tableViewDelegate, textViewDelegate iOS有很多例子比如常用的网络库AFNetwork,ASIHTTP库, UlAlertView 类。

 

通知:一对一 一对多 传值

四个步骤:

1.发送通知

2.创建监听者

3.接收通知

4.移除监听者

使用场景:

1一很多控制器都需要知道一个事件,应该用通知;

2 一相隔多层的两个控制器之间跳转

注意事项:

1.一旦接收消息的对象多了,就难以控制了,可能有你不希望的对象接收了消息并做了处理

2.创建了观察者,在dealloc里面一定要移除;

 

Block :  Block是i〇S4.0+和Mac OS X 10.6+引进的对C语言的扩展,用来实现匿名函数的特性。Blocks语法块代码以闭包得形式将各种内容进行传递,可以是代码,可以是数组 无所不能。闭包就是能够读取其它函数内部变量的函数。就是在一段请求连续代码中可以看 到调用参数(如发送请求)和响应结果。所以采用Block技术能够抽象出很多共用函数,提 高了代码的可读性,可维护性,封装性。

使用场景:

—: 动画

二:数据请求回调

三:枚举回调

四:多线程gcd

注意事项:Iblock需要注意防止循环引用

参考网址:http://www.cnblogs.com/wenboliu/articles/5422033.html

一百三十七、   UIViewController 的生命周期

1.通过alloc init分配内存,初始化controller.

2.loadView (loadView方法默认实现[super loadView]

如果在初始化controller吋指定了xib文件名,就会根据传入的xib文件名加载对应的xib文件,如果 没传xib文件名,默认会加载跟controller同名的xib文件,如果没找到相关联的xib文件,就会创建一个空白的UIView,然后赋給controller的view)

3.viewDidLoad (当loadView创建完view之后,此吋view已经完成加载了,会调用 viewDidLoad方法;一般我会在这里做界面上的初始化操作,比如添加按钮,子视图,等等.)

4.viewWillAppear (当view在load完之后,将要显示在屏幕之前会调用这个方法,在重写这些方法吋候最好先调用一下系统的方法之后在做操作。)

5.viewDidAppear (当view已经在屏幕上显示出来之后,会调用这个方法,当一个视图被移除屏幕并且销毁的吋候)

6.viewWillDisappear (当视图将要从屏幕上移除吋候调用 )

7.viewDidDisappear (当视图已经从屏幕上移除吋候调用 )

8.Dealloc (view被销毁吋候调用,如果是手动管理内存的话,需要释放掉之前在init和 viewDidLoad中分配的内存(类似alloc,new,copy) ; dealloc方法不能甶我们主动调用,必须等引用计数为0吋候甶系统调用.)

9.参考网址: http://www.cnblogs.eom/wujy/p/5822329.html

一百三十八、   rem布局字体太大怎么处理?

一般情况下我们设置了html根节点的字体大小作为rem单位的一个基本标准,那么我 们可以紧接着在body标签内设置一个字体大小为该应用的基本字体大小

针对于一些机型如果一开始就显示的字体不正常,我们可以通过判断机型然后加载不同的样式

〈script language="javascript">

window.onload = function() {

alert(“1”);

var u = navigator.userAgent;

if(u.index〇f('Android') > 一1 ||  u.indexOf('Linux') > 一1) { //安卓手机

alert("安卓手机");

} else if(u.index〇f('iPhone') > 一1) { //苹果手机

alert("苹果手机");

} else if(u.index〇f('Windows Phone') > 一1) { //winphone手机                       alert("winphone 手机");

}

}

〈/script>

一百三十九、   如何调用原生的接口?

首先你得选择一个合适的框架作为自己的基础,以Dcloud为例,页面中一定要存在一个事件,plusready, plusready实际上是原生将桥接js注入到页面中的容器,进行任何方法 调用的时候都在plusready之后。所有api方法全部都托管在了一个plus对象中。使用语法 plus.模块名称.具体方法(参数,callback)

当我们需要打开系统相册的时候,可以这样做:

Gallery模块管理系统相册,支持从相册中选择图片或视频文件、保存图片或视频文 件到相册等功能。通过plus.gallery获取相册管理对象。打开相册plus.gallery.pick进行打开,选取多个图片{multiple:true,maximum:9,system:false}

一百四十、 微信支付怎么做?说说流程

1.申请微信公众号及支付功能申请:根据公众号申请流程申请即可。

2.获取商户支付配置信息及支付测试配置:

支付授权目录最多可以配置三个域名,测试授权目录只可以一个,这里需要 注意的是域名大小写必须要网站URL—致,否则会无法通过授权,提示支付请求的 URL不合法。另外,测试支付的微信号必须加到测试白名单,否则无法进行支付测 试。

3.H5页面发起支付请求,请求生成支付订单,获取用户授权(获取用户的openid)

4.调用统一下单API,生成预付单

5.生成JSAPI页面调用的支付参数并签名,注意时间戳timeStamp是32位字符串

6.返回支付参数prepay—id,paySign参数的html文本给前端。

7.微信浏览器自动调起支付JSAPI接口支付,提示用户输入密码。

8.确认支付,输入密码,提交支付。

9.步通知商户支付结果,商户收到通知返回确认信息。

10.返回支付结果,并发微信消息提示。

11.展示支付信息给用户,跳转到支付结果页面。

一百四十一、   混合开发的注意点

增强WebView : 原生WebView基本是PC平台浏览器内核的移植,但对于移动场景并不完全适合,各种硬件API得不到HTML5原生支持。因此对于WebView的种种Hack、增强应运而生,甚至出现了基于增强WebView提供第三方服务的。

路由:应用内跳转由于加入了 WebView而变得复杂起来,同时由于组件化、模块化带来的问 题,路由也成为人们讨论的重点。

缓存:移动网络条件差,为了用户体验,必须要做资源缓存和预加载。

通信:即HTML5和Native之间的通信。利用系统提供的桥接API可以实现,不过在应用上还 有着一些坑点和安全问题。

一百四十二、   说说你对手机平台的安装包后缀的理解

Android:**apk

Ios:**ipa

Windows:  wp7 wp8的是xap  wp8.1以后用8.1开发的是appx

 

NodeJS

一百四十三、   谈谈你对Socket编程的理解及实现原理,Socket 之间是怎么通讯的

A、Socket定义

Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相 关进程之间的数据交换。几个定义:IP地址:即依照TCP/IP协议分配给本地主机的网络地 址,两个进程要通讯,任一进程首先要知道通讯对方的位置,即对方的IP。端口号:用来辨 别本地通讯进程,一个本地的进程在通讯时均会占用一个端口号,不同的进程端口号不同, 因此在通讯前必须要分配一个没有被访问的端口号。连接:指两个进程间的通讯链路。

B、实现原理

在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户/服务器(Client/ Server, C/S)模式,即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。客户/服务器模式的建立基于以下两点:首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客 户请求服务这一非对等作用。其次,网间进程通信完全是异步的,相互通信的进程间既不存 在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二 者的数据交换提供同步,这就是基于客户/服务器模式的TCP/IP。

C、通讯过程

服务器端:其过程是首先服务器方要先启动,并根据请求提供相应服务:(1)打开一通信 通道并告知本地主机,它愿意在某一公认地址上的某端□(如FTP的端口可能为21)接收客 户请求;(2)等待客户请求到达该端口; (3)接收到客户端的服务请求时,处理该请求并 发送应答信号。接收到并发服务请求,要激活一新进程来处理这个客户请求(如UNIX系统 中用fork、exec)。新进程处理此客户请求,并不需要对其它请求作出应答。服务完成后, 关闭此新进程与客户的通信链路,并终止。(4)返回第(2)步,等待另一客户请求。(5)关闭服务器客户端:(1)打开一通信通道,并连接到服务器所在主机的特定端口;(2)向服务器发服务请求报文,等待并接收应答;继续提出请求......(3)请求结束后关闭通信通道并终止。

从上面所描述过程可知:(1)客户与服务器进程的作用是非对称的,因 此代码不同。(2)服务器进程一般是先启动的。只要系统运行,该服务进程一直存在,直到正常或强迫终止。

详细参见:

https://www.zhihu.com/question/29637351

http://blog.csdn.net/panker2008/article/details/46502783?ref=myread

 

一百四十四、   WEB应用从服务器主动推送Data到客户端有哪些方 式?

一般的服务器Push技术包括:

1)      基于AJAX的长轮询(long一polling)方式,服务器Hold—段时间后再返回信息;

2)     HTTP Streaming,通过iframe和〈script〉#签完成数据的传输;

3)     TCP长连接

4)     HTML5新引入的WebSocket,可以实现服务器主动发送数据至网页端,它和HTTP— 样,是一个基于HTTP的应用层协议,跑的是TCP,所以本质上还是个长连接,双向通信, 意味着服务器端和客户端可以同时发送并响应请求,而不再像HTTP的请求和响应。

5)     nodejs的http://socket.io,它是websocket的一^^开源实现,对不支持websocket的浏 览器降级成comet / ajax轮询,http://socket.io的良好封装使代码编写非常容易。

上述的 1 和2统称为comet技术。comet详细参考:http://www.ibm.com/developerworks/cn/ web/wa一lo一comet/

一百四十五、   简述Node.js的适用场景?

IIO 密集而非计算密集的情景;高并发微数据(比如账号系统)的情景。特别是高并发,Node.js 的性能随并发数量的提高而衰减的现象相比其他 server 都有很明显的优势。

Bad Use Cases

1.CPU heavy apps (高CPU消耗的app)

2.Simple CRUD / HTML apps (简单的CRUD / HTML apps)

3.NoSQL + Node.js + Buzzword Bullshit (NoSQL + Node.js + 各种扯淡的时髦词汇)

Good Use Cases

1.JSON API

2.Single page apps (单页面app)

3.Shelling out to unix tools (对unix工具的脚本化调用)

4.Streaming data (流数据)

5.Soft Realtime Applications (软件实时程序)

一百四十六、   什么是HTTPS,做什么用的呢?如何开启HTTPS?

1)     什么是HTTPS

https是http的加密版本,是在http请求的基础上,采用ssl进行加密传输。

2)     做什么用

 

加密数据,反劫持,SEO

3)     如何开启

生成私钥与证书,配置nginx,重启nginx看效果

详细参见:https://segmentfault.com/a/1190000006199237?utm_source=tuicool&utm_medium=referral

一百四十七、   你们原来公司如何发送的新消息推送?

(参考:)一般的服务器Push技术包括:

1.基于 AJAX 的长轮询(long一polling)方式,服务器Hold一段时间后再返回信息;

2.HTTP Streaming,通过iframe和

你可能感兴趣的:(2019面试题总结)