概念
一个类应该只负责一个职责,当一个类同时负责多个职责的时候,某个职责发生变动可能会影响整个类或者其他类的使用。
实际开发中,应该是尽量一个类只负责一个职责。同样一个方法,函数也应该只负责某项功能。
特点:
降低类(代码)的复杂度;
降低变更引起的风险;
减少影响范围,系统更稳定。
demo:
比如订单类应该只处理跟订单相关逻辑,而不要处理和用户相关的逻辑。
比如在laravel model开发中,user 的model应该只有跟用户相关的处理,不同的对象应该创建不同的model;
比如控制器,同对象的控制器可以用一个控制器,而不要所有的逻辑都到一个控制器去处理;
1.首先应考虑在 where 及 order by 涉及的列上建立索引。索引不能过多,不利于删除,插入等操作。
2.应尽量避免在 where 子句中对字段进行 null 值判断,将导致引擎放弃使用索引而进行全表扫描
3.应尽量避免在 where 子句中使用!=或<>操作符,将引擎放弃使用索引而进行全表扫描
4.应尽量避免在 where 子句中使用 or 来连接条件,将导致引擎放弃使用索引而进行全表扫描
5.合理使用like模糊查询,不要乱用
6.不要在 where 子句中进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。
7.不要写一些没有意义的查询
8.很多时候用 exists 代替 in 是一个好的选择
9.选择合适的字段类型,尽量使用数字型字段。
15.尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间
16.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。
17.避免频繁创建和删除临时表,以减少系统表资源的消耗。
忌讳回答:
说出上一家公司各种问题,对领导不满等等问题
参考回答:
将上一家公司的优点列出来,对公司的认可度也罗列一些。
经济不好,部门裁员;
相关部门部撤销;
个人追求更好的公司,主动离职;
第三方登陆主要是基于author协议来实现,下面简单说下实现流程:
1、首先我们需要以开发者的身份向第三方登陆平台申请接入应用,
申请成功后,我们会获得一个appID和一个secrectID.
2、当我们的网站需接入第三方登陆时,会引导用户跳转到第三方的登陆授权页面,
此时把之前申请的appID和secrectID带给登陆授权页面。
3、用户登陆成功后即得到授权,第三方会返回一个临时的code给我们的网站。
4、我们的网站接受到code后,再次向我们的第三方发起请求,
并携带接收的code,从第三方获取access_token.
5、第三方处理请求后,会返回一个access_token给我们的网站,
我们的网站获取到access_token后就可以调用第三方提供的接口了,比如获取用户信息等。
最后把该用户信息存入到我们站点的数据库,并把信息保存到session中,实现用户的第三方登陆。
服务器层次
负载均衡;
针对不同地区进行分区部署;
服务器配置;
如果数据量返回较大,请启用gzip模式
缓存
前端缓存:将页面缓存到缓存服务器,比如pagecache等
后端缓存:将数据存储到redis等数据库中
数据库层次
数据库引擎选择:innodb和myisam
合适的字段类型;
反范式的数据表;
建立正确的索引(重要);
数据库分区,不要跨区访问,比如国内访问国外的数据库。尽量将数据库和web服务器同一地区,甚至同一局域网(比如直接通过容器访问)
读写分离,主从同步;
请求层次
减少接口请求次数,尽量一次性将数据返回;
gzip将压缩结果返回给前端,而不是原格式化的数据。
代码层次
不要写死循环;
尽量用高效代码,比如:
用 && 而用and等;
尽量少用正则去匹配;
字符串尽量单引号,双引号需要翻译变量;
https://new.qq.com/rain/a/20230406A00Q8T00
终端层次
部分数据可以直接缓存到页面,而不是每次都请求接口。
一台计算机的计算资源是有效的,当超大流量请求时,就可能导致请求等待或者服务器死机的情况,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
关键字优化;
图片优化,不要太大,影响加载速度;
网页整体加载速度;
图片alt;
sitemap;
robots.txt 禁用以及开启爬取页面;
url地址静态化;
避免301,302,404等异常页面链接出现在网页;
规范的html代码