Python常见的面试题

1.大数据的文件读取

     1).利用生成器generator

     2.)迭代器进行迭代遍历:for line in file

2.迭代器和生成器的区别:

    1).迭代器是一个更抽象的概念,任何对象,如果它的类有next方法和iter方法返回自己本身。对于string、list、tuple等这类容器对象,使用for循环遍历是很方便的。在后台for语句对容器对对象调用iter()函数,iter()是Python的内置函数。iter()会返回一个定义了next()方法的迭代器对象,它在容器中逐个访问容器内元素,next()也是Python的内置函数。也没有后续元素时,next()会抛出一个StopIteration异常

    2).生成器(Generator)是创建迭代器的简单而强大的工具。它们写起来就像正规的函数,只是在需要返回数据的时候使用yield语句。每次next()被调用时,生成器会返回它脱离的为止(它记忆语句最后一次执行的为止和所有的数据值)

    区别:生成器能做到迭代器能做的所有事,而且因为自动创建__iter__()和next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。除了创建和保存状态的自动方法,当发生器终结时,还会自动抛出StopIteration异常。

3.装饰器的作用和功能:

引入日志

函数执行时间统计

执行函数前预备处理

执行函数后的清理功能

权限校验等场景

缓存

4、简单谈下GIL:

Global Interpreter Lock(全局解释器锁)

    Python代码的执行由Python虚拟机(也叫解释器主循环,CPython版本)来控制,Python在设计之初就考虑到要在解释器的主循环中,同时只有一个线程在执行,即在任意时刻,只有一个线程在解释器中运行。对Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行。

在多线程环境中,Python虚拟机按一下方式执行:

    1.设置GIL

    2.切换到一个线程去运行

    3.运行:

          a.指定数量的字节码指令,或者

          b.线程主动让出控制(可以调用time.sleep(0))

    4.把线程设置为睡眠状态

    5、解锁GIL

    6、再次重复以上所有步骤

     在调用外部代码(如C/C++扩展函数)的时候,GIL将会被锁定,直到这个函数结束为止(由于在这期间没有Python的字节码被运行,所以不会被线程切换)。

5.find和grep

    grep命令是一种强大的文本搜索工具,grep搜索内容串可以是正则表达式,允许对文件进行模式查找。如果找到匹配模式,grep打印包含模式的所有行。

    find通常用来再特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件

6.线上服务可能因为种种原因导致挂掉怎么办?

    linux下的后台进程管理利器 supervisor

    每次文件修改后再Linux执行service supervisord restart

7.如何提高Python的运行效率

使用生成器;关键代码使用外部功能包(Cython,pylnlne, pypy, pyrex);针对循环的优化--尽量避免咋循环中访问变量的属性

8.常用Linux命令:

  ls: 查看文件的目录

  help:用于显示shell内部命令的帮助信息

  cd:切换目录

more:和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按也来查看文件的内容,还支持直接跳转等功能

clear:这个命令将会刷新屏幕,本质上只是让终端显示页向后翻一页,如果向上滚动屏幕还可以看到之前的的操作细信息。一般都会用这个命令

mkdir:创建目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录

    1.创建一个空目录:mkdir abc

    2.递归创建多个目录:mkdir -p test/test1

    3.创建新目录都显示信息:mkdir -v hao

    4.创建权限为777的目录:mkdir -m 777 pc

pwd: 显示工作目录,执行pwd指令可立刻得治当前目录的绝对路径名称

rm:rm m命令Remove,功能:1)删除目录,2)删除文件,(可以递归删除指定目录的所有文件及子目录)

   注意:rm是一个危险的命令,使用的时候要特别当心,尤其对初学者来说。

   用法:rm [选项][参数]  (参数为目录或文件)

   命令选项:-f:不提示,强制删除文件或目录

                     -i:删除已有文件或目录之前先询问用户

                      -r,-R:递归删除,将指定目录下的所有文件与子目录一并删除

                     -v:显示指令的详细执行过程。

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

find: 用于在文件树中查找文件,并作出相应的处理  

  命令参数:

        pathname:find 命令所查找的目录路径。譬如用.来表示当前目录,用/来表示系统根目录。

        -print: find 命令将匹配的文件输出到标准输出

        -exec:  find 命令对匹配的文件执行该参数给出逇shell命令,相应命令的形式‘command’{} \;注意{}和'\;'之间的空格。

       -ok:和-exec的作用相同,只不过以一种更为安全的模式来执行改参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行该功能。

mv: 命令move的缩写,可以用来移动文件或者将文件改名(move(rename)files), Linux系统下常用的命令,经常用来备份文件或者目录。       

       命令格式:mv [选项] 源文件或目录  目标文件或目录

       命令功能:视命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其迁移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定到源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的连接也将丢失、

3.命令参数:

    -b: 若需要覆盖文件,则覆盖前先行备份。

   -f: force强制的意思,如果目标文件已经存在,不会询问而直接覆盖

   -i: 若目标文件(destination)已经存在时,就会询问是否覆盖

   -u:若目标文件已经存在,且source比较新,才会更新(update)

su:命令切换root身份

date: 根据给定格式显示日期或设置系统日期时间

9.Python中yeild用法:

    yeild简单说来就是一个生成器,这样函数它记住上次返回时在函数体中的为止。对生成器第二次(或n次)调用跳转至该函数次,调用跳转至该函数

10.Python是如何进行内存管理的

    一。垃圾回收: Python不像C++,Java等语言一样,他们可以不用事先声明变量类型而直接对变量进行赋值。对Python语言来讲,对象的类型和内存都是在运行时确定的。这也是为什么我们称Python语言为动态类型的原因(这里我们把动态类型可以简单的归结为对变量内存地址分配是在运行时自动判断变量类型并对变量进行赋值)。

   二、引用计数:Python采用了类似Windows内核对象一样的方式来对内存进行管理。每一个对象,都维护这一个指向该对象的引用计数。当变量被绑定在一个对象上的时候,该变量的应用计数就是1,(还有另外一些情况也会导致边玲引用计数的增加),系统会自动维护这些标签,比你定时扫描,当某标签的引用计数变为0的时候,该对象就会被回收。

   三、内存池机制

11.描述数组、链表、队列、堆栈的区别?

    数组与链表是数据存储方式的概念,数组在连续的空间中存储数据,而链表可以在非连续的空间中存储数据;、

     队列和堆栈是描述数据存取方式的概念,队列是先进先出,而堆栈是先进后出;队列和堆栈可以用数组来实现,也可以用链表实现。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值