面试时间: 2020年12月18日晚上7.45点-8.15点
面试形式: 语音面试(二面)

  1. 自我介绍
    参考模板:
    你好,我是XX,毕业于XX大学。现就职于XX公司,有X年开发经验,公司主要使用技术栈为React+AntDesign+Redux进行开发

  2. 闭包是什么?
    函数A返回了一个函数B,并且函数B中使用了函数A的变量,函数B就被称为闭包

  3. 为什么会有闭包?
    因为JS的垃圾回收机制,JS本身为了避免过量消耗内存,造成系统崩溃,自带有一套垃圾回收机制。垃圾回收机制能够检测出一个对象是不是无用的。检测到之后,就会把他的内存释放掉。但是实际工作中,需要一些变量不那么及时的被清理,所以出现了闭包,达成效果。

  4. DNS服务器一般分几种?
    根DNS服务器,顶级DNS服务器,权威DNS服务器

  5. DNS 查询的过程
    5.1 浏览器输入www . qq .com 域名,操作系统首先检查本地hosts文件是否有这个网站映射关系,如果有,则先调用这个ip地址映射,完成域名解析
    5.2 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析
    5.3 如果hosts和本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器(本地DNS服务器),此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
    5.4 如果要查找的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
    5.5 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,
    如果未用转发模式,本地DNS就把请求发至13台根DNS,
    根DNS服务器收到请求后会判断这个域名(.com)是谁授权管理,并会返回一个负责该顶级域名服务器的一个IP。
    本地DNS服务器收到IP信息后,将会联系负责com域的这台服务器。
    这台负责com域的服务器收到请求后,如果自己无法解析,他就会找一个管理com域的下一级DNS服务器地址qq.com给本地DNS服务器。
    当本地DNS服务器收到这个地址后,就会找qq.com域的服务器,
    重复上面的动作,进行查询,直至找到www.qq.com主机
    5.6 如果用的是转发模式,此DNS服务器就会把请求转发至上一层DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把请求转至上上级,以此循环。
    不管本地DNS服务器用的是转发,还是根提示,最后都是把结果返回给DNS服务器,由此DNS服务器在返回给客户机。
    从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是迭代查询。

  6. webpack的loader作用
    loader本质就是一种函数,在该函数中对接受到的内容进行转换,返回转换后的结果,因为webpack只认识js,所以loader就是翻译官,对其他类型资源进行转译的预处理工作。

  7. webpack的alias对性能优化
    缩小打包作用域

  8. 项目权限如何配置?刷新后怎么配置的?
    sessionStorage 存储到当前页面关闭位置
    (localstorage永久存储本地,除非主动删除)

  9. js模块

