栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

开发及运行环境面试题笔记

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

开发及运行环境面试题笔记


开发环境
git
  • 常用的 git 命令
    • git add .
    • git checkout xxx
    • git commit -m “xxx”
    • git push origin master
    • git pull origin master
    • git branch
    • git checkout -b xxx
    • git merge xxx
chrome 调试工具
  • Element – DOM 结构
  • Console – 打印内容
  • debugger – 断点调试
  • Network – 资源加载情况
  • Application – localStorage SessionStorage cookie
抓包
  • 移动端 h5 页,查看网络请求,需要用工具抓包
  • windows 一般用 fiddler
  • Mac OS 一般用 charles

抓包过程

  • 手机电脑连接同一个局域网
  • 将手机代理到电脑上
  • 手机浏览网页,即可抓包
  • 查看网络请求
  • 网址代理
  • https
webpack babel
  • ES6 模块化,浏览器暂不支持
  • ES6 语法,浏览器并不完全支持
  • 压缩代码,整合代码,以让网页加载更快
linux 命令
  • 公司的线上机器一般都是 linux (参考阿里云)
  • 测试机也要保持一致,用 linux
  • 测试机或线上机出了问题,本地又不能复现,需要去排查

常用命令

  • ssh work@192.168.10.21 :进入测试机
  • ls :查看文件夹及文件
  • ls -a :查看所有文件
  • ll :查看列表
  • clear :清屏
  • mkdir 文件夹名 :创建文件夹
  • rm -rf 文件夹名 :删除文件夹及其中所有文件
  • touch 文件名 :新建文件
  • vi 文件名 :新建文件并进入 vim 编辑器
  • rm 文件名 :删除文件
  • cd 目录 :定位到目录
  • mv 旧文件名 新文件名 :修改文件名
  • mv 文件名 目标目录 :移动文件
  • cp 原文件 新文件 :拷贝
  • vim 文件名 :查看文件内容
  • cat 文件名 :打印文件内容
  • head 文件名 :打印文件头部分内容
  • tail 文件名 :打印文件尾部分内容
  • grep “关键字” 文件名 :在文件中查看关键字是否存在并打印

vim 编辑器

  • i 键 :进入 INSERT 模式 – 可以编辑
  • esc 键 :关闭 INSERT 模式
  • :w :保存
  • :q :退出
  • :q! :强制退出
  • vimtutor :教程

运行环境
  • 运行环境即浏览器 (server 端有 node.js)
  • 下载网页代码,渲染出页面,期间会执行若干 JS
  • 要保证代码在浏览器中稳定且高效
网页加载过程
  • 加载资源的形式

    • html 代码
    • 媒体文件,如图片、视频等
    • Javascript css
  • 加载资源的过程

    • DNS 解析:域名 -> IP 地址
    • 浏览器根据 IP 地址向服务器发起 http 请求
    • 服务器处理 http 请求,并返回给浏览器
  • 渲染页面的过程

    • 根据 HTML 代码生成 DOM Tree
    • 根据 CSS 代码生成 CSSOM
    • 将 DOM Tree 个 CSSOM 整合形成 Render Tree
    • 根据 Render Tree 渲染页面
    • 遇到 script 标签则暂停渲染,优先加载并执行 js 代码,完成后再继续
  • 从输入 url 到渲染出页面的整个过程

  • window.onload 和 DOMContentLoaded 的区别

    window.addEventListener('load', function () {
      // 页面的全部资源加载完才会执行,包括图片、视频等
    })
    document.addEventListener('DOMContentLoaded', function () {
      // DOM 渲染完即可执行,此时图片、视频可能没有加载完
    })
    
性能优化
  • 性能优化原则

    • 多使用内存、缓存或其他方法
    • 减少 CPU 计算量,减少网络加载耗时
    • 适用于所有编程的性能优化 – 空间换时间
  • 从何入手

    让加载更快

    • 减少资源体积:压缩代码

    • 减少访问次数:合并代码,SSR 服务器端渲染,缓存

      缓存:

      • 静态资源加 hash 后缀,根据文件内容计算 hash

      • 文件内容不变,则 hash 不变,则 url 不变

      • url 和文件不变,则会自动触发 http 缓存机制,返回 304
        SSR:

      • 服务器端渲染:将网页和数据一起加载,一起渲染

      • 非 SSR (前后端分离):先加载网页,再加载数据,在渲染数据

      • 早先的 JSP ASP PHP ,现在的 Vue React Angular

    • 使用更快地网络:CDN

    让渲染更快

    • CSS 放在 head ,JS 放在 body 最下面
    • 今早开始执行 JS ,用 DOMContentLoaded 触发
    • 懒加载 (图片懒加载,上滑加载更多)

    开发及运行环境面试题笔记
    • 对 DOM 查询进行缓存
    • 频繁 DOM 操作,合并到一起插入 DOM 结构
    • 节流 throttle 防抖 debounce (体验优化)
  • 手写防抖

    • 监听一个输入框的,文字变化后触发 change 事件
    • 直接用 keyup 事件,则会频繁触发 change 事件
    • 防抖:用户输入结束或暂停时,才会触发 change 事件
    // 定义防抖函数
    function debounce(fn, delay = 500) {
      // timer 是闭包中的
      let timer = null
      return function () {
        if (timer) {
          clearTimeout(timer)
        }
        timer = setTimeout(() => {
          fn.apply(this, arguments)
          timer = null
        }, delay)
      }
    }
    // 使用
    input1.addEventListener(
      'keyup',
      debounce(function () {
        console.log(input1.value)
      }),
      300
    )
    
  • 手写节流

    • 拖拽一个元素时,要随时拿到该元素被拖拽的位置
    • 直接用 drag 事件,则会频繁触发,很容易导致卡顿
    • 节流:无论拖拽速度多快,都会每隔 100ms 触发一次
    // 定义节流函数
    function throttle(fn, delay = 100) {
      let timer
      return function () {
        if (timer) {
          return
        }
        timer = setTimeout(() => {
          fn.apply(this, arguments)
          timer = null
        }, delay)
      }
    }
    // 使用
    div1.addEventListener(
      'drag',
      throttle(function (e) {
        console.log(e.offsetX, e.offsetY)
      }, 200)
    )
    

     fn.apply(this, arguments)作用:使得内部的回调函数能监听到事件对象 e

安全

常见的 web 前端攻击方式

  • XSS 跨站请求攻击

    • 一个博客网站,发表一篇博客,其中嵌入 script 脚本
    • 脚本内容:获取 cookie ,发送到我的服务器(服务器配合跨域)
    • 发布这篇博客,有人查看它,我轻松收割访问者的 cookie

    XSS 预防

    • 替换特殊字符,如 < 变为 < > 变为 >