zoukankan      html  css  js  c++  java
  • python面试心得一

    1、python的整型数字的表示范围是多少
    python的整型数字表示范围没有限制
    在这里插入图片描述
    2、列表和元组有什么不同

    相同点

    • 都是序列
    • 都可以存储任何数据类型
    • 可以通过索引访问

    不同点

    • 语法差异:列表用方括号[]创建的,而元组使用圆括号()创建的
    • 是否可变:列表是可变的,而元组是不可变的,这标志着两者之间的关键差异。由于列表是可变的,我们不能将列表用作字典中的key。但可以使用元组作为字典key。
    • 在python中,字符串类型,整型类型,以及元组类型的变量是不可修改的。
      列表、集合及词典类型的变量是可以修改的。
    • 重用与拷贝
      元组无法复制。 原因是元组是不可变的。
    • 大小差异:Python将低开销的较大的块分配给元组,因为它们是不可变的。 对于列表则分配小内存块。 与列表相比,元组的内存更小。 当你拥有大量元素时,元组比列表快。列表的长度是可变的。

    3、如何实现一个栈

    什么是堆栈:
    堆栈是一个数据结构,其存储在一个后进/先出的方式的项目。这通常被称为LIFO。这与队列形成对比,队列以先入/先出(FIFO)方式存储项目。

    list您可能经常在程序中使用的内置结构可用作堆栈。相反的.push(),你可以使用.append()新的元素添加到您的堆栈的顶部,同时.pop()除去了LIFO顺序的元素

    如果你的堆栈比当前拥有它的内存块大,那么Python需要做一些内存分配。这可能导致一些.append()呼叫比其他呼叫花费更长的时间。还有一个不太严重的问题。如果您使用.insert()在末尾以外的位置向堆栈添加元素,则可能需要更长时间。但是,这通常不是你要对堆栈做的事情。

    使用collections.deque创建一个Python堆栈该collections模块包含deque,这对于创建Python堆栈很有用。deque发音为“deck”,代表“双端队列”。您可以使用同样的方法deque,你上面看到的list,.append()和.pop()

    from collections import deque
    myStack = deque()
    myStack.append('a')
     myStack.append('b')
     myStack.pop()
     'b'
     myStack.pop()
     'a'
    

    4、单引号、双引号、三引号的区别

    在python中,单引号、双引号功能一样,都可以表示字符串,也都可以起到转义的功能。
    其实在转义这一点上,三个引号的功能也是一样的,

    唯一的差别就是三引号 ‘’’ 和 “”"可以显示多行。

    • 三引号作用一:进行多行注释
      我们都知道Python中注释是井号 #,但是如果你需要描述多行注释的时候,就需要每行都写一个 #,或者,你可以采用连续的三个双引号
    • 作用二:定义多行字符串
      为避免使用转义换行符 ,通常会用在定义SQL语句的表达式中没有变量的时候,例如:
      # SQL建表语句    
        sql_create_table = """CREATE TABLE CUSTOMER (             
        FULL_NAME  CHAR(20) NOT NULL,            
        AGE INT,            
        SEX CHAR(1),             
        BALANCE FLOAT )"""
    

    以上述建表语句为例,如果不使用三个双引号,则需要用换行符进行定义,如下:

    # SQL建表语句    
    sql_create_table = "CREATE TABLE CUSTOMER (
    FULL_NAME  CHAR(20) NOT NULL,
    AGE INT,
    SEX CHAR(1),
    BALANCE FLOAT )"
    

    5、python中交换两个数值
    python交换两个值得方法非常简单,即a,b=b,a,

    方法一:
    a,b=3,4
    a,b=b,a
    print(a,b)
    方法二:
    a=1
    b=5
    c=a
    a=b
    b=c
    print(a,b)
    

    6、如何在一个function里面设置一个全局的变量
    解决方法是在function的开始插入一个global声明:
    def f() global x

    如果仅使用全局变量的值,不修改他的值,则可以直接引用全局变量。不用特别声明。

    在局部作用域里面,如果修改全局变量,则需要事先使用global进行声明,表示其使用的是全局变量。函数中的变量s为局部变量,另外一个s为全局变量,对局部变量的修改,不影响全局变量。

    全局变量s,在函数中在局部变量s,赋值之前使用,出错,不确定是全局变量还是局部变量
    解决方法是在函数的开始插入一个global声明:

    def f()
    global x
    
    
    >>>s = "hongkong"
    >>>def fn():
        print(s)
        s = "beijing"
        print(s)
    >>>fn()
    Traceback (most recent call last):
      File "<pyshell#19>", line 1, in <module>
        fn()
      File "<pyshell#17>", line 2, in fn
        print(s)
    UnboundLocalError: local variable 's' referenced before assignment
    >>>print(s)
    hongkong
    >>>def fn():
        global s
        print(s)
        s = "beijing"
        print(s)
    >>> fn()
    hongkong
    beijing
    >>> print(s)
    beijing
    

    7、什么是lambda函数?它有什么好处
    匿名函数
    lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数。
    (注意:lambda 函数不能包含命令,它们所包含的表达式不能超过一个)

    它有什么好处
    1、lambda函数比较轻便,即用即仍,很适合需要完成一项功能,但是此功能只在此一处使用,连名字都很随意的情况下;
    2、匿名函数,一般用来给filter,map这样的函数式编程服务;
    3、作为回调函数,传递给某些应用,比如消息处理

    lambda [arguments]:expression
    
    >>> a=lambdax,y:x+y
    
    >>> a(3,11)
    

    8、函数参数有几种形式,可变参数传递的两个参数是什么意思
    (1)、必须参数(位置参数):须以正确的顺序传入函数,调用时的数量必须和声明时一样
    (2)、关键字参数:不需顺序一致,python解释器能够用参数名匹配参数值
    (3)、默认参数:调用函数时,如果没有传递参数时,则使用默认参数
    (4)、不定长参数:需要一个函数能够处理比当初声明时更多的参数

    • 加了*的参数会以元组的形式导入,存放所有未命名的变量参数
    • 加了**的参数会以字典的形式导入
    • 如果在函数调用时没有指定参数,它就是一个空元组,可以不同函数传递未命名的变量
    • 声明函数时,参数中*可以单独出现,*后的参数必须用关键字传入

    *args 可变长度参数,实参长度不定,接受所有参数到一个元组上
    **kwargs可变长度参数,实参长度不定,接受所有参数到一个字典上

    9、装饰器

    从字面上理解,就是装饰对象的器件。可以在不修改原有代码的情况下,为被装饰的对象增加新的功能或者附加限制条件或者帮助输出。装饰器有很多种,有函数的装饰器,也有类的装饰器。装饰器在很多语言中的名字也不尽相同,它体现的是设计模式中的装饰模式,强调的是开放封闭原则。装饰器的语法是将@装饰器名,放在被装饰对象上面。

    10、交换机和路由器的区别

    交换机和路由器一样,都能使只能一抄台设备上网的网线扩展断口,使若干个设备同时上网。
    交换机和路由器都可用来交换网络设备,只是所交换的网络层次不同。

    路由器 和交换机的区别:交换机主要是实现大家通过一根网线上网,但是大家上网是分别拨号的,各自使用自己的宽带,大家各自上网没有影响,哪怕其他人在下载,对自己上网也没有影响,并且所有使用同一条交换机的电脑都是在同一个局域网内。路由器比交换机多了一个虚拟拨号功能,通过同一台路由器上网的电脑是共用一个宽带账号,大家之间上网是相互影响的,比如一台电脑在下载,那么同一个路由器上的其他电脑会很明显的感觉到网速很慢。同一台路由器上的电脑也是在一个局域网内的。

    交换机和路由器的区别是:
    1、路由器能拨号,交换机不能。
    2、无线道路由器能使无线设备WIFI上网,交换机不能。
    3、支持WDS无线桥接的无线路由器,能作为无线桥接的副路由,交换机不能。

    1)工作层次不同最初的交换机是工作在OSI/RM开放体系结构的数据链路层(第二层),而路由器一开始设计工作在OSI模型的网络层。由于交换机工作在OSI的第二层(数据链路层),所以它的工作原理比较简单,而路由器工作在OSI的第三层(网络层),可以得到更多的协议信息,路由器可以做出更加智能的转发决策。

    2)数据转发所依据的对象不同交换机是利用物理地址或者说MAC地址来确定转发数据的目的地址。而路由器则是利用不同网络的ID号(即IP地址)来确定数据转发的地址。IP地址是在软件中实现的,描述的是设备所在的网络,有时这些第三层的地址也称为协议地址或者网络地址。MAC地址通常是硬件自带的,由网卡生产商来分配的,而且已经固化到了网卡中去,一般来说是不可更改的。而IP地址则通常由网络管理员或系统自动分配。

    (3)传统的交换机只能分割冲突域,不能分割广播域;而路由器可以分割广播域。由交换机连接的网段仍属于同一个广播域,广播数据包会在交换机连接的所有网段上传播,在某些情况会导致通信拥护和安全漏洞。连接到路由器上的网段会被分配成不同的广播域,广播数据不会穿过路由器。
    虽然第三层以上交换机具有VLAN功能,也可以分割广播域,但是各子广播域之间是不能通信交流的,它们之间的交流仍然需要路由器。

    (4)路由器提供了防火墙的服务,它仅仅转发特定地址的数据包,不传送不支持路由协议的数据包传送和求知目标网络数据包的传送,从而可以防止广播风暴。

    11、访问搜狐过程,IP转发过程
    计算机开机,系统运行,发送dhcp请求,获得网卡的ip地址,dns,网关的IP地址。
    浏览器上网,向自己的dns服务器发送域名解析请求,将搜狐的网站解析成ip地址,然后就可以向自己的网关发送http数据包知了,如果没有网关的mac地址,就要道发送arp请求,得到自己网关的mac地址。

  • 相关阅读:
    django
    水仙花数 Python
    Python 实现两个矩形重合面积
    Linux文件目录
    grep 命令
    软件测试的一些心得(转)
    压力测试和负载测试
    如何在mysql数据库生成百万条数据来测试页面加载速度
    CentOS7下部署java+tomcat+mysql项目及遇到的坑
    MongoDB的安装
  • 原文地址:https://www.cnblogs.com/llb123/p/13398712.html
Copyright © 2011-2022 走看看