Python面试题,python知识点汇总

Python面试题,python知识点汇总

填空题

1. Python中的编码格式你用过哪些?utf-8, gbk, gb2312, ascii, gb18030

2. 列举使用过的装饰器@classmethod、@staticmethod、@property

3. 参数*args和**kwargs的区别 *args不定长参数,传入函数中是一个元组**kwargs 不定长关键字参数,以key=value形式传递参数,传入函数中是一个字典

4. list1 = [x for x in range(10) if x%2 ==0],则打印list1的结果是[0,2,4,6,8]

5. 匿名函数的关键字是: lambda,声明函数的关键字def ,声明类的关键字class

6. 书写以下CSS样式代码:1. div边框为1像素、红色、虚线:border: 1px red _dalish 2.  div边框圆角、半径为20像素:border-radius:20px; 3. div盒子阴影,向右下角偏移、黑色、模糊度10像素: box-shadow: 1px 1px 10px  black

7. 相对定位和绝对定位的区别:1. 相对定位相对自己原来的位置做位置微调,本身不会被浮动到上层2. 绝对定位相对浏览器边框做位置调整,本身会被浮动到上层

8. 书写以下在CSS中查找标签的方式:1. 查找id为current的p标签:#current 2. 查找class为list-item的所有div标签:.list-item 3. 查找div下所有的span标签:div span 4. 查找div下所有的的直接子标签section: div > section

9. Scrapy创建项目创建爬虫运行爬虫的命令分别为scrapy startproject 项目名,scrapy genspider 爬虫名 主机域名,scrapy crawl 爬虫名

10. 列举常用的数据解析方式及解析用到的包  1. 正则表达式    re  2. xpath   lxml 3.  json解析  json 4.  bs4   BeautifulSoup

11. 写一个用于匹配所有class=red的标签包裹的文本数据的正则表达式<.*?class=red.*?>(.*?)

12. 连接MySql数据库的命令为mysql -u用户名 -p密码

13. map()、filter()、reduce()函数的作用

        1. map(lambda x:x*x, [1,2,3,4,5,6,7,8,9]) 让可迭代对象中的每一个元素都执行一次某个函数,并将执行函数返回的结果放入新的列表中

        2. Filter()让可迭代对象中的每一个元素都执行一次某个函数,并将函数返回为真(不是None、空字符串、0、False)的数据放入新的迭代器对象中

        3. Reduce() 让可迭代对象中的每两个个元素都执行一次某个函数,并将执行结果和下一个元素进行再次运算,直至没有元素为止,返回的是一个结果

14. 列举你使用过的数据库sqlite3、mysql、mongodb、redis及操作对应数据库的第三方包sqlite、pymysql、pymongo、redis

15. 写一句代码计算1到100的和 sum(range(1,101)) 或者 reduce(lambda x,y:x+y, [x for x in range(1,101)])

16. 列举网络爬虫所用到的网络请求包urllib|requests、解析包re|bs4|json|lxml、数据抓包工具fiddler及使用方法:手机和电脑连同一个网段,设置手机wifi代理为电脑ip,手机端安装证书,开启fiddler进行抓包

17. 有两个变量x=5,y=8,给出不使用第三个变量实现交换x与y变量的值的方法x,y=y,x

18. 有列表a = [1,2,3,4,5,6,7,8,9],给出得到列表a中偶数列表b=[2,4,6,8]的一行代码map(lambda x: if x%2==0, a) ,给出不使用for循环能够生成列表a的一行代码range(1,10)  [x for x in range(1,10)]

19. 给出同时遍历字典a的key,vlaue的办法for key,vlaue in a.items()

20. 给出同时遍历列表a的index,value的办法for idx ,value in enumerate(a)

21. 如果模块test.py是被导入的,__name__的值是test,如果模块test.py是被直接执行的,__name__的值是__main__

22. 表达式[1,2,3]*3的执行结果为[1,2,3,1,2,3,1,2,3]

23. 表达式int(4**0.5)的值为__2___

24. Django创建项目命令django-admin startproject 项目名创建application命令python manage.py startapp app名称 运行项目命令python manage.py runserver

25. 简述你使用过的Python中的装饰器,并说明它们的作用

        1. @classmethod 类函数装饰器,装饰的函数可以由类和对象调用,默认参数cls表示类

        2. @staticmethod 静态函数装饰器,装饰的函数可以由类和对象调用,没有默认参数

        3. @property 描述装饰器  装饰的函数可以通过对象.函数(不加括号) 直接调用

        4. @eat.setter 对象.eat = 值  会调用该函数

简答题

1. 面向对象的特点是?封装、继承、多态

2. 简述类和对象的概念,并举例说明

      1. 类:具有相同属性和行为方法的事物的抽象集合,人类、植物类....

      2. 对象:类的具体的实例 人类中的你自己.....

