next

3年Python程序员平时学习笔记总结,对于学习Python非常有帮助!

青春壹個敷衍的年華 提交于 2020-10-18 13:45:01
一、可迭代对象、迭代器对象和生成器 像list, tuple等这些序列是可以使用for...in ...语句来进行遍历输出的。这是为什么呢?这就需要知道可迭代对象(Iterable)、迭代器对象(Iterator)和生成器对象(Generator)了。 1.什么可迭代对象? 把可以通过for...in...这类语句迭代读取一条数据供我们使用的对象。 2. 可迭代对象的本质? 可迭代对象通过__iter__方法向我们提供一个迭代器,我们在迭代一个可迭代对象的时候,实际上就是先获取该对象提供的一个迭代器,然后通过这个迭代器来依次获取对象中的每一个数据。 也就是说可迭代对象必须要有__iter__()方法 3.iter()函数与next()函数的作用是什么? 通过iter()函数获取可迭代对象的迭代器。 然后我们可以对获取到的迭代器不断使用next()函数来获取下一条数据。当我们已经迭代完最后一个数据之后,再次调用next()函数会抛出StopIteration异常, 来告诉我们所有数据都已迭代完成,不用再执行next()函数了。 4.什么是迭代器对象? 一个实现了__iter__方法和__next__方法的对象,就是迭代器。 5. 什么是生成器? 简单来说:只要在def中有yield关键字的 就称为生成器 6.yield的作用是什么? yield关键字有两点作用: (1)

结构与算法(03):单向链表和双向链表

孤者浪人 提交于 2020-10-18 05:52:12
本文源码: GitHub·点这里 || GitEE·点这里 一、链表简介 1、链表概念 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点组成,节点可以在运行时动态生成,节点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 2、基础特点 内存存储 逻辑结构 特点描述 物理存储上是无序且不连续的; 链表是由多个节点以链式结构组成; 逻辑层面上看形成一个有序的链路结构; 链表结构解决数组存储需要预先知道元素个数的缺陷,可以充分利用内存空间,实现灵活的内存动态管理。 二、单向链表 1、基础描述 单向链表是链表的一种,其特点是链表的链接方向是单向的,链表的遍历要从头部开始顺序读取;结点构成,head指针指向第一个成为表头结点,终止于最后一个指向NULL的指针。 2、基础操作 添加数据 初始化head节点,作为链表的头; 修改当前末尾节点的next指针; 新添加的节点房子在链表末尾; 删除数据 遍历找到要删除的节点,把删除节点前个节点的指针指向该删除节点的下个节点; 三、双向链表 1、概念描述 双向链表也叫双链表,是链表的一种,链表的每个数据结点中都有两个指针,分别指向直接后继和直接前驱,从双向链表中的任意一个结点开始,都可以很快速地访问它的前驱结点和后继结点

这篇 Java IO,讲的实在是太好了

て烟熏妆下的殇ゞ 提交于 2020-10-17 03:34:21
Java IO 是一个庞大的知识体系,很多人学着学着就会学懵了,包括我在内也是如此,所以本文将会从 Java 的 BIO 开始,一步一步深入学习,引出 JDK1.4 之后出现的 NIO 技术,对比 NIO 与 BIO 的区别,然后对 NIO 中重要的三个组成部分进行讲解(缓冲区、通道、选择器),最后实现一个简易的客户端与服务器通信功能。 传统的 BIO Java IO流是一个庞大的生态环境,其内部提供了很多不同的输入流和输出流,细分下去还有字节流和字符流,甚至还有缓冲流提高 IO 性能,转换流将字节流转换为字符流······看到这些就已经对 IO 产生恐惧了,在日常开发中少不了对文件的 IO 操作,虽然 apache 已经提供了 Commons IO 这种封装好的组件,但面对特殊场景时,我们仍需要自己去封装一个高性能的文件 IO 工具类,本文将会解析 Java IO 中涉及到的各个类,以及讲解如何正确、高效地使用它们。 BIO NIO 和 AIO 的区别 我们会以一个经典的烧开水的例子通俗地讲解它们之间的区别 类型烧开水BIO一直监测着某个水壶,该水壶烧开水后再监测下一个水壶NIO每隔一段时间就看看所有水壶的状态,哪个水壶烧开水就去处理哪个水壶AIO不用监测水壶,每个水壶烧开水后都会主动通知线程说:“我的水烧开了,来处理我吧” BIO (同步阻塞 I/O) 这里假设一个烧开水的场景

人工智能的发展与障碍 | 麦肯锡

