面试题之第一部分(Python基础篇) 80题

第一部分(python基础篇)80题

  1. 为什么学习Python?==*==

    # 1. python应用于很多领域,比如后端,前端,爬虫,机器学习(人工智能)等方面,几乎能涵盖各个开发语言的领域,同时它相对于其他语言而言,简洁。
  2. 通过什么途径学习的Python?==*==

    # 通过自学,网上看视频资料,网上买书的方法学习
  3. Python和Java、PHP、C、C#、C++等其他语言的对比?==*==

    '''
    python 
    1. 简单————Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格。Python的这种伪代码本质是它最大的优点之一。它使你能够专注于解决问题而不是去搞明白语言本身。
    2. 易学————就如同你即将看到的一样,Python极其容易上手。前面已经提到了,Python有极其简单的语法。
    3. 免费、开源————Python是FLOSS(自由/开放源码软件)之一。简单地说,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。这是为什么Python如此优秀的原因之一——它是由一群希望看到一个更加优秀的Python的人创造并经常改进着的。
    4. 高层语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。
    5. 可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就可以在下述任何平台上面运行。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC、Symbian以及Google基于linux开发的Android平台。
    6. 解释性————这一点需要一些解释。一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。这个过程通过编译器和不同的标记、选项完成。当你运行你的程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码。你可以直接从源代码 运行 程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。事实上,由于你不再需要担心如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。由于你只需要把你的Python程序拷贝到另外一台计算机上,它就可以工作了,这也使得你的Python程序更加易于移植。
    7. 面向对象————Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的语言如C++和Java相比,Python以一种非常强大又简单的方式实现面向对象编程。
    8. 可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
    9. 可嵌入性————你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
    10. 丰富的库————Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。记住,只要安装了Python,所有这些功能都是可用的。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。缺点:
    1. 运行速度慢,相比于C++/C运行速度偏慢,不过对于用户而言,机器上运行速度是可以忽略的。2. 构架选择太繁杂,没有像C#这样的官方.net构架,也没有像ruby由于历史较短,构架开发的相对集中,所以人人都有不同的方案。C:优点:1. 简洁紧凑、灵活方便 2. 运算符丰富3. 数据结构丰富4. C是结构式语言5. C语法限制不太严格,程序设计自由度大6. C语言允许直接访问物理地址,可以直接对硬件进行操作7. C语言程序生成代码质量高,程序执行效率高8. C语言适用范围大,可移植性好9. C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型10. 有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护缺点:运算符和运算优先级过多,不便于记忆,语法定义不严格,编程自由度大,对新手不友好。更多对比请参考:https://www.jianshu.com/p/7c8fdedf352e'''
  4. 简述解释型和编译型编程语言?

    # 同声翻译:解释性语言# 谷歌翻译:编译性语言# 个人感觉他是想考察你是否对其他的语言有所了解,同时也想看看你对python的理解有多深
  5. Python解释器种类以及特点?==*==

    '''
    1. CPythonc语言开发的 使用最广的解释器
    2. IPython基于cpython之上的一个交互式计时器 交互方式增强 功能和cpython一样
    3. PyPy目标是执行效率 采用JIT技术 对python代码进行动态编译,提高执行效率
    4. JPython运行在Java上的解释器 直接把python代码编译成Java字节码执行
    5. IronPython运行在微软 .NET 平台上的解释器,把python编译成. NET 的字节码
    '''
  6. 位和字节的关系?

    # 1字节(Bytes) = 8位(bit)
  7. b、B、KB、MB、GB 的关系?

    '''
    1B = 8b
    1KB = 1024B
    1MB = 1024KB
    1GB = 1024MB
    '''
  8. 请至少列举5个 PEP8 规范(越多越好) ==*==

    '''
    1. 代码排版2. 文档排版3. 避免多余空格4. 注释5. 命令风格6. 编码建议'''
  9. 通过代码实现如下转换:

    二进制转换成十进制:v = “0b1111011”

    十进制转换成二进制:v = 18

    八进制转换成十进制:v = “011”

    十进制转换成八进制:v = 30

    十六进制转换成十进制:v = “0x12”

    十进制转换成十六进制:v = 87

