前端面试题总结(六)杂乱无章篇

前端面试题总结(六)杂乱无章篇

一、平时如何管理你的项目?

  1. 先期团队必须确定好全局样式、编码模式等。
  2. 编写习惯必须一致。
  3. 标注样式编写人,各模块都计时标注。
  4. 页面进行标注。
  5. css和HTML分文件夹并行存放,命名统一。
  6. js分文件夹存放,命名以该js功能为准的英文翻译。
  7. 图片采用整合的格式文件使用,尽量整合在一起使用,方便将来管理。

二、前端工程的价值体现在哪?

  1. 为简化用户使用提供技术支持(交互部分)。
  2. 为多个浏览器兼容性提供支持。
  3. 为提高用户浏览速度(浏览器性能)提供支持。
  4. 为跨平台或者其他基于webkit或其他渲染引擎的应用提供支持。
  5. 为展示数据提供支持(数据接口)。

三、IE个版本和chrome可以并行下载多少个资源?

  • IE6 ——2个。
  • IE7+ ——6个。
  • Firefox ——6个。
  • chrome ——6个。

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

  • 文件合并、文件最小化(压缩)、使用CDN托管、缓存的使用(多个域名来提供缓存)。

五、什么样的前端代码才是最好的?

  • 高复用低耦合,这样文件小,好维护,而且好扩展。

六、在css/js代码上线之后开发人员经常会优化性能,从用户刷新网页开始,一次js请求一般情况下有哪些地方会有缓存处理?

  • dns缓存、cdn缓存、浏览器缓存、服务器缓存。

七、一个页面上有大量的图片(大型电商网站),加载很慢,你有哪些方法优化这些图片的加载?

  1. 图片懒加载,在页面上的未可视区域添加一个滚动事件,判断图片位置与浏览器顶端的距离与页面的距离,如果图片位置与浏览器顶端的距离小于与页面的距离,优先加载。
  2. 如果是幻灯片、相册等,可以使用图片预加载,将当前展示图片的前一张和后一张优先下载。
  3. 如果图片是css图片,可以使用CSSsprite,SVGsprite,Base64等技术。
  4. 如果图片过大,可以使用特殊编码的图片,加载时会先加载一张压缩的特别厉害的缩略图,以提高用户体验。
  5. 如果图片展示区域小于图片的真实大小,则因在服务器端根据业务需要先行进行图片压缩,图片压缩后大小与展示一致。

八、SEO优化方式?

  1. meta标签优化:主要包括主题(Title),网站描述(Description),和关键词(Keywords)。还有一些其它的隐藏文字比如Author(作者),Category(目录),Language(编码语种)等。
  2. 如何选取关键字并在网页中放置:搜索就得用关键词。关键词分析和选择是SEO最重要的工作之一。首先要给网站确定主关键词(一般在5个上下),然后针对这些关键词进行优化,包括关键词密度(Density),相关度(Relavancy),突出性(Prominency)等等。
  3. 了解主要搜索引擎。
  4. 链接交换和链接广泛度(Link Popularity):网页内容都是以超文本(Hypertext)的方式来互相链接的,网站之间也是如此。除了搜索引擎以外,人们也每天通过不同网站之间的链接来Surfing(“冲浪”)。其它网站到你的网站的链接越多,你也就会获得更多的访问量。更重要的是,你的网站的外部链接数越多,会被搜索引擎认为它的重要性越大,从而给你更高的排名。
  5. 合理的标签使用

九、移动端点击事件有延迟,延迟多久?为什么会有?怎么解决?

  • click有300ms延迟,为了实现Safari的双击事件的设计,浏览器要知道你是不是要双击操作。

十、你如何优化自己的代码?

  1. 代码重用
  2. 避免全局变量(命名空间,封闭空间,模块化mvc..)
  3. 拆分函数避免函数过于臃肿:单一职责原则
  4. 适当的注释,尤其是一些复杂的业务逻辑或者是计算逻辑,都应该写出这个业务逻辑的具体过程
  5. 内存管理,尤其是闭包中的变量释放

十一、TCP传输的三次握手四次挥手策略?

  • 三次握手:
    1. 发送端先发送一个带SYN的数据包给对方。
    2. 接收端收到后回传一个带有SYN/ACK的数据包表示传达确认信息。
    3. 发送端再回传一个带ACK数据包,表示握手结束。
  • 四次挥手:
    1. 主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,但是此时主动方还可以接受数据。
    2. 被动关闭方收到FIN后,发送一个ACK给对方,确认序号为收到的序号+1。
    3. 被动方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据发送完了,不会再给你发数据了。
    4. 主动方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,完成4次挥手。

十二、http和HTTPS?

  • http协议通常承载于TCP协议之上,在http和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了我们常说的HTTPS。默认http端口号为80,HTTPS的端口号为443。
  • 为什么HTTPS安全?
  • 因为网络请求需要中间有很多的服务器路由器的转发。中间的节点都可能篡改信息,而如果使用HTTPS,秘钥在你和终点站才有。HTTPS之所以比http安全,是因为它利用SSL/TLS协议传输。它包含整数,写在,流量转发,负载均衡,页面适配,浏览器适配,refer传递等。保证了传输过程的安全性。
  • http协议通常承载于TCP协议之上,在http和TCP之间添加一个安全协议层(SSL和TSL),这个时候,就成了HTTPS。默认http端口号是80,HTTPS端口号是443。
  • http是超文本传输协议,信息是明文传输。
  • HTTPS利用了SSL/TLS加密传输协议。
  • http的连接很简单,是无状态的。
  • HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

