自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

qyf__123的博客

python学习

  • 博客(155)
  • 收藏
  • 关注

原创 gsxt cookie:__jsl_clearance_s 参数研究获取

gsxt cookie:__jsl_clearance_s 参数研究获取

2024-03-25 14:09:33 1179

原创 windows 系统读取 Linux Ext 分区硬盘

在 Windows 系统中读取 Linux 分区硬盘中的内容

2023-12-01 10:31:18 1536

原创 Windows 使用 mkvirtualenv 安装虚拟环境

Windows 使用 mkvirtualenv 安装虚拟环境需要通过 pip 安装如下三个包pip install virtualenvpip install virtualenvwrapperpip install virtualenvwrapper-win不安装最后一个包,会碰见找不到 mkvirtualenv 命令的情况修改默认虚拟环境目录:环境变量中新建:变量名:WORKON_HOME变量值:目录位置(重启cmd生效)执行命令创建虚拟环境mkvirtualenv --py

2020-07-17 21:16:26 3030

原创 使用 Pyinstaller 打包包含 pyqt5 库爬虫程序总结

使用 Pyinstaller 打包包含 pyqt5 库爬虫程序总结python 和 pyinstaller 的安装不再赘述使用 pyinstaller 的打包基本上使用一个 -F 参数即可,这样就会打包出一个单个可以运行的 exe;如果不指定,会打包出一整个文件夹1. 碰见的第一个问题:RecursionError 递归报错参考链接:https://blog.csdn.net/heru...

2020-03-02 20:15:41 719

转载 54 | 理解 Disruptor(上):带你体会 CPU 高速缓存的风驰电掣

54 | 理解 Disruptor(上):带你体会 CPU 高速缓存的风驰电掣坚持到底就是胜利,终于我们一起来到了专栏的最后一个主题。让我一起带你来看一看,CPU 到底能有多快。在接下来的两讲里,我会带你一起来看一个开源项目 Disruptor。看看我们怎么利用 CPU 和高速缓存的硬件特性,来设计一个对于性能有极限追求的系统。不知道你还记不记得,在第 37 讲里,为了优化 4 毫秒专门铺设光...

2019-11-22 22:53:02 664

转载 53 | 设计大型 DMP 系统(下):SSD 拯救了所有的 DBA

53 | 设计大型 DMP 系统(下):SSD 拯救了所有的 DBA上一讲里,根据 DMP 系统的各个应用场景,我们从抽象的原理层面,选择了 AeroSpike 作为 KV 数据库,Kafka 作为数据管道,Hadoop/Hive 来作为数据仓库。不过呢,肯定有不信邪的工程师会问,为什么 MongoDB,甚至是 MySQL 这样的文档数据库或者传统的关系型数据库不适用呢?为什么不能通过优化 S...

2019-11-22 22:47:30 352

转载 52 | 设计大型 DMP 系统(上):MongoDB 并不是什么灵丹妙药

52 | 设计大型 DMP 系统(上):MongoDB 并不是什么灵丹妙药如果你一讲一讲跟到现在,那首先要恭喜你,马上就看到胜利的曙光了。过去的 50 多讲里,我把计算机组成原理中的各个知识点,一点一点和你拆解了。对于其中的很多知识点,我也给了相应的代码示例和实际的应用案例。不过呢,相信你和我一样,觉得只了解这样一个个零散的知识点和案例还不过瘾。那么从今天开始,我们就进入应用篇。我会通过两个应...

2019-11-15 22:42:25 373

转载 51 | 分布式计算:如果所有人的大脑都联网会怎样?

51 | 分布式计算:如果所有人的大脑都联网会怎样?今天是原理篇的最后一篇。过去 50 讲,我们一起看了抽象概念上的计算机指令,看了这些指令怎么拆解成一个个简单的电路,以及 CPU 是怎么通过一个一个的电路组成的。我们还一起看了高速缓存、内存、SSD 硬盘和机械硬盘,以及这些组件又是怎么通过总线和 CPU 连在一起相互通信的。把计算机这一系列组件组合起来,我们就拿到了一台完整的计算机。现在我们...

