IDE

  • webstorm
  • sublime
  • vscode
  • atom
  • 插件 插件 插件 ! ! !

Git

  • 正式项目都需要代码版本管理
  • 大型项目需要多人协作开发
  • Gitlinux 是一个作者
  • 服务器如 : github.com coding.net
git add .   // 添加 新增或者修改的文件
git commit -m "xxx"  // 把修改的东西先提交到本地区域, "xxx" 修改的提示
git checkout xxx  // 用于切换分支或恢复工作树文件。git push  // 推送到服务器
git pull  // 从服务器拉下来代码git branch  // 分支
git checkout -b xxx  // 新建一个分支
git checkout xx  // 切换分支
git merge xxx  // 用于从指定的commit(s)合并到当前分支的操作。
复制代码
git branch  // 查看分支 master
git checkout -b dev  // 创建分支 dev,并切换到dev 分支
git branch  // 查看分支 master dev
git checkout master 切换到,aster
git merge dev // 合并分支
复制代码

AMD

  • 不使用模块化的情况

    • utils.js getFormatDate函数 底层工具
    • a-util.js aGetFormatDate函数 使用getFormatDate
    • a.js aGetFormatDate 业务代码,层级引用关系
    // utils.js
    function getFormatDate(date, type) {// type = 1, 返回 2019-01-12 格式// type = 2, 返回 2019年1月12日 格式// ...
    }
    // a-util.js
    function aGetFormatDate(date) {// 要求返回 2019年1月12日 格式return getFormatDate(date, 2)
    }
    // a.js
    var dt = new Date()
    console.log(aGetFormatDate(dt))
    复制代码
    • 全局变量污染,可能会覆盖
    • 引用顺序不能乱
  • 使用模块化

    • 直接使用<script src="a.js"></script> 其他根据依赖自动引用
    • 另外两个函数, 没做成全局变量, 不会带来污染和覆盖
伪代码
// utils.js
export {  // 暴露出去getFormatDate: function (date, type) {// type = 1, 返回 2019-01-12 格式// type = 2, 返回 2019年1月12日 格式// ...}
}// a-util.js
var getFormatDate = require('util.js')  // 引用
export {  // 暴露出去aGetFormatDate: function (date) {// 要求返回 2019年1月12日 格式return getFormatDate(date, 2)}
}// a.js
var aGetFormatDate = require('a-util.js')
var dt = new Date()
console.log(aGetFormatDate(dt))
复制代码
  • AMD

    • require.js
    • 全局 define 函数
    • 全局 require 函数
    • 依赖 Js 会自动 异步加载
    • 使用 require.js
    // util.js
    define(function() {return {getFormatDate: function (date, type) {if (type === 1) {return '2019-02-14'} else if (type === 2) {return '2019年2月14日'}}}
    })// a-util.js
    define(['./util.js'], function (util) {return {aGetFormatDate: function (date) {return util.getFormatDate(date, 2)}}
    })// a.js
    define(['./a-util.js'], function (aUtil) {return {printDate: function (date) {console.log(aUtil.aGetFormatDate(date))}}
    })// main.js
    require(['./a.js'], function (a) {var dt = new Date()a.printDate(dt)
    })
    复制代码

CommonJS

  • nodejs 模块化规范, 现在被大量用前端, 原因:

    • 前端开发依赖的插件和库, 都可以从 npm 中获取
    • 构建工具的高度自动化, 使得使用 npm 成本非常低
    • CommonJS 不会异步加载JS, 而是同步一次性加载出来
  • 使用 CommonJs

// util.js
module.exports = {getFormatDate: function (date, type) {if (type === 1) {return '2019-02-14'} else if (type === 2) {return '2019年2月14日'}}
}// a-util.js
var util = require('util.js')  // 获取
module.exports = {  // 推出aGetFormatDate: function (date) {return util.getFormatDate(date, 2)}
}// a.js
var aUtil = require('a-util.js')
module.exports = {printDate: function (date) {console.log(aUtil.aGetFormatDate(date))}
}
复制代码

AMD 和 CommonJS 的使用场景

  • 需要异步加载 JS, 使用 AMD
  • 使用了 npm 之后建议使用 CommonJS

上线回滚

  • 上线和回滚的基本流程

    • 上线流程要点

      • 将测试完成的代码提交到git版本库的master分支
      • 将当前服务器的代码全部打包并记录版本号, 辈分
      • 将master分支的代码提交覆盖到线上服务器, 生成新版本号
    • 回滚流程要点
      • 将当前服务器的代码打包并记录版本号, 备份
      • 将备份的上一个版本号解压, 覆盖到线上服务器, 并生成新的版本号
  • linux基本命令

    • 服务器使用 linux 居多, serve版, 只有命令行
    • 测试环境要匹配线上环境, 因此也是 linux
    • 经常需要登录测试机来自己配置,获取数据
