小知识

什么是幂等性?

'''
幂等性:就是用户对于同一操作发起一次请求或者多次请求的结果是一致的,不会因为多次点击而产生副作用。

举个最简单的例子,那就是支付,用户购买商品使用网络支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条,用幂等性就是解决这一问题.

在数据库操作中要用到幂等性,put和patch请求是幂等性,post请求不是幂等性
'''

 

什么是微服务?

'''
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
'''

 

松耦合和紧耦合

'''
松耦合:各自可以独立实现,各自执行独立的功能,代码中没有互相调用,如果需要互相配合,则由第三者来控制它们之间的互相访问.
紧耦合:各自可以独立实现,但两者之间可以相互访问.

松耦合通讯机制提供了紧耦合机制所没有的许多优点,并且它们有助于降低客户端和远程服务之间的依赖性。但是,紧耦合性通常可以提供性能好处,便于在客户端和服务之间进行更为紧密的集成(这在存在安全性和事务处理要求时,可能是必需的)。
'''

 

前后端分离

前端一个项目,后端一个项目

 

集群和分布式

'''
分布式是指将不同的业务分布在不同的地方。 而集群指的是将几台服务器集中在一起,实现同一业务。
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
举例:小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是集群。为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群

 

开放media路径

-创建meidia文件夹(在根路径下)
-在setting中配置:
    MEDIA_ROOT=os.path.join(BASE_DIR,'media')
-在urls.py中
from django.views.static import serve
from luffy_city import settings
urlpatterns = [
     url(r'^media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT}),
]

 

什么是事务?

所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

事务广泛的运用于订单系统、银行系统等多种场景.
例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。所以,应该把他们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。

关系型数据库存在事务

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
1.原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

2.一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

3.隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

4.持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
1.__str____repr__区别?
  __str__:改变对象的字符串显示,可以理解为使用print函数打印一个对象时,会自动调用对象的__str__方法
  __repr__:在python解释器环境下,会默认显示对象的__repr__表示.
  总结:str函数或者print函数调用的是obj.__str__()
      repr函数或者交互式解释器调用的是obj.__repr__()
        如果__str__没有定义,那么就会使用__repr__来代替输出
      __str__和__repr__方法的返回值必须是字符串
 
2.什么是正向代理,什么是反向代理?
  代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介。
  
  正向代理:正向代理类似一个跳板机,代理访问外部资源.
    比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了
   
  反向代理:实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器.
 
总结:
  正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端.
  反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端

3.产生一个空对象调用__new__方法
  __init__方法,把数据初始化到对象的内部
  对象()调用__call__方法

4.Django项目部署?
nginx+uwsgi+django
nginx是一个高性能的HTTP和反向代理服务,它可以做到负载均衡、动静分离

 

HTTP协议  请求首行 请求头 请求体

django的GET,POST,META,body分别对应HTTP请求的那部分内容?
GET:http请求路径中的数据部分
POST:http请求以urlencode/formdata形式编码的body体部分
META:http请求头部信息
body:http请求请求体部分
path,get_full_path(),FILES

 

Python2和python3的区别

1.python3:默认utf-8  python2:默认ASCII

2.python3中默认所有类都是新式类而python2中默认是经典类(不会自动继承Object)

3.在python3只有一个input特点:会把用户输入的任何内容都存成字符串类型
 在python2中 input:要求用户必须输入一个明确的类型,用户输入什么类型,就存成什么类型
raw_input:等于python3的input

4.在python2 中 5/2=2 , 5.0/2.0=2.5
 在python3中 5/2 = 2.5
5.
python2中的range返回的是一个列表
python3中的range返回的是一个迭代值
python2中的xrange相当于python3中的range

 

Xadmin安装

#python3.6安装xadmin
python3安装Xadmin失败,UnicodeDecodeError解决方法
https://blog.csdn.net/fowee/article/details/83780934

两种安装方式
https://www.cnblogs.com/thunderLL/p/6803469.html

安装包的路径(pycharm提供的是python2版本适用的python3各种报错,必须从github上下载)
https://github.com/sshwsfc/xadmin/tree/django2

问题解决方案
https://blog.csdn.net/baoshuowl/article/details/80355807
https://blog.csdn.net/Snail0Li/article/details/79694781

如果使用Auth组件user表,它会自动完成映射
其他的表在admin.py文件中完成映射
import xadmin
xadmin.site.register('表名')

 

 

Django后端获取到前端传来的文件和图片信息

#单个图片或者文件
request.FILES.get

#多张图片或者文件

request.FILES.getlist

 

 

render 返回页面

render 返回页面
如果没有使用locals()就只能返回字典
locals()可以返回所有数据

 

 

js和jq的区别

一、本质区别:

1.js都知道是网页脚本语言,类似java是一种开发常用语言;

2.jQuery是基于js语言封装出来的一个前端框架;

所以最本质的区别就是js是一种语言,而jQuery是基于该语言的一种框架。除却最本质的区别还有一些用法上的差别

 

代码写很多时要导入某个模块

ALT + ENTER 
import this name 回车
选择要引入的模块或者包 回车

比如要引进requests
requests.post() #游标要放到requests后面进行操作才可以
 

 

MySQL存储引擎--MyISAM与InnoDB区别

  InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。

  以下是一些细节和具体实现的差别:

  1.InnoDB不支持FULLTEXT类型的索引。

  2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。

  3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。

  4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。

  5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

  另外,InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”

  两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁。而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。

  作为使用MySQL的用户角度出发,Innodb和MyISAM都是比较喜欢的,如果数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是首选。

 

 

python字符串与列表之间相互转化

 1.字符串转列表
str1 = "hi hello world"
print(str1.split(" "))
输出:
['hi', 'hello', 'world']

2. 列表转字符串
l = ["hi","hello","world"]
print(" ".join(l))
输出:
hi hello world
"," 用逗号隔开
";" 用分号隔开

python如何忽略警告

import warnings
warnings.filterwarnings("ignore")

 

python赋值,浅拷贝和深拷贝

import copy
a = [1,2,3,[4,5]]
b = a      
c = copy.copy(a)  #浅拷贝
d = copy.deepcopy(a)  #深拷贝

a[3].append(6)
a.append(7)

print(b)  #[1, 2, 3, [4, 5, 6],7]
print(c)   #[1, 2, 3, [4, 5, 6]]
print(d)   #[1, 2, 3, [4, 5]]

copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
copy.deepcopy 深拷贝 拷贝对象及其子对象

a是一个列表,a[3]也是一个列表(也是a的一个子对象)
b是a的一个引用,所有a和b完全相同
c是浅拷贝,只拷贝了a的父对象,因此a的子对象改变,c也改变,父对象改变,c不改变
d是深拷贝,父对象和子对象全部拷贝,a改变对d完全没有影响

包装类的私有属性即隐藏属性

_类名__属性名

在外部调不到,self可以调到

 

posted @ 2019-03-25 20:43  Zhuang_Z  阅读(166)  评论(0编辑  收藏  举报