2019-11-15 22:31:34 330

原创 leetcode 14_最长公共前缀

leetcode 14_最长公共前缀该解法执行时间 40ms思路:过滤掉无值和只有一个值的情况取出列表中最短的字符串(如果有最长公共前缀,最多也就是其中最短的一个值)遍历列表,判断每一个字符串在从开头截取出来的同等长度下是否一样,一样的话,计数加1;不一样直接跳过判断本次循环结束最终的计数是否与列表长度一致,一致,说明这就是最长公共前缀不一致,将当前最短值截取掉最后一位,加上死循环...

2019-11-11 22:57:55 119

转载 50 | 数据完整性(下):如何还原犯罪现场?

50 | 数据完整性(下):如何还原犯罪现场?讲完校验码之后,你现在应该知道,无论是奇偶校验码,还是 CRC 这样的循环校验码,都只能告诉我们一个事情,就是你的数据出错了。所以,校验码也被称为检错码(Error Detecting Code)。不管是校验码,还是检错码,在硬件出错的时候,只能告诉你 “我错了”。但是,下一个问题,“错哪儿了”,它是回答不了的。这就导致,我们的处理方式只有一种,那...

2019-11-11 22:51:54 1070

转载 49 | 数据完整性(上):硬件坏了怎么办?

49 | 数据完整性(上):硬件坏了怎么办?2012 年的时候,我第一次在工作中,遇到一个因为硬件的不可靠性引发的 Bug。正是因为这个 Bug,让我开始逐步花很多的时间,去复习回顾整个计算机系统里面的底层知识。当时,我正在 MediaV 带领一个 20 多人的团队,负责公司的广告数据和机器学习算法。其中有一部分工作,就是用 Hadoop 集群处理所有的数据和报表业务。当时我们的业务增长很快,...

2019-11-07 22:50:11 509

转载 48 | DMA:为什么 Kafka 这么快?

48 | DMA:为什么 Kafka 这么快?过去几年里,整个计算机产业界,都在尝试不停地提升 I/O 设备的速度。把 HDD 硬盘换成 SSD 硬盘,我们仍然觉得不够快;用 PCI Express 接口的 SSD 硬盘替代 SATA 接口的 SSD 硬盘,我们还是觉得不够快,所以,现在就有了傲腾(Optane)这样的技术。但是,无论 I/O 速度如何提升,比起 CPU,总还是太慢。SSD 硬...

2019-11-07 22:44:18 279

转载 47 | SSD 硬盘(下):如何完成性能优化的 KPI?

47 | SSD 硬盘(下):如何完成性能优化的 KPI?如果你平时用的是 Windows 电脑,你会发现,用了 SSD 的系统盘,就不能用磁盘碎片整理功能。这是因为,一旦主动去运行磁盘碎片整理功能,就会发生一次块的擦除,对应块的寿命就少了一点点。这个 SSD 的擦除寿命的问题,不仅会影响像磁盘碎片整理这样的功能,其实也很影响我们的日常使用。我们的操作系统上,并没有 SSD 硬盘上各个块目前已...

2019-11-04 22:27:42 395

转载 46 | SSD 硬盘(上):如何完成性能优化的 KPI?

46 | SSD 硬盘(上):如何完成性能优化的 KPI?随着 3D 垂直封装技术和 QLC 技术的出现,今年的 “618”,SSD 硬盘的价格进一步大跳水,趁着这个机会,我把自己电脑上的仓库盘,从 HDD 换成了 SSD 硬盘。我的个人电脑彻底摆脱了机械硬盘。随着智能手机的出现,互联网用户在 2008 年之后开始爆发性增长,大家在网上花的时间也越来越多。这也就意味着,隐藏在精美 App 和网...

2019-11-04 22:23:47 383

原创 Java 开发笔记 - wangEditor 编辑器图片上传

