admin 管理员组

文章数量: 1086019


2024年1月5日发(作者:有个文件夹用360强力删除不掉怎么办)

海康威视财务面试题及答案

1. 闭包是什么?有什么优点和缺点?

2. css中怎么使盒子上下居中(面试官说水平居中太简单了)?

3. js中本地存储有哪些?有什么不同?

4. cookie中的session了解吗?

5. 跨域了解吗?

6. this的指向问题?

7. vue使用的UI框架?

8. npm中的工具了解过吗?(yarn)

9. 了解吗?

详细讲一下项目?后端调用?

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可以采用kies这种方法;

session则可以用n的方法。

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框架?

是一款前端动画库,相似的有velocity-animate;

使用步骤:

1. 首先`npm install --save`;

2. 然后在vue文件的script中引入`import animate from ''`;

3. 最后绑定元素使用,如下:

methods:{

fade:function(){

$('#f').addClass('animated bounceOutLeft')

部分api常见:

fade: { title: '淡入淡出', fadeIn: '淡入',

淡出'},

bounce: {title: '弹跳类', bounceIn: '弹跳进入',弹跳退出',},

} }

fadeOut: ' bounceOut: '

zoom: { title: '缩放类', zoomIn: '放大进入', zoomOut: '缩小退出',},

rotate: {title: '旋转类', rotateIn: '顺时针旋转进入', rotateOut: '顺时针旋转退出',},

flip: {title: '翻转类', flipInX: '水平翻转进入', flipInY: '垂直翻转进入',

flipOutX: '水平翻转退出', flipOutY: '垂直翻转退出'},

strong: {title: '强调类', bounce: '弹跳', flash: '闪烁',

pulse: '脉冲', rubberBand: '橡皮筋', shake: '左右弱晃动',

swing: '上下摆动', tada: '缩放摆动', wobble: '左右强晃动',

jello: '拉伸抖动'}

8. npm中的工具了解过吗?(warn)

npm就是JavaScript的包管理工具。npm主要用来下载,安装,管理第三方

模块。

创建一个包描述文件:`npm init [-y]`

查看包的信息 `npm info `

查看包的版本信息 `npm info versions`

安装指定的包:`npm install `

默认会安装在当前目录下的 node_modules 目录下,如果 node_modules

不存在,则会自动创建。

本地安装包,如果包里有可执行文件,则npm会把可执行文件安装到

node_modules/.bin 目录下。

安装指定版本的包:`npm install @`

安装包并记录依赖,会在 中 dependencies 属性记录依赖`npm install --save`

卸载包:`npm uninstall `

更新包:`npm update `

全局安装包,把包安装在全局目录,供所有项目使用:`npm install

-g`

全局安装包,如果包里有可执行文件,则npm会把可执行文件安装到

node_modules 上一级目录中。

查看全局目录:`npm root -g`

修改全局目录的路径:`npm config set prefix ``"新路径"`

默认情况下全局安装的包不能直接在项目中加载,如果要直接加载,需要在系统环境变量中添加一个名为 NODE_PATH 的变量,值为全局安装目录下

node_modules 位置。

查看npm配置 `npm config list`

9. 了解吗?

根据官方文档可以知道,node就是一个给予谷歌v8引擎的一个javascript的运行时,可以理解为运行js的一个虚拟机。他使用的是一个事件驱动,非阻塞I/O模型 ,他是将js的运行环境搬到了服务器端,和客户端没有一点关系。是一个纯服务端的东西,node只是为js提供了一个平台。

node里面其实还分了两块,一是封装了v8引擎,目的是为了执行es(如定义变量,定义函数等),另外一个提供了大量的工具库,是帮助node实现各种功能的,提供了一些以前js的环境办不到的事情,比如文件操作,网络操作,操作系统的操作。

既然node是一个平台(所谓的平台就是用来运行特定语言的),也就意味着node是用来运行语言的,那么java也是语言,node能运行java吗?据nodejs

创始人Ryan Dahl回忆,他最初是选择了Ruby这门语言,但是Ruby这门语言的虚拟机效率不怎么样最终放弃了,按照这种思路,貌似node将java的虚拟机集成进来应该可以运行java,但node作者最终选择了javascript。

这样js就实现了在服务端运行的可能,js运行在node平台上(分为v8部分,用来执行es,和大量的工具库组件(API)称之为libuv,提供了以前js的环境办不到的事,如文件操作,网络操作等等)。

用途:

(1)node可以接受客户端用户的所有请求,并且能够快速的给出响应,因此node可以用来做网站。

(2)node可以作为一个中间层来来分发调用数据接口,比如有一个网站数据是有java提供的,我们可以让node作为一个中间层,来接受用户的请求,然后通过node来调用java数据接口,获取到数据后直接在node层面做html的封装,然后将渲染好的页面直接给用户。为什么要这样做,直接请求java接口不行吗,这是因为node被称之为高性能的web服务器,在并发和抗压方面都比传统的平台要好很多,因此这样一包装可以极大的减轻服务器的开发。

通过上面的两点,可以总结出,node在web中要么从前端页面到后端服务全包了,一个是只做其中的一点。

一言以蔽之,node就是一个javascript的运行环境(平台),他不是一门语言,也不是javascript的框架。可以用来开发服务端应用程序,web系统。

其特点是体积小,快速,高性能。


本文标签: 数据 用户 服务端 浏览器 运行