17.12.1 面试

今天去面试,被深深的打击到了,前端之路任重而道远啊~

  • 谈一下html语义化的作用

1.去掉或样式丢失的时候能让页面呈现清晰的结构
2.屏幕阅读器(如果访客有视障)会完全根据你的标记来“读”你的网页
3.PDA、手机等设备可能无法像普通电脑的浏览器一样来渲染网页(通常是因为这些设备对CSS的支持较弱)
4.搜索引擎的爬虫也依赖于标记来确定上下文和各个关键字的权重
5.你的页面是否对爬虫容易理解非常重要,因为爬虫很大程度上会忽略用于表现的标记,而只注重语义标记
6.便于团队开发和维护

  • ol与li的区别

这个问题我当场就有反问了面试官,不是ul和ol的区别?面试官回我:“没错,就是ol与li的区别,一个是有序列表,一个是无序列表,ol和li的共同父级是ul” 我反复质疑了几遍,面试官都非常肯定,并让我回来自己百度。
恩,是的,我回来百度了一波,WTF! ul和ol是同级关系,无序列表和有序列表。

  • 有什么办法解决大量css属性继承的问题(我根本没懂问的是什么+ +)

我的回答是在字标签内重写样式覆盖,sass、less预处理语言。
面试官:使用class命名空间(我觉得应该是以模块+功能来命名吧)
张大大的博客:http://www.zhangxinxu.com/wordpress/2010/09/精简高效的css命名准则方法/

  • 谈一下css的层叠上下文

17.12.1 面试_第1张图片
1.png

看得我头皮发麻,博客地址:
http://www.zhangxinxu.com/wordpress/2016/01/understand-css-stacking-context-order-z-index/

  • 为什么js有变量提升,而php, java这些语言没有呢?

JS 存在变量提升,这个的设计其实是低劣的,或者是语言实现时的一个副作用。它允许变量不声明就可以访问,或声明在后使用在前。但在 ES6 加入 let/const 后,变量提升就不存在了

  • 谈一下JS中的面向对象

最基本的
function A(){}
A.proptotype = {
  constructor: A
  ...
}

function A(){}
function B(){
  A.call(this);
}
B.prorotype = new A();
B.prototype.constructor = B;

function A(){}
function B(){
  A.call(this);
}
function F(){}
f.prototype = A.prototype;
B.prototype = new F();
B.prototype.constructor = B;

//委托继承
var public = {} //定义公共方法
var a = Object.create(public); 通过委托可让a对象访问到public对象上的方法
a.xxx = function(){}  //定义自己的方法
  • 如何解决在ie中的内存泄漏

手动释放内存,将变量的值设为null
参考的博客地址:
https://www.cnblogs.com/firstdream/p/5548961.html
https://www.cnblogs.com/chuaWeb/p/5196330.html

  • 谈谈cookie和session

1.由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。集群的时候也要考虑Session的转移,在大型的网站,一般会有专门的Session服务器集群,用来保存用户会话,这个时候 Session 信息都是放在内存的,使用一些缓存服务比如Memcached之类的来放 Session。
2.思考一下服务端如何识别特定的客户?这个时候Cookie就登场了。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。有人问,如果客户端的浏览器禁用了 Cookie 怎么办?一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。
3.Cookie其实还可以用在一些方便用户的场景下,设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是Cookie名称的由来,给用户的一点甜头。
所以,总结一下:Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

  • HTTP协议

https://www.cnblogs.com/ranyonsue/p/5984001.html

  • 谈谈你对JSX这种语法的理解

JSX = JavaScript XML,是Javascript的一种扩展,一种定义带属性树结构的语法。当书写组件时,其实就是在实例化一个对象。

  • 为什么在React中数据是单向流动的

因为只有一个数据源,数据流动方向可以跟踪,流动单一,追查问题的时候可以跟快捷。数据流是自上而下单向的从父节点传递到子节点,所以组件是简单且可预测的

  • 为什么要使用redux来管理状态

在业务还不是很复杂的时候,完全可以只用React来完成对行为的控制、数据的更新和界面的渲染。然而,随着业务越来越复杂,过多的状态会让数据流混乱,程序变得难以维护

  • react-router的实现原理

简单地说, 路由的基本原理即是保证View和URL同步,而View可以看成是资源的一种表现。react-router 主要是利用底层 history 模块的机制,通过结合 react 的架构机制做一层包装

  • 为什么React没有像Vue一样实现指令

因为JSX实际上就是在写JS, 直接就可以写JS实现了,没必要实现指令

你可能感兴趣的:(17.12.1 面试)