浏览器用户跟踪三种方式

  • cookie
  • 隐藏域(每个表单加一个hidden标签,存储用户信息)
  • url重写(url后面跟上用户信息)

cookie与session关系

cookie存储方式

  • 基于浏览器窗口(浏览器关闭,cookie失效)
  • 持久化的cookie(cookie中设置expires)

mysql事物隔离级别分为四种

  • READ-UNCOMMITTED:该事物隔离级别可读取其它事物未提交的结果
  • READ-COMMITTED:该事物隔离级别只会读取已提交的数据,在事务中已更改但未提交的数据不会读取
  • REPEATABLE-READ:该事务隔离级别只会读取已提交的结果,与READ-COMMITTED不同的是,repeatable-read在开启事务的情况下,同一条件的查询返回的结果永远是一致的,无论其它事物是否提交了新的数据
  • SERIALIZABLE:这种隔离级别和repeatable-read类似,只会读取其它事物已提交的内容,有一点不同的地方在于,如果autocommit为false,那么每一条select语句会自动被转化为select … lock in share mode.这样出现一些阻塞情况

查看mysql事物隔离级别方法:

mysql> select @@tx_isolation;

更改mysql事物级别方法

set global transaction isolation leve read committed;
-- 或者
set tx_isolation = 'repeatable-read';

sql

关系型数据库遵循ACID规则

事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:

1、A (Atomicity) 原子性

原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。

比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。

2、C (Consistency) 一致性

一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。

例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。

3、I (Isolation) 独立性

所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。

比如现在有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。

4、D (Durability) 持久性

持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。

NoSql

CAP定理(CAP theorem)

在计算机科学中, CAP定理(CAP theorem), 又被称作 布鲁尔定理(Brewer’s theorem), 它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

  • 一致性(Consistency) (所有节点在同一时间具有相同的数据)
  • 可用性(Availability) (保证每个请求不管成功或者失败都有响应)
  • 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。

因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三 大类:

  • CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
  • CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。
  • AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

数据压缩

  • 先要序列化数据再才能压缩数据

数据压缩(zlib)

zlib.compress压缩
zlib.decompress解压

序列化/反序列化

