什么软件可以做python题目_Python练习题(九)

1:强类型语言和弱类型语言的区别,python是什么类型的语言(强类型,弱类型,解释型,编译型)

强类型语言,要求所有的变量必须先定义后使用,并且指定类型的变量只能接受类型与之匹配的值;弱类型则不需要

编译型语言,在程序运行之前需要先编译成机器可读的二进制形式(C,java,C++)

解释性语言只需要在运行时有个解释器就行需要经过编译(python,PHP,JS)

2:is 和 == 的区别

is判断id ;==判断值

a = 9999

b = 9999

a == b 结果为True

a is b 结果为False

3:进程、线程、协程的区别

进程 进程是一个程序在一个数据集中的一次动态执行过程,可以简单理解为“正在执行的程序”,它是CPU资源分配和调度的独立单位。 进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执行过程中所需要使用的资源;进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。 进程的局限是创建、撤销和切换的开销比较大。

线程 线程是在进程之后发展出来的概念。 线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。一个进程可以包含多个线程。 线程的优点是减小了程序并发执行时的开销,提高了操作系统的并发性能,缺点是线程没有自己的系统资源,只拥有在运行时必不可少的资源,但同一进程的各线程可以共享进程所拥有的系统资源,如果把进程比作一个车间,那么线程就好比是车间里面的工人。不过对于某些独占性资源存在锁机制,处理不当可能会产生“死锁”。

协程 协程是一种用户态的轻量级线程,又称微线程,英文名Coroutine,协程的调度完全由用户控制。人们通常将协程和子程序(函数)比较着理解。 子程序调用总是一个入口,一次返回,一旦退出即完成了子程序的执行。 协程的起始处是第一个入口点,在协程里,返回点之后是接下来的入口点。在python中,协程可以通过yield来调用其它协程。通过yield方式转移执行权的协程之间不是调用者与被调用者的关系,而是彼此对称、平等的,通过相互协作共同完成任务。

协程的特点在于是一个线程执行,与多线程相比,其优势体现在: 协程的执行效率非常高。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。 协程不需要多线程的锁机制。在协程中控制共享资源不加锁,只需要判断状态就好了。

4:GIL锁是什么

GIL 锁 全局解释器锁(只在 cpython 里才有在工作中使用的多为cpython,还有其余版本jpython,pypy)

作用:限制多线程同时执行,保证同一时间只有一个线程执行,所以 cpython 里的多线程其实是伪

多线程!

5:MySQL常见数据库引擎及比较

主要 MyISAM 与 InnoDB 两个引擎,其主要区别如下:

Mysql5.1之前MyISAM 是默认引擎,5.1之后默认引擎是Innodb

InnoDB 支持事务,MyISAM 不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一

些列增删改中只要哪个出错还可以回滚还原,而 MyISAM 就不可以了;

MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用;

InnoDB 支持外键,MyISAM 不支持;

InnoDB 不支持 FULLTEXT 类型的索引;

InnoDB 中不保存表的行数,如 select count() from table 时,InnoDB;需要扫描一遍整个表来

计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。注意的是,当 count()语句包含

where 条件时 MyISAM 也需要扫描整个表;

对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中可以和其他字

段一起建立联合索引;清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建

表;

InnoDB 支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like '%lee%'

6:char和varchar的区别

char是不可变长度,varchar是可变长度

定义个char[10]和varchar[10]

分别存python进去

char占用的依旧是10个长度的字符串,varchar占用为6个

尽管char占用的比较多但是char也有其优势,在查找时char查找速度比varchar要快

7:深拷贝和浅拷贝的区别

深拷贝 浅拷贝分别是copy.copy copy,deepcopy

在一维列表中是没有区别的

在二维甚至多维列表中区别就出来了

list_1 = [1,2,3,[4,5,6]]

list_2 = copy.copy(list_1)

list_3 = copy.deepcopy(list_1)

当我们改变list_1的元素时

例如: list_1[0] = 0

这时候查看list_2,和list_3时是没有区别的

我们再改变list_1[3][1] = 9

这时再查看list_2和list_3就可以发现不同了

浅拷贝只拷贝第一层的内容,第二层的依然是引用

8:什么是lambda是函数,在工作中有什么作用

lambda是一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。

在工作中往往会碰到需要局部使用的小函数,但是命名又特别麻烦,也有可能导致函数冲突,在简单的函数中使用lambda函数就足够了,能省去命名的麻烦也能达到需要的效果.

例如:list_1 = [1,2,3,4,7,9,14,51,17]取出其中为3的倍数的数据时

print(list(filter(lambda x:x%3==0, list_1)))

9:如何分析SQL语句的执行计划?怎样查看正在执行的SQL?

explain sql

show profile

详情参考:https://www.shixinke.com/mysql/mysql-sql-optimization-with-using-explain-and-show-profile

10:git代码切换到上一次提交的状态

git reset --hard HEAD?:这里也可以是版本号

git revert HEAD

11:什么是SQL注入,如何避免SQL注入

把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。