孤人 提交于 2020-10-16 18:22:33
转自 | 软件定义世界 受访者表示,人工智能正在迅速普及,但预计不会大规模减少企业用工人数。目前,仅有极少数企业具备让人工智能创造规模化价值的基本要素。 麦肯锡一项以人工智能为主题的最新全球调研【1】 显示,人工智能正在全球商业领域迅速普及。人工智能通常是指机器执行与人类思维相关的认知功能(如感知、推理、学习和解决问题)的能力,包括一系列通过人工智能解决业务问题的能力。 在调研中,我们特别询问了九项相关能力【2】,近一半的受访者表示,企业在标准业务流程中至少嵌入了一项能力,此外有30% 的受访者则表示,所在企业正在试点使用人工智能。 不过总体而言,各行各业只不过刚刚开始采用这些技术并从中获利。在那些已将人工智能部署到特定职能的企业中,大多数受访者表示,新技术的使用已经创造出一定或显著的价值,但仅有21% 的受访者表示,企业已将人工智能部署到多个业务单元或职能中。 事实上,许多企业仍然缺乏通过人工智能的规模化应用创造价值的基本实践——例如,了解哪些领域存在人工智能的机会,以及制定明确的战略以获取人工智能所需的数据。 调研结果表明,通过数字化推动核心业务的转型,是企业有效使用人工智能的一个关键因素。 在数字化程度较高的企业中【3】,受访者表示,与同行相比,他们在更多的业务职能上更充分地使用了人工智能,对人工智能的投资力度更大并从中获得了更大的总体价值。

Deno JWT token 应用

流过昼夜 提交于 2020-10-16 13:26:18
视频演示: https://www.bilibili.com/video/BV1BT4y1E7Nh/?p=12 一起来完成以下步骤: 引用之前的工程代码 创建员工信息interface和员工数组array 生成token 校验token是否正确 运行命令: deno run --allow-net --allow-read main.ts import { Context } from "https://deno.land/x/oak/mod.ts" ; import { key } from "../middlewares/key.ts" ; //引入jwt 模块功能 import { makeJwt, setExpiration, Jose, Payload } from "https://deno.land/x/djwt/create.ts" import employees from "../models/employees.ts" ; //获取工程目录方法 const { cwd } = Deno; //jwt头部 const header: Jose = { alg: "HS256" , typ: "JWT" , } /** * 定义Controller */ class Controller { /** * 首页 * @param ctx */ static

Nutanix与联想因MSP再结缘,共赴混合云之约

孤人 提交于 2020-10-16 11:49:10
点击上方关注我们! 从超融合架构到企业云平台,Nutanix与联想的合作关系给人的感觉就像是一对“老夫老妻”:一是合作时间长,从2015年双方达成全球战略合作关系、2016年双方合作业务在中国全面铺开到现在,双方在以超融合替代传统三层架构的转型过程中一直共同进退,携手服务了近千家客户;二是战略目标一致,心有灵犀,劲儿往一处使,从打造以超融合为基础的上云平台,到帮助企业用户构建混合云,再到乘“新基建”之东风,加速推动企业数字化转型和智能升级,双方一直密切合作,砥砺前行。 Nutanix中国区董事总经理 马莉 在近日举行的2020年度Nutanix合作伙伴峰会上,再传喜讯,联想科技集团成了Nutanix新晋的MSP合作伙伴。Nutanix中国区董事总经理马莉表示:“我们希望双方的合作能够给业界,特别是公有云的客户带来更优质的体验。” 在更早之前举行的Nutanix一年一度的.Next大会上,Nutanix不仅发布了一系列新产品,而且还对原有产品进行重新组合和优化,进一步提升了性能,并增加了功能。这些举措再次清楚地显示,Nutanix已经完成了从原有的以超融合为核心的解决方案提供商到混合云方案提供商的转变。超融合只是客户私有云现代化改造过程中的第一步,未来向混合云的演进是大势所趋。 无独有偶,联想在实现云化转型的过程中也看好混合云未来的发展前景。这让双方未来的合作有了更大可以施展的空间。

【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-J...