十三、说说什么是协议?以及所知的各种协议?

  • 协议是值计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。
  1. HTTP协议:超文本传输协议,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
  2. DHCP协议:动态逐级配置协议,是一种让系统得以链接到网络上,并获取所需要的配置参数手段。
  3. TFTP协议:是TCP/IP协议族中的一个用来在客户机遇服务器之间进行简单文件传输的协议,提供不复杂、开销不打的文件传输服务。
  4. ICMP协议:因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP逐级、路由器之间传递控制消息。
  5. TCP/IP协议:是目前应用最为广泛的协议,是构成Internet国际互联网协议的最为基础的协议,有TCP和IP协议组成。
  6. TCP协议:面向连接的、可靠的、基于字节流的传输层通信协议,负责数据的可靠性传输的问题。
  7. IP协议:用于报文交换网络的一种面向数据的协议,主要负责给每台网络设备一个网络地址,保证数据传输到正确的目的地。
  8. UDP协议:无连接、不可靠、基于报文的传输层协议,优点是发送后不用管,速度比TCP快。

十四、说说网络分层里七层模型是哪七层?

  1. 应用层:应用层、表示层、会话层(从上往下)(HTTP、FTP、SMTP、DNS)
  2. 传输层:(TCP和UDP)
  3. 网络层:(IP)
  4. 物理层和数据链路层(以太网)
  5. 每一层作用:
    1. 物理层:通过没接传输比特,确定机械及电气规范。
    2. 数据链路层:将比特组装成帧和点到点的传递。
    3. 网络层:负责数据包从源到宿的传递和网际互联。
    4. 传输层:提供端到端的可靠报文传递和错误恢复。
    5. 会话层:建立、管理和终止绘画。
    6. 表示层:对数据进行翻译、加密和压缩。
    7. 应用层:允许访问OSI环境的手段。

十五、对于http2.0知道多少?

  1. 引入了“服务端推”的概念,它允许服务端在客户端需要数据之前就主动的将数据发送到客户端缓存中,从而提高性能。
  2. 提供了更多加密支持。
  3. 使用多路技术,允许多个消息在一个连接上同时交差。
  4. 它增加了头压缩,因此即使非常小的请求,其请求和响应的header都只会占用很小比例的宽带。

十六、http状态消息?

  • 2开头成功状态、3开头重定向、4开头请求错误、5或6开头服务器错误。

十七、线程与进程的区别?

 

  1. 一个程序至少有一个进程,一个进程至少有一个线程。
  2. 线程的划分尺度小于进程,使得多线程程序的并发性高。
  3. 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
  4. 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但线程不能独立执行,必须依存在应用程序中,由应用程序提高多个线程执行控制。
  5. 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但是操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。

 

十八、AMD(Modules/Asynchronous-Definition)、CMD(commonModuleDefinition)规范区别?

  • AMD:异步模块定义,所有模块都将被异步加载,模块加载不影响后面语句运行。所有依赖某些模块的语句均放置在回调函数中。
  • 区别:
    1. 对于依赖的模块,AMD是提前执行的,CMD是延迟执行的。不过requireJS从2.0开始也可以改成延迟执行。
    2. CMD推崇依赖就近,AMD推崇依赖前置。

十九、http请求方法?

  • 根据http标准,http请求可以使用多种请求方法。
  • http1.0定义了三种请求方法:get、post和head方法。
  • http1.1新增了五种请求方法:options、put、delete、trace、connect方法。
    1. get:请求指定的页面信息,并返回实体主体。
    2. head:类似于get请求,只不过返回的响应中没有具体内容,用于获取报头。
    3. post:向指定资源提交数据进行处理请求(例如表单提交)。数据被包含在请求体重。post请求可能会导致新的资源的建立和已有资源的修改。
    4. put:从客户端向服务器传送的数据取代指定的文档的内容。
    5. delete:请求服务器删除指定的页面。
    6. connect:允许客户端查看服务器的性能。
    7. options:允许客户端查看服务器的性能。
    8. trace:回显服务器收到的请求,主要用于测试或诊断。

二十、为什么利用多个域名来提供网站资源会更有效?

  1. CDN缓存更方便。
  2. 突破浏览器并发限制(一般每个域名建立的链接不超过6个)。
  3. cookieless,节省宽带,尤其是上行宽带一般比下行要慢。
  4. 对于UGC的内容和主站隔离,防止不必要的安全问题(上传js窃取主站cookie之类的)。正式这个原因要求用户内容的域名必须不是自己主站的子域名,而是一个完全独立的第三方域名。
  5. 数据做了划分,甚至切到了不同的物理集群,通过子域名来分流比较绅士,这个可能被用的不多。
  • PS:关于Cookie的问题,带宽是次要的,安全隔离才是主要的。关于多域名,也不是越多越好,虽然服务器端可以做泛解释,浏览器做dns解释也是耗时间的,而且太多域名,如果要走https的话,还有要多买证书和部署的问题。

二十三、请谈一下你对网页标准和标准制定机构重要性的理解?

  • w3c存在的意义就是让浏览器兼容性问题尽量小,首先是他们对浏览器开发者的约束,然后是对开发者的约束。
  • 网页标准和标准制定机构都是为了能让web发展的更‘健康’,开发者遵循统一的标准,降低开发难度,开发成本,SEO也会更好做,也不会因为滥用代码导致各种BUG、安全问题,最终提高网站易用性。

本文章出自小小菜鸟学web,转载请注明

posted @ 2017-06-10 10:30  小小菜鸟学web  阅读(99)  评论(0编辑  收藏  举报