中国工商银行编程题 & 面经整理

一、中国工商银行编程题

aabccccc 输出a2bc5(js实现)

let optr = readline().split("");
var result='';
    result=optr[0];
    var count=1;
    for(var i =1;i< optr.length;i++){
      if(optr[i]===optr[i-1]){
        count++;
      }else{
        if(count!==1){
          result+=count;
        }
        count=1;
        result+=optr[i]
      }
    }
    result+=count;
return rersult

中国工商银行编程题 & 面经整理_第1张图片

二、猿辅导面经整理

1、手写一个防抖

function debunce(fn,delay){
      var timeout;
      return function(){
        clearTimeout(timeout);
        timeout=setTimeout(fn,delay)
      }
}
//使用
btn.onclick=debunce(fn,100);

 2、post请求的请求字段格式

POST /SYS/login/login.aspx HTTP/1.1
Host: www.vckbase.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/2008052906 Firefox/3.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.vckbase.com/
Cookie: ASPSESSIONIDCSAATTCD=DOMMILABJOPANJPNNAKAMCPK
Content-Type: application/x-www-form-urlencoded
Content-Length: 79

Keep-Alive:300,表示这个TCP通道可以保300秒。另外还可能有max=XXX,表示这个长连接最多接收XXX次请求就断开。

 3、http长连接和短连接

在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。数据传输完成了保持TCP连接不断开(不发RST包、不四次握手),等待在同域名下继续用这个通道传输数据;相反的就是短连接。使用长连接的HTTP协议,会在响应头有加入这行代码:

Connection:keep-alive

HTTP首部的Connection: Keep-alive是HTTP1.0浏览器和服务器的实验性扩展,当前的HTTP1.1 RFC2616文档没有对它做说明,因为它所需要的功能已经默认开启,无须带着它,但是实践中可以发现,浏览器的报文请求都会带上它。如果HTTP1.1版本的HTTP请求报文不希望使用长连接,则要在HTTP请求报文首部加上Connection: close。

使用长连接之后,客户端、服务端怎么知道本次传输结束呢?两部分:1是判断传输数据是否达到了Content-Length指示的大小;2动态生成的文件没有Content-Length,它是分块传输(chunked),这时候就要根据chunked编码来判断,chunked编码的数据在最后有一个空chunked块,表明本次传输数据结束。

4、服务端返回304状态码的过程解析

中国工商银行编程题 & 面经整理_第2张图片

每次请求都要设置请求头的两个参数.@"If-None-Match".@"If-Modified-Since".这个两个参数在请求成功后都能从response里获得.我们只要在第一次请求成功后保存到本地就可以了.

304状态码过程

(1)客户端发送附带条件的请求(附带条件的请求是指采用GET方法的请求报文中包含If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部

(2)服务器端允许请求访问资源,判断 Last Modified 和 If Modified Since,二者一致。

(3)直接返回304 Not Modified(服务器端资源未改变,可直接使用客户端未过期的缓存)。304状态码返回时,不包含任何响应的主体部分。

对于静态文件,例如:CSS、图片,服务器会自动完成 Last Modified 和 If Modified Since 的比较,完成缓存或者更新。但是对于动态页面,就是动态产生的页面,往往没有包含 Last Modified 信息,这样浏览器、网关等都不会做缓存,也就是在每次请求的时候都完成一个 200 的请求。
因此,对于动态页面做缓存加速,首先要在 Response 的 HTTP Header 中增加 Last Modified 定义,其次根据请求 Request 中的 If Modified Since 和被请求内容的更新时间来返回 200 或者 304 。虽然在返回 304 的时候已经做了一次数据库查询,但是可以避免接下来更多的数据库查询,并且没有返回页面内容而只是一个 HTTP Header,从而大大的降低带宽的消耗,对于用户的感觉也是提高。

中国工商银行编程题 & 面经整理_第3张图片

在请求头里有:If-Modified-Since: Mon, 17 Aug 2015 01:53:41 GMT在响应头里有:Last-Modified: Mon, 17 Aug 2015 01:53:41 GMT
对比一下这二个日期发日期和时分秒都是完全一致的,如果一致就从缓存中去获取内容
cache-control 
如果cache-control:no-chache说明强制每次请求直接发送给源服务器,而不经过本地缓存版本的校验。
如果cache-control:max-age=0有二种情况:
1、max-age>0 时 直接从游览器缓存中 提取 
2、max-age<=0 时 向server 发送http 请求确认 ,该资源是否有修改有的话 返回200 ,无的话 返回304.

三、js知识查漏补缺

1、ajax在发送跨域请求时如果想携带cookie,必须将请求对象的withcredentials属性设置为true。

中国工商银行编程题 & 面经整理_第4张图片

2、HTML5中

  • audio:播放音频

  • video:播放视频

  • embed可以用来插入各种多媒体,格式可以是 Midi、Wav、AIFF、AU、MP3等等。url为音频或视频文件及其路径,可以是相对路径或绝对路径。

你可能感兴趣的:(javascript,js编程实现)