1、什么是设计模式?

设计模式是经过总结、优化,对我们经常遇到的一些编程问题的可重用的解决方案。设计模式不同于类或库可直接作用于代码。相反,它更为的高级,是一种必须在特定的情形下实现的方法模版。

2、面向对象中设计模式的六大原则是什么?

  1. 开闭原则:一个软件实体如类、模块和函数,对扩展开放,对修改关闭,即一个软件实体应该在不修改原有代码的基础上进行扩展
  2. 里氏替换原则:引用父类的地方都应该能透明的调用其子类的对象
  3. 依赖倒置原则:高层模块不应该依赖底层模块,两者都应该依赖其抽象类,抽象不应该依赖细节,细节依赖抽象,即针对接口编程,而非针对细节编程
  4. 接口隔离原则:使用多个专门的接口,而非一个单一的总接口,即客户端的实现不应该依赖于它无关的接口。
  5. 迪米特原则:一个软件实体应该尽可能少的和其它软件实体相互作用
  6. 单一职责原则:一个类只负责一项职责

3、列举几个常⻅的设计模式?

  1. 创建模式:提供实例化的方法,为适合的状况提供创建对象的方法
  2. 结构化模式:通常用于处理实体之间的关系,使得不同的实体可以更好的协同工作
  3. 行为模式:为不同的实体创建通信,为不同的实体之间提供更方便、更灵活的通信方式

4、Mixin 设计模式是什么?它的特点和优点?

为了不违背继承必须是"is-a"的关系同时又能实现多继承的效果,从而出现了Mixin类,这个类是为了做增强功能添加到子类中

特点:

  1. 责任明确:必须表示是一种功能,而非一个事物
  2. 功能单一:如果有多个功能,就写多个Mixin类
  3. 绝对独立:子类不继承该类,也可以正常工作,只是少一个功能而已

优点:

不使用Mixin会有以下的几点弊端,使用Mixin可避免

  1. 结构复杂:单继承子类的父类是什么,父类的父类是什么都是非常明确的;多继承子类有多个父类,父类又有多个父类,继承关系复杂
  2. 优先顺序模糊:多继承中多个父类如果有同名方法,在开发中,容易造成思维混乱,子类不知道继承哪个父类,增加开发难度
  3. 功能冲突:多继承中子类只能继承多个父类中的一个同名方法,从而导致其它父类的方法失效

5、什么是单例模式?单例模式的作用?

单例模式:在整个项目/系统中,一个类只有一个实例的存在

作用:节约内存资源

6、单例模式的应用场景有那些?

python的logger、Windows的资源管理器、线程池、网站计数器等

7、用python实现单例模式

# 创建一个单例模式

class Singleton(object):
_instance = None def __new__(cls,*args,**kwargs):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls,*args,**kwargs)
return cls._instance class MyClass(Singleton):
pass #新建两个对象
m1=MyClass()
m2=MyClass() #验证两个对象是否一致
print(m1 is m2)
print(id(m1), id(m2))

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理

想要获取更多Python学习资料可以加
QQ:2955637827私聊
或加Q群630390733
大家一起来学习讨论吧!