'''
第一题
v = b'0b1111011'
print(int(v,2))第二题:
print("转换为二进制为:", bin(18))第三题:
八进制转换成十进制:v = “011”

print(int("011",8))第四题:print(oct(v))第五题:
v = '0x12'
print(int(v,16))第六题:
v = 87
print(hex(v))
'''
  1. 请编写一个函数实现将IP地址转换成一个整数。

如 10.3.9.12 转换规则为:

​ 10 00001010


 3 00000011


​ 9 00001001


 12 00001100


再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?

IP = "10.3.9.12"def addr2dec(addr):"将点分十进制IP地址转换成十进制整数"items = [int(x) for x in addr.split(".")]# return sum([items[i] << [24, 16, 8, 0][i] for i in range(4)])return sum([items[i]*2**[24,16,8,0][i] for i in range(4)])print(addr2dec(IP))
# 167971084
  1. python递归的最大层数?

第一种:

def foo(n):print(n)n += 1foo(n)if __name__ == '__main__':foo(1)# 998

第二种:

import syssys.setrecursionlimit(100000)def foo(n):print(n)n += 1foo(n)if __name__ == '__main__':foo(1)# 3221左右
  1. 求结果:
    v1 = 1 or 3

    v2 = 1 and 3

    v3 = 0 and 2 and 1
    
 v4 = 0 and 2 or 1
    
 v5 = 0 and 2 or 1 or 4
    
 v6 = 0 or False and 1
>>> v1 = 1 or 3 
>>> v1
1
>>> v2 = 1 and 3
>>> v2
3
>>> v3 = 0 and 2 and 1
>>> v3
0
>>> v4 = 0 and 2 or 1
>>> v4
1
>>> v5 = 0 and 2 or 1 or 4
>>> v5
1
>>> v6 = 0 or False and 1
>>> v6
False'''
对于python而言
1. 在不加括号时候,and优先级大于or
2. x or y的值只可能是x或y,x为真就是x,x为假就是y
3. x and y的值只可能是x或y,x为真就是y,x为假就是x
'''
  1. ascii、unicode、utf-8、gbk 区别?
'''
1. ascii 8位一个字节2. unicode英文:32位  四个字节中文:32位  四个字节
3. utf-8英文:8位 一个字节中文:16位 两个字节
4. gbk:英文:8位  一个字节中文:16位  两个字节python3中:str 在内存中是unicode编码bytes类型对于英文:str:表现形式:s = 'alex'编码方式:010101010 unicodebytes:表现形式:s = b'alex'编码方式:000101010 utf-8 gbk对于中文:str:表现形式:s = '中国'编码方法:010101010 unicodebytes:表现形式:s = b' x\e91\e91\e01\e21\e31\e32'编码方式:000101010 utf-8 gbkencode 编码,如何将str --> bytes使用方法:str.encode('utf-8')decode 解码,如何将bytes --> str使用方法:bytes.decode('utf-8')
'''
  1. 字节码和机器码的区别?
'''
机器码:机器语言字节码:汇编语言'''
  1. 三元运算规则以及应用场景?
a = 10
b = 20
x = a if a < b else b# 为真时的结果 if 判断条件 else 为假时的结果(注意,没有冒号)
  1. 列举 Python2和Python3的区别?
'''
1. 2中print "字符串"  被  3中的 print()取代
2. 2中input得到的是int类型,raw_input得到的是str类型,而3中只有input且是str类型 
3. 2中字符串以8-bit字符串存储,3中字符串以16-bit unicode字符串存储
4. 2中try:passexcept Exception,e:pass3中try:passexcept Exception as e:pass
'''
  1. 用一行代码实现数值交换:
    
 a = 1
    b = 2
a,b = b,a
  1. Python3和Python2中 int 和 long的区别?
