习题总结
目录
- ascii,gbk,utf-8的区别
- 请用至少两种方式实现m与n值交换m=10,n=5
- 什么是深浅拷贝
- 什么是HTTP协议
- form表单中都有哪些标签及作用
- 简述解释性语言和编译性的区别
- 列举你所知道的python2与python3之间的区别
- 什么是匿名函数。匿名函数一般结合什么一起使用,请列举几个常用的
- 什么是TCP三次握手四次挥手
- 列举你所知道的css选择器
- 列举字符串,列表,元组,字典每个常用的五个内置方法
- 列举你所知道的PEP8 Python编码规范
- 描述下列常见内置函数的作用可用代码说明
- JS有哪些数据类型
- 什么是静态文件,django静态文件配置如何配置,如何解决接口前缀不断变化,html页面上路径的引用需要反复修改的问题
- request对象的方法有哪些,分别是干什么用的,请具体阐述细节及注意事项
- django自带的数据库是什么,如何换成其他数据库例如MySQL,如何配置更换
- 什么是django orm,如何使用django orm,数据库迁移命令如何书写
- orm字段的增删改查与数据的增删改查如何实现
- 表关系如何判定,django orm中如何建立表关系,有什么特点和注意事项
- 请画出完整的django请求生命周期流程图
- 简述django路由层相关知识点
- 使用bootstrap需要注意什么,常用的bootstrap样式有哪些
- 安装django需要注意的事项有哪些(最少三条及以上,越多越好)
- 如何验证django是否安装成功,命令行如何创建django项目,如何启动django项目。与pycharm创建django项目的区别?
- 什么是app,django中如何创建app,需要注意什么
- 简述数据库表设计中一对一、一对多、多对多的应用场景,char与varchar的区别
- 有一个列表[3,4,1,2,5,6,6,5,4,3,3]请写出一个函数,找出该列表中没有重复的数的总和
- 什么是函数的递归调用?书写递归函数需要注意什么?你能否利用递归函数打印出下面列表中每一个元素(只能打印数字),l = [1,[2,[3,[4,[5,[6,[7,[8,[9]]]]]]]]]
- 谈谈你对web框架的认识,简述web框架请求流程并列举出python常见web框架
- Tcp协议之所以比UDP协议可靠 就是因为有双向通道 对不对?
ascii,gbk,utf-8的区别
[简单了解:]
ascii是由美国人发明出来的,当时没有考虑到其他国家,内部只记录了英文字符,一个字符占1bytes,后面各国也开始发明字符编码,中国发明了GBK(国标码),内部记录了中文字符、英文字符和数字,中文以2bytes起步,生僻字会更多,英文占1bytes,后来考虑到各国直接要进行数据之间的传输,就出现了utf家族,它是针对Unicode的优化版本,我们经常用的就是utf-8,它是以英文占1bytes,以3bytes去存储其他的。
[详细了解:]
ascii:
在计算机内部,所有信息最终都是⼀个⼆进制值。每⼀个⼆进制位(bit),有0和1两种状态,因此,8个⼆进制位可以
组合出256种状态,这被称为字节(byte)。上个世纪60年代,美国制定了⼀套字符编码,对英⽂字符与⼆进制之间做
了联系,这被称为ASCII码,⼀直沿⽤⾄今。
ASCII码⼀共规定了128个字符,⽐如SPACE是32,A是65,这128个符号只咱⽤了⼀个字节的后⾯七位,最前⾯的⼀位
统⼀规定为0.
unicode:
世界上有多种编码⽅法,同⼀个⼆进制数字可以被解释称不同的符号。因此,在打开⼀个⽂本⽂件时候,就必须知道它
的编码⽅式,⽤错误的编码⽅式打开,就会出现乱码。
Unicode编码,这是⼀种所有符号的编码。
Unicode显然是⼀个巨⼤的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不⼀样,⽐如U+0041表⽰英
语的⼤写字⺟A,U+4e25表⽰汉字严。
在Unicode庞⼤的字符集的优势下,还存在⼀个问题,⽐如⼀个汉字,“严”的Unicode是⼗六进制4e25,转成⼆进制
⾜⾜有15位,也就是,这个符号需要2个字节,表⽰其他字符还存在3个字节或者更多。计算机怎么区别三个字节表⽰的
是同⼀个符号⽽不是分开表⽰三个呢?如果Unicode统⼀规定,每个符号⽤3个字节表⽰,但是某些字⺟显然不需要3
个,那么就浪费了空间,⽂本⽂件⼤⼩超出了很多,这显然是不合理的。直到UTF8字符编码出现了。
utf-8:
UTF8的最⼤特点是,它是⼀种变⻓编码,可以使⽤1-4个字节表⽰⼀个符号,根据不同的符号来变化字节⻓度。
UTF8编码规则只有两条:
1)对于单字节的符号,字节的第⼀位设为0,后⾯的7位为这个符号的Unicode码。因此,对于英⽂字⺟,UTF8编码和
ASCII编码是相同的。
2)对于⾮单字节(假设字节⻓度为N)的符号,第⼀个字节的前N位都设为1,第N+1设为0,后⾯字节的前两位⼀律设为
10,剩下的没有提及的⼆进制,全部为这个符号的Unicode码。
gbk:
GBK编码是对GB2312的扩展,完全兼容GB2312。采⽤双字节编码⽅案,剔出xx7F码位,共23940个码位,共收录汉字
和图形符号21886个,GBK编码⽅案于1995年12⽉15⽇发布。它⼏乎完美⽀持汉字,因此经常会遇⻅GBK与Unicode的
转换。
1,各个编码之间的⼆进制,是不能互相识别的,会产⽣乱码。
2,⽂件的存储,传输,不能是unicode (只能是utf-8 utf-16 gbk gbk2312 ascii等)
请用至少两种方式实现m与n值交换m=10,n=5
方法一:
m, n = n, m
方法二:
temp = m
m = n
n = temp
什么是深浅拷贝
浅拷贝就是指对象复制的时候只复制一层;深拷贝是指复制对象的所有层级。
深拷贝和浅拷贝,主要是对象发生复制的时候,根据复制的层级不同来区分的。很多人在这里经常变量赋值发生混淆。对于JavaScript数组等复杂的数据类型来说,将其赋值给其它变量,其实只是复制了对象的地址给它,两个变量指向的是同一个对象,因此普通的赋值既不是深拷贝也不是浅拷贝。
深拷贝和浅拷贝需要注意的地方就是可变元素的拷贝:
在浅拷贝时,拷贝出来的新对象的地址和原对象是不一样的,但是新对象里面的可变元素(如列表)的地址和原对象里的可变元素的地址是相同的,也就是说浅拷贝它拷贝的是浅层次的数据结构(不可变元素),对象里的可变元素作为深层次的数据结构并没有被拷贝到新地址里面去。
而是和原对象里的可变元素指向同一个地址,所以在新对象或原对象里对这个可变元素做修改时,两个对象是同时改变的,但是深拷贝不会这样,这个是浅拷贝相对于深拷贝最根本的区别。
如果l2是l1的拷贝对象,则l1内部的任何数据类型的元素变化,l2内部的元素也会跟着改变,因为可变类型值变id不变。
如果l2是l1的浅拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,则l2会跟着改变。
如果l2是l1的深拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,l2也不会变,即l2永远不会因为l1的变化而变化。
总而言之:
对于不可变类型而言,深拷贝和浅拷贝最终的效果是一样的。
对于可变类型:
浅拷贝:是对一个对象的顶层拷贝,只拷贝了引用,没有拷贝内容,可变类型的变化会同时影响新旧两个对象。
深拷贝:重新拷贝了一份内容,重建了引用。彼此相互独立。
什么是HTTP协议
HTTP协议是超文本传输协议的缩写,是用于从服务器传输超文本到本地浏览器的传送协议。
(超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本)
HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)
HTTP是一个属于应用层的面向对象的协议,工作于客户端-服务器端架构为上。
浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接受到请求后,向客户端发送响应信息。
form表单中都有哪些标签及作用
<form action=" " target="_blank" enctype="multipart/form-data" method="post" ></form>
Action 跳转到什么页面
Method 以什么模式提交
简述解释性语言和编译性的区别
编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。
解释则不同,解释性语言的程序不需要编译,解释性语言在运行程序的时候才翻译,他专门有一个解释器能够直接执行程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。解释是一句一句的翻译。 程序的执行效率低,但跨平台性优于编译型。
列举你所知道的python2与python3之间的区别
Python2中默认使用ascii编码方式 导致 string 有两种类型 str 和 unicode,Python3中默认使用Unicode编码方式。
input的区别
Python3中用input全部当成str类型,Python2中用row_input才能实现python3中的结果,python2中的input,输入时候就要指定类型。
print的区别
python2中print是是一种输出语句,print直接跟要输出的内容;在python3中print是个函数,必须要加括号调用输出
Python 2中默认都是经典类,只有显式继承了object才是新式类
Python 3中默认都是新式类,经典类被移除,不必显式的继承object
新式类的MRO(method resolution order 基类搜索顺序)算法采用C3算法广度优先搜索,而旧式类的MRO算法是采用深度优先搜索
抛出异常与捕获异常
Python2
1. raise IOError, "file error" #抛出异常
2. except NameError, err: #捕捉异常
Python3
1. raise IOError("file error") #抛出异常
2. except NameError as err: #捕捉异常
什么是匿名函数。匿名函数一般结合什么一起使用,请列举几个常用的
匿名函数指一类无须定义标识符的函数。Python用lambda语法定义匿名函数,只需用表达式而无需申明。匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
但通常都是在定义lambda函数的同时将其应用作为参数传递给另一个函数,该函数在其处理过程中对lambda定义的函数进行调用。
lambda arg1,arg2,.....argn:expression
(args1、args2...是指表达式,:,表达式)
一则以max、min、sorted;一则以map、reduce、filter
什么是TCP三次握手四次挥手
https://www.cnblogs.com/zxr1002/p/16555856.html
列举你所知道的css选择器
https://www.cnblogs.com/zxr1002/p/16617830.html
基本选择器:标签选择器、类选择器、属性选择器、通用解释器
组合选择器:父类选择器(空格)、儿子选择器(>)、毗邻选择器(+)、弟弟选择器(~)
属性选择器:[属性名]、[属性名=属性值]、标签[属性名=属性值]
伪类选择器:hover、active、visited、link、focus
伪元素选择器:after、before、first-letter
列举字符串,列表,元组,字典每个常用的五个内置方法
https://www.cnblogs.com/zxr1002/p/16393473.html
字符串:索引取值、切片取值、间隔与方向、len()(统计字符串的个数)、strip()(移除首位指定的字符)、split()(按照指定字符切割字符串)、字符串大小写(lower()、upper()、islower()、isupper())、count()、format()、startswith()、endswith()、replace()、join([])、isdigit()、title()、capitalize()等
列表:索引取值、切片取值、间隔与方向、len()、append()(尾部追加元素)、insert()(通过索引确定位置添加数据)、extend()(扩展列表)、获取索引修改数据、del()、remove()(指名道姓的删除)、pop()、count()、sort()、reverse()等
元组:索引取值、切片取值、间隔与方向、count()、index()(查看索引)等,元组内不支持进行修改,即不能进行增加数据
字典:get()、len()、变量名[k值] = ‘修改数据值’(既是更改数据值,也是新增键值对)、变量名[k值] = ‘数据值’(当字典中没有查找的K值时,就会新增一对键值对)、update()、del()、pop()、popitem()(随机删除)、value()、items()、keys()等
列举你所知道的PEP8 Python编码规范
缩进、行的最大长度、空行、import导入、注释、约定俗成的命名约定、编程建议
1.代码布局:上下左右总体布局
缩进:4个空格一个缩进层次,通常在if语句、for语句和while语句等等后面,一个tab键等于4个空格
行的最大长度:一般每行不超过80字符
空行:用俩行空行用单个空行分割顶层函数和类的定义
类内方法的定义用单个空行分割
当空行用于分割方法的定义时,在class行和第一个方法定义之间也要有一个空行
2.导入:主要有三个方面
单独的行中导入,一行只能有一个模块
从一个模块中导入多个子模块
把模块重新自定义为新的名字:是为了简化模块名
3.表达式和语句中的空格
逗号、分号、冒号后要各空一格
紧挨着的园括号、方括号、和花括号的
要紧贴在索引或切片(slicing?下标?)开始的开式括号前
在赋值(或其它)运算符周围,用于和其它并排的一个以上的空格
始终在这些二元运算符两边放置一个空格,赋值(=), 比较(==, <, >, !=, <>, <=, >=, in, not in, is, is not), 布尔运算 (and, or, not)
不要在用于指定关键字参数或默认参数值的'='号周围使用空格
不要将多条语句写在同一行上
4.注释、单行和多行注释
行内注释:一个行内注释是和语句在同一行的注释.行内注释应该谨慎适用。行内注释应该至少用两个空格和语句分开,它们应该以’#'和单个空格开始。
多行注释:注释块通常应用于跟随着一些(或者全部)代码并和这些代码有着相同的缩进层次。注释块中每行以’#'和一个空格开始(除非他是注释内的缩进文本)。注释块上下方最好有一空行包围(或上方两行下方一行,对一个新函数定义段的注释)
5.命名
模块名:模块应该是不含下划线的,简短的,小写的名字.例如:re/time/pymysql
类名:几乎没有例外,类名总是使用首字母大写单词串(CapWords)的约定。例如:MyCat/WeChat
异常名:如果模块对所有情况定义了单个异常,它通常被叫做"error"或"Error". 似乎内建(扩展)的模块使用"error"(例如:os.error), 而 Python 模块通常用"Error" (例如: xdrlib.Error).
函数名:函数名应该为小写,可能用下划线风格单词以增加可读性. mixedCase 仅被允许用于这种风格已经占优势的上下文(如: threading.py) 以便保持向后兼容.
方法名和实例变量:这段大体上和函数相同:通常使用小写单词,必要时用下划线分隔增加可读性;使用一个前导下划线仅用于不打算作为类的公共接口的内部方法和实例变量;使用两个前导下划线以表示类私有的名字.
描述下列常见内置函数的作用可用代码说明
map,zip,filter,sorted,reduce
map()函数:用于指定序列中所有元素作为参数调用指定函数,并将结果构成一个新的序列返回,map()函数接收俩个参数,一个是函数,一个是lterable(可迭代对象),map将传入的函数依次作用到序列的每个元素,并将结果作为新的lterator返回
reduce函数:reduce把一个函数作用在一个序列上,这个函数必须接收俩个参数,reduce把结果继续和序列的下一个元素做累积计算
filter函数:和map类似,filter()也接受一个函数和一个序列,和map不同的是filter把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素
sorted函数:排序函数,排序的核心是比较两个元素的大小,如果是数字我们可以直接比较,但如果是字符串或者是字典,直接比较数学上的大小是没有意义的,因此,比较过程必须通过函数抽象出来
zip函数:以一系列列表作为参数,将列表中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
JS有哪些数据类型
1.Number类型
Number类型包含整数和浮点数(浮点数数值必须包含一个小数点,且小数点后面至少有一位数字)两种值。
NaN:非数字类型。特点:① 涉及到的 任何关于NaN的操作,都会返回NaN ② NaN不等于自身。
isNaN() 函数用于检查其参数是否是非数字值。
isNaN(123) //false isNaN("hello") //true
2.String类型
字符串有length属性。
字符串转换:转型函数String(),适用于任何数据类型(null,undefined 转换后为null和undefined);toString()方法(null,defined没有toString()方法)。
3.Boolean类型
该类型只有两个值,true和false
4.Undefined类型
只有一个值,即undefined值。使用var声明了变量,但未给变量初始化值,那么这个变量的值就是undefined。
5.Null类型
null类型被看做空对象指针,前文说到null类型也是空的对象引用。
6.Object类型
js中对象是一组属性与方法的集合。这里就要说到引用类型了,引用类型是一种数据结构,用于将数据和功能组织在一起。引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。
什么是静态文件,django静态文件配置如何配置,如何解决接口前缀不断变化,html页面上路径的引用需要反复修改的问题
静态文件:是指Django项目运行时需要加载的一些静态资源,比如css,js,image以及第三方前端框架等,
Django配置静态文件如下:
settings.py中
STATIC_URL = '/static/' # url直接访问静态资源的身份令牌
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static'),
]
模板文件中
在html头部插入:{% load static %}
<link rel="stylesheet" href="{% static 'css/login.css' %}">
<img src="{% static 'img/head.jpg' %}" alt="" title=""/>
request对象的方法有哪些,分别是干什么用的,请具体阐述细节及注意事项
1.request.method:请求的方式,一般为GET和POST
2.request.POST:post请求
3.request.GET:GET请求
4.request.POST.get():返回用户post请求提交的非文件数据,多条数据时,取列表中最后一个
5.request.POST.getlist():返回用户post请求提交的多条数据,以列表的形式存储
6.request.GET.get():返回用户get请求提交的非文件数据,多条数据时,取列表中最后一个
7.request.GET.getlist():返回用户get请求提交的多条数据,以列表的形式存储
8.request.FILES:返回用户post请求提交的文件数据,是一个类字典对象,注意 form表单的数据提交编码格式必须为multipart/form-data,否则返回是一个空对象
django自带的数据库是什么,如何换成其他数据库例如MySQL,如何配置更换
django自带的数据库是sqlites,
转换成MySQL;
(1)代码
项目文件夹或应用文件夹下的__init__.py中加入两句话:
import pymysql
pymysql.install_as_MySQLdb()
(2)配置文件中
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day60',
'HOST': '182.92.59.34',
'PORT': 3306,
'USER': 'root',
'PASSWORD': '123456',
'CHARSET': 'utf8',
}
}
什么是django orm,如何使用django orm,数据库迁移命令如何书写
ORM(Object Relational Mapping):关系对象映射,借助ORM,可以通过类生成数据库的表
orm 数据库
类名 表名
类属性 字段名
对象 一条记录
对象属性 记录某个字段的属性值
class User(models.Model):
id = models.AutoFiled(primary_key=True,verbose_name="主键")
username = models.CharFiled(max_length=32,verbose_name="用户名")
password = models.CharFiled(max_length=32,verbose_name="密码")
数据库迁移命令:
python mamage.py makemigrations
python manage.py migrate
orm字段的增删改查与数据的增删改查如何实现
orm字段的增删改查
数据的增删改查:
查
user_obj = models.User.objects.filter(username=username).first()
增:
方式一
user_obj = models.User.objects.create(username=username,password=password)
方式二:
user_obj = models.User(username=username,password=password)
user_obj.save()
表关系如何判定,django orm中如何建立表关系,有什么特点和注意事项
请画出完整的django请求生命周期流程图
简述django路由层相关知识点
使用bootstrap需要注意什么,常用的bootstrap样式有哪些
安装django需要注意的事项有哪些(最少三条及以上,越多越好)
如何验证django是否安装成功,命令行如何创建django项目,如何启动django项目。与pycharm创建django项目的区别?
什么是app,django中如何创建app,需要注意什么
简述数据库表设计中一对一、一对多、多对多的应用场景,char与varchar的区别
有一个列表[3,4,1,2,5,6,6,5,4,3,3]请写出一个函数,找出该列表中没有重复的数的总和
def func(l): res = [] sum_s = 0 for i in l: if i not in res: res.append(i) sum_s += i return sum_s list1 = [3, 4, 1, 2, 5, 6, 6, 5, 4, 3, 3] print(func(list1)) # 21
什么是函数的递归调用?书写递归函数需要注意什么?你能否利用递归函数打印出下面列表中每一个元素(只能打印数字),l = [1,[2,[3,[4,[5,[6,[7,[8,[9]]]]]]]]]
谈谈你对web框架的认识,简述web框架请求流程并列举出python常见web框架
Tcp协议之所以比UDP协议可靠 就是因为有双向通道 对不对?
描述的不够准确
Tcp协议之所以比UDP协议可靠,原因在于TCP协议发送消息有反馈机制
基于TCP发送的消息会在本地先保存该消息,如果地方确认收到才会删除
否则在一定时间内会频繁的多次发送知道确认或者超时为止
UDP协议发送数据之后会立即删除内存,不会备份不会保留