Java 开发笔记 - wangEditor 编辑器图片上传前言转型 java 开发后入手的第一个项目,写写博客记录一下该项目使用的是 sping boot + mybatis plus + thymeleaf 项目架构,前后端不分离编辑器图片上传公司前端提供的页面里提供了这个富文本编辑器,大概去了解了一下,这是一个个人维护的轻量编辑器。官网:www.wangEditor.c...

2019-11-01 22:55:13 1163

转载 45 | 机械硬盘:Google 早期用过的 “黑科技”

45 | 机械硬盘:Google 早期用过的 “黑科技”在 1991 年,我刚接触计算机的时候,很多计算机还没有硬盘。整个操作系统都安装在 5 寸或者 3.5 寸的软盘里。不过,很快大部分计算机都开始用上了直接安装在主板上的机械硬盘。到了今天,更早的软盘早已经被淘汰了。在个人电脑和服务器里,更晚出现的光盘也已经很少用了。机械硬盘的生命力仍然非常顽强。无论是作为个人电脑的数据盘,还是在数据中心里...

2019-11-01 22:48:37 380

转载 44 | 理解 IO_WAIT:I/O 性能到底是怎么回事儿?

44 | 理解 IO_WAIT:I/O 性能到底是怎么回事儿?在专栏一开始的时候,我和你说过,在计算机组成原理这门课里面,很多设计的核心思路,都来源于性能。在前面讲解 CPU 的时候,相信你已经有了切身的感受了。大部分程序员开发的都是应用系统。在开发应用系统的时候,我们遇到的性能瓶颈大部分都在 I/O 上。在第 36 讲讲解局部性原理的时候,我们一起看了通过把内存当作是缓存,来提升系统的整体性...

2019-10-09 19:57:44 500

转载 43 | 输入输出设备:我们并不是只能用灯泡显示 “0” 和 “1”

43 | 输入输出设备:我们并不是只能用灯泡显示 “0” 和 “1”我们在前面的章节搭建了最简单的电路,在这里面,计算机的输入设备就是一个一个开关,输出设备呢,是一个一个灯泡。的确,早期发展的时候,计算机的核心是做 “计算”。我们从 “计算机” 这个名字上也能看出这一点。不管是中文名字 “计算机”,还是英文名字 “Computer”,核心都是在” 计算 “这两个字上。不过,到了今天,这些 “计算...

2019-10-09 19:51:15 468

转载 42 | 总线:计算机内部的高速公路

42 | 总线:计算机内部的高速公路专栏讲到现在,如果我再问你,计算机五大组成部分是什么,应该没有人不知道了吧?我们这一节要讲的内容,依然要围绕这五大部分,控制器、运算器、存储器、输入设备和输出设备。CPU 所代表的控制器和运算器,要和存储器,也就是我们的主内存,以及输入和输出设备进行通信。那问题来了,CPU 从我们的键盘、鼠标接收输入信号,向显示器输出信号,这之间究竟是怎么通信的呢?换句话说...

2019-09-23 23:15:21 709

转载 41 | 理解内存(下):解析 TLB 和内存保护

41 | 理解内存(下):解析 TLB 和内存保护机器指令里面的内存地址都是虚拟内存地址。程序里面的每一个进程,都有一个属于自己的虚拟内存地址空间。我们可以通过地址转换来获得最终的实际物理地址。我们每一个指令都存放在内存里面,每一条数据都存放在内存里面。因此,“地址转换” 是一个非常高频的动作,“地址转换” 的性能就变得至关重要了。这就是我们今天要讲的第一个问题,也就是性能问题。因为我们的指令...

2019-09-17 21:15:41 627

转载 40 | 理解内存(上):虚拟内存和内存保护是什么?

40 | 理解内存(上):虚拟内存和内存保护是什么?我们在专栏一开始说过,计算机有五大组成部分,分别是:运算器、控制器、存储器、输入设备和输出设备。如果说计算机最重要的组件,是承担了运算器和控制器作用的 CPU,那内存就是我们第二重要的组件了。内存是五大组成部分里面的存储器,我们的指令和数据,都需要先加载到内存里面,才会被 CPU 拿去执行。专栏第 9 讲,我们讲了程序装载到内存的过程。可以知...