要实现的功能 可以使用的api
将Python数据类型转换为(json)字符串 json.dumps()
将json字符串转换为Python数据类型 json.loads()
将Python数据类型以json形式保存到本地磁盘 json.dump()
将本地磁盘文件中的json数据转换为Python数据类型 json.load()
将Python数据类型转换为Python特定的二进制格式 pickle.dumps()
将Python特定的的二进制格式数据转换为Python数据类型 pickle.loads()
将Python数据类型以Python特定的二进制格式保存到本地磁盘 pickle.dump()
将本地磁盘文件中的Python特定的二进制格式数据转换为Python数据类型 pickle.load()
以类型dict的形式将Python数据类型保存到本地磁盘或读取本地磁盘数据并转换为数据类型 shelve.open(

redis

# redis有两种数据持久化方案:
# 1.RDB 数据记录到文件
# 2.AOF记录操作记录dbsize          # 查看数据库大小
get key         # 取数据
flushall        # 删除所有数据
info            # 查看redis配置信息
info replication # 查看redis主从分离的信息
set username admin ex 30    # 设置30秒存活时间
ttl username                # 查看存活时间

主从复制/实现读写分离:redis.conf配置:

​ 奴隶身份的redis只能读数据

bind 10.7.189.103                   # 绑定IP
port 6379                           # 绑定端口
databases 16                        # 配置底层数据库个数
requirepass 111111                  # 配置redis验证口令
rdbcompression yes                  # 配置redis持久化机制-RDB(默认开启)
appendonly yes                      # 配置redis持久化机制-AOF
slaveof <masterip> <masterport>     # 配置主从复制;绑定主redis的IP及端口
masterauth <master-password>        # 配置主从复制;绑定主redis的验证口令
slowlog-max-len 128                 # 配置慢查询日志
slaveof no one                      # 退出奴隶身份(进入redis-cli后)

哨兵:sentinel.conf

# 配置master主机的ip及端口,后面的2表示如果2台奴隶机发现主机死亡,则断定主机死亡
sentinel monitor mymaster 127.0.0.1 6379 2
# 配置master主机的的名字和验证口令
sentinel auth-pass <master-name> <password>
# 默认在此时段内(30s)master从新连接将继续作为master
sentinel down-after-milliseconds mymaster 30000
# master在此时段内没恢复就从配置文件中剔除
sentinel failover-timeout <master-name> <milliseconds>启动哨兵:redis-server sentinel.conf --sentinel
  • 原理:

服务器搭建

MD5/SHA摘要

from hashlib import md5, sha1hasher = md5()
hasher.update('需要摘要的数据'.encode('utf-8'))
a = hasher.hexdigest()   # 128bithasher = sha1()
hasher.update('需要摘要的数据'.encode('utf-8'))
a = hasher.hexdigest()   # 192bit
print(a)
print(len(a))

推送服务

pc端

  • websocket

    var ws = new WebSocket("wss://echo.websocket.org");ws.onopen = function(evt) {
    console.log("Connection open ...");
    ws.send("Hello WebSockets!");
    };ws.onmessage = function(evt) {console.log( "Received Message: " + evt.data);
    ws.close();
    };ws.onclose = function(evt) {console.log("Connection closed.");
    };
    
  • SockJs

    registry.addEndpoint("/coordination").withSockJS();<script src="//cdn.jsdelivr.net/sockjs/1.0.0/sockjs.min.js"></script>var sock = new SockJS('/coordination');
    sock.onopen = function() {console.log('open');
    };
    sock.onmessage = function(e) {console.log('message', e.data);
    };
    sock.onclose = function() {console.log('close');
    };
    sock.send('test');
    sock.close();
  • STOMP

移动端

1.第三方平台 2.极光 3.百度 4.小米 5.友盟

mongodb

mongodb数据存储类型为 BSON - Binary JSON

linux指令复习

pwd 记录当前路径
netstat -nap|grep mongo 查看进程的ip端口及协议等
top 查看进程
jobs 查看后台服务
fg %1 把后台编号为1的服务拿到前台,启动服务时加上&,表示后台运行
ifconfig 查询ip

安装及添加环境变量

1. https://www.mongodb.com/download-center#atlas
2. wget <url>
3. gunzip <filename>
4. tar -xvf <filename>
5. mv <source> /usr/local/<source>
6. vim .bash_profile             # 配置环境变量export PATH=<source>/bin:$PATH  # 末尾添加
7. source .bash_profile
8. mkdir -p /data/db              # -p表示如果没有data文件夹就创建,再创建db
9. mongod                       # 启动27017
10. 配置防火墙

连接mongodb

查看指令:

mongod --help |more

启动:

mongod --bind_ip 10.7.189.103 --quiet & #绑定IP,静默处理, 后台运行

连接:

mongo --host 10.7.189.103

mongodb指令

  • python连接mongodb两种方法

    client = pymongo.MongoClient('mongodb://10.7.189.103:27017')
    client = pymongo.MongoClient(host='10.7.189.103', port=27017)
  • 基本指令

    
    # 创建数据库db = client.zhihu# 创建集合pages_cache = db.webpages# 插入一条数据page_id = pages_cache.insert_one({'url':'http://www.baidu.com', 'content':'jkdjgkajk'})# 打印mongodb创建的idprint(page_id.inserted_id)# 删除数据print(pages_cache.remove({'url':'http://www.baidu.com'}))# 创建多条数据pages_cache.insert_many([
    {'_id':1, 'url':'www.baidu.com'},
    {'_id':2, 'url':'www.sina.com'},
    {'_id':3, 'url':'www.qq.com'}
    ])# upsert属性自动判断是插入(没有相应数据)还是更新(存在相应数据)print(pages_cache.update({'_id':4},{'$set':{'url':'www.csdn.com'}}, upsert=True))# 统计查询数据条数print(pages_cache.find().count())# 对查询的数据进行排序for doc in pages_cache.find().sort('url'):print(doc)# 数据的值--也可以是一个bsonpages_cache.insert_one({'url':'www.haoya.com','type':'zipapp','好压':{'name':'好压','size':'32152kb','star':5}})

    更多查询指令可以查看相关在线资料

