1. 前端验证和后端验证是两码事。前端验证只是优化用户的体验,减少不合规格的数据,减轻服务器的压力,跟安全性毫无关系。
2. Angular是数据驱动的模式,它跟jQuery是有区别的。jQuery是操作DOM来使页面产生变化。在Angualr中不要这么做,要使用数据绑定,通过控制器中数据的变化来改变模板的展现,这才算是真正在写Angular风格的程序。
3. 将特定的数据结构用类或者接口来定义是个良好的习惯。
4. 工作机制是指一个系统中的各元素之间相互作用的过程和功能。
5. 沃伦·巴菲特每天都花上5~6个小时阅读,他描述自己获得成功的关键是——“每天阅读500页书。知识的运作方式是:知识会慢慢累积呈复合效应,就像复利一样。”
6. Promise
虽然处理异步操作比较方便,但它也有短板,Promise
不适合处理有流程的,或者说有业务逻辑关系的场景。当异步调用有逻辑关系时,比如第二个异步调用,需要用到第一个异步调用的结果,此时用它来处理就会非常麻烦。
7. 对回调的理解:与回调相反的词是轮询。
举个例子:比如你🐒去楼下的值班室拿快递,🐒问门卫那哥们🦍:“有我的快递吗?”,🦍说:“没有。”过了几分钟,🐒又问:“有我的快递吗?”,🦍说:“没有。”,没过一会儿,🐒又问:“有我的快递吗?”,🦍说:“没有。”,这种场景就是轮询,每隔一段时间就来问一下,每隔一段时间就来问一下,这是很低效的。
最终,🦍大哥受不了了💢(搁谁谁也受不了,烦不烦啊),当🐒又来问的时候,🦍说:“⛔,你给我🙊,你不要再来问我了,等你的快递到了,我会主动告诉你。”,这种场景就是回调,你别来找我,等到有结果,我会找你。
再比如下面的函数就是一个回调函数:
oBtn.click = function () {};
回调函数的特征是:
- 不是定义函数的人来调用;
- 什么时候调用不知道,也不关心;
8. 问:为什么我们要后端开发?为什么不把前端和数据库连起来呢?
答:为什么我们吃完饭要去厕所拉?为什么不直接把食物丢进马桶呢?因为东西要处理啊。
9. 用户的密码是一定一定要加密的!
用户的密码通常都是存放在数据库中,密码如果是以明文的形式存放,一旦被别人获取,将是非常危险的事情;另一方面,数据库管理员能够看到用户的明文密码,对其职业操守也有影响。例子就不用多举了,如果说你的密码让别人知道了,你能安心?
因此,存放在数据库中的密码必须要加密,而且是不可逆的,就是说是不能恢复的。
以往,对密码都是用MD5
加密。MD5
加密虽然也是不可逆的,但对于同样的明文,每次加密后生成的密文内容都是一样的,即是一一对应的关系。当有人把这样的对应关系整理成一张很大的“表”之后,都能根据密文找到对应的明文,所以也是不安全的。
如果用MD5
+盐(随机字符串)的方式加密,是可以提升安全性,只是有点麻烦。
现在,合适的做法是对密码进行bcrypt
加密,即散列加密。用bcrypt
加密的密码安全性更高,而且还可以设置加密的等级,其特点是对于同样的明文,每次加密后生成的密文内容都是不一样的,所以不可能会有人做出明文和密文的对应表。
10. 不是做不好,是没想着做好。
11. 没有伤痕累累,哪来皮糙肉厚,英雄自古多磨难。------致华为
12. 设计原则之一:开闭原则,即开放扩展,关闭修改。
13. Socket.io不是Websocket,它只是将Websocket和轮询(Polling)机制以及其它的实时通信方式封装成了通用的接口,并且在服务端实现了这些实时机制的相应代码。也就是说,Websocket仅仅是 Socket.io实现实时通信的一个子集。因此Websocket客户端连接不上Socket.io服务端,当然Socket.io客户端也连接不上Websocket服务端。
网友评论