自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 收藏
  • 关注

转载 三大并发技术—进程、线程和协程

本文系统介绍了三种并发编程技术:进程、线程和协程。进程是操作系统的基础抽象,提供程序隔离和CPU利用率提升;线程作为更轻量的执行单元,实现更细粒度的并发;协程则是函数级并发模型,尤其适合高并发I/O场景。文章详细阐述了三者的历史背景、核心概念、解决的问题以及典型应用场景,并指出它们并非替代关系而是互补共存。最后强调这些技术体现了计算机领域追求性能优化和编程简化的持续努力。

2025-11-21 15:37:08 75

原创 一篇文章带你了解——Python数据结构的底层实现

本文介绍了Python中常用的基础序列类型、映射类型和集合类型的底层实现与核心特性。序列类型包括动态数组实现的列表、静态数组实现的元组以及支持多编码的字符串;映射类型涵盖哈希表实现的字典、带默认值的defaultdict、计数专用的Counter、多映射合并的ChainMap和维护插入顺序的OrderedDict;集合类型则包含基于哈希表实现的set和不可变的frozenset。每种类型均从存储结构、内存布局、时间复杂度和适用场景等维度进行解析,并辅以关键C结构体定义说明实现细节。这些底层机制决定了不同数据

2025-11-04 17:58:41 1111

原创 Python接口编写规范

主要对Python的接口编写进行规范,并且强调Python接口的一些特性

2025-11-03 10:43:25 937

原创 第五节:对象与原型链:JavaScript 的“类”与“继承”

目标:理解对象创建、原型继承、 绑定,掌握类语法与原型设计模式,实现模块化组件开发。语法:访问方式:2. 对象操作添加/修改属性:删除属性:遍历属性:3. 对象拷贝浅拷贝:深拷贝:二、原型链:继承的“幕后英雄”1. 原型与构造函数 与 :2. 原型链查找规则查找顺序:对象自身属性 → 原型 → 原型链向上查找,直到3. 修改原型链动态添加原型方法:原型链陷阱:三、 绑定:上下文的“指挥官”1. 的四种绑

2025-05-09 14:32:44 391

原创 第四节:函数:代码复用的魔法

