Skip to content

前端 SEO 注意情况

  1. title > description > keywords
  2. 搜索引擎从上到下,重要内容放前面
  3. 内容不用 js 动态输出
  4. 搜索引擎会跳过 frame
  5. 非装饰图片使用 alt

post 和 put 区别

put 是幂等的,多次操作不会新增数据条数,可以理解为修改某条数据。post 是非幂等的,多次操作会增加多条数据,理解为新增接口。建议管理系统不做区分, 都用 post。

优化的一些点

  1. 静态资源分布到多域名下
  2. 控制资源大小,小文件合并。
  3. css 和 js 单独放置为文件
  4. 压缩图片,减少位深。

iframe 问题

  1. 阻塞主页面 onload 事件,通过 动态添加 src 或更优的 createElmenet 的形式来添加
  2. iframe 和主页面同域共享连接池,会影响主页面资源加载

采用多个域名存储资源的原因

  1. 突破浏览器并发限制
  2. 节约 cookie 带宽
  3. 节约主域名连接数

电商图片处理

  1. 小图标 雪碧图
  2. 加载缩略图
  3. 懒加载,滚动位置再加载

BFC

  1. overflow 不为 visible;
  2. position: absolute || fixed;
  3. display: inline-block || table-cell || flex
  4. float 不为 none
  5. html 元素

清除浮动

css
.clearfloat {
  zoom: 1;
}
.clearfloat:after {
  display: block;
  clear: both;
  content: '';
  visibility: hidden;
  height: 0;
}

css 优先级

!important > 内联 > id > class > tag

消除 display: inline-block 间隙

  1. 父元素 font-size: 0;
  2. 父元素 word-spacing: 0; // 单词间隙
  3. 删除空格
  4. letter-spacing: 0 // 字母间隙

动画间隔时间

保证 30fps 1000/30 = 33.333ms

bind 注意

bind 是强绑定的, 绑定后不能更换 this

浏览器缓存

  1. 强制缓存 => 根据 Expired(http1.0)(通过服务端返回有效时间) , 或者 Cache-control 来控制, 一般使用 max-age: 1h。

强制缓存是直接从浏览器获得请求,一个是 from memory cache(页面刷新的缓存),一个是 from disk cache(页面关闭再打开)
js 和图片等文件 当刷新页面时只需直接从内存缓存中读取(from memory cache);而 css 文件则会存入硬盘文件中,所以每次渲染页面都需要从硬盘读取缓存(from disk cache

  1. 协商缓存 => 强制缓存失效时, 就会启用协商缓存

last-modified(第一次响应) => if-modified-since(浏览器再次请求) => 服务端和本地文件进行对比

Etag 和 if-none-match 返回 etat => if-none-match => 对比 etag

viewport 的值有哪些

html
<meta
  name="viewport"
  content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0 user-scaleable=yes"
/>

如何判断一个单链表是否有环

使用快慢指针, 快指针追上慢指针表示有环,快指针到末尾还未追上, 表示没环。

如何判断环的长度和环的起点

设置一个指针从 head 开始, 一个从相遇点开始,知道两个指针重合, 就是起点
环的长度,可以通过快指针和慢指针下次相遇的,操作步数

两个无环链表,判断是否相交和相交节点是多少

将任意一个链表守卫相接,然后从另一个链表开始, 如果是有环的,证明必然有环

xss 和 csrf

xss 跨站脚本攻击,网站内容被插入了 js 代码。包括在 url 里面被植入 例如 javascript: alert()这种代码。

  1. 转义 csrf 跨站请求伪造, 直接在 B 网站上发送请求 A 网站的请求。
  2. 禁止跨站访问,根据 referer 来判断。
  3. 点击劫持 嵌套 iframe, 服务端配置禁止被引用。

深拷贝

  1. 递归拷贝引用类型
  2. 循环引用的情况,每次检测是否某个对象的字段是本身对象或祖先对象
  3. 平级引用,使用 weakMap 检测有个属性是否在 weakMap 存在