// 登录
ssh name@servemkdir test  // 创建文件夹
ls  // 查看里面的文件
cd xxx  // 到那个目录
pwd  // 查看当前路径
cd ..  // 返回升一级目录
rm -rf test  // 删除文件夹 testcp a.js a1.js  // 拷贝文件
mv a1.js src/a1.js  // 移动rm a.js  // 删除文件vim b.js  // 打开 vim, 并创建cat a.js  // 查看文件内容
head a.js  // 查看文件前面的内容
tail a.js  // 查看尾部的一点内容head -n 1 a.js  // 只看第一行的内容
tail -n 2 a.js  // 后两行的内容grep '2' a.js  // 搜索
复制代码

页面加载过程

题目

  • 从输入 url 到得到 html 的详细过程
  • window.onloadDOMContentLoaded 的区别
    • 页面的全部资源加载完才会执行, 包括图片, 视频等
    • DOM 渲染完即可执行, 此时图片, 视频还没加载完

知识点 :

  • 加载资源的形式

    • 输入 url (或跳转页面) 加载 html
    • http://baidu.com
    • 加载 html 中的静态资源
    • <scrript src="./a.js"></script>
  • 加载一个资源的过程

    • 浏览器根据 DNS 服务器得到域名的 IP 地址
    • 向这个 IP 的机器发送 http 请求
    • 服务器收到,处理并返回 http 请求
    • 浏览器得到返回内容
  • 浏览器渲染页面的过程

    • 根据 HTML 结构生成 DOM Tree
    • 根据 css 生成 CSSOM
    • DOMCSSOM 整合形成 RenderTree
    • 根据 RenderTree 开始渲染和展示
    • 遇到 <script> 时, 会执行并阻塞渲染

性能优化

  • 多实用内存 缓存或者其他方法
  • 减少 CPU 计算 减少网络请求
  1. 加载资源优化

    • 静态资源的压缩合并
    • 静态资源缓存
    • 使用 CDN 让资源加载更快
    • 使用 SSR 后端渲染, 数据直接输出到 HTML 中
  2. 渲染优化
    • CSS 放前面, JS 放后面
    • 懒加载 (图片懒加载, 下拉加载更多)
    • 减少DOM 查询, 对 DOM 查询做缓存
    • 减少DOM 操作, 多个操作尽量合并在一起执行
    • 事件节流
    • 尽早执行操作 (如 DOMContentLoaded)
  • 缓存
通过链接名称控制缓存
<script src="abc_1.js"></script>只有内容改变的时候,链接名称才会改变
<script src="abc_2.js"></script>
复制代码
  • CDN
bootcdn    https://www.bootcdn.cn/
复制代码
  • 使用 SSR 后端渲染

    • 现在 Vue React 提出了这样的概念
    • 其实 jsp php asp 都属于后端渲染
  • 缓存 DOM 查询

// 未缓存
var i
for (i=0; i < document.getElementsByTagName('p').length; i++) {// todo
}// 缓存了 DOM 查询
var pList = document.getElementsByTagName('p')
var i
for (i = 0; i < pList.length; i++) {// todo
}
复制代码
  • 合并 DOM 插入
var a = document.getElementById('list')// 要插入 10个li标签
var frag = document.createDocumentFragment()  // dom片段
var x, li
for () {// ...
}
a.appendChild(frag)
复制代码

安全性

XSS 跨站请求攻击

  • 写一篇文章, 同事偷偷插入一段 <script>
  • 攻击代码中, 获取 coolie, 发送自己的服务器
  • 发布博客, 有人查看博客内容
  • 会把查看着的cookie 发送到攻击者的服务器

预防 XSS

  • 前端替换关键字, 例如替换 < 为 &lt; > 为 &gt;
  • 后端替换

XSRF 跨站请求伪造

  • 你已登录一个购物网站, 正在浏览商品
  • 该网站付费接口 xxx.com/pay?id=100 但是没有任何验证
  • 然后你收到一封邮件, 隐藏着 <img src="xxx.com/pay?id=100">
  • 你查看邮件的时候, 就已经悄悄的付费购买了

预防 XSRF

  • 增加验证流程, 如输入指纹 密码 短信验证码