'''
python2中有long类型
python3中没有long类型,只有int类型
'''
  1. xrange和range的区别?
'''
在python2中:xrange  返回的是一个迭代值(生成器)range   返回的是一个列表在python3中:range 返回的是一个迭代值(生成器)'''
  1. 文件操作时:xreadlines和readlines的区别?
'''
xreadlines()则直接返回一个iter(file)迭代器,在Python 2.3之后已经不推荐这种表示方法了readlines()是把文件的全部内容读到内存,并解析成一个list,当文件的体积很大的时候,需要占用很多内存,使用该方法是一种不明智的做法。
'''
  1. 列举布尔值为False的常见值?
# 0,None,空(空容器),Flase
  1. 字符串、列表、元组、字典每个常用的5个方法?
'''
字符串:split,切片,for循环,成员运算,strip,len,replace,lower(),upper(),find()列表: append(),for循环,pop(),排序,join,insert(),切片,len(),count()增:删:改:查:
元组:查:index()count()len()比较:cmp(tuple1,tuple2) 比较两个元组元素;len(tuple):计算元组元素个数;max(tuple):返回元组中元素最大值。;min(tuple):返回元组中元素最小值。tuple(seq):将列表转换为元组'''
  1. lambda表达式格式以及应用场景?
# lambda arges1 [arges2...]: 表达式
lambda x: x+2
  1. pass的作用?
# 相当于填充代码
  1. *args和**kwargs作用
'''*args 作为形参,当用户传入多个位置参数时,其值都存在args中(以元组的形式)**kwargs  作为形参,当用户传入多个关键字参数时,其值都存在kwargs中(以键值对的形式存储)'''
  1. is和==的区别