2019-09-17 21:10:47 759

转载 39 | MESI 协议:如何让多核 CPU 的高速缓存保持一致?

39 | MESI 协议:如何让多核 CPU 的高速缓存保持一致?你平时用的电脑,应该都是多核的 CPU。多核 CPU 有很多好处,其中最重要的一个就是,它使得我们在不能提升 CPU 的主频之后,找到了另一种提升 CPU 吞吐率的办法。不知道上一讲的内容你还记得多少?上一节,我们讲到,多核 CPU 里的每一个 CPU 核,都有独立的属于自己的 L1 Cache 和 L2 Cache。多个 CP...

2019-09-16 22:40:18 1175 3

转载 38 | 高速缓存(下):你确定你的数据更新了么?

38 | 高速缓存(下):你确定你的数据更新了么?在我工作的十几年里,写了很多 Java 的程序。同时,我也面试过大量的 Java 工程师。对于一些表示自己深入了解和擅长多线程的同学,我经常会问这样一个面试题:“volatile 这个关键字有什么作用?” 如果你或者你的朋友写过 Java 程序,不妨来一起试着回答一下这个问题。就我面试过的工程师而言,即使是工作了多年的 Java 工程师,也很少...

2019-09-09 22:13:04 319

转载 37 | 高速缓存(上):“4 毫秒” 究竟值多少钱?

37 | 高速缓存(上):“4 毫秒” 究竟值多少钱?在这一节内容开始之前,我们先来看一个 3 行的小程序。你可以猜一猜,这个程序里的循环 1 和循环 2,运行所花费的时间会差多少?你可以先思考几分钟,然后再看我下面的解释。int[] arr = new int[64 * 1024 * 1024]; // 循环 1for (int i = 0; i < arr.length; ...

2019-09-06 22:45:02 553

转载 36 | 局部性原理:数据库性能跟不上,加个缓存就好了?

36 | 局部性原理:数据库性能跟不上,加个缓存就好了?平时进行服务端软件开发的时候,我们通常会把数据存储在数据库里。而服务端系统遇到的第一个性能瓶颈,往往就发生在访问数据库的时候。这个时候,大部分工程师和架构师会拿出一种叫作 “缓存” 的武器,通过使用 Redis 或者 Memcache 这样的开源软件,在数据库前面提供一层缓存的数据,来缓解数据库面临的压力,提升服务端的程序性能。在数据库...

2019-09-06 22:40:30 473 1

转载 35 | 存储器层次结构全景:数据存储的大金字塔长什么样?

35 | 存储器层次结构全景:数据存储的大金字塔长什么样?今天开始,我们要进入到计算机另一个重要的组成部分,存储器。如果你自己组装过 PC 机,你肯定知道,想要 CPU,我们只要买一个就好了,但是存储器,却有不同的设备要买。比方说,我们要买内存,还要买硬盘。买硬盘的时候,不少人会买一块 SSD 硬盘作为系统盘,还会买上一块大容量的 HDD 机械硬盘作为数据盘。内存和硬盘都是我们的存储设备。而且...

2019-09-03 22:27:23 1389

转载 34 | 理解虚拟机:你在云上拿到的计算机是什么样的?

34 | 理解虚拟机:你在云上拿到的计算机是什么样的?上世纪 60 年代,计算机还是异常昂贵的设备,实际的计算机使用需求要面临两个挑战。第一,计算机特别昂贵,我们要尽可能地让计算机忙起来,一直不断地去处理一些计算任务。第二,很多工程师想要用上计算机,但是没有能力自己花钱买一台,所以呢,我们要让很多人可以共用一台计算机。缘起分时系统为了应对这两个问题,分时系统的计算机就应运而生了。无论是个人...

2019-09-03 22:24:02 480

转载 33 | 解读 TPU:设计和拆解一块 ASIC 芯片

