前端菜鸟面试受虐之路(1)

今天去了一个独角兽企业,问了些基本的技术问题,由于基础不扎实导致了应该是面试失败。只是不明白为何他们家要招一个写vue的,最后问的却是mvc设计模式,整理如下:
1.伪类和伪元素的区别?
css3中伪类是(:),伪元素是(::)


image.png

::before和::after这两个伪类下有特有的属性content,必须有这个属性。


image.png

伪元素的操作对象是新生成的dom元素,而不是原来dom结构里就存在的;而伪类恰好相反,伪类的操作对象是原来的dom结构里就存在的元素。

伪元素与伪类的根本区别在于:操作的对象元素是否存在于原来的dom结构里。

我想面试官主要想得到的答案应该是dom元素这里。

2.position的属性
分别有absoulte(绝对定位的元素的位置相对于最近的已定位父元素,如果元素没有已定位的父元素,那么它的位置相对于)
relative(相对定位元素的定位是相对其正常位置)
fixed(固定)
static 没有定位 遵循正常的文档流
sticky:基于用户的滚动位置来定位。

3.display:
隐藏元素 - display:none或visibility:hidden
隐藏一个元素可以通过把display属性设置为"none",或把visibility属性设置为"hidden"。但是请注意,这两种方法会产生不同的结果。

visibility:hidden可以隐藏某个元素,但隐藏的元素仍需占用与未隐藏之前一样的空间。也就是说,该元素虽然被隐藏了,但仍然会影响布局。

4.原生以及jq获取dom元素的方法、
JS获取DOM元素的方法(8种)
通过ID获取(getElementById)
通过name属性(getElementsByName)
通过标签名(getElementsByTagName)
通过类名(getElementsByClassName)
通过选择器获取一个元素(querySelector)
通过选择器获取一组元素(querySelectorAll)
获取html的方法(document.documentElement)
document.documentElement是专门获取html这个标签的
获取body的方法(document.body)
document.body是专门获取body这个标签的。
jq获取元素:$(参数)

5.异步和同步的区别
同步:
步的思想是:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉)。这种情况下,用户不能关闭界面,如果关闭了,即迁移程序就中断了。

异步:
将用户请求放入消息队列,并反馈给用户,系统迁移程序已经启动,你可以关闭浏览器了。然后程序再慢慢地去写入数据库去。这就是异步。但是用户没有卡死的感觉,会告诉你,你的请求系统已经响应了。你可以关闭界面了。

同步和异步本身是相对的
同步就相当于是 当客户端发送请求给服务端,在等待服务端响应的请求时,客户端不做其他的事情。当服务端做完了才返回到客户端。这样的话客户端需要一直等待。用户使用起来会有不友好。

异步就是,当客户端发送给服务端请求时,在等待服务端响应的时候,客户端可以做其他的事情,这样节约了时间,提高了效率。

存在就有其道理 异步虽然好 但是有些问题是要用同步用来解决,比如有些东西我们需要的是拿到返回的数据在进行操作的。这些是异步所无法解决的。

6.cookie session token区别
Cookie的内容是保存一小段文本信息,这些文本信息组成一份通行证。它是客户端对于无状态协议的一种解决方案。

Cookie的原理

(1)客户端第一次请求时,发送数据到服务器。

(2)服务器返回响应信息的同时,还会传回一个cookie(cookie S-001)

(3)客户端接收服务器的响应之后,浏览器会将cookie存放在一个统一的位置。

(4)客户端再次向服务器发送请求的时候,会把Cookie S-001再次发挥服务器。

[图片上传失败...(image-46020d-1585919516277)]

cookie的生命周期

cookoe的生存时间是整个会话期间:浏览器会将cookie保存在内存中,浏览器关闭时自动删除这个cookie

cookie的生存时间是长久有效的:手动将cookie报存在客户端的硬盘中,浏览器关闭的话,cookie页不会清除;下次在打开浏览器访问对应网站内容,这个cookie就会自动再次发送到服务器。

session的原理:

(1)服务器在处理客户端请求过程中会创建session,并且为该session生存唯一的session ID。(这个session ID在随后的请求中会被用来重新获得已经创建的session。在session被创建后,就可以调用session相关的方法向session中新增内容,这些内容只会保存在服务器中)

(2)服务器将session ID发送到客户端

(3)当客户端再次请求时,就会带上这个session ID

(4)服务器接收到请求之后就会一句Session ID 找到相应的Session ,完成请求

ps:1、虽然session保存在服务器,但它还是需要客户端浏览器的支持,因为session需要使用cookie作为识别标志。服务器会向客户端发送一个名为JSEDDIONID的cookie,它的值为session ID。

    2、当cookie被禁用时,可以使用url重写的方法:将session写在URL中,服务器在进行解析

[图片上传失败...(image-dfdf92-1585919516277)]

session的生命周期:

与cookie一直,服务器也能设置session的生效时间。

cookie和session的区别

1、存储位置不同:session存储在服务器,cookie存储在客户端

2、存储容量不同:单个cookie保存数据小于等于4kb,一个站点最多保存20个cookie;session没有上限,但是由于服务器内存性能考虑,session不要存太多东西,并有删除机制

3、存取方式不同:cookie只能保存ASCII字符串;session能存取任何类型的数据

4、隐私策略不同:cookie是对客户端是可见的,可以分析存放在本地的cookie并进去cookie欺骗;session存储在服务器上,对于客户端是透明的,不存在敏感信息泄露的风险

5、服务器压力不同:session是保存在服务端,每隔用户都会产生一个session。加入并发访问的用户太多,会产生很多的session,对服务器是一个很大的负担,耗费大量内存

cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,session是一个很好的选择。

6、浏览器的支持不同:session不支持新建窗口,只支持字窗口。而cookie都支持。

假设浏览器禁用cookie,session可以通过URL重写的方法实现。COOKIE就派不上用场。

Token的原理:

(1)客户端第一次请求时,发送用户信息到服务器。服务器对用户信息使用HSA256算法及密钥进行签名,再将这个签名和数据一起作为token返回给客户户端。

(2)服务端不再保存token,客户端保存token。

(3)当客户端再次发送请求时,在请求信息中将token一起发送给服务器。

(4)服务器用同样的HSA256算法和密钥,对数据再计算一次签名,和token的签名做比较

(5)如果相同,服务器就知道客户端登录过,则反之。

7。script标签放在body前后的区别是什么?

1.全局 js,放在标签 里面:比如说jquery 整个页面很多地方都要用到 而且是优先加载的

2.局部js,放在 结束标签以内 任何位置,加载速度低于 里面的,或者是第二加载
在文档的head元素中包含所有JavaScript文件,意味着必须等到全部JavaScript代码都被下载、解析和执行完成之后,才能开始呈现页面内容(浏览器在遇到body标记时才开始呈现内容)

8.mvc的理解?
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
C 主要是指请求 url 的路由规则,即把请求打到对应的控制器。控制器调用模型实现业务逻辑和底层数据的获取,
View层,单独实现了组合模式
Model层和View层,实现了观察者模式
View层和Controller层,实现了策咯模式
下图为mvvm的设计模式


image.png

9.面向对象的理解?
面向对象:把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。
三大特性是封装继承和多态。

今天就写到这里。辛酸泪...

你可能感兴趣的:(前端菜鸟面试受虐之路(1))