定义:
高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。其核心思想是:要面向接口编程,不要面向实现编程。依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块之间的耦合。
作用:
依赖倒置原则可以降低类间的耦合性;
依赖倒置原则可以提高系统的稳定性;
依赖倒置原则可以减少并行开发引起的风险;
依赖倒置原则可以提高代码的可读性和可维护性;
demo:
员工A 要给 员工B发送消息通知
最开始,我们发送消息的方法用的是通过邮件发送。发送动作是高层模块,邮件发送是底层模块。当有一天邮件模块不可用了,需要通过短信发送。 这个适合 原来高层模块无法发送。因为不支持短信。要是直接改邮件发送模块很显然不是对的。
优化方案:
中间加一层发送的抽象类接口。 高级发送模块只需要依赖与这个抽象类,而底层模块也应该依赖于这个抽象类。当更改了发送方案的情况下,只需要让不同的抽象类调用底层的发送接口即可。
定义:
接口隔离原则(Interface Segregation Principle,ISP)的定义是客户端不应该依赖它不需要的接口,类间的依赖关系应该建立在最小的接口上。简单来说就是建立单一的接口,不要建立臃肿庞大的接口。也就是接口尽量细化,同时接口中的方法尽量少。
接口隔离原则必须先满足单一原则。这里的接口单一指的是业务上的接口单一,单一原则指的是职责上的单一。
特点:
将臃肿庞大的接口分解为多个粒度小的接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。
概念
一个类应该只负责一个职责,当一个类同时负责多个职责的时候,某个职责发生变动可能会影响整个类或者其他类的使用。
实际开发中,应该是尽量一个类只负责一个职责。同样一个方法,函数也应该只负责某项功能。
特点:
降低类(代码)的复杂度;
降低变更引起的风险;
减少影响范围,系统更稳定。
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中,实现用户的第三方登陆。