项目 commonJS ES6 AMD CMD
典型环境 nodejs babel requirejs seajs
导入的模块路径 表达式 字符串
输出的值 值的拷贝 值得引用
this指向 当前模块 undefined
  1. react hooks为什么出现?
    react函数组件负效应的解决方案,丰富函数组件功能,是函数组件在一定程度上具有替换类组件的功能

  2. react fiber 为什么出现
    react fiber 是核心算法的一次重新实现。
    在之前的版本中,如果你拥有一个很复杂的复合组件,然后改动了最上层组件的state,那么调用栈可能会很长。调用栈过长,再加上中间进行了复杂的操作,就可能导致长时间阻塞主进程,带来不好的用户体验。fiber就是为了解决该问题而生。
    fiber本质上是一个虚拟的堆栈帧,新的调度器会按照优先级自由调度这些帧,从而将之前的同步渲染改成了异步渲染,在不影响体验的前提下分段计算更新。
    对于如何区别优先级,react有自己的一套逻辑。对于动画这种实时性很高的东西,也就是16ms必须渲染一次保证不卡顿的情况下,react会每16ms内暂停一下更新,返回来继续渲染动画。
    对于异步渲染,现在渲染有两个阶段:reconciliation和commit。前者过程是可以打断的,后者不能暂停,会一直更新界面直到完成。
    因reconciliation是可以被打断的,所以reconciliation阶段会执行的生命周期函数就可能出现调用多次的情况,从而引起bug。所以对于reconciliation阶段调用的几个函数,除了shouldcomponentupdate外,其他都应该避免去使用。

  3. 自己实现一个react,怎么实现
    react核心为虚拟DOM,围绕虚拟DMD包含虚拟DOM模型建立,生命周期的管理,对比差异的diff,将虚拟DOM转换为原生DOM并展示,setstate异步机制和react合成事件
    12.1虚拟DOM
    虚拟DOM包含:type当前节点属性,key 元素标识,优化更新,props节点属性
    将元素转换为虚拟DOM,react使用jsx,即react.ceateElement语法糖。过程:根据我们传入参数,生成不同虚拟dom
    12.2reactComponent实现
    虚拟DOM分三类:文本类型,原生DOM类型,自定义类型。
    不同的类型肯定有不同的渲染和更新逻辑,我们把这些逻辑和虚拟DOM一起分装成对应的reactcomponent类,通过reactcomponent类来控制虚拟DOM,命名为ReactTextComponent, ReactDOMComponent,ReactCompositionComponent分别对应三种类型
    首先是基类reactComponent,接着让不同类型的component继承这个基类,每种component类型都有mount和update两个方法,用来执行渲染和更新
    12.3入口实现
    实现reactComponent后需要入口得到reactComponent并且调用mount,react使用reactDom.render(组件,容器),实现通过虚拟dom生成component

  4. 自己实现一个redux,怎么实现
    暴露的方法:createStore,combineReducer,applyMiddleware
    createSore 提供了getState,subscribe。修改state值:dispatch指定一个修改state计划,告诉store,reducer 修改state的时候,按照计划进行。
    reducer 一个纯函数,接受一个state,返回一个新的state。
    combineReducer 封装combineReducer来颗粒化renducer函数

  5. 项目中中间件用过哪些
    redux-thunk
    redex store仅支持同步数据流。使用thunk实现redux的异步性。可以将thunk看成store的dispatch方法的封装器,使用 thunk anction creator派遣函数或promise,而不是返回action对象。
    核心代码只有两行:判断每个经过他的action,如果是function类型,就调用这个function(传入dispatch,getState和extraAugument参数),而不是任由他到达reducer,因为reducer是一个纯函数,redux规定到达reducer的action必须是plain object类型。

  6. 项目中权限管理

项目 以往处理方式 页面权限 模块权限 元件权限 统一管理权限registerAuthRules
概念 页面区块(组件)是否显示 组件内元素是否显示
方法 前端发送异步请求取到权限数据 将所有的前端路由配置在后端,对于不同角色的用户,后端把路由列表吐给前端注册 将系统中用户散落的权限统一配置,通过HOC包装一下react组件,提供劫持渲染和权限透传的能力 将系统中用户散落的权限统一配置,通过HOC包装一下react组件,提供劫持渲染和权限透传的能力 应用的所有权限配置会被统一配置在一个闭包中,权限的值支持后端同步吐出,也支持每次异步请求(利用promise实现)
缺点 随着代码量增加,难以维护
  1. 项目中用户登录管理
    登录时用setCookie,渲染页面时用getCookie
    cookie是指某些网站为了辨别用户身份而存储在用户本地终端上的数据(通常加密)。所以通过cookie可以实现对用户登录状态的判断,防止用户不经过登录直接进入一些页面,或者进入一些没有权限的页面。
    对cookie写操作:在cookie中,除了name和value,每条记录还有更多属性,如是否失效,是否使用安全协议传输等。
    对cookie读操作:需要对cookie是否存在进行判断。注意命名的时候,尽量不要使用之前曾用名,因为indexof查到第一个就会返回
    将cookie用来保存登录状态
    在用户登录成功的时候,设置cookie值,用来保存用户username和identify
    再除了登录界面以外的所有界面,都会判断该cookie是否存在,如果不存在就返回到登录页面,如果存在,判断该身份是否有访问该页面的权限,如果具有权限才继续访问,否则跳转到其他具有权限的页面。
    这种情况下,如果cookie被人窃取,则会有信息泄露的危险
    通过设置httponly属性,这种cookie中只能在http中传输,而不会被脚本窃取

  2. new操作中发生了什么
    创建一个空对象,将他的引用赋给this,继承函数的原型
    通过this将属性和方法添加至这个对象
    最后返回this指向的新对象,也就是实例