从面试题看考察知识点(四)相关推荐

  1. 面试题及其衍生知识点

    面试题及其衍生知识点 1.tcp拥塞控制具体怎么实现的 1.1.网络拥塞 1.2.拥塞控制 1.3.网络拥塞的解决方法: 1.3.1.慢开始算法 1.3.2.拥塞避免算法 1.3.3.慢开始和拥塞避免 ...

  2. Algorithm:数学建模大赛(CUMCM/NPMCM)之全国大学生数学建模竞赛历年考察知识点统计可视化分析、论文评阅标准参考、国内外CUMCM数学建模类参考文献论文集合之详细攻略

    Algorithm:数学建模大赛(CUMCM/NPMCM)之全国大学生数学建模竞赛历年考察知识点统计可视化分析.论文评阅标准参考.国内外CUMCM数学建模类参考文献论文集合之详细攻略 目录 全国大学生 ...

  3. 面试题引出的知识点整理

    1.自旋锁&可重复锁&公平锁&共享锁&分段锁你都知道吗? 2.无锁&偏向锁&轻量级锁&重量级锁如何膨胀升级? 3.Lock底层AQS实现与Syn ...

  4. 面试题: 看下面的程序是否有问题 如果有问题请指出 并说明 (关于数据类型-隐性转换的小陷阱)

    package Exercise; public class Text_10 { // 面试题: 看下面的程序是否有问题 如果有问题请指出 并说明 public static void main(St ...

  5. 大学“电路分析基础”试题合集第四章

    大学"电路分析基础"试题合集第一章 大学"电路分析基础"试题合集第二章 大学"电路分析基础"试题合集第三章 "电路分析基础&quo ...

  6. 2020 PHP高级面试题之设计模式(四)

    2020年求职之路,最近面试十多家公司,通过这些丰富的经历,笔者总结了面试中普遍的三类问题,分享给大家.我总结出了这三类面试题 2020 PHP高级面试题之PHP(一) 2020 PHP高级面试题之R ...

  7. C语言指针基础知识点(四)--通过指针引用数组

    指针系列目录   C语言指针基础知识点(一)–指针及指针变量   C语言指针基础知识点(二)–指针变量的引用   C语言指针基础知识点(三)–指针变量作为函数参数   C语言指针基础知识点(四)–通过 ...

  8. 从一个面试题看程序员的几项基本功

    点击上方蓝字设为星标 下面开始今天的学习- 前言 一个优秀的程序员具备挺多特质的,比如好奇心,学习能力等,但在我看来一个优秀的程序员必须具备几项核心能力,哪几项,先卖个关子,程序员最喜欢说的话是「Ta ...

  9. Java面试题整理,连续四年百度Java岗必问面试题

    GC概述 垃圾收集(Garbage Collection)通常被称为"GC",由虚拟机"自动化"完成垃圾回收工作. 思考一个问题,既然GC会自动回收,开发人员为 ...

最新文章

  1. 做木匠、开烘焙店、写科幻小说,那些选择转行的开发者们…
  2. python猜数游戏流程_python简单猜数游戏实例
  3. c语言status显示done6,Netbackup Done status 6 解决方法
  4. 项目管理中的组织计划
  5. 蓝桥杯基础模块8_2:串口进阶
  6. rust 编程入门_面向初学者的Rust –最受欢迎的编程语言入门
  7. 【LightOJ - 1123】Trail Maintenance(在线维护最小生成树,删边思维)
  8. 天池 在线编程 滑动数独(滑动窗口)
  9. SqoopFlume、Flume、HDFS之间比较
  10. Teradata 金融数据模型FS-LDM
  11. 【数据结构和算法】拓扑排序(附leetcode题 207/210 课程表)
  12. 开源之旅——应用服务器篇
  13. 第三季-第26课-网络并发服务器设计
  14. MaxDEA如何计算DEA-Malmquist指数
  15. BP神经网络(BPNN)
  16. 计算机进pe按键,台式机进入pe按什么键
  17. PCL官网学习OpenNI Grabber 调用奥比中光Astra s 遇到问题openni2_grabber.cpp @ 325 : No devices connected.
  18. 收发EtherCAT帧——ecx_recvpkt
  19. this指向 改变this指向
  20. ES6 (十三)Set 和 Map 数据结构、WeakSet 和 WeakMap、WeakRef、FinalizationRegistry

热门文章

  1. 在命令提示符中运行c语言程序,【命令提示符运行exe】命令提示符运行文件_命令提示符运行程序-系统城...
  2. android:autolink 颜色,Android设置完autoLink属性后自定义跳转到指定界面
  3. Javascript异步操作的异常处理
  4. RabbitMQ核心概念和AMQP协议(二)
  5. Codeforces 494D Birthday 树形dp (看题解)
  6. 关于React中状态保存的研究
  7. MYSQL-交换表中2行2字段的值
  8. 判断链表是否是中心对称
  9. Kafka万亿级消息实战解决方案干货
  10. EasyUI Numberbox 数字框(限制仅输入数字)