在使用ORM不会出现sql注入的情况,sql注入多发生于提交原生sql,在Django中使用pymysql或者mysqldb提交原生SQL时会将特殊的sql语句转义,在不使用这些第三方包的情况下提交sql时采用占位符去填充sql语句也可以转义特殊的语句

12:备份远程服务器(112.113.114.115)的数据库(端口为默认端口,帐号root,密码 mysql)到本地/home/python/Desktop下的命令是什么

Mysqldump –h{ip:port} –u{username} –p{password} {database} {table} > /home/python/Desktop/back_up.sql

13:如何将已经排序好的列表变为无序列表

import random

random.shuffle(list)

14:python2和python3的区别,举例几个

print在python2中不需要括号,python3需要括号

xrange和range

items和iteritems

15:在项目中导包的顺序

LEGB:

locals -> enclosing function -> globals -> __builtins__

locals 是函数内的名字空间,包括局部变量和形参

enclosing 外部嵌套函数的名字空间(闭包中常见)

globals 全局变量,函数定义所在模块的名字空间

builtins 内置模块的名字空间

16:POST和GET的区别

数据携带方式

数据携带的大小

安全性

从这几个方面进行分析

17:COOKIE和session的区别

1、cookie 数据存放在客户的浏览器上,session 数据放在服务器上。

2、cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗考虑到安全应当使用 session。

3、session 会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能考虑到减轻服务器性能方面,应当使用 cookie。

4、单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。

5、建议: 将登陆信息等重要信息存放为 SESSION 其他信息如果需要保留,可以放在 cookie 中

18:L = [i for i in range(100)] 获取L中元素的个数的方法,向L中添加元素的方法,计算L个出现的某个参数出现的次数

len(L)

L.append(10)

L.count(10)

19:判断字典中是否存在这个key的方法

key是否存在字典中

“key” in dic

例如 dic_person = {“name”:”小明”,”age”:20,”gender”:”男”}

判断 dic_person是否存在name

name in dic_person

20:装饰器的作用以及项目中的应用

装饰器本质上是一个 Python 函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能

在flask中用来做路由功能和校验用户是否登录

21:python获取系统当前时间

import time

time.localtime()

22:获取当前目录下所有文件夹

os.listdir()

23:写一段代码实现输入和输出的字母大小写翻转;例如输入”AAbbccddEEFF”输出”aaBBCCDDeeff”

deffanzhuanstr(str):

temp_list=[]for i instr:ifi.islower():

i=i.upper()elifi.isupper():

i=i.lower()

temp_list.append(i)

new_str= ''.join(temp_list)return new_str

24:写一段代码统计用户输入的字符串中大写字母个数,小写字母个数,数字个数

str =str(input(“请输入一串字符串:”))

upper_num=0

lower_num=0

dig_num=0for i inlist(str):ifi.isisdigit():

dig_num+= 1

ifi.isupper():

upper_num+= 1

ifi.islower():

lower_num+= 1

print(“大写字母个数{}\n\t 小写字母个数\n\t{} 数字个数\n\t{}”.format(upper_num,lower_num,dig_num))

25:写一段代码输出1000以内为7的倍数或者包含7的数字例如’14,17,21’

for i in range(1001):if i%7 ==0 or 7 instr(i):print(i)

26:生成器是什么,迭代器是什么,他们之间有什么区别

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

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

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

27:flask中请求上下文和应用上下文是什么

请求上下文:保存了客户端和服务器交互的数据。

应用上下文:flask 应用程序运行过程中,保存的一些配置信息,比如程序名、数据库连接、应用信息等。

28:MVT的理解

MVT是django中的一个设计模式

M: Model,模型,和数据库进行交互

V : View,视图,业务逻辑的处理

T : Template,模板,负责Html页面的产生

29:celery分为哪几块分别执行什么任务

1、任务发布者 发布新任务(短信验证码发送,激活邮件发送)

2、消息队列(broker) 负责任务的调度实现方式有redis,rabbitMQ,rocketMQ,activeMQ等

3、执行者(worker) 以轮询的方式去broker中查询是否有新的任务产生.发现新任务就执行

4、任务执行结果(task result store) 存储执行结果地方

30:你在项目中是否使用过select * from table.

在开发中最好不要使用select *,每次使用select *时都会检索整张表效率十分低下,在开发过程中使用select * 是毫无开发经验的写法!.

31:mysql如何给账户设置权限

先创建用户

# 先连接数据

mysql –uuser -ppassword

# 切换到mysql库中

use mysql;

# 创建用户为python密码为python666的用户

create user python identified by ‘python666’;

# 给项目创建数据库

create databases python default charset=utf8;

# 给账户配置数据库权限

Grant all on python.* to ‘python’@’%’;

# 刷新权限

flush privileges;

32:Git上传代码发生了冲突怎么处理

方案1:根据提示找到冲突的地方,解决冲突之后将冲突的文件或者代码重新add,之后再commit.

方案2:找到产生冲突的文件和同事商量,覆盖他的代码 然后让同事重新commit.

33:L = [I for i in range(101)], 取出L中前10个元素,取出倒数10个元素,取出第10到40个元素的倒序并且为双数的.

取前十个 L[0:10]

