前端面试每日3+2(第17天)

12/18/2019 每日3+2

当你发现自己的才华撑不起你的野心时,就请安静下来学习吧!

鲁迅说过:答案仅供参考...

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

解析:

  1. 合并文件(目的是减少http请求):合并js和css等文件,使用css sprites合并图片。
  2. 使用CDN(内容分发网络)加速,降低通信距离。
  3. 文件最小化/文件压缩,启用Gzip压缩文件。
  4. 使用缓存,添加Expire/Cache-Control头。

浏览器中有个属性 Performance -》 timing 可以获取所有的页面渲染时常

参考1 (opens new window) 参考2 (opens new window)

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

解析:

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

# 3、简单介绍下进程和线程?

解析:

是什么? 对于操作系统来说,一个任务就是一个进程;一个任务同时不止干一个事情,需要同时运行多个子任务,进程内的子任务就是线程。 计算机的核心是cpu,任何时刻,CPU总是运行一个进程,其他进程处于非运行状态。

区别

  1. 进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)
  2. 进程有自己的地址空间,每启动一个进程,系统就会为他分配地址空间,建立数据来维护代码段,堆栈块和数据段,这种操作非常昂贵;线程是共享进程中的数据的,引用的相同的地址空间,所以进程切换比线程切换更耗时。
  3. 同进程下线程之间通信更方便,同一进程下数据是共享的,不同进程之间通信需要借助通信的方式(IPC)进行。不同处理同步互斥的多线程程序是难点
  4. 多进程程序更健壮,一个程序挂掉不会影响其他程序,多线程程序一个线程挂掉整个程序都挂掉了

# 4、js是单线程还是多线程?why?

解析:

JavaScript是单线程的。这主要取决于它的用途。作为脚本语言的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很多复杂的同步问题。比如,假定JavaScript同时有两个线程,一个线程在DOM节点上添加内容,另一个线程删除了该节点,这是浏览器应该以哪个线程为准呢?

# 5、简单说下前端框架和类库有哪些?

解析:

库:主要指的是封装好的特定的集合,提供给开发者使用,而且是特定于某一方面的集合(方法和函数),库没有控制权,控制权在使用者手中。在库中查询自己需要的功能使用,我们可以从封装的角度理解库。

框架:就是一套架构,会基于自身的特点向用户提供一整套基本完整的解决方案,而起控制权在框架本身,使用者要按照框架规定的某种规范开发。

注意react本身是库,一个前端渲染库。react/react-router/react-reducx结合起来才叫框架。

参考 (opens new window)

Last Updated: 1/14/2020, 7:56:38 AM
    asphyxia
    逆时针向