3. 简述类继承的特点

      1.子类继承父类,子类可以使用父类的所有属性和函数

      2.子类继承父类,子类可以添加自己的属性函数,父类不能使用子类添加的属性函数

      3.子类继承父类,子类可以重写父类的函数:1.部分重写 2.完全重写

4. 详细说说list、dict的用法,它们的特点和区别?

      1. list存储任意类型的数据,按照索引进行排序,第一个元素索引为0,第二个为1...依次类推,

      2. dict存储任意类型的数据,数据以key:value的形式存放在字典中,key是唯一且不可变的

      3. list和dict中的数据都可以进行增删改查

5. 分别写出list、dict中常用的五个函数及作用

      list: append()追加  insert()插入  clear()清空 pop()移出 remove()删除 copy()拷贝 sort()排序 reverse()反向排序 extends()扩展

dict: clear()清空 pop()移出 popitem()移出一个key个value keys()获取所有key values()获取所有值 items()获取所有key和值  update()更新 get()根据key获取值

6. pass的作用是什么?

      保证代码完整性,若函数或代码块中暂无要执行的功能代码,可以使用pass占位,保证代码不出错

7. def eat(name, money=10): 函数中两种参数形式有什么不同?

       1. name是必要参数,这个参数在调用时必须传递

       2. money 是缺省参数,调用函数时可以选择传递,也可以不传递,默认值为10

8. GET请求方式和POST请求方式的区别是什么?

      1. 参数位置

          get请求参数放在url之后,以?分割,多个参数之间用&符号链接

          Post请求参数放在请求体中,每个参数之间用&符号链接

      2. 安全性

        get请求参数直接在url地址中明文显示,只要能获取到url地址,就可以将隐私数据提取,不安全

        Post请求,由于参数是放在请求体重的,不会明文显示,相对来说比较安全

      3. 请求参数长度

        理论上url地址没有长度限制的,但是浏览器会对url做长度限制,一般的浏览器url地址长度不能超过2048个字节,所以get请求参数是有长度限制的

        post请求,请求数据放在请求体中,没有长度限制,但实际情况会根据服务器端的要求作出限制

      4. 应用场景

        get请求一般用于获取服务器资源

        Post请求一般用于向服务器提交资源

9. 请求报文和响应报文结构

请求报文

        请求方法  请求地址  协议版本     请求行部分

        请求头部分

 

        请求数据

 

响应报文

        协议版本  状态码  原因短语     状态行

        响应头

 

        响应数据

10.简述反爬虫措施及应对方案(反爬虫指服务器采用的检测爬虫,禁止爬虫的方式)

      1. User-Agent 中如果携带python标识,禁止访问

      2. 模拟浏览器的User-Agent,可以搜索多个浏览器请求头,每次发请求随机取一个

      3. 要求用户登录后进行访问   解决:登录之后找到cookie,每次发送请求携带上cookie

      4. 封ip, 使用代理ip

11.简述如何应对目标服务器对爬虫程序的限制

      1. 判断请求头中的部分内容,是否符合要求  模拟请求头

      2. 假设同一个ip段访问太过频繁,限制ip访问速度或封杀整个ip段  使用代理ip

      3. 如果访问频繁,会要求用户登录之后进行访问。模拟登陆,获取登陆后的cookie,每次请求携带cookie即可

      4. 如果同一个用户访问频繁,会限制该用户访问,甚至封禁帐号  申请多账户,爬虫之前登陆所有帐号,获取登陆帐号的cookie,每次请求随机取出一个cookie

      5. 爬虫中需要进行验证码验证,  云打码 解决验证码 字母数据  滑块\点触\倒立文字\拼图滑块

      6. 数据加密,直接返回的数据时加密后的数据  尝试解密 使用selenium完全模拟用户行为,爬取数据(比较慢)

      7. 反爬成本太高,放弃....

12.try语法的作用是什么?列举你遇到的至少3中错误类型

      1. try用来做异常捕获,程序运行期间一旦代码运行出现错误,会导致程序直接终止运行,通过异常捕获可以在程序运行期间,一旦出错,在except中处理这个错误,程序可以继续向下执行,不会影响后续代码的运行

      Try:

            要检测异常的代码

      Except Exception as e :

            出现异常、处理异常的代码

      Else:

            没有出现异常执行的代码

      Finally:

            无论是否出现异常,最后都会执行这段代码

      2. IndexError 索引错误  KeyError key错误    ValueEroor  值错误   TypeError类型错误   AttrError 属性错误........

13. 简述python如何管理内存

      Python是自动管理内存的,通过引用计数进行管理,当对象被创建时,引用计数为1,当对象被引用时,引用计数+1,当引用结束时,计数-1,计数为0时,对象被释放

