• 2021春招冲刺-1216 死锁 | 箭头函数 | 内联元素 | 页面渲染


    2021春招冲刺

    12.21日

    1. 操作系统 | 什么是死锁,产生原因,如何预防,如何破解

    定义 :

    如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的,无外力作用,它们都将无法推进下去。

    产生原因

    java死锁必要条件:

    • 1、互斥使用。即当资源被一个线程使用(占有)时,别的线程不能使用
    • 2、不可抢占。资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放。
    • 3、请求和保持。进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程战友,此时请求进程被阻塞,但对自己已获得的资源保持不变。
    • 4、循环等待。即存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。这样就形成了一个等待环路。

    原因:竞争不可抢占性资源、竞争可消耗资源、进程推进顺序不当

    如何预防

    • 破坏“请求和保持条件”
      第一种协议:所有进程开始运行之前,必须一次性地申请在整个运行过程中需要的全部资源。
      第二种协议:允许一个进程只获得运行初期所需要的全部资源,运行过程中再逐步释放。
    • 破坏“不可抢占”条件
      当一个已经保持了某些不可被抢占资源的进程,提出新的资源请求而无法得到满足的时候,必须释放已有资源。
    • 破坏“循环等待”条件
      对系统所有资源类型进行线性排序,并赋予不同的序号。
    • 银行家算法避免死锁

    如何破解

    • 抢占资源
    • 终止进程 终止所有的进程或者逐个终止进程。

    2. JS | 箭头函数有哪些特点

    • 箭头函数是匿名函数
    • 箭头函数的this指向外层作用域的this的值
    • 不存在arguments对象,用 rest 参数代替。
      1.rest形式为(…变量名)可以获取函数的多余参数,并且获取到的是真正的数组对象。
      2.arguments只是一个类数组对象,除了length属性和可以使用arguments[0]获取元素之外没有数组的其他特性,可以使用[…arguments]或者Array.prototype.slice.call(arguments,0)、Array.prototype.concat.call(arguments,0)转为数组
    • 没有prototype属性(原型属性)
    • 不需要function关键字来创建函数,并省略return关键字。
    • 箭头函数不能用作构造函数

    3. HTML | 常见的内联元素有哪些,块元素有哪些

    内联元素a span input i img textarea
    百度后补充:abbr - 缩写 acronym - 首字 b - 粗体 br - 换行 cite - 引用 em - 强调 kbd - 定义键盘文本 label - 表格标签 u - 下划线

    块元素div p ul ol li h1-6 form
    百度后补充:address - 地址 blockquote - 块引用 dir - 目录列表 dl - 定义列表 hr - 水平分隔线 table - 表格


    4. css | css是否会阻塞页面渲染与如何解除

    浏览器渲染的流程

    HTML解析文件,生成DOM Tree,解析CSS文件生成CSSOM Tree
    将Dom Tree和CSSOM Tree结合,生成Render Tree(渲染树)
    根据Render Tree渲染绘制,将像素渲染到屏幕上。

    • DOM解析和CSS解析是两个并行的进程,CSS加载不会阻塞DOM的解析
    • CSS资源加载完成(或者CSS资源加载失败)后,才能开始渲染。因此,CSS加载会阻塞Dom的渲染
    • js可能会操作之前的Dom节点和css样式,因此浏览器会维持html中css和js的顺序。因此,样式表会在后面的js执行前先加载执行完毕。所以css会阻塞后面js的执行

    解决方案

    • 使用CDN(因为CDN会根据你的网络状况,替你挑选最近的一个具有缓存内容的节点为你提供资源,因此可以减少加载时间)
    • 对css进行压缩(可以用很多打包工具,比如webpack,gulp等,也可以通过开启gzip压缩)
    • 合理的使用缓存(设置cache-control,expires,以及E-tag都是不错的,不过要注意一个问题,就是文件更新后,你要避免缓存而带来的影响。其中一个解决防范是在文件名字后面加一个版本号)
    • 减少http请求数,将多个css文件合并,或者是干脆直接写成内联样式(内联样式的一个缺点就是不能缓存)
  • 相关阅读:
    Django 常见问题
    post和get的区别
    Django 基础学习笔记二
    Django 中的分页器
    Python 微服务框架 Nameko 微服务通信(RabbitMQ)
    《大数据白皮书 2020.12》解读
    练习Div+Css
    利用JAVAScript调用WebService
    统计在线人数和历史访问人数
    自己写的一个DBHelper
  • 原文地址:https://www.cnblogs.com/banshanliang/p/14168767.html
Copyright © 2020-2023  润新知