XX软件前端开发面试相关推荐

  1. 深圳某某网前端开发面试2020年12月

    深圳某某网前端开发面试 面试时间: 2020年12月8日上午10点-12点 面试形式: 笔试+技术面+项目面 笔试题 position的值有哪些? A. static B.relative C. ab ...

  2. 最全BAT前端开发面试80题:算法+html+js+css!含答案大赠送!

    最全前端开发面试题目:包含算法+网络+css面试+js+h5面试题目,尾部有最全BAT前端面试经典77题和答案,想要的就快来领走吧~(领取方式见文末) 一.前端算法面试 1.基本排序的方式 冒泡.快排 ...

  3. 2018前端开发面试备忘录(1年以上经验初中级别前端开发)-面试篇

    2018前端开发面试备忘录-面试篇 -面试篇 -简历篇 -跳槽选择篇 18年过年之前离职了,在家闲着也没事就去面试了下,试试水. 2018前端开发面试备忘录,主要是查漏补缺,我自己的面试作答,后面会在 ...

  4. web前端开发面试都喜欢问什么

    web前端工程师通过面试不是件容易的事,作为候选人,通常需要在规定的时间内展示自己能做些什么.作为一名面试官,同样难以在这么短的时间内评估候选人是否适合.对于面试来说,并不存在一刀切的方法,面试官问的 ...

  5. 前端开发面试问题及答案收录

    转: 前端开发面试知识点大纲: HTML&CSS: 对Web标准的理解.浏览器内核差异.兼容性.hack.CSS基本功:布局.盒子模型.选择器优先级及使用.HTML5.CSS3.移动端适应. ...

  6. 前端开发面试知识点大纲

    前端开发面试知识点大纲: HTML&CSS: 对Web标准的理解.浏览器内核差异.兼容性.hack.CSS基本功:布局.盒子模型.选择器优先级及使用.HTML5.CSS3.移动端适应.Java ...

  7. 史上最全 前端开发面试问题及答案整理 http://segmentfault.com/blog/trigkit4/1190000002562454

    https://github.com/hawx1993/Front-end-Interview-questions 本文旨在加深对前端知识点的理解,资料来源于网络,由本人(博客:http://segm ...

  8. 高频前端开发面试问题

    高频前端开发面试问题 参考网址: https://mp.weixin.qq.com/s?__biz=MzIzMTc4NzIyNw==&mid=2247488920&idx=1& ...

  9. 前端开发面试知识点大纲:

    本文转自:http://segmentfault.com/a/1190000002562454,尊重作者,尊重原创 前端开发面试知识点大纲: HTML&CSS: 对Web标准的理解.浏览器内核 ...

最新文章

  1. spring-cloud-ribbon负载均衡
  2. 事务对性能影响_开启英特尔事务扩展技术(TSX),即可提升intel CPU 近40%性能
  3. NTFS磁盘的安全与管理
  4. 03_03 bash特性详解(下)
  5. 集合-2(Set(HashSet、TreeSet、LinkedHashSet)、List(ArrayList、LinkedList、Vector)、Map(HashMap、TreeMap...))
  6. SQL2005备份集中的数据库备份与现有的数据库不同,错误号码:3154,解决方法...
  7. Sharepoint页面里添加.net托管代码
  8. JS组件系列——两种bootstrap multiselect组件大比拼
  9. 可视化大屏设计尺寸_大屏数据可视化设计规律
  10. C++ Primer Plus 第六版课后习题答案(第五章)
  11. [置顶] 施一公:优秀博士如何养成(全文) 清华大学演讲
  12. 【MySQL】汇总数据
  13. 岁月的剪影【五月世界末日】
  14. 8句极易踩中买家雷点的口头禅,你中了哪几条?
  15. 各种标点符号的英文怎么念
  16. 令人迷惑的scp路径
  17. 运维工程师必知:什么是千兆交换机?
  18. Java基础 常见数据结构与算法 项目总结
  19. centos开机启动后只是一条横杠
  20. python 董付国程序设计基础与应用第三版pdf_Python 程序设计基础(董付国 著)完整版PDF[6MB]...

热门文章

  1. 现代操作系统及进程管理(思维导图)
  2. 哪些你不知道的神回复?
  3. RabbitMQ初步到精通-第四章-RabbitMQ工作模式-Routing
  4. 转型产品经理必看 | 我是如何从程序员一步一步走向产品经理
  5. 程序员转型产品经理经验分享
  6. whistle使用指南
  7. Alpha测试和Beta测试:定义和区别
  8. 手柄映射软件_生化危机3该用哪款游戏手柄?北通宙斯给你四维游戏体验
  9. 不同装修风格如何选择地板?极家精装好吗?
  10. iOS字体不清晰问题