Appearance
前端 SEO 注意情况
title>description>keywords- 搜索引擎从上到下,重要内容放前面
- 内容不用 js 动态输出
- 搜索引擎会跳过 frame
- 非装饰图片使用 alt
post 和 put 区别
put 是幂等的,多次操作不会新增数据条数,可以理解为修改某条数据。post 是非幂等的,多次操作会增加多条数据,理解为新增接口。建议管理系统不做区分, 都用 post。
优化的一些点
- 静态资源分布到多域名下
- 控制资源大小,小文件合并。
- css 和 js 单独放置为文件
- 压缩图片,减少位深。
iframe 问题
- 阻塞主页面 onload 事件,通过 动态添加 src 或更优的 createElmenet 的形式来添加
- iframe 和主页面同域共享连接池,会影响主页面资源加载
采用多个域名存储资源的原因
- 突破浏览器并发限制
- 节约 cookie 带宽
- 节约主域名连接数
电商图片处理
- 小图标 雪碧图
- 加载缩略图
- 懒加载,滚动位置再加载
BFC
- overflow 不为 visible;
- position: absolute || fixed;
- display: inline-block || table-cell || flex
- float 不为 none
- html 元素
清除浮动
css
.clearfloat {
zoom: 1;
}
.clearfloat:after {
display: block;
clear: both;
content: '';
visibility: hidden;
height: 0;
}css 优先级
!important > 内联 > id > class > tag
消除 display: inline-block 间隙
- 父元素 font-size: 0;
- 父元素 word-spacing: 0; // 单词间隙
- 删除空格
- letter-spacing: 0 // 字母间隙
动画间隔时间
保证 30fps 1000/30 = 33.333ms
bind 注意
bind 是强绑定的, 绑定后不能更换 this
浏览器缓存
- 强制缓存 => 根据 Expired(http1.0)(通过服务端返回有效时间) , 或者 Cache-control 来控制, 一般使用 max-age: 1h。
强制缓存是直接从浏览器获得请求,一个是 from memory cache(页面刷新的缓存),一个是 from disk cache(页面关闭再打开)
js 和图片等文件 当刷新页面时只需直接从内存缓存中读取(from memory cache);而 css 文件则会存入硬盘文件中,所以每次渲染页面都需要从硬盘读取缓存(from disk cache
- 协商缓存 => 强制缓存失效时, 就会启用协商缓存
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()这种代码。
- 转义 csrf 跨站请求伪造, 直接在 B 网站上发送请求 A 网站的请求。
- 禁止跨站访问,根据 referer 来判断。
- 点击劫持 嵌套 iframe, 服务端配置禁止被引用。
深拷贝
- 递归拷贝引用类型
- 循环引用的情况,每次检测是否某个对象的字段是本身对象或祖先对象
- 平级引用,使用 weakMap 检测有个属性是否在 weakMap 存在