14. *args和**kwargs的区别是什么?

      *args 不定长参数 传递到函数中是一个元组类型,可传递多个参数

      **kwargs 关键字不定长参数  传递到函数中是一个字典类型,可传递多个参数,传递参数形式 key=value

15. 简述map()、filter()、reduce()函数的作用

      Map() 让可迭代对象中的每一个元素都执行一次函数,并将函数返回的结果放入一个新的可迭代对象中,并返回这个可迭代对象

      Filter()让可迭代对象中的每一个元素都执行一次函数,将函数返回的结果进行筛选,把所有为真的结果放入一个新的可迭代对象中,并返回这个可迭代对象

      Reduce() 让可迭代对象中的每两个个元素执行一次函数,将两个元素计算的结果和第三个元素继续调用函数,依次类推,直到计算出最后一个结果,并返回这个结果

16. 正则表达式match()和search()函数的区别是什么?

      Match() 某个字符串必须以正则表达式开头,才会查找到

      Search() 无论正则表达式匹配的字符串在任何位置,都可以搜索到

 

17. 用列表生成式实现下列功能

      1. 创建list1,存放1-100(包含100)中既是2又是3倍数的数字

                  方法一:[x for x in range(1,101) if x % 2==0 and x%3 == 0]

方法二:[x for x in range(1,101) if x % 6 == 0]

      2.现有列表list1=[‘张三’,’李四’.....],请将list1中所有以’张’开头的名字放到list2中

                  方法一:[name for name in list1 if name.startsswith()]

                  方法二:[name for name in list1 if name[0] == ]

18. 请以字符串格式化输出的形式输出以下内容,  name=”张%哈哈%三” age=20 address=”河南郑州”,  输出格式为: ”我叫***,我今年***岁,我家在***”

      Print(我叫%s,我纪念%s岁,我家在%s % (name,age,address))

      Print (我叫{},我纪念{}岁,我家在{}.Format(name,age,address))

19. 请用reduce()函数+匿名函数实现100以内数字求和

Def calc(x,y):

Return x +y

S = reduce(calc, [for x in range(100)])

或者:

S = reduce(lambda x,y:x+y, [for x in range(100)])

20. 用列表推导式实现下列功能

      a)创建list1,存放1-100(包含100)中既是2又是3倍数的数字

           [x for x in range(1,101) if x%6==0]

           [x for x in range(1,101) if x%2==0 and x%3==0]

      b)现有列表list1,请将列表1中所有以’张’开头的名字放到list2中

          list1 = ['张三','李四']
          list(filter(lambda x:x if x.startswith('') else None ,list1 ))

21. 在scrapy中如何自定义随机请求头?需要实现什么函数?

      fake_useragent 第三包

      自定义middleware ,在middleware中process_request()函数中,通过fake_useragent设置request的请求头

      From fake_useragent import UserAgent

      Def RandomUAMiddleware(object):

              Def __init__(self):

                      Self.ua = UserAgent()

      Def process_request(self, request, spider):

                      Request.headers.setDefault(bUser-Agent, self.ua.random)

     在settings中Download_MIDDLEWARE 中配置定义的RandomUAMiddleware,取消默认使用的scrapy.downloadermiddleware.useragent.UserAgentMiddleware,设置为None即可

 22. 写出下列SQL语句

      1. 创建一张学生表,包含姓名,年龄,学号(主键),性别,成绩等五个字段,类型自己定义

          CREATE TABLE stuednts(name text,age integer ,id integer primary key,sex text,score integer)

      2. 向表中插入1条数据,张三,20,10086,男,95

          INSERT INTO students(name,age,id,sex,score)values(........)

      3. 查询年龄大于20的学生的姓名和学号

          Select name ,id from students where age>20

      4. 更新姓名为张三的学生姓名为李四

          Update students set name=李四 where name=张三 \ name like 张三

      5. 删除所有姓名以张开头的学生信息

          Delete from student where name like 张%

      6. 按成绩降序排序,查询学号、姓名、年龄字段

           Select id ,name ,age from student order by score DESC

      7. 写出Python操作MySQL的用法,并分别写出创建表、插入数据、删除数据、修改数据、查询所有数据的SQL语法

          Import pymysql

          Db = pymysql.connect(

                Host=127.0.0.1,

                Port=3306,

                Db=’’,

                User=’’,

                Password=’’.

                Use_unicode=True,

                Charset=’’

           )

          Curosor = db.cursor()

          Cursor.execute(sql)

          Db.commit()

          Cursor.close()

          Db.close()

    CREATE TABLE 表名 (字段 类型 约束, 字段 类型 约束.....)

    INSERT INTO  表名(字段,字段...)VALUES(值,.....)

    SELECCT * FROM 表名

    UPDATE 表名 SET 字段=值,字段=值.....WHERE 修改条件

    DELETE FROM 表名 WHERE 条件

 

 

你可能感兴趣的:(python)