定义:

高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。其核心思想是:要面向接口编程,不要面向实现编程。依赖倒置原则是实现开闭原则的重要途径之一,它降低了客户与实现模块之间的耦合。

作用:

依赖倒置原则可以降低类间的耦合性;

依赖倒置原则可以提高系统的稳定性;

依赖倒置原则可以减少并行开发引起的风险;

依赖倒置原则可以提高代码的可读性和可维护性;

demo:

员工A 要给 员工B发送消息通知

最开始,我们发送消息的方法用的是通过邮件发送。发送动作是高层模块,邮件发送是底层模块。当有一天邮件模块不可用了,需要通过短信发送。 这个适合 原来高层模块无法发送。因为不支持短信。要是直接改邮件发送模块很显然不是对的。

优化方案:

中间加一层发送的抽象类接口。 高级发送模块只需要依赖与这个抽象类,而底层模块也应该依赖于这个抽象类。当更改了发送方案的情况下,只需要让不同的抽象类调用底层的发送接口即可。




定义:

接口隔离原则(Interface Segregation Principle,ISP)的定义是客户端不应该依赖它不需要的接口,类间的依赖关系应该建立在最小的接口上。简单来说就是建立单一的接口,不要建立臃肿庞大的接口。也就是接口尽量细化,同时接口中的方法尽量少。
接口隔离原则必须先满足单一原则。这里的接口单一指的是业务上的接口单一,单一原则指的是职责上的单一。

特点:

将臃肿庞大的接口分解为多个粒度小的接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。


  • 如果把“接口”理解为一组接口集合,可以是某个微服务的接口,也可以是类库的接口等。如果部分接口只被部分调用者使用,我们就需要将这部分接口隔离出来,单独给这部分调用者使用,而不强迫其他调用者也依赖这部分不会被用到的接口。
  • 如果把“接口”理解为单个API接口或函数,部分调用者只需要函数中的部分功能,那我们就需要把函数拆分成粒度更细的多个函数,让调用者只依赖它需要的那个细粒度函数。
  • 如果把“接口”理解为OOP中的接口,也可以理解为面向对象编程语言中的接口语法。那接口的设计要尽量单一,不要让接口的实现类和调用者,依赖不需要的接口函数。

单一职责原则;

接口隔离原则;

依赖倒置原则;

里氏替换原则;

开闭原则;

迪米特法则;

合成复用原则;

口诀

何旦 - 开迪 - 接 - 李依

合单 - 开迪 - 接 - 里依


概念

一个类应该只负责一个职责,当一个类同时负责多个职责的时候,某个职责发生变动可能会影响整个类或者其他类的使用。

实际开发中,应该是尽量一个类只负责一个职责。同样一个方法,函数也应该只负责某项功能。

特点:

降低类(代码)的复杂度;

降低变更引起的风险;

减少影响范围,系统更稳定。

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.避免频繁创建和删除临时表,以减少系统表资源的消耗。


1.微信认证服务号,并且开通了微信支付

2.下载微信支付SDK

3.登录微信支付平台,下载支付证书

4.下载官方的demo,修改相关配置,发起支付

忌讳回答:

说出上一家公司各种问题,对领导不满等等问题

参考回答:

将上一家公司的优点列出来,对公司的认可度也罗列一些。

经济不好,部门裁员;

相关部门部撤销;

个人追求更好的公司,主动离职;


EXPLAIN  + SQL查询语句

比如:EXPLAIN   select * from user;

基于角色的访问控制(RBAC)是实施面向企业安全策略的一种有效的访问控制方式。

分三层:资源,角色,用户

将资源分给角色,给用户分配角色。


第三方登陆主要是基于author协议来实现,下面简单说下实现流程:

1、首先我们需要以开发者的身份向第三方登陆平台申请接入应用,

申请成功后,我们会获得一个appID和一个secrectID.

2、当我们的网站需接入第三方登陆时,会引导用户跳转到第三方的登陆授权页面,

此时把之前申请的appID和secrectID带给登陆授权页面。

3、用户登陆成功后即得到授权,第三方会返回一个临时的code给我们的网站。

4、我们的网站接受到code后,再次向我们的第三方发起请求,

并携带接收的code,从第三方获取access_token.

5、第三方处理请求后,会返回一个access_token给我们的网站,

我们的网站获取到access_token后就可以调用第三方提供的接口了,比如获取用户信息等。

最后把该用户信息存入到我们站点的数据库,并把信息保存到session中,实现用户的第三方登陆。