33 | 解读 TPU:设计和拆解一块 ASIC 芯片过去几年,最知名、最具有实用价值的 ASIC 就是 TPU 了。各种解读 TPU 论文内容的文章网上也很多。不过,这些文章更多地是从机器学习或者 AI 的角度,来讲解 TPU。上一讲,我为你讲解了 FPGA 和 ASIC,讲解了 FPGA 如何实现通过 “软件” 来控制 “硬件”,以及我们可以进一步把 FPGA 设计出来的电路变成一块 AS...

2019-09-02 22:27:09 1550

转载 32 | FPGA 和 ASIC:计算机体系结构的黄金时代

32 | FPGA 和 ASIC:计算机体系结构的黄金时代过去很长一段时间里,大家在讲到高科技、互联网、信息技术的时候,谈的其实都是 “软件”。从 1995 年微软发布 Windows 95 开始,高科技似乎就等同于软件业和互联网。著名的风险投资基金 Andreessen Horowitz 的合伙人 Marc Andreessen,在 2011 年发表了一篇博客,声称 “Software is ...

2019-08-30 22:35:22 595

转载 31 | GPU(下):为什么深度学习需要使用 GPU?

31 | GPU(下):为什么深度学习需要使用 GPU?上一讲,我带你一起看了三维图形在计算机里的渲染过程。这个渲染过程,分成了顶点处理、图元处理、 栅格化、片段处理,以及最后的像素操作。这一连串的过程,也被称之为图形流水线或者渲染管线。因为要实时计算渲染的像素特别地多,图形加速卡登上了历史的舞台。通过 3dFx 的 Voodoo 或者 NVidia 的 TNT 这样的图形加速卡,CPU 就不...

2019-08-29 22:10:27 10571

转载 30 | GPU(上):为什么玩游戏需要使用GPU?

30 | GPU(上):为什么玩游戏需要使用GPU?讲完了 CPU,我带你一起来看一看计算机里的另外一个处理器,也就是被称之为 GPU 的图形处理器。过去几年里,因为深度学习的大发展,GPU 一下子火起来了,似乎 GPU 成了一个专为深度学习而设计的处理器。那 GPU 的架构究竟是怎么回事儿呢?它最早是用来做什么而被设计出来的呢?想要理解 GPU 的设计,我们就要从 GPU 的老本行图形处理说...

2019-08-27 22:21:28 2044

转载 29 | CISC和RISC:为什么手机芯片都是ARM?

29 | CISC和RISC:为什么手机芯片都是ARM?我在第 5 讲讲计算机指令的时候,给你看过 MIPS 体系结构计算机的机器指令格式。MIPS 的指令都是固定的 32 位长度,如果要用一个打孔卡来表示,并不复杂。MIPS 机器码的长度都是固定的 32 位第 6 讲的时候,我带你编译了一些简单的 C 语言程序,看了 x86 体系结构下的汇编代码。眼尖的话,你应该能发现,每一条机器码的长...

2019-08-26 22:23:26 3270

转载 28 | 异常和中断:程序出错了怎么办?

28 | 异常和中断:程序出错了怎么办?过去这么多讲,我们的程序都是自动运行且正常运行的。自动运行的意思是说,我们的程序和指令都是一条条顺序执行,你不需要通过键盘或者网络给这个程序任何输入。正常运行是说,我们的程序都是能够正常执行下去的,没有遇到计算溢出之类的程序错误。不过,现实的软件世界可没有这么简单。一方面,程序不仅是简单的执行指令,更多的还需要和外部的输入输出打交道。另一方面,程序在执行...

2019-08-22 22:35:54 562

转载 27 | SIMD:如何加速矩阵乘法?

27 | SIMD:如何加速矩阵乘法?上一讲里呢,我进一步为你讲解了 CPU 里的“黑科技”,分别是超标量(Superscalar)技术和超长指令字(VLIW)技术。超标量(Superscalar)技术能够让取指令以及指令译码也并行进行;在编译的过程,超长指令字(VLIW)技术可以搞定指令先后的依赖关系,使得一次可以取一个指令包。不过,CPU 里的各种神奇的优化我们还远远没有说完。这一讲里,...

