最近有一个爬取教育部数据库的任务,一开始用了requests库,能获取到网页验证码什么的,但是各种的ajax动态加载太麻烦了,最后想到了用selenium进行爬取
初始化webdriver,用chrome进行爬取,此时需要下载chrome的驱动,下载地址
It's not who you are underneath,it's what you do that defines you
最近有一个爬取教育部数据库的任务,一开始用了requests库,能获取到网页验证码什么的,但是各种的ajax动态加载太麻烦了,最后想到了用selenium进行爬取
初始化webdriver,用chrome进行爬取,此时需要下载chrome的驱动,下载地址
这篇博文主要讲的是关于deeplearning.ai的第二门课程的内容,《Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization》
单线程为什么这么快?
单线程Redis注意事项
Redis特点
补充知识:同步非同步,阻塞非阻塞
1. 同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)
所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由调用者主动等待这个调用的结果。
异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。
总结:同步和异步主要关注的是不是调用函数自己返回调用结果,同步是调用者返回调用结果,异步是调用发出后立马返回空值,由回调函数返回调用结果
2.阻塞与非阻塞
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.
阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。
缓存系统、排行榜、计数器、社交网络、消息队列系统、实时系统
支持的数据类型:字符串、列表、集合、字典(hash)、有序集合(ZSET)
Redis 默认开启RDB持久化方式,在指定的时间间隔内,执行指定次数的写操作,则将内存中的数据写入到磁盘中。
RDB (Redis Database Backup)持久化适合大规模的数据恢复但它的数据一致性和完整性较差。
针对RDB方式的持久化,可以使用:
Redis借助了fork命令的copy on write机制。在生成快照时,将当前进程fork出一个子进程,然后在子进程中循环所有的数据,将数据写成为RDB文件。
另一点需要注意的是,每次快照持久化都是将内存数据完整写入到磁盘一次,并不是增量的只同步脏数据。如果数据量大的话,而且写操作比较多,必然会引起大量的磁盘io操作,可能会严重影响性能。
而且由于快照方式是在一定间隔时间做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。如果应用要求不能丢失任何修改的话,必须采用AOF持久化方式。
RDB持久化原理:
1 | set key value [EX seconds] [PX ms] [nx|xx] |
list
rpush:右边插入
lrange list-key start end:列出start到end范围的key值
set
sadd set-key item:set插入值
smembers set-key:列出set的key值
sismember set-key item4:查看是否set的member
srem set-key item2:set remove key
hash
hset user name LotusChing:设置user的name为lotus
hset user age 21
hget user name:获取user的name
hkeys user:获取user的key值
hvals user:获取user的键值
hdel user age:删除hash中某个键
hlen user:获取user的键值对个数
hmset user name “LotusChing” age 21 gender “Male”:批量设置key-value
hmget user name age gender:批量获取value
zset
zadd zset-key 728 member1:加入值为728,key为member1的键值对
Redis 官方站这篇文章提出了一种权威的基于 Redis 实现分布式锁的方式名叫 Redlock,此种方式比原先的单节点的方法更安全。它可以保证以下特性:
1 | set key value nx px |
算法很易懂,起 5 个 master 节点,分布在不同的机房尽量保证可用性。为了获得锁,client 会进行如下操作:
放锁操作很简单,就是依次释放所有节点上的锁就行了
如果我们的节点没有持久化机制,client 从 5 个 master 中的 3 个处获得了锁,然后其中一个重启了,这是注意 整个环境中又出现了 3 个 master 可供另一个 client 申请同一把锁! 违反了互斥性。如果我们开启了 AOF 持久化那么情况会稍微好转一些,因为 Redis 的过期机制是语义层面实现的,所以在 server 挂了的时候时间依旧在流逝,重启之后锁状态不会受到污染。但是考虑断电之后呢,AOF部分命令没来得及刷回磁盘直接丢失了,除非我们配置刷回策略为 fsync = always,但这会损伤性能。解决这个问题的方法是,当一个节点重启之后,我们规定在 max TTL 期间它是不可用的,这样它就不会干扰原本已经申请到的锁,等到它 crash 前的那部分锁都过期了,环境不存在历史锁了,那么再把这个节点加进来正常工作。
不可靠,因为万一多个节点之间的通信延迟,就会出错。可靠的方式是使用zookeeper和fencing token(每次获取锁共享变量+1)。
面试官您好,我是来自西安交通大学的研二学生王诏,我本科同样也就读于西安交通大学。我主要从科研和实践学习两方面介绍一下自己。在科研方面,我的主要研究方向是基于数据挖掘的身份认证技术。自大三进入实验室以来,发表了4篇EI论文和两篇SCI论文,参与第三届全国互联网开发大赛获得三等奖,参与互联网+创新创业大赛获陕西省铜奖。在学习实践方面,我研一入选了华为云计算菁英班,研一暑假于华为cloud BU-EI产品服务部进行实习,主要工作是视频直播内容审核算法开发以及审核api的后台开发,在团队的共同努力下,成功拿下了良品铺子,施耐德电气,一汽大众和映客直播的相关项目。之后的一份实习是在国家互联网应急响应中心,从事反诈骗和app敏感信息检测的工作,主要是做了一些hive相关的数据挖掘和后台开发,与公安部配合抓获400余名犯罪嫌疑人,团队得到了南方都市报和中央电视台的新闻报道,今年暑假在阿里巴巴进行暑期实习,主要从事的是直播日常开发和20周年年会相关的开发内容,进行了新功能开发与性能优化以及稳定性保障和预案开发的工作。在我的科研和实习过程中,极大提升了个人的开发能力与业务能力,但我深知自己在各方面都还有欠缺,因此希望有机会进入xx公司xx部门进行实习,提升自我,与团队一起做一些有意义,有价值的事情。
Coursera上面关于deeplearning.ai的课程一共有五门,在申请助学金之后都可以免费参与,这篇博文主要讲的是关于deeplearning.ai的第一门课程的