# is 是判断内存地址的(身份运算符)# == 是判断值是否相等'''
内存地址相同,值一定相等;值相等,内存地址不一定相等。'''
  1. 简述Python的深浅拷贝以及应用场景?
'''
普通拷贝
a 是 b的普通拷贝,则a发生改变 b也发生改变。b发生改变,a也发生改变浅拷贝
a 是 b的浅拷贝,则a中的不可变数据类型发生改变,b不会变。a中可变类型发生改变,b也会随之改变深拷贝  
a 是 b的深拷贝,a,b无关'''# 浅拷贝
import copy
copy.copy()# 深拷贝
import copy
copy.deepcopy()
28. Python垃圾回收机制?

python里每一个东西都是对象,它们的核心就是一个结构体:PyObject

typedef struct_object {int ob_refcnt;struct_typeobject *ob_type;
} PyObject;

PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的ob_refcnt就会减少

#define Py_INCREF(op)   ((op)->ob_refcnt++) //增加计数
#define Py_DECREF(op) \ //减少计数if (--(op)->ob_refcnt != 0) \; \else \__Py_Dealloc((PyObject *)(op))

当引用计数为0时,该对象生命就结束了。

引用计数机制的优点:

  • 简单
  • 实时性:一旦没有引用,,内存就会直接释放了。不用像其他机制等到特定时机。实时性还带来一个好处:处理回收内存的时间分摊到了平时

引用计数机制的缺点:

  • 维护引用计数消耗资源

  • 循环引用

    list1 = []
    list2 = []
    list1.append(list2)
    list2.append(list1)

    list1与list2相互引用,如果不存在其他对象对它们的引用,list1与list2的引用计数也仍然为1,所占用的内存永远无法被回收,这将是致命的。
    对于如今的强大硬件,缺点1尚可接受,但是循环引用导致内存泄露,注定python还将引入新的回收机制。(标记清除和分代收集)

    参考连接:https://www.cnblogs.com/pinganzi/p/6646742.html#_label6

29. Python的可变类型和不可变类型?
'''
可变类型:列表,字典,集合不可变类型:整型,浮点型,字符串'''
  1. 求结果:

    v = dict.fromkeys(['k1','k2'],[])
    v['k1'].append(666)
    print(v)
    v['k1'] = 777
    print(v)
    {'k1': [666], 'k2': [666]}
    {'k1': 777, 'k2': [666]}原因:k1和k2指向的是同一个列表,也就是同一块内存空间。
  2. 求结果

    def num():return [lambda x:i*x for i in range(4)]print([m(2) for m in num()])
    [6, 6, 6, 6]
    原因:只有到需要计算i的值时,才会真正计算i的值

    类似的题目:

    flist = []
    for i in range(3):def foo(x):print(x + i)flist.append(foo)for f in flist:f(2)
    4
    4
    4
    原因:只有到需要计算i的值时,才会真正去算i的值。

转载于:https://www.cnblogs.com/plf-Jack/p/11093713.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCL的安装与配置

Windows 步骤 1&#xff1a;在 http://developer.amd.com/pages/default.aspx根据相应的操作系统&#xff0c;下载最新的 AMD driver&#xff0c; AMD APP SDK。AMD APP SDK目前支持Windows VISTA[32][64]bit&#xff0c;Windows 7[32][64]bit操作系统。 步骤 2:如果已经安装了…

解决:java.lang.IllegalStateException: ApplicationEventMulticaster not initialized

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. springboot 项目启动时报错&#xff1a; java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call …

李洋疯狂C语言之求素数的方法

今天课上李洋老师讲到求素数时&#xff0c;讲了一种新的方法&#xff0c;一开始听得我一脸懵逼&#xff0c;但当我理解的时候&#xff0c;眼前一亮&#xff0c;老师的算法省去了不少步骤&#xff0c;话不多说&#xff0c;附上题目&#xff1a;求100到200之间的素数。 输入&…

面试官问我:平常如何对你的 Java 程序进行调优?

阅读本文大概需要 10 分钟。作者&#xff1a;张俊城, 郭理勇, 刘建来源&#xff1a;http://t.cn/AiCTERJzJava 应用性能优化是一个老生常谈的话题&#xff0c;典型的性能问题如页面响应慢、接口超时&#xff0c;服务器负载高、并发数低&#xff0c;数据库频繁死锁等。尤其是在“…

c语言—变量

变量 存储类型auto register static extern 变量在内存空间中的首地址&#xff0c;称为变量的地址。 变量的定义形式&#xff1a;<存储类型> <数据类型> <变量名> 存储类型&#xff1a;auto register static extern auto (不写默认是auto)局部变量auto 变量的…

李洋疯狂C语言之关于自增自减遇到的一些问题

今天讲到自增的时候&#xff0c;遇到个难点&#xff0c;单个的自增自减运算还是挺简单的&#xff0c;但是如果是多个自增自减&#xff0c;就会变得比较麻烦&#xff0c;在windows环境和Linux环境中也会得到不一样的结果&#xff0c;windows中比较简单&#xff0c;他会将所有前缀…

Servlet的入门

什么是Servlet? Servlet是运行在服务端的java小程序,是sun公司提供的一套规范,用来处理客户端请求.响应给浏览器的动态资源.Servlet是JavaWeb三大组件之一(Setvlet.Filter.Listener),且最重要. Servlet的作用? 用来处理从客户端发送过来的请求,并对该请求做出响应. Servlet的…

快速部署ldap服务

快速部署ldap服务 作者&#xff1a;尹正杰 版权声明&#xff1a;原创作品&#xff0c;谢绝转载&#xff01;否则将追究法律责任。 一.LDAP概述 1.什么是目录服务(1)目录是一类为了浏览和搜索数据二十几的特殊的数据库&#xff0c;例如&#xff1a;最知名的的微软公司的活动目录…

expected at least 1 bean which qualifies as autowire candidate. Dependency a...

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 启动 sringboot 项目报错&#xff1a; expected at least 1 bean which qualifies as autowire candidate for this dependency. 原因…

李洋疯狂C语言之break和continue的区别

1、break (1) 只能在循环体内和switch语句体内使用break语句。 (2) 当break出现在循环体中的switch语句体内时&#xff0c;其作用只是跳出该switch语句体。 (3) 当break出现在循环体中&#xff0c;但并不在switch语句体内时&#xff0c;则在执行break后&#xff0c;跳出本层…

Install OpenCL on Debian, Ubuntu and Mint orderly

Libraries – can’t have enough If you read different types of manuals how to compile OpenCL software on Linux, then you can get dizzy of all the LD-parameters. Also when installing the SDKs from AMD, Intel and NVIDIA, you get different locations for libra…

linux7 配置mysql5.7字符集编码

linux 安装后 mysql5.7 字符集默认是拉丁&#xff0c;不能存储中文&#xff0c;修改步骤如下&#xff1a; 在 vim /etc/mysql/my.cnf 修改配置文件 在[mysqld] 下添加如下配置 character-set-serverutf8 init_connectSET NAMES utf8 重启mysql服务 systemctl restart mysqld.…

解决:java.io.IOException: invalid constant type: 15

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 启动 dubbo 服务报错&#xff1a; java.io.IOException: invalid constant type: 15 我的情况是项目本身 是用的1.7 。而我自己用的…

liunx常用命令笔记

安装软件教程 linux安装java&#xff1a;https://www.cnblogs.com/lamp01/p/8932740.html linux安装mysql&#xff1a;https://www.cnblogs.com/daemon-/p/9009360.html linux安装redis&#xff1a;https://blog.csdn.net/qq_30764991/article/details/81564652 linux安装nginx…

李洋疯狂C语言之编程实现统计某年某月份的天数

今天的题目&#xff1a;编程实现统计某年某月的天数 例如&#xff1a; 输入&#xff1a;2017.7 输出&#xff1a;31天 先附上我自己想的方法&#xff0c;由于几个功能放一起太繁琐&#xff0c;于是我想把他们分为三个函数&#xff0c;分别来实现这个功能&#xff1a; #incl…

MQ 之 RocketMQ

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 RocketMQ 是出自 A 公司的开源产品&#xff0c;用 Java 语言实现&#xff0c;在设计时参考了 Kafka&#xff0c;并做出了自己的一些改进…

好久没敲代码了(强行补上今天的博客。。。)

流水账日记&#xff08;哈哈&#xff09; 今天没课&#xff0c;早上好好的睡了个懒觉&#xff08;虽然还是很困- -&#xff09;&#xff1b; 哥几个把昨天买的排骨洗了做了个排骨汤&#xff0c;虽然不如家里做的好吃&#xff0c;但对此时的我们来说已经是美味了&#xff0c;晚…

Ubuntu下使用AMD APP编写OpenCL程序

对于Ubuntu或其近亲&#xff08;Lubuntu、Kubuntu、Mint等&#xff09;编写OpenCL程序也不会太难。由于本例用的是AMD APP SDK&#xff0c;因此需要AMD的GPU以及相关驱动。首先&#xff0c;去AMD官网下载GPU驱动——AMD Catalyst。如果你用的是APU并且还有一块独立显卡的话&…

jdk的安装与配置

Linux一、安装JDK 从sun网站上直接下载JDK&#xff1a;http://java.sun.com/j2se/1.4.2/download.html提供了两个下载j2re-1_4_2_10-linux-i586.bin 13.75 MB, j2re-1_4_2_10-linux-i586-rpm.bin 13.27 MB&#xff1a;1、RPM in self-extracting file (j2re-1_4_2_10-linux…

李洋疯狂C语言之n个人报数,报到3的退出,最后留在场上的是原来的第几位(约瑟夫环)

今天老师布置了个题目&#xff0c;约瑟夫环&#xff0c;俗称猴子选大王。n个人报数&#xff0c;报到3的退出&#xff0c;最后留在场上的时原来的第几位 #include <stdio.h>int main() {int i, n, q, p 0; //计数 i ,人数 n ,报数 p ,场上人数 qprintf ("input…