• 一.基础语法


    一.基础语法

    1.输入与输出

    1.1 print 调用 Python 中底层的什么方法?

    print 方法默认调用 sys.stdout.write 方法,即往控制台打印字符串
    

    1.2 简述你对 input()函数的理解?

    在 Python3 中,input()获取用户输入,不论用户输入的是什么,获取到的都是字符串类型的。
    在 Python2 中有 raw_input()和 input(), raw_input()和 Python3 中的 input()作用是一样的,input()输入的是什么数据类型的,获取到的就是什么数据类型的。
    


    2.条件与循环

    2.1 range 和 xrange 的区别?

    两者用法相同,不同的是 range 返回的结果是一个列表,而 xrange 的结果是一个生成器,前者是直接开辟一块内存空间来保存列表,后者是边循环边使用,只有使用时才会开辟内存空间,所以当列表很长时,使用 xrange 性能要比 range 好
    

    2.2 比较两个输出结果l1 versus l2

    l1 = []
    for i in range(10):
        l1.append({"num": i})
    print(l1)
    
    
    l2 = []
    a = {"num": 0}
    for i in range(10):
        a['num'] = i
        l2.append(a)
    print(l2)
    


    3.文件操作

    3.1 4G 内存怎么读取一个 5G 的数据?

    方法一:
      可以通过生成器,分多次读取,每次读取数量相对少的数据(比如 500MB)进行处理,处理结束后再读取后面的 500MB 的数据。
    方法二:
      可以通过 linux 命令 split 切割成小文件,然后再对数据进行处理,此方法效率比较高。可以按照行数切割,可以按照文件大小切割。
    

    3.2 大文件处理

    现在考虑有一个 jsonline 格式的文件 file.txt 大小约为 10K,之前处理文件的
    代码如下所示

     def process():  # process the data
        pass
    
    
    def get_lines():
        l = []
        with open('file.txt', 'rb') as f:
            for eachLine in f:
                l.append(eachLine)
        return l
    
    
    if __name__ == "__main__":
        for e in get_lines():
            process(e)          
    

    现在要处理一个大小为 10G 的文件,但是内存只有 4G,如果在只修改 get_lines 函数而其他代码保持不变的情况下,应该如何实现?需要考虑的问题都有哪些?

    def get_lines():
        l = []
        with open('file.txt', 'rb') as f:
            data = f.readlines(60000)
        l.append(data)
        yield l
    

    要考虑到的问题有:
    内存只有 4G 无法一次性读入 10G 的文件,需要分批读入。分批读入数据要记录每次读入数据的位置。分批每次读入数据的大小,太小就会在读取操作上花费过多时间。


    3.3 read、readline 和 readlines 的区别?

    read:读取整个文件。
    readline:读取下一行,使用生成器方法。
    readlines:读取整个文件到一个迭代器以供我们遍历
    

    3.4 一个打印路径的函数

    def print_directory_contents(sPath):
        """
        这个函数接收文件夹的名称作为输入参数
        返回该文件夹中文件的路径
        以及其包含文件夹中的文件路径
        :param sPath: 
        :return: 
        """
        import os
        for sChildPath in os.listdir(sPath):
            sChildPath = os.path.join(sPath, sChildPath)
            if os.path.isdir(sChildPath):
                print_directory_contents(sChildPath)
            else:
                print(sChildPath)
    


    4. 异常

    4.1 介绍一下 except 的作用和用法?

    except: #捕获所有异常
    except: <异常名>: #捕获指定异常
    except:<异常名 1, 异常名 2> : 捕获异常 1 或者异常 2
    except:<异常名>,<数据>:捕获指定异常及其附加的数据
    except:<异常名 1,异常名 2>:<数据>:捕获异常名 1 或者异常名 2,及附加的数据
    


    5. 模块和包

    5.1 常用的 Python 标准库都有哪些?

    内置模块:
    os 操作系统,time 时间,random 随机,pymysql 连接数据库,threading 线程,multiprocessing进程,queue 队列。
    第三方库:
    django 和 flask 也是第三方库,requests,virtualenv,selenium,scrapy,xadmin,celery,
    re,hashlib,md5。
    常用的科学计算库(如 Numpy,Scipy,Pandas)。
    

    5.2 赋值、浅拷贝和深拷贝的区别?

    详见


    5.3 双下方法init和new的区别?

    __init__  # initial 在对象创建后,对对象进行初始化
    __new__   # 是在对象创建之前,开辟一个对象空间,并将该对象空间返回给__init__
    

    5.4 说明os.path 和 sys.path 的区别?

    # os.path 主要是用于对系统路径文件的操作
    # sys.path 主要是对 Python 解释器的系统环境参数的操作(动态的改变 Python 解释器搜索路径)
    

    5.5unittest是什么?

    # 在 Python 中,unittest 是 Python 中的单元测试框架。它拥有支持共享搭建、自动测试、在测试
    # 中暂停代码、将不同测试迭代成一组,等的功能。
    

    5.6模块和包是什么?

    # 在 Python 中,模块是搭建程序的一种方式。每一个 Python 代码文件都是一个模块,并可以引用
    # 其他的模块,比如对象和属性。
    # 一个包含许多 Python 代码的文件夹是一个包。一个包可以包含模块和子文件夹
    


    6.Python特性

    6.1 Python 是强语言类型还是弱语言类型?

    # 强类型:不允许不同类型相加
    # 动态:不使用显示数据类型声明,且确定一个变量的类型是在第一次给它赋值的时候
    # 脚本语言:一般也是解释型语言,运行代码只需要一个解释器,不需要编译。
    
    Python 是强类型的动态脚本语言
    

    6.2谈一下什么是解释性语言,什么是编译性语言?

    # 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,
    # 计算机才能执行高级语言编写的程序
    
    # 解释性语言在运行程序的时候才会进行翻译
    # 编译型语言写的程序在执行之前,需要一个专门的编译过程,把程序编译成机器语言(可执行文件)
    

    6.3 Python 是如何进行类型转换的?

    内建函数封装了各种转换函数,可以使用目标类型关键字强制类型转换,进制之间的转换可以用
    int(‘str’,base=’n’)将特定进制的字符串转换为十进制,再用相应的进制转换函数将十进制转换
    为目标进制。

    可以使用内置函数直接转换的有:

    list(tuple_01)
    tuple(list_01)
    

    6.4 Python2 与 Python3 的区别?

    详见


    6.5 关于 Python 程序的运行方面,有什么手段能提升性能?

    1. 使用多进程,充分利用机器的多核性能
    2. 对于性能影响较大的部分代码,可以使用 C 或 C++编写
    3. 对于 IO 阻塞造成的性能影响,可以使用 IO 多路复用来解决
    4. 尽量使用 Python 的内建函数
    5. 尽量使用局部变量

    6.6 什么是 Python?

    • Python 是一种编程语言,它有对象、模块、线程、异常处理和自动内存管理,可以加入其他语言的对比
    • Python 是一种解释型语言,Python 在代码运行之前不需要解释
    • Python 是动态类型语言,在声明变量时,不需要说明变量的类型
    • Python 适合面向对象的编程,因为它支持通过组合与继承的方式定义类
    • 在 Python 语言中,函数是第一类对象
    • Python 代码编写快,但是运行速度比编译型语言通常要慢
    • Python 用途广泛,常被用走"胶水语言",可帮助其他语言和组件改善运行状况
    • 使用 Python,程序员可以专注于算法和数据结构的设计,而不用处理底层的细节

    6.7 什么是 Python 自省?

    Python 自省是 Python 具有的一种能力,使程序员面向对象的语言所写的程序在运行时,能够获得对象的类Python 型。Python 是一种解释型语言,为程序员提供了极大的灵活性和控制力


    6.8 你所遵循的代码规范是什么?请举例说明其要求?

    详见



    7.Linux基础和git

    7.1 Linux 的基本命令(怎么区分一个文件还是文件夹)?

    # 在显示名称的时候会在文件夹后添加“/”,在文件后面加“*”
    ls -F
    

    7.2日志以什么格式,存放在哪里?

    日志以文本可以存储在“/var/log/”目录下后缀名为.log


    7.3 Linux 查看某个服务的端口?

    netstat -anp | grep service_name
    

    7.4ubuntu 系统如何设置开机自启动一个程序?

    直接修改/etc/rc0.d ~ /etc/rc6.d 和/etc/rcS.d 文件夹的内容,添加需启动的程序,S 开头的表示启动,K 开头的表示不启动


    7.5 在 linux 中 find 和 grep 的区别?

    Linux 系统中 grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep 全称是 Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
    linux 下的 find:

    功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。
    语法:find 起始目录寻找条件操作
    说明:find 命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。
    简单点说说,grep 是查找匹配条件的行,find 是搜索匹配条件的文件


    7.6Linux 重定向命令有哪些?有什么区别?

    1、重定向>
    Linux 允许将命令执行结果重定向到一个文件,本应显示在终端上的内容保存到指定文件中。如:ls >test.txt ( test.txt 如果不存在,则创建,存在则覆盖其内容 )。
    2、重定向>>

    这个是将输出内容追加到目标文件中。如果文件不存在,就创建文件;如果文件存在,则将新的内容追加到那个文件的末尾,该文件中的原有内容不受影响。
    

    7.7 软连接和硬链接的区别?

    软连接类似 Windows 的快捷方式,当删除源文件时,那么软链接也失效了。

    硬链接可以理解为源文件的一个别名,多个别名所代表的是同一个文件。当 rm 一个文件的时候,那么此文件的硬链接数减1,当硬链接数为 0 的时候,文件被删除。


    7.8 10 个常用的 Linux 命令?

    pwd 显示工作路径
    ls 查看目录中的文件
    cd /home 进入 '/ home' 目录'
    cd .. 返回上一级目录
    cd ../.. 返回上两级目录
    mkdir dir1 创建一个叫做 'dir1' 的目录'
    rm -f file1 删除一个叫做 'file1' 的文件',-f 参数,忽略不存在的文件,从不给出提示。
    rmdir dir1 删除一个叫做 'dir1' 的目录'
    groupadd group_name 创建一个新用户组
    groupdel group_name 删除一个用户组
    tar -cvf archive.tar file1 创建一个非压缩的 tarball
    tar -cvf archive.tar file1 file2 dir1 创建一个包含了 'file1', 'file2' 以及 'dir1'的档案文件
    tar -tf archive.tar 显示一个包中的内容
    tar -xvf archive.tar 释放一个包
    tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp 目录下
    tar -cvfj archive.tar.bz2 dir1 创建一个 bzip2 格式的压缩包
    tar -xvfj archive.tar.bz2 解压一个 bzip2 格式的压缩包
    tar -cvfz archive.tar.gz dir1 创建一个 gzip 格式的压缩包
    tar -xvfz archive.tar.gz 解压一个 gzip 格式的压缩包
    

    7.9 Linux 关机命令有哪些?

    reboot 重新启动操作系统
    shutdown –r now 重新启动操作系统,shutdown 会给别的用户提示
    shutdown -h now 立刻关机,其中 now 相当于时间为 0 的状态
    shutdown -h 20:25 系统在今天的 20:25 会关机
    shutdown -h +10 系统再过十分钟后自动关机
    init 0 关机
    init 6 重启
    

    7.10 git 合并文件有冲突,如何处理?

    1.git merge 冲突了,根据提示找到冲突的文件,解决冲突如果文件有冲突,那么会有类似标记

    2.修改完之后,执行 git add 冲突文件名

    3.git commit 注意:没有-m 选项 进去类似于 vim 的操作界面,把 conflict 相关的行删除掉直接 push 就可以了,因为刚刚已经执行过相关 merge 操作了



  • 相关阅读:
    火狐获取图片宽和高的方法
    JDBC连接本地sqlserver2005的方法
    war文件不在tomcat 的webapps运行
    javascript 去除空格 方法
    火狐显示图片的方法
    八款开源Android游戏引擎
    android 模拟器 hardWare 属性说明
    jqgrid 属性说明
    Java命名规范
    在MyEclipse里怎样一次性取消所有断点
  • 原文地址:https://www.cnblogs.com/pankypan/p/11066839.html
Copyright © 2020-2023  润新知