base64

协程

  • 协程是生成器的消费者(协程是一个消费型的生成器)—-(Python对协程的支持是通过generator实现的。)
  • 协程在一个线程中执行
  • 两个函数在互不调用的情况下协调工作

fork()

import osdef main():# linux和unix下创建多进程的另一种方法,这个方法if/else都会执行:pid = os.fork()print(pid)if pid == 0:print(os.getpid())print('good')else:print('bye')print(os.getpid())if __name__ == '__main__':main()

genarator

from time import sleepdef fib(n):a, b = 0, 1while a <= n:a, b = a + b, ayield(a)def count(n):while n>=0:yield nn -= 1def even(gen):for val in gen:if val % 2 == 0:yield valdef main():gen = even(fib(9999))for _ in even(fib(9999)):print(next(gen))if __name__ == '__main__':main()

优化

from time import sleepdef countdown(n, consumer):# 预激(激活消费者协程)# 所谓的激活就是让代码执行到yield# consumer.send(None)next(consumer)while n > 0:consumer.send(n)n -= 1print('生产完成') # 此时消费者协程将自动终止def countdown_con():while True:n = yieldif n:print('countdowm', n)sleep(1)def main():consumer = countdown_con()countdown(10, consumer)if __name__ == '__main__':main()
from time import sleep
from inspect import getgeneratorstate
from functools import wrapsdef coroutine(fn):@wraps(fn)def wrapper(*args, **kwargs):gen = fn(*args, **kwargs)next(gen)return genreturn wrapper@coroutine
def create_delivery_man(capacity=1):capacitylist = []while True:while len(capacitylist) < capacity:pack = yieldif pack:print('正在接收包裹', pack)capacitylist.append(pack)else:breakprint('========================')for i in capacitylist:print('正在派送包裹',i)sleep(2)capacitylist.clear()def deliver_center(n, cou):for i in range(n):if i % 5 == 0:sleep(3)print('++准备派送包裹', i+1)cou.send(i+1)cou.send(None)def main():cou = create_delivery_man(capacity=7)deliver_center(23, cou)if __name__ == '__main__':main()
import asyncio
from time import sleep
from inspect import getgeneratorstate
from functools import wrapsimport requests"""
@asyncio.coroutine
def download(url): # 要想用异步io,此函数必须必须返回的是生成器,用aiohttp,下面只是一个假象print('Fetch', url)yield from asyncio.sleep(0.00001)resp = requests.get(url)print(url,'--->', resp.status_code)print(url,'--->', resp.headers)"""async def download(url): # 这个语法在3.5引入,async/await将在3.7里面正式变成关键字print('Fetch', url)await asyncio.sleep(0.00001)resp = requests.get(url)print(url,'--->', resp.status_code)print(url,'--->', resp.headers)def main():loop = asyncio.get_event_loop()urls = ['https://www.baidu.com','http://www.sina.com.cn','http://www.sohu.com','http://www.qq.com','https://www.taobao.com']tasks = [download(url) for url in urls]loop.run_until_complete(asyncio.wait(tasks))loop.close()if __name__ == '__main__':main()

