面试题总结

Python中格式化输出应该使用还是

Python 新版本推荐使用,Python 2.6才开始支持了语 法。

不用考虑传值时参数格式的问题。
Python 3.6加入了一个f-strings新语法。

同时,format还支持通过位置、关键字、对象属性来进行传参。

排序算法

  1. 冒泡排序(稳定,时间复杂度:O(n^2))
    依次比较相邻两个元素的大小,若前一个元素大于后一元素,则交换,直到最后一个元素即为最大元素。然后重新从首元素开始同样地操作,知道倒数第二个元素即为次大的元素。以此类推,将得到最大或者最小的排序序列。

  2. 选择排序(不稳定,时间复杂度:O(n^2))
    首先初始化最小元素索引值为首元素,依次遍历待排序数列,若遇到小于该最小索引位置元素的,则刷新最小索引为该较小元素的位置,直到到尾元素,结束一次遍历,并将最小索引处的元素与首元素交换;然后初始化最小元素索引为第二个待排序的元素位置,同样操作,可得到倒数第二小的元素,以此类推。

  3. 快速排序(不稳定,时间复杂度:O(nlogn)
    选一基准元素,依次将剩余元素中小于该基准元素的值放置其左侧,大于等于该基准元素的值放置其右侧;然后去基准元素的前半部分和后半部分分别进行同样的处理;以此类推,直至各个子序列剩余一个元素时,即排序完成。

  4. 插入排序(稳定,时间复杂度:O(n^2))
    有一个已经有序的数据序列(可能只有一个元素),依次将后面的无序元素插入到前面的有序数列中,初始状态有序数列仅有一个元素,即首元素。在将无序数列元素插入有序数列的过程中,采用了逆序遍历有序数列,相较于顺序遍历会稍显繁琐,担当数列本身已近排序状态效率会更高。

    已知待排序的一组记录是:
    60,71,49,11,24,3,66
    假设在排序过程中,前3个记录已按关键码值递增的次序重新排列,构成一个有序序列:
    49,60,71
    将待排序记录中的第4个记录(即11)插入上述有序序列,以得到一个新的含4个记录的有序序列。首先,应找到11的插入位置,再进行插入。可以将11放入数组的第一个单元r[0]中,这个单元称为监视哨,然后从71起从右到左查找,11小于71,将71右移一个位置,11小于60,又将60右移一个位置,11小于49,又再将49右移一个位置,这时再将11与r[0]的值比较,11≥r[0],它的插入位置就是r[1]。假设11大于第一个值r[1]。它的插入位置应该在r[1]和r[2]之间,由于60已经右移了,留出来的位置正好留给11.后面的记录依照同样的方法逐个插入到该有序序列中。若记录数n,续进行n-1趟排序,才能完成。

  5. 希尔排序(不稳定,时间复杂度:O(n^(3/2)))
    是插入排序的改进版,为了减少数据的移动次数,在初始序列较大时,去较大的步长,通常序列长度的一半,此时只有两个元素比较,交换一次;之后步长依次减半直至步长为1,即为插入排序,由于此时序列已接近有序,故插入元素是数据移动的次数会相对较少,效率得到了提高。

  6. 归并排序(稳定,时间复杂度:O(nlogn))
    采用分治的思想,分治排序整个数列如同排序两个有序数列,一次执行这个过程直至排序末端的两个元素,再依次向上层输送排序好的两个子列进行排序直至整个数列有序。

    设有数列{6,202,100,301,38,8,1}
    初始状态:6,202,100,301,38,8,1
    第一次归并后:{6,202},{100,301},{8,38},{1}
    第二次归并后:{6,100,202,301},{1,8,38}
    第三次归并后:{1,6,8,38,100,202,301}

方法重载与方法重写有什么区别(Python中没有重载)

方法重载:让类以统一的方式处理不同类型数据的一种手段。
方法重写:父类与子类之间的多态性,对父类的函数进行重新定义。
Python中,方法也是attribute,方法名就是Key,所以每个方法名只能有一个方法体,当一个无参数函数体被定义了多次,每一次新的定义都会覆盖之前的定义,所以,可以在dir()中看到,这个方法最终指向最后一次定义的函数体,所以在调用之前没有参数的函数时,所以会 错。

面向对象的三大特性

  1. 继承
    类可以继承一个或多个父类,或者又可以称为基类或者超类,新建的类称为派生类或子类。
  2. 封装
    广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种封装,只让用实例化的对象来操作类中属性或者方法。
    狭义上面向对象的封装:将属性和方法都藏起来,不让你看见。
  3. 多态
    多态是指一类事物有多种形态
    实现多态的方法:
    • 定义新的子类
    • 重写对应的父类方法
    • 使用子类的方法直接处理,不调用父类的方法

HTTP和HTTPs

HTTP是超文本传输协议,HTML是超文本标记语言
HTTP:http协议在数据传输的过程中都是明文,所以可能存在数据泄露和篡改。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL/TLS层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
参考链接:http://www.cnblogs.com/wupeiqi/

MVC框架和MTV框架

MVC框架:全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。

Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性。Django框架的不同之处在于它拆分的三部分为:Model(模型)、Template(模板)和View(视图),也就是MTV框架。

MTV框架:

  • Model(模型):负责业务对象与数据库的对象(ORM)
  • Template(模版):负责如何把页面展示给用户
  • View(视图):负责业务逻辑,并在适当的时候调用Model和Template

红黑树

红黑树从本质上来说就是一颗二叉查找树(自平衡二叉树),但是在二叉树的基础上增加了着色相关的性质,使得红黑树可以保证相对平衡,从而保证红黑树的增删改查的时间复杂度最坏也能达到O(log N)。
下面是红黑树最重要的5条性质,后面需要正常回来查看:

  1. 每个节点要么是黑的,要么是红的
  2. 根节点以及叶子节点是黑的
  3. 如果一个节点是红的,他的子节点一定都是黑的

什么是闭包

面试题总结

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年10月9日
下一篇 2019年10月9日

相关推荐