第二期

公众号同步

什么是防御性编程?与其相对的let it crash是什么?

这两个都是一种编程思想;

防御性编程是一个很宽泛的概念,指的是是一种严谨的编程习惯,无论是从编程风格、程序结构设计、数据检测、错误处理等等一系列可行的措施来使代码健壮的运行,是程序完美的运行下去。主要侧重是让程序运行不出错。

let it crash最早是erlang提出的思想,指的是程序员不必过分担心未知的错误,而进行面面俱到的防御,当错误来临的时候,让程序崩溃退出。然后把错误反馈到监控进程,然后让监控进程决定如何处理。

js位运算符有哪些?

运算符这个不经常用的符号很容易于逻辑运算符混淆,我们举几个例子简单的说明一下;
位运算一般都会转化为二进制来计算,然后返回原来的进制。

AND运算符用&表示,如果两位都是 1 则设置每位为 1;
OR运算符用 | 表示,如果两位之一为 1 则设置每位为 1;
XOR运算符用 ^ 表示,如果两位只有一位为 1 则设置每位为 1;
NOT运算符用表示,反转所有位;
零填充左位移运算符用<<来表示,通过从右推入零向左位移,并使最左边的位脱落;
有符号右位移运算符用>>来表示,通过从左推入最左位的拷贝来向右位移,并使最右边的位脱落;
零填充右位移运算符用>>>来表示,通过从左推入零来向右位移,并使最右边的位脱落;

重绘和重排是什么,如何避免?

重排(reflow)也叫回流,它会导致Dom树重新计算;一切导致dom结构变化的行为都会导致浏览器reflow。

重绘(repaint)是元素外观改变触发的浏览器行为,例如背景色、visibility等;它不会导致Dom结构变化,浏览器不用重新计算dom节点。

浏览器的运行机制是这样的:

  1. 首先解析HTML,并将标签转化为dom节点。

  2. 再解析css和style中样式,构建另一颗树render树;

  3. render树构建完毕之后,开始布局,计算出每个节点再屏幕上显示的坐标。

  4. 有了布局之后就开始绘制render树,显示在屏幕上。

如何避免:

  1. 提前构造dom片段,一次性插入;例如使用DocumentFragment;或使用cloneNode(true or false) 和 replaceChild 技术,引发一次回流和重绘;
  2. 先脱离标准流,修改元素然后再回到标准流。例如使用display:none或定位来减少reflow的次数。

web开发中会话跟踪的方法有哪些?

会话跟踪主要是确定用户身份的行为,防止用户在同一域名下多个页面之间身份丢失。

常见的方法有:

  1. 隐藏表单域,缺点就是比较局限,只能在提交的表单的时候使用;

  2. cookie,这是常用的方法,与其他技术相比,它可以自定义有效期;

  3. session,使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话;

  4. url重写,在url后面添加参数,参数可作身份标识;

  5. ip地址,每个网络都有其特点IP地址;

PNG、GIF、JPG的区别以及如何选择?

这些都是图片类的专业术语,简单的总结可以是:

照片用 JPG。 动画用 GIF。 Logo、Icon 等小图用 PNG-8。 非特殊情况,尽量不要用 PNG-24 和 PNG-32。

JPG的主要特性是有损压缩

对于网络传输来说,有损压缩是个优点。它可以削减一些肉眼难以察觉的细节,让图片体积大大减小。有损压缩特别适用于相机拍摄的照片。 不支持颜色表,也不支持透明,只有真彩色。

GIF的主要特性是帧动画

GIF 图片是带颜色表的,它最多支持256色,也支持256以内任意数量的颜色表,但是不支持真彩色。

PNG的主要特性是半透明

PNG可以大致分为3种:PNG-8、PNG-24、PNG-32。

其中后面那个数字8、24、32代表位数,就像上述的BMP分4位(16色)、8位(256色)、24位(真彩色)一样。

PNG 除了24位外还能有32位,除了红、绿、蓝三原色之外,还有个透明通道,从0-255表示从透明到半透明到不透明。