12.1.爬虫 副知识相关推荐

  1. 手把手带你入门Python爬虫(二、爬虫预备知识)

    爬虫预备知识 一.计算机网络协议基础 二.Html.Css.Javascript Ajax 异步加载 GET请求 与 POST请求 3种content-type 三.爬虫基本方法 1. 采集方案分类 ...

  2. java 网络爬虫 正则表达式_【干货】Java网络爬虫基础知识

    原标题:[干货]Java网络爬虫基础知识 引言 Java 网络爬虫具有很好的扩展性可伸缩性,其是目前搜索引擎开发的重要组成部分.例如,著名的网络爬虫工具 Nutch 便是采用 Java 开发,该工具以 ...

  3. python爬虫——基础知识

    python爬虫--基础知识 一.网页基础知识 二.爬虫的思路 1.HTML文档(超文本) 三.ROBOTS协议 四.浏览器发送HTTP请求的过程 1.http请求过程 2.请求 五.SSL连接错误 ...

  4. 爬虫、知识图谱和开源情报分析01

    爬虫.知识图谱和开源情报分析01 再开一个新坑,这个也是我学习和工作中一直非常感兴趣而且投入较多时间研究的一个领域.主要是想通过这个系列完成以下目标 1.梳理爬虫的实践方法 2.梳理知识图谱的实践方法 ...

  5. Python爬虫核心知识-第二章:2.2 爬虫urllib.parse模块

    Python爬虫核心知识 第二章:2.2 爬虫urllib.parse模块 2.2 爬虫urllib.parse模块 Python中的urllib.parse模块中,提供了很多用来解析和重组URL的函 ...

  6. Python爬虫核心知识-序章:课程前导-爬虫的相关法律法规

    Python爬虫核心知识 序章:课程前导-爬虫的相关法律法规 爬虫程序是一种技术产物,爬虫代码本身并未违反法律.但程序运行过程中有可能对他人经营的网站造成 破坏,爬取的数据有可能涉及隐私或机密,数据的 ...

  7. (二)python爬虫基础知识续

    爬虫基础知识二 爬虫应用 数据爬取(微指数) 搜索引擎 app或网页的资源来源 浏览器能做的事情,原则上爬虫都能完成 12306抢票(机器学习可以识别验证码,或者在不需要验证码的合作网站爬取)(微信和 ...

  8. python金融分析小知识(12)——python爬虫工具xpath使用

    Hello 大家好,我是一名新来的金融领域打工人,日常分享一些python知识,都是自己在学习生活中遇到的一些问题,分享给大家,希望对大家有一定的帮助! 本篇文章紧接上一篇文章,python金融分析小 ...

  9. 分布式网络爬虫关键技术分析与实现一网络爬虫相关知识介绍

    搜索引擎发展的历史过程与发展现状 1搜索引擎的发展的历史 1990年以前,没有任何人能搜索互联网.所有搜索引擎的祖先,是1990年由Montreal的McGill University学生Alan E ...

最新文章

  1. 什么是标记符控制的分水岭算法
  2. windows下SVN使用 Add指令、Undo Add指令
  3. 用python pandas按块读取超大csv/txt
  4. 安卓四大组件之Service
  5. find_first_of()和 find_last_of() 【获取路径、文件名】
  6. mysql 创建索引 key_Mysql中创建索引的INDEX和KEY
  7. SQL笛卡尔积查询的典型应用
  8. Windows的截图快捷方式
  9. 华为机试练习(十二)叠积木
  10. 踩坑前端框架 - iview DatePicker 时间选择年月日时分秒
  11. 一个简单的点赞功能的实现
  12. vm虚拟机中搭建Linux
  13. Web主机管理器(WHM)中如何安装SSL证书
  14. Mongoose第三方包常用操作整理
  15. 梯度下降算法原理 神经网络(Gradient Descent)
  16. cpu排行计算机专业,CPU天梯图2018年9月最新版 九月台式电脑CPU性能排行
  17. Conflict with dependency
  18. 数据结构之算法特性及分类
  19. 运维工程师新人培训材料(zz)
  20. QQ音乐Android端120万行代码,编译耗时是怎样优化的,凭借这份《数据结构与算法》核心文档

热门文章

  1. 【HTML】location对象
  2. ios 播放声音和震动
  3. 爱情呼叫转移2经典台词
  4. 44项地级市所有数据打包
  5. c++面向对象设计(谭浩强)2.5 2.6类的封装性与信息隐蔽
  6. 基于PLC的变频调速
  7. c语言中的字符变量用保留两位小数,字符数字转换保留2位小数
  8. 互联网上舆情舆论信息查找网与相关系统平台有哪些详解
  9. 如何根据论文的摘要 推荐期刊
  10. 纪念我逝去的JAVA处女作