关于python面试中的设计模式,搞懂这些就足够了的更多相关文章

  1. Python 面试中 8 个必考问题(转载)

    Python 面试中 8 个必考问题 1.下面这段代码的输出结果是什么?请解释. def extendList(val, list=[]): list.append(val) return list ...

  2. 全栈工程师对Python面试中is和==区别的详细解说!看完真的学到了!

    面试实习生的时候,当问到 is 和 == 的区别时,很多同学都答不上来,搞不清两者什么时候返回一致,什么时候返回不一致.本文我们来看一下这两者的区别. 我们先来看几个例子: a = "hel ...

  3. [译]Python面试中8个必考问题

    1.下面这段代码的输出结果是什么?请解释. def extendList(val, list=[]): list.append(val) return list list1 = extendList( ...

  4. Python小世界:彻底搞懂Python一切皆对象!!!

    前言 犹记得当初学习Python的时候,对于Python一切皆对象很是懵逼,因为Python是面向对象的动态型语言,而在函数及高阶函数的应用中,如若对于一切皆对象不是有很透彻的了解,基础不是那么牢固的 ...

  5. Python 面试中可能会被问到的30个问题

    第一家公司问的题目 1 简述解释型和编译型编程语言? 解释型语言编写的程序不需要编译,在执行的时候,专门有一个解释器能够将VB语言翻译成机器语言,每个语句都是执行的时候才翻译.这样解释型语言每执行一次 ...

  6. python面试中被问的最多的10道题

    1 性能: 解析下面代码慢在哪里def strtest1(num):str='first'for i in range(num):str+="X"return str解析:pyth ...

  7. python面试总结2(函数常考题和异常处理)

    python函数常考题 可变类型为参数 不能类型为参数 python如何传递参数 传递值还是引用呢?都不是.唯一支持的参数传递是共享穿参 Call by Object(Call by Object R ...

  8. Python 面试问题

    Python 面试问题 最近正在团队内部普及 Python 语言,有些刚接触 Python 语言的工程师在概念上有很多混淆的地方,刚好看到这篇文章:Python面试问题,里面列举的问题都是关于 Pyt ...

  9. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

随机推荐

  1. iOS7使用iOS8上的方法报错处理

    问题描述 我们经常会遇到在低版本上使用高版本方法导致的bug,例如: WebKit discarded an uncaught exception in the webView:decidePolic ...

  2. 肝了75天,五万五千字,《Spring Boot 进阶》专栏文章整理成册,分享~

    前言 Spring Boot 这个专栏从早期的体系构建到写完,总共花费了七十五天,期间由于工作及个人原因停更了一段时间,没办法,工作实在太忙了. 很多人疑惑了,为什么源码介绍过了就结束了?高级的部分不 ...

  3. mysql事务原理以及锁

    一.Innodb事务原理 1.什么是事务 a.事务(Transaction)是数据库区别于文件系统的重要特性之一,事务会把数据库从一种一致性状态转换为另一种一致性状态. b.在数据库提交时,可以确保要 ...

  4. sitespeedio前端性能测试工具介绍

    很久没有写博客了,今天给大家介绍一款比较好用的前端性能测试工具. sitespeedio简介: sitespeed.io是Jonathan Lee发布的一款可监视和衡量网站前端性能的开源工具. 1.开 ...

  5. PyQt编程实战:画出QScrollArea的scrollAreaWidgetContents内容部署层的范围矩形

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 在<PyQt(Python+Qt)学习随笔:QScrollArea滚动区域详解> ...

  6. 如何利用Excel快速批量生成想要的代码

    如何利用Excel快速批量生成想要的代码 使用场景 在HTML DOM Video 对象这个页面 我想要将所有的中文描述和对应的属性(共32个属性)打印出来--console.log(descript ...

  7. [GKCTF2020]cve版签到

    cve-2020-7066漏洞 利用get_header($url)函数漏洞%00对部分url截断 构造ssrf请求,用127.0.0.1网址访问目标主机内部资源 其实就是get_header()的C ...

  8. Docker环境复现利用Redis未授权访问漏洞 >> 批量扫描检测利用

    关于Redis Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库 ...

  9. 第 3篇 Scrum 冲刺博客

    一.站立式会议 1.站立式会议照片 2.昨天已完成的工作 登录窗口的构建 3.今天计划完成的工作 ①帮助不会的同学连接数据库 ②登录识别模块 4.工作中遇到的困难 ①出现一些同学使用了不同种类的数据库 ...

  10. Scrum 冲刺第二天

    一.每日站立式会议 1.会议内容 1)进行每日工作汇报 张博愉: 昨天已完成的工作:制定测试计划.博客编写 今日工作计划:测试mappe里的接口 工作中遇到的困难:对测试接触得较少 张润柏: 昨天已完 ...