不羁岁月 提交于 2020-10-16 08:50:58
【原创】分布式之数据库和缓存双写一致性方案解析(三) 正文 博主本来觉得, 《分布式之数据库和缓存双写一致性方案解析》 ,一文已经十分清晰。然而这一两天,有人在微信上私聊我,觉得应该要采用 先删缓存,再更新数据库,再删缓存 这一方案作为缓存更新策略,而不是先更新数据库,再删缓存。并且搬出了两篇大佬的文章, 《Cache Aside Pattern》 , 《缓存与数据库不一致,咋办?》 ,希望博主能加以说明。因为问的人太多了,所以才有了这篇文章的诞生。 正文 在开始这篇文章之前,我们先自己思考一下以下两个更新策略 方案一 (1)删缓存 (2)更数据库 (3)删缓存 方案二 (1)更数据库 (2)删缓存 大家看下面的文章前,自己先思考一下, 方案一的步骤(1)有没有存在的必要? 先上一个 结论 :方案二存在的缺点,方案一全部存在,且方案一比方案二多一个步骤,所以应该选方案二。 下面,针对 《Cache Aside Pattern》 , 《缓存与数据库不一致,咋办?》 这两篇文章提出的论点,提出小小的质疑。这两篇文章认为方案二不行的原因,主要有以下两点 (1)方案二在步骤(2),出现删缓存失败的情况下,会出现数据不一致的情形,如下图所示 (2)方案二存在下面的主从同步,导致cache不一致问题,如下图所示 大致流程就是,线程A写,线程B读,会有以下流程出现 (1)缓存刚好失效 (2

HashMap源码实现分析

杀马特。学长 韩版系。学妹 提交于 2020-10-15 20:58:14
HashMap源码实现分析 一、前言 HashMap 顾名思义,就是用hash表的原理实现的Map接口容器对象,那什么又是hash表呢。 我们对数组都很熟悉,数组是一个占用连续内存的数据结构,学过C的朋友对这一点影响肯定更为深刻。既然是一段连续的内存,数组的特点就显而易见了,一旦你知道要查第几个数据,时间复杂度就是O(1),但是对于插入操作就很困难;还有一种数据结构你也一定很熟悉,那就是链表,链表由一组指向(单向或者双向)的节点连接的数据结构,它的特点是内存不连续,查找困难,但是插入删除都很容易。 那有没有一种查找容易,插入删除查找都容易的数据结构呢, 没错,它就是hash表。 本篇,我们就来讨论: HashMap的数据结构实现方式 HashMap是怎么做到为get、put操作提供稳定的时间复杂度的 HashMap什么时候从单节点转成链表又是什么时候从链表转成红黑树 HashMap初始化时为什么要给自定义的初始容量。 HashMap如何保证容量始终是2的幂 HashMap为何要保证容量始终是2的幂 HashMap的hash值如何计算 HashMap为什么是线程不安全的 要了解HashMap 最好的方式就是看源码,本篇内容基于Jdk1.8HashMap源码。 二、HashMap的基本要素 磨刀不误砍柴功,想了解HashMap的原理,必然绕不过HashMap源码中的以下几个变量:

206反转链表

↘锁芯ラ 提交于 2020-10-15 20:57:43
# Definition for singly-linked list. class ListNode: def __init__(self, x): self.val = x self.next = None a = ListNode(1) b = ListNode(2) a.next = b # 有关链表的题,基本上思路都是很好想的,主要是代码的实现 class Solution: def reverseList(self, head: ListNode) -> ListNode: # 定义一个当前节点和前驱节点 cur,prev = head,None # 然后循环遍历链表节点。 while cur: # 当前节点的指针指向前驱节点,当前节点向后移,前驱结点向后移 cur.next,cur,prev = prev,cur.next,cur # 最后返回前驱节点。 return prev A = Solution() print(A.reverseList(a)) 来源: oschina 链接: https://my.oschina.net/u/4275752/blog/4411344

简易数据分析(八): Web Scraper 抓取详情页、利用 Link 选择器翻页

戏子无情 提交于 2020-10-15 14:38:11
不知不觉,web scraper 系列教程我已经写了 10 篇了,这 10 篇内容 ,基本上覆盖了 Web Scraper 大部分功能。 今天的内容算这个系列的最后一篇文章了,下一章节我会开一个新坑,说说如何利用 Excel 对收集到的数据做一些格式化的处理和分析。 Web Scraper 教程的全盘总结我放在下一篇文章,今天先开始我们的实战教程。 在前面的课程里,我们抓取的数据都是在同一个层级下的内容,探讨的问题主要是如何应对市面上的各种分页类型,但对于详情页内容数据如何抓取,却一直没有介绍。 比如说我们想抓取 b 站的动画区 TOP 排行榜的数据: https://www.bilibili.com/ranking/all/1/0/3 按之前的抓取逻辑,我们是把这个榜单上和作品有关的数据抓取一遍,比如说下图里的排名、作品名字、播放量、弹幕数和作者名。 经常逛 B 站的小伙伴也知道,UP 主经常暗示观看视频小伙伴 三连操作 (点赞+投币+收藏),由此可见,这 3 个数据对视频的排名有一定的影响力,所以这些数据对我们来说也有一定的参考价值。 但遗憾的是,在这个排名列表里,并没有相关数据。这几个数据在视频详情页里,需要我们点击链接进去才能看到: 今天的教程内容,就是教你如何利用 Web Scraper,在抓取一级页面(列表页)的同时,抓取二级页面(详情页)的内容。 1.创建