2019-08-21 22:50:29 1806

转载 26 | Superscalar和VLIW:如何让CPU的吞吐率超过1?

26 | Superscalar和VLIW:如何让CPU的吞吐率超过1?到今天为止,专栏已经过半了。过去的 20 多讲里,我给你讲的内容,很多都是围绕着怎么提升 CPU 的性能这个问题展开的。我们先回顾一下第 4 讲,不知道你是否还记得这个公式:程序的 CPU 执行时间 = 指令数 × CPI × Clock Cycle Time这个公式里,有一个叫 CPI 的指标。我们知道,CPI 的倒...

2019-08-20 22:57:18 869

转载 25 | 冒险和预测(四):今天下雨了,明天还会下雨么?

25 | 冒险和预测(四):今天下雨了,明天还会下雨么?过去三讲,我主要为你介绍了结构冒险和数据冒险,以及增加资源、流水线停顿、操作数前推、乱序执行,这些解决各种“冒险”的技术方案。在结构冒险和数据冒险中,你会发现,所有的流水线停顿操作都要从指令执行阶段开始。流水线的前两个阶段,也就是取指令(IF)和指令译码(ID)的阶段,是不需要停顿的。CPU 会在流水线里面直接去取下一条指令,然后进行译码...

2019-08-19 22:31:01 900

转载 24 | 冒险和预测(三):CPU里的“线程池”

24 | 冒险和预测(三):CPU里的“线程池”过去两讲,我为你讲解了通过增加资源、停顿等待以及主动转发数据的方式,来解决结构冒险和数据冒险问题。对于结构冒险,由于限制来自于同一时钟周期不同的指令,要访问相同的硬件资源,解决方案是增加资源。对于数据冒险,由于限制来自于数据之间的各种依赖,我们可以提前把数据转发到下一个指令。但是即便综合运用这三种技术,我们仍然会遇到不得不停下整个流水线,等待前面...

2019-08-16 20:13:00 376

转载 23 | 冒险和预测(二):流水线里的接力赛

23 | 冒险和预测(二):流水线里的接力赛上一讲,我为你讲解了结构冒险和数据冒险,以及应对这两种冒险的两个解决方案。一种方案是增加资源,通过添加指令缓存和数据缓存,让我们对于指令和数据的访问可以同时进行。这个办法帮助 CPU 解决了取指令和访问数据之间的资源冲突。另一种方案是直接进行等待。通过插入 NOP 这样的无效指令,等待之前的指令完成。这样我们就能解决不同指令之间的数据依赖问题。着急的...

2019-08-13 20:48:05 469

转载 22 | 冒险和预测(一):hazard是“危”也是“机”

22 | 冒险和预测(一):hazard是“危”也是“机”过去两讲,我为你讲解了流水线设计 CPU 所需要的基本概念。接下来,我们一起来看看,要想通过流水线设计来提升 CPU 的吞吐率,我们需要冒哪些风险。任何一本讲解 CPU 的流水线设计的教科书,都会提到流水线设计需要解决的三大冒险,分别是结构冒险(Structural Hazard)、数据冒险(Data Hazard)以及控制冒险(Con...

2019-08-12 20:29:05 5151 1

转载 21 | 面向流水线的指令设计(下):奔腾4是怎么失败的?

21 | 面向流水线的指令设计(下):奔腾4是怎么失败的?上一讲,我给你初步介绍了 CPU 的流水线技术。乍看起来,流水线技术是一个提升性能的灵丹妙药。它通过把一条指令的操作切分成更细的多个步骤,可以避免 CPU“浪费”。每一个细分的流水线步骤都很简单,所以我们的单个时钟周期的时间就可以设得更短。这也变相地让 CPU 的主频提升得很快。这一系列的优点,也引出了现代桌面 CPU 的最后一场大战,...

2019-08-10 17:38:05 867

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除