python基础语法面试题_Python语法面试题

一句话的阶乘函数

reduce(lambda x,y: x*y, range(1,n+1))

介绍一下except的用法和作用

except: #捕获所有异常

except: : #捕获指定异常

except:

except:,:捕获指定异常及其附加的数据

except:::捕获异常名 1 或者异常名 2,及附加的数据

@(decorator)的作用是什么?

装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能

io密集型和cpu密集型区别

io 密集型:系统运作,大部分的状况是 CPU 在等 I/O (硬盘/内存) 的读/写

Cpu 密集型:大部分时间用来做计算、逻辑判断等 CPU 动作的进程称之 CPU密集型

什么是线程安全?

线程安全是在多线程的环境下,能够保证多个线程同时执行时进程依旧运行正确, 而且要保证对于共享的数据可以由多个线程访问,但是同一时刻只能有一个线程进行访问。多线程环境下解决资源竞争问题的办法是加锁来保证访问操作的唯一性。

Python中yield的用法?

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

谈谈你对GIL锁对Python多线程的影响?

GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定。每个CPU在同一时间只能执行一个线程(在单核CPU下的多线程其实都只是并发,不是并行,并发和并行从宏观上来讲都是同时处理多路请求的概念。但并发和并行又有区别,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。)

在Python多线程下,每个线程的执行方式:

1、获取GIL

2、执行代码直到sleep或者是python虚拟机将其挂起。

3、释放GIL

可见,某个线程想要执行,必须先拿到GIL,我们可以把GIL看作是“通行证”,并且在一个python进程中,GIL只有一个。拿不到通行证的线程,就不允许进入CPU执行。

在Python2.x里,GIL的释放逻辑是当前线程遇见IO操作或者ticks计数达到100(ticks可以看作是Python自身的一个计数器,专门做用于GIL,每次释放后归零,这个计数可以通过 sys.setcheckinterval 来调整),进行释放。而每次释放GIL锁,线程进行锁竞争、切换线程,会消耗资源。并且由于GIL锁存在,python里一个进程永远只能同时执行一个线程(拿到GIL的线程才能执行)。

IO密集型代码(文档处理、网络爬虫等),多线程能够有效提升效率(单线程下有IO操作会进行IO等待,造成不必要的时间浪费,而开启多线程能在线程A等待时,自动切换到线程B,可以不浪费CPU的资源,从而能提升进程执行效率),所以多线程对IO密集型代码比较友好。

什么是阻塞?什么是非阻塞?

阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。例如,我们在CSocket中调用Receive函数,如果缓冲区中没有数据,这个函数就会一直等待,直到有数据才返回。而此时,当前线程还会继续处理各种各样的消息。如果主窗口和调用函数在同一个线程中,除非你在特殊的接口操作函数中调用,其实主接口还是应该可以刷新。socket接收数据的另外一个函数recv则是一个阻塞调用的例子。当socket工作在阻塞模式的时候,如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止。

非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回

递归函数终止的条件?

递归的终止条件一般定义在递归函数内部,在递归调用前要做一个条件判断,根据判断的结果选择是继续调用自身,还是return;返回终止递归。

终止的条件:

1.判断递归的次数是否达到某一限定值

2.判断运算的结果是否达到某个范围等,根据设计的目的来选择

软连接和硬链接的区别?

软连接类似windows的快捷方式,当删除源文档,那么软链接失效。

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

单例模式的应用场景有哪些?

单例模式应用的场景一般发现在以下条件下:

(1)资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如日志文档,应用配置。

(2)控制资源的情况下,方便资源之间的互相通信。如线程池等。

1.网站的计数器

2.应用配置

3.多线程池

4.数据库配置,数据库连接池

5.应用进程的日志应用....

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值