取后十个 L[-10:]或者L[-10::]

取出第10到40个元素的倒序并且为双数的[i for i in L[40:10:-1] if i%2==0]

34:写一段代码实现数学中的阶乘,例如输入5,输出为5*4*3*2*1

defjiecheng(nums):

result= 1

if nums==0:return(result)else:for I in range(1, nums+1):

result= result*ireturn(result)

35:请写一个函数函数的输入是一个string类型的英文句子函数的输出也是一个string类型的应为句子:是把输入的句子里面的单词按逆序输出,但是每个单词按内部的字符按顺序输出示例:

输入: “I like you, but just I like you.”

输出: “.you like I just but, you like I”

注意事项:

标点符号当作一个单词处理

deffanzhuanstr(str):

temp_list=[]for i instr:ifi.islower():

i=i.upper()elifi.isupper():

i=i.lower()

temp_list.append(i)

new_str= ''.join(temp_list)return new_str

36: 给定一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

l =[]for a inrange(len(nums)):for b inrange(len(nums)):for c inrange(len(nums)):if (a != b) and (a != c) and (b != c) and (nums[a] + nums[b] + nums[c] ==0):if sorted([nums[a],nums[b],nums[c]]) not inl:

l.append(sorted([nums[a],nums[b],nums[c]]))print(L)

37:二维列表去重[[1,2,3],[3,2,1],[1,2,4],[4,5,6],[2,1,4]]去重后得到[[1,2,3],[1,2,4],[4,5,6]]

sorted(list(list(t) for t in(set([tuple(sorted(t)) for t in l]))))

38:说明简单下MVT和MVC的区别,及Django的特点。

MVC(Model、View、Controller)的简写,是一种广泛使用的软件架构模式。核心思想是分工、解耦,让不同的代码块之间降低耦合,增强代码的可扩展性和可移植性,实现向后兼容。

M,封装了对数据库层的访问,能对数据库中的数据进行增、删、改、查操作。

V, 用于封装结果,生成页面展示的html内容。

C,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。

Django主要有两大特点:

* 重量型

Django提供了众多用于方便开发的功能组件,如数据库ORM、模板、表单、Admin站点等

* MTV结构模式

Django使用MVT结构模式构件整个工程项目,

M - Model层 用于数据库操作

V - View层 用于视图编写

T - Template层 用于页面展示

采用这种结构,可以让代码解耦分工,增强代码的可扩展可移动的灵活性。

39:下面需求使用类视图完成。

1. 在Django中使用MySQL数据库,创建meiduo数据库,

2. 定义商品的模型类,商品字段包含:名字、价格、评论量、销售量、描述信息这几个字段。

3. 完成数据迁移,

4. 实现增加商品的功能。

5. 把增加的商品信息以json形式返回。

代码:

settings.py中关于数据库的配置

DATABASES ={'default': {'ENGINE': 'django.db.backends.mysql','HOST': '127.0.0.1', #数据库主机

'PORT': 3306, #数据库端口

'USER': 'root', #数据库用户名

'PASSWORD': 'mysql', #数据库用户密码

'NAME': 'meiduo' #数据库名字

}

}

models.py

from django.db importmodelsclassGoods(models.Model):'''商品模型类'''name= models.CharField(max_length=60, verbose_name='商品名字')

price= models.DecimalField(max_digits=10, decimal_places=2, verbose_name='商品的价格')

comment= models.IntegerField(verbose_name='评论量', default=0)

sales= models.IntegerField(verbose_name='销售量', default=0)

descriptions= models.CharField(verbose_name='描述信息', max_length=120, null=True)classMeta:

db_table= 'tb_goods'verbose_name= '商品信息'verbose_name_plural=verbose_namedef __str__(self):return self.name

views.py

from .models importGoodsfrom django.http importHttpResponse, JsonResponsefrom django.views importViewclassGoodsView(View):defpost(self, request):'''增加商品'''

#获取前端来的json数据

json_str =request.body

json_str=json_str.decode()

req_data=json.loads(json_str)#添加数据库

good =Goods.objects.create(

name=req_data.get('name'),

price=req_data.get('price')

)#返回

returnJsonResponse({"id":good.id,"name":good.name,"price":good.price,"sales":good.sales,"descriptions":good.descriptions,"comment":good.comment

})

urls.py

from django.conf.urls importurlfrom . importviews

urlpatterns=[#添加商品

url(r'^goods/$', views.GoodsView.as_view()),

]

40:DRF 中的Request和Response与Django中的HttpRequest、HttpResponse有什么区别。

REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了HttpRequest类的Request类的对象。

REST framework 提供了Parser解析器,在接收到请求后会自动根据Content-Type指明的请求数据类型(如JSON、表单等)将请求数据进行parse解析,解析为类字典对象保存到Request对象中。

Request对象的数据是自动根据前端发送数据的格式进行解析之后的结果

DRF中的Response用来构造响应对象,它可以根据请求头中的Accept(接收数据类型声明)来自动转换响应数据到对应格式, 如果前端请求中未进行Accept声明,则会采用默认方式处理响应数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值