海康威视财务面试题及答案.docx
《海康威视财务面试题及答案.docx》由会员分享,可在线阅读,更多相关《海康威视财务面试题及答案.docx(8页珍藏版)》请在冰豆网上搜索。
海康威视财务面试题及答案
海康威视财务面试题及答案
1.闭包是什么?
有什么优点和缺点?
2.css中怎么使盒子上下居中(面试官说水平居中太简单了orz...)?
3.js中本地存储有哪些?
有什么不同?
4.cookie中的session了解吗?
5.跨域了解吗?
6.this的指向问题?
7.vue使用的UI框架?
8.npm中的工具了解过吗?
(yarn)
9.Node.js了解吗?
详细讲一下项目?
后端调用?
1.闭包是什么?
有什么优点和缺点?
解答:
闭包是指有权访问另一个函数作用域中的变量的函数。
优点:
①能够读取函数内部的变量;②让这些变量一直存在于内存中,不会在调用结束后被垃圾回收机制回收;
缺点:
由于闭包会使用函数中的变量存在在内存中,内存消耗很大,所以不能滥用闭包;解决的办法是退出函数之前,将不使用的局部变量删除;
2. css中怎么使盒子上下居中(面试官说水平居中太简单了)?
解答:
方法一:
设置垂直居中的时候要注意,先给祖先元素`html`和`body`的高度设置为100%(默认是0);并且清除默认样式(`margin`和`padding`都设置为0,否则浏览器就会出现滚动条),然后给子盒子相对定位和位移`position:
relative;top:
50%;`,然后减去本身宽度的一半即可(`margin-top:
负自身高度的一半`//`transform:
translateY(-50%)`向上偏移自身高度的一半;
注意:
top、bottom、left、right的百分比值都是相对于包含块的高度、宽度的;
方法二:
弹性盒子。
给父元素设置`display:
flex;align-items:
center;`设置body里的元素垂直居中;(`justify-content:
center;`定义body里的元素水平居中)
3. js中本地存储有哪些?
有什么不同?
`cookie`、`localStorage`、`sessionStorage`;
相同点:
都保存在浏览器端;
不同点:
①传递方式不同
`cookie`数据始终在同源的http请求中携带(即使不需要),即`cookie`在浏览器和服务器间来回传递。
`sessionStorage`和`localStorage`不会自动把数据发给服务器,仅在本地保存。
②数据大小不同
(`cookie`数据还有路径(path)的概念,可以限制cookie只属于某个路径下。
)
存储大小限制也不同,cookie数据不能超过4k,同时因为每次http请求都会携带`cookie`,所以cookie只适合保存很小的数据,如会话标识。
`sessionStorage`和`localStorage`虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
③数据有效期不同
`sessionStorage`:
仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;
`localStorage`:
始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;
`cookie`只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。
④作用域不同
`sessionStorage`不在不同的浏览器窗口中共享,即使是同一个页面;
`localStorage`在所有同源窗口中都是共享的;
`cookie`也是在所有同源窗口中都是共享的。
4. cookie中的session了解吗?
`cookie`和`sessiom`是两种保持会话状态的方法。
cookie就是指客户端在向服务端发起请求的时候,服务端会在进行response的时候给当前客户端的一小段文本信息,并保存在当前的客户端的浏览器中,这一小段cookie文本信息也就是这个客户端去访问服务端的通行证,有了这个通行证,以后当这个客户端再去访问服务端的时候,服务端便知道是谁拿着通行证去进行访问了。
session和cookie的功能类似,也是一种保持会话状态的方式,在用户使用浏览器发起会话时,服务器会为每一个用户浏览器提供一个单独的session对象来保存用户的数据,并将它保存在服务端,而当用户访问其他web资源的时候,则可以从保存用户数据的session对象中把用户数据抽取出来并进行访问。
区别:
1.cookie的用户数据是保存在用户浏览器的cookie中的;
session的用户数据是保存在服务器为用户浏览器单独创建的session对象中的。
2.数据的读取和调用,cookie可以采用request.getCookies这种方法;
session则可以用request.Session的方法。
3.安全性,cookie是存储在用户浏览器中的;
而session是存储在服务器上的,所以session比cookoe要相对安全;
5. 跨域了解吗?
跨域,指的是浏览器不能执行其他网站的脚本。
浏览器执行`javascript`脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。
解决办法:
①JSONP:
注意JSONP只支持GET请求,不支持POST请求。
原理:
ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域。
②代理:
写后端接口,在后端调用页面拿到返回值返回给html文件。
相当于绕过了浏览器,就不会存在跨域问题。
③PHP端修改header
header('Access-Control-Allow-Origin:
*');//允许所有来源访问
header('Access-Control-Allow-Method:
POST,GET');//允许访问的方式
6. this的指向问题?
this的最终指向的是那个调用它的对象。
改变this指向的方法:
1.使用箭头函数;
2.在函数内部使用`_this=this;`
3.使用apply、call、bind;
4.new实例化一个对象;
7. vue使用的UI框架?
animate.css是一款前端动画库,相似的有velocity-animate;
使用步骤:
1.首先`npminstallanimate.css--save`;
2.然后在vue文件的script中引入`importanimatefrom'animate.css'`;
3.最后绑定元素使用,如下:
hello
默认情况下全局安装的包不能直接在项目中加载,如果要直接加载,需要在系统环境变量中添加一个名为NODE_PATH的变量,值为全局安装目录下node_modules位置。
node里面其实还分了两块,一是封装了v8引擎,目的是为了执行es(如定义变量,定义函数等),另外一个提供了大量的工具库,是帮助node实现各种功能的,提供了一些以前js的环境办不到的事情,比如文件操作,网络操作,操作系统的操作。
据nodejs创始人RyanDahl回忆,他最初是选择了Ruby这门语言,但是Ruby这门语言的虚拟机效率不怎么样最终放弃了,按照这种思路,貌似node将java的虚拟机集成进来应该可以运行java,但node作者最终选择了javascript。
这样js就实现了在服务端运行的可能,js运行在node平台上(分为v8部分,用来执行es,和大量的工具库组件(API)称之为libuv,提供了以前js的环境办不到的事,如文件操作,网络操作等等)。
(2)node可以作为一个中间层来来分发调用数据接口,比如有一个网站数据是有java提供的,我们可以让node作为一个中间层,来接受用户的请求,然后通过node来调用java数据接口,获取到数据后直接在node层面做html的封装,然后将渲染好的页面直接给用户。
为什么要这样做,直接请求java接口不行吗,这是因为node被称之为高性能的web服务器,在并发和抗压方面都比传统的平台要好很多,因此这样一包装可以极大的减轻服务器的开发。