美文网首页前端攻城狮
前端面试集锦之一

前端面试集锦之一

作者: 王不懂Sir | 来源:发表于2017-09-14 15:37 被阅读71次

    常见问题:

    1你在昨天/本周学到了什么?

    2编写代码的哪些方面能够使你兴奋或感兴趣?

    3你最近遇到过什么技术挑战?你是如何解决的?

    4在制作一个网页应用或网站的过程中,你是如何考虑其UI、安全性、高性能、SEO、可维护性以及技术因素的?

        一 UI

             界面美观,要有个性,考虑用户使用的逻辑要简单,用起来舒适自由。使用习惯要符合大部分用户的习惯,比如少让用户输入,采用选择的方式,提供搜索和提示功能。

        二 安全性:

              1、对输入进行有效性验证(非法字符,特殊字符)如PHP中的方法htmlspecialchars()将特殊字符(>)转化为html实体,trim()去掉用户输入的不必要字符,stripslashes()去掉用户输入的反斜杠等等。

               2、对交互操作进行身份验证和授权

               3、异常错误处理(向用户反馈单额错误提示不要让攻击者分析出一些网络环境和配置)

               4、缓冲区溢出;

               5、注入攻击:注入攻击是应用违背了“数据与代码分离原则”导致的结果。它有两个条件:一是用户能够控制数据的输入;二是代码拼凑了用户输入的数据,把数据当作代码执行了。

               6、不安全的存储;不要使用单独类似MD5或SHA加密策略,在进行散列密码值时,使用作料或多种作料以防止彩虹攻击。对于短密码,采 用一个短散列算法处理,例如:bcrypt或scrypt。

        三 高性能:

               1、DNS(域名系统)负载均衡;在DNS中为多个IP地址配置同一个域名如:www.baidu.com,因而查询这个域名的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的,从而减小服务器端的压力。DNS负载均衡是一种简单而有效的方法,但是它不能区分服务器的差异,也不能反映服务器的当前运行状态。

                2、HTTP重定向(通过使客户端重定向,来分散和转移请求压力,比如一些下载服务通常都有几个镜像服务器);301重定向是网址重定向最为可行的一种办法,seo最为友好。

                3、分布式缓存;

                4、数据库扩展:读写分离,垂直分区,水平分区

                5、反向代理负载均衡:让代理服务器将请求均匀转发给多台内部Web服务器之一上,从而达到负载均衡的目的。这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web 服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式。

    使用反向代理的好处是,可以将负载均衡和代理服务器的高速缓存技术结合在一起,提供有益的性能,具备额外的安全性,外部客户不能直接访问真实的服务器。并且实现起来可以实现较好的负载均衡策略,将负载可以非常均衡的分给内部服务器,不会出现负载集中到某个服务器的偶然现象。

        四SEO:

               选好关键字,描述语言,修饰性图片换成文本,合理使用h1-h6,对图片添加alt属性,链接添加target属性。

        五可维护性:

                代码是否容易被理解,是否容易被修改和增加新的功能,当出现问题时是否能快速定位到问题代码。

    5请谈谈你喜欢的开发环境。

    6你最熟悉哪一套版本控制系统?

    7你能描述当你制作一个网页的工作流程吗?

           内容分析:分清展现在网络中内容的层次和逻辑关系

           结构设计:写出合理的html结构代码

           布局设计:使用html+css进行布局

           样式设计:首先要使用reset.css

           交互设计:鼠标特效

           行为设计:js代码,ajax页面行为和从服务器获取数据

           测试兼容性;优化性能。

    8假若你有5个不同的样式文件(stylesheets),整合进网站的最好方式是?

           根据class命名规则写样式,这样样式不会冲突,提取公共的样式,进行合并,非公共的单独拎出来。然后打包压缩一下就行了,若每个文件都很大,就需要分模块加载。

    9你能描述渐进增强(progressive enhancement)和优雅降级(graceful degradation)之间的不同吗?

     .transition{

    -webkit-transition:all .5s;

    -moz-transition:all .5s;

    -o-transition:all .5s;

    transition:all .5s;

    }

    .transition{

    transition:all .5s;

    -o-transition:all .5s;

    -moz-transition:all .5s;

    -webkit-transition:all .5s;

    }

                渐进增强(progressive enhancement):针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。(从被所有浏览器支持的基本功能开始,逐步地添加那些只有新式浏览器才支持的功能,向页面添加无害于基础浏览器的额外样式和功能。当浏览器支持时,它们会自动地呈现出来并发挥作用。)

                优雅降级(graceful degradation):一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。(Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工作。由于IE独特的盒模型布局问题,针对不同版本的IE的hack实践过优雅降级了,为那些无法支持功能的浏览器增加候选方案,使之在旧式浏览器上以某种形式降级体验却不至于完全失效。)

                 区别:优雅降级是从复杂的现状开始,并试图减少用户体验的供给,而渐进增强则是从一个非常基础的、能够起作用的版本开始,并不断扩充,以适应未来环境的需要。

    10你如何对网站的文件和资源进行优化?

                  1. 确保网站信息描述全站统一

                  2. 清楚网站内部无效重复的信息

                  3. 让用户能迅速准确的在网站查看相关内容

                  4. 优化内部结构便于搜索引擎的理解和收录

           为了达到以上这几个效果,我们一般会采取几种方法:关键词优化,网站页面优化,内部结构信息优化和如何提高网页的友好度和用户体验效果。

    11浏览器同一时间可以从一个域名下载多少资源?

    o有什么例外吗?

    12请说出三种减少页面加载时间的方法。(加载时间指感知的时间或者实际加载时间)

               1.减少HTTP请求;

               2.合并压缩Js/css文件;

               3.使用缓存manifest;

               4.服务器端开启gzip;

               5.使用CDN,用户可以就近获取所需要的资源,访问速度有保障,稳定性也有保障

               6.外部JS和CSS放底下

                7.尽可能少的操作DOM,某些需要重复操作的DOM可以放变量里

    13如果你参与到一个项目中,发现他们使用Tab来缩进代码,但是你喜欢空格,你会怎么做?

               1、建议项目使用EditorConfig之类的规范

                2、为了保持风格的一致性,保持原有

                3、直接使用vim里的retab命令将所有的tab转换成空格

    14请写一个简单的幻灯效果页面。

    15如果今年你打算熟练掌握一项新技术,那会是什么?

    16请谈谈你对网页标准和标准制定机构重要性的理解。

            网页标准和标准制定机构都是为了能让web发展的更‘健康’,首先约束浏览器开发者遵循统一的标准,其次约束网站开发者,这样降低开发难度,开发成本,SEO也会更好做,也不会因为滥用代码导致各种BUG、安全问题,最终提高网站易用性。

              w3c存在的意义就是让浏览器兼容性问题尽量小,首先是他们对浏览器开发者的约束,然后是对开发者的约束。

    17什么是FOUC (无样式内容闪烁)?你如何来避免FOUC?

              如果使用import方法对CSS进行导入,会导致某些页面在Windows 下的Internet Explorer出现一些奇怪的现象:以无样式显示页面内容的瞬间闪烁,这种现象称之为文档样式短暂失效(Flash of Unstyled Content),简称为FOUC。

               原因大致为:

                       1,使用import方法导入样式表。

                        2,将样式表放在页面底部

                        3,有几个样式表,放在html结构的不同位置。

                   其实原理很清楚:当样式表晚于结构性html加载,当加载到此样式表时,页面将停止之前的渲染。此样式表被下载和解析后,将重新渲染页面,也就出现了短暂的花屏现象。

               解决方法:

                           使用LINK标签将样式表放在文档HEAD中。

    18请解释什么是ARIA和屏幕阅读器(screenreaders),以及如何使网站实现无障碍访问(accessible)。

             ARIA 为Web app提供满足用户不同需求的解决方案。建设起用户和软件之间的桥梁。

             新的HTML5标准中增加 aria-* 的标签属性,全称Accessible Rich Internet Application。与role标签属性配合使用。

             role属性表示一个非标准的tag的实际作用。比如用div做button,那么设置div 的 role=“button”,辅助工具就可以认出这实际上是个button。而aria-*的作用就是描述这个tag在可视化的情境中的具体信息。

              最简单的应用比如,

               < div role=”checkbox” aria-checked=”checked”>

               辅助工具就会知道,这个div实际上是个checkbox的角色,为选中状态。

    19请解释CSS动画和JavaScript动画的优缺点。

               1. css3动画只兼容Ie10+,js动画几乎兼容所有浏览器;

                2.js动画更灵活,css3动画更简单

                3.js动画复用性高

                4.时间尺度上,css动画粒度比较粗,js动画可以更精细;

                5.帧速不好的浏览器CSS动画可以做到优雅降级,js代码还需要写额外的代码

                6.在某些条件下,css动画性能优于JS动画;(webkit内核的浏览器,js执行昂贵的任务,不引起layout和repaint情况下)

                7.css3有天然的时间支持如(animationENd和transitionEnd)

    20什么是跨域资源共享(CORS)?它用于解决什么问题?

               当使用ajax跨域请求时,浏览器报错:XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin.肯定是跨域的问题,如果用jsonp或者proxy的方式进行修改的话未免需要太大的工程量,所以采用CORS这种比较简单高效的技术。相比JOSP的方式,CORS更为高效。JSONP由于它的原理只能实现GET请求,而CORS支持所有类型的HTTP请求。使用CORS,可以使用普通的ajax实现跨域

    相关文章

      网友评论

      本文标题:前端面试集锦之一

      本文链接:https://www.haomeiwen.com/subject/laedsxtx.html