理解函数声明、参数传递、作用域链,掌握闭包与高阶函数,实现模块化编程。${${${${...argsreturnundefined{}词法作用域:函数定义时确定作用域链,而非调用时。:函数返回内部函数,内部函数可访问外部函数的变量。应用场景::闭包会保留外部变量引用,可能导致内存无法释放。解决方案:手动解除引用。示例:生成配置化函数map6sort[1,2,3]示例:计算阶乘。

2025-05-09 14:32:14 103

原创 第三节:条件语句与循环:控制程序流程

熟练运用条件判断、循环结构,实现动态逻辑与重复操作,掌握常见算法的底层实现。if-else:根据条件执行不同代码块。if-elseswitch:替代多个if-else if,匹配离散值。casebreakforwhile:循环次数不确定时(如用户输入验证)。do-while:至少执行一次循环体。break:立即终止循环。:跳过当前迭代,进入下一次循环。for...of:直接获取元素值(无需索引)。:数组方法,接受回调函数。

2025-05-09 14:31:40 211

原创 第二节:变量、数据类型与运算符:JS 的基石

如果需要调整内容深度或补充示例(如更详细的 VSCode 调试配置),可以随时告诉我!:理解变量声明、作用域规则,掌握原始类型与引用类型的底层差异,熟练运用运算符。:按值传递,存储在栈内存,不可变。:按引用传递,存储在堆内存,可变。:检测对象是否为某构造函数的实例。:拷贝引用(共享同一对象)。:拷贝值(完全独立)。

2025-05-09 14:31:02 144

原创 第一节:JavaScript 简介与开发环境搭建

本节介绍了JavaScript的核心定位及其在网页交互、服务端、移动端和桌面端的广泛应用。JavaScript是一门轻量级、动态类型、解释型的脚本语言,与Java无关。现代JavaScript的三大核心包括ECMAScript、DOM和BOM。开发环境可以通过浏览器控制台或VSCode与Node.js搭建。通过一个简单的示例,展示了如何使用JavaScript动态修改网页内容。调试技巧包括使用浏览器开发者工具和VSCode的调试功能。课后任务涵盖了基础操作和进阶练习,如计算数列和显示当前时间。下一节将深入探

2025-05-09 14:30:05 236

原创 软考知识点汇总

抽象工厂模式(相对于工厂模式,多了一个产品,而且无需指定具体的工厂去生产)提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类方法和接口含义AbstractFactory声明一个创建抽象产品对象的操作接口ConcreteFactory实现创建具体产品对象的操作AbstractProduct为一类产品声明一个接口ConcreteProduct定义一个将被相应的具体工厂创建的产品对象,实现AbstractProduct接口。

2025-05-08 16:54:14 1023

原创 HBuilder压缩文件教程

2025-04-23 13:45:14 842

原创 别让这些 “坑” 毁了你的网页!新手写 HTML 必看的救命清单

这样清晰的缩进能让开发者快速了解代码的层级关系,在后期维护和修改代码时更加方便。如果缩进混乱,多层嵌套的代码会变得难以理解和管理。如果忘记闭合标签,或者闭合标签位置错误,会破坏 HTML 文档的结构,影响页面的正常显示。class="容器"

2025-04-20 16:08:01 1081

原创 一键提速!HBuilder 实用快捷键大合集,码农效率神器

HBuilder 是一款强大的前端开发工具,掌握其快捷键能显著提升开发效率。下面为你详细介绍 HBuilder 各类快捷键的使用。同时,如果你有个性化需求,也可以对快捷键进行修改,以下是具体的修改步骤。

2025-04-18 17:09:24 1976

原创 HBuilder创建项目步骤

在弹出的 “新建项目” 窗口中,选择 “HTML5+” 或者 “Web 项目” 类型。而 “Web 项目” 则是更为基础通用的类型,你可以按需选择。在完成上述信息的填写和选择后,点击 “创建” 按钮。HBuilder 会自动依据你所选的模板生成项目的基本结构和文件。点击菜单栏中的 “文件” 选项,在弹出的下拉菜单里选择 “新建”,接着再选择 “项目”;项目创建完成后,在 HBuilder 的左侧 “项目管理器” 中可以看到项目的文件结构。可以点击菜单栏的视图、再次点击显示视图,找到项目管理器,进行打开。

2025-04-12 12:44:16 916

原创 JS逆向--反调试(SoJson为例)

反调试

2024-12-17 16:19:58 769

原创 JS逆向--拍_拍_贷

放掉断点之后,要等验证码刷新之后,重新打开断点,点击登录。断点必须下到当前函数,才能准确定位到值。这里的账号密码可以随便,符合规则就行。爬取目标:密码加密代码分析。上一个栈的 n 变量。1、声明一个全局变量。

2024-12-12 12:10:50 1003

原创 JS逆向--推推

【代码】JS逆向--推推。

2024-12-08 22:32:09 205

原创 树的转换,逆波兰式(后缀式)

2024-09-13 16:04:03 176

原创 后缀式转换,及中缀式转换(全网最详细)

优先级相同:从右往左中缀式:1+2,1-2,1*2上面对应下面的后缀式为:12+,12-,12*

2024-09-12 17:28:58 1143

原创 KMP算法计算方式

前缀:a,ab,abc,abca,abcaa。后缀:b,ab,aab,caab,bcaab。前缀:a,ab,abc,abca。后缀:a,aa,caa,bcaa。next值 0 1 1 2 2 3 1 2。前缀:a,ab,abc。后缀:a,ca,bca。模式串 a b a a b c a c。j值: 1 2 3 4 5 6 7。next值 0 1 1 2 2 3 1 2。模式串:a b c a a b b。模式串 a b a a b c a c。

2024-09-08 16:50:34 1099

原创 高级深入--day47

因为redis数据库不能存储复杂对象(key部分只能是字符串,value部分只能是字符串,字符串列表,字符串集合和hash),所以我们存啥都要先串行化成文本才行。这里使用的就是python的pickle模块,一个兼容py2和py3的串行化工具。这个serializer主要用于一会的scheduler存reuqest对象。这里实现了loads和dumps两个函数,其实就是实现了一个序列化器。

2023-11-04 23:05:51 377

原创 高级深入--day46

根据源代码来看,scrapy-redis使用了scrapy本身的一个fingerprint接request_fingerprint,这个接口很有趣,根据scrapy文档所说,他通过hash来判断两个url是否相同(相同的url会生成相同的hash结果),但是当两个url的地址相同,get型参数相同但是顺序不同时,也会生成相同的hash结果(这个真的比较神奇。而分布式跑的话,就需要各个主机上的scheduler都连接同一个数据库的同一个request池来判断这次的请求是否是重复的了。

2023-11-04 23:05:10 555

原创 高级深入--day45

scrapy-redis工程的主体还是是redis和scrapy两个库,工程本身实现的东西不是很多,这个工程就像胶水一样,把这两个插件粘结了起来。scrapy-redis的官方文档写的比较简洁,没有提及其运行原理,所以如果想全面的理解分布式爬虫的运行原理,还是得看scrapy-redis的源代码才行。负责根据setting中配置实例化redis连接。被dupefilter和scheduler调用,总之涉及到redis存取的都要使用到这个模块。

2023-11-04 23:04:27 833

原创 高级深入--day44

,但是Scrapy多个spider不能共享待爬取队列Scrapy queue, 即Scrapy本身不支持爬虫分布式,scrapy-redis 的解决是把这个Scrapy queue换成redis数据库(也是指redis队列),从同一个redis-server存放要爬取的request,便能让多个spider去同一个数据库里读取。Scrapy 是一个通用的爬虫框架,但是不支持分布式,Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了一些以redis为基础的组件(仅有组件)。

2023-10-29 23:09:12 1124

原创 高级深入--day43

在“代理”后面的输入框选择“手动”,在“代理服务器主机名”后面的输入框输入电脑的ip地址,在“代理服务器端口”后面的输入框输入8888,然后点击“保存”按钮。打开Android设备的“设置”->“WLAN”,找到你要连接的网络,在上面长按,然后选择“修改网络”,弹出网络设置对话框,然后勾选“显示高级选项”。启动Android设备中的浏览器,访问网页即可在Fiddler中可以看到完成的请求和响应数据。里设置允许连接远程计算机,确认后重新启动Fiddler。代理地址(电脑IP):192.168.xx.xxx。

2023-10-29 23:08:04 256

原创 高级深入--day42

首先发送登录页面的get请求,获取到页面里的登录必须的参数(比如说zhihu登陆界面的 _xsrf)只要是需要提供post数据的,就可以用这种方法。如果实在没办法了,可以用这种方法模拟登录,虽然麻烦一点,但是成功率100%然后和账户密码一起post到服务器,登录成功。

2023-10-29 23:06:49 366

原创 高级深入--day41

的电影数据,并保存在MongoDB中。爬取豆瓣电影top250。

2023-10-26 22:46:16 399

原创 高级深入--day40

【代码】高级深入--day40。

2023-10-26 22:45:03 151

原创 高级深入--day39

爬取新浪网导航页所有下所有大类、小类、小类里的子链接,以及子链接页面的新闻内容。

2023-10-24 21:37:26 836

原创 高级深入--day38

爬取投诉帖子的编号、帖子的url、帖子的标题,和帖子里的内容。

2023-10-24 21:36:03 235

原创 高级深入--day37

【代码】高级深入--day37。

2023-10-19 18:49:18 504

原创 高级深入--day36

Scrapy设置(settings)提供了定制Scrapy组件的方法。可以控制包括核心(core),插件(extension),pipeline及spider组件。该字典默认为空,值(value)任意,不过值(value)习惯设置在0-1000范围内,值越小优先级越高。Item Processor(即 Item Pipeline) 同时处理(每个response的)item的最大值。可选的级别有: CRITICAL、 ERROR、WARNING、INFO、DEBUG。下载器超时时间(单位: 秒)。

2023-10-19 18:48:04 376

原创 高级深入--day35

如果其返回 None ,Scrapy将继续处理该request,执行其他的中间件的相应方法,直到合适的下载器处理函数(download handler)被调用, 该request被执行(其response被下载)。如果其返回一个 Response (可以与传入的response相同,也可以是全新的对象), 该response会被在链中的其他中间件的 process_response() 方法处理。如果其返回一个 Request 对象,则中间件链停止, 返回的request会被重新调度下载。

2023-10-18 17:56:25 411

原创 高级深入--day34

使用Scrapy抓取网页时,如果想要预填充或重写像用户名、用户密码这些表单字段, 可以使用 FormRequest.from_response() 方法实现。通常网站通过 实现对某些表单字段(如数据或是登录界面中的认证令牌等)的预填充。如果希望程序执行一开始就发送POST请求,可以重写Spider类的。使用FormRequest.from_response()方法。方法,并且不再调用start_urls里的url。方法发送POST请求。

2023-10-18 17:54:42 354

原创 高级深入--day33

它是Spider的派生类,Spider类的设计原则是只爬取start_url列表中的网页,而CrawlSpider类定义了一些规则(rule)来提供跟进link的方便的机制,从爬取的网页中获取link并继续爬取的工作更适合。在rules中包含一个或多个Rule对象,每个Rule对爬取网站的动作定义了某种特定操作,比如提取当前相应内容里的特定链接,是否对提取的链接跟进爬取,对提交的请求设置回调函数等。:指定该spider中哪个的函数将会被调用,从link_extractor中获取到链接列表时将会调用该函数。

2023-10-17 19:15:28 285

原创 高级深入--day32

Item传给Item pipline持久化 , 而Requests交由Scrapy下载,并由指定的回调函数处理(默认parse()),一直进行循环,直到处理完所有的数据为止。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。该对象包含了spider用于爬取(默认实现是使用 start_urls 的url)的第一个Request。当请求url返回网页没有指定回调函数时,默认的Request对象回调函数。包含了spider允许爬取的域名(domain)的列表,可选。

2023-10-17 19:13:45 316

原创 高级深入--day31

分配给每个类的整型值,确定了他们运行的顺序,item按数字从低到高的顺序,通过pipeline,通常将这些数字定义在0-1000范围内(0-1000随意设置,数值越低,组件的优先级越高)以下pipeline将所有(从所有'spider'中)爬取到的item,存储到一个独立地items.json 文件,每行包含一个序列化为'JSON'格式的'item'。当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item。

2023-10-11 16:29:52 288

原创 高级深入--day30

Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据。Scrapy Shell根据下载的页面会自动创建一些方便使用的对象,例如 Response 对象,以及。时, 将获取到一个response 初始化的类 Selector 的对象,此时可以通过使用。当shell载入后,将得到一个包含response数据的本地 response 变量,输入。将输出response的包体,输出。

2023-10-11 16:28:41 144

原创 高级深入--day29

Item 定义结构化数据字段,用来保存爬取到的数据,有点像Python中的dict,但是提供了一些额外的保护减少错误。要建立一个Spider, 你必须用scrapy.Spider类创建一个子类,并确定了三个强制的属性 和 一个方法。是的,就是 itcast,看上面代码,它是 ItcastSpider 类的 name 属性,也就是使用。是搜索的域名范围,也就是爬虫的约束区域,规定爬虫只爬取这个域名下的网页,不存在的URL会被忽略。:这个爬虫的识别名称,必须是唯一的,在不同的爬虫必须定义不同的名字。

2023-10-09 18:26:36 455

原创 高级深入--day28

Scrapy 0.25 文档 — Scrapy 0.24.1 文档。

2023-10-09 18:23:16 187

原创 三级网络技术总结

BGP是边界网关协议,而不是外部网关协议(是不同自治系统的路由器之间的协议)一个BGP发言人使用TCP(不是UDP)与其他自治系统的BGP发言人交换路由信息自治系统为单位结点数不小于自治系统BGP-4路由向量协议RIP距离向量协议update一个报文只能增加一条路由open分组周期性keepalive打开(open)、更新(update)、保活(keepalive)和通知(notification)

2023-09-22 21:47:39 323 1

手机编程App安卓版本

用于编写HTML、python等语言

2025-06-17

空空如也

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

TA关注的人

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