自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一套下来教你彻底学会爬虫(Selenium、Scrapy、网路数据采集)包教包会 (浩神专属笔记)

Python网络数据爬取指南 本文全面介绍了Python网络爬虫技术,涵盖从基础概念到高级应用的完整知识体系。 主要内容包括: 爬虫基础 爬虫概念及应用场景 法律合规性与Robots协议 HTTP协议基础 数据采集技术 requests库使用 代理IP设置 反爬应对策略 页面解析方法 XPath解析 CSS选择器 BeautifulSoup使用 并发处理 多线程/多进程实现 异步I/O编程 线程池/进程池应用 自动化工具 Selenium浏览器自动化 元素定位与交互 无头浏览器配置 爬虫框架 Scrapy架

2025-12-16 20:53:06 2068

原创 python 之循环结构(四)

构造了一个条件恒成立的循环,也就意味着如果不做特殊处理,循环是不会结束的,这就是我们常说的“死循环”。只能终止它所在的那个循环,这一点在使用嵌套循环结构时需要引起注意,后面我们会讲到什么是嵌套的循环结构。上面的这个range(x, y, z),这个z表示步长,也就是每次循环,这个x会执行:x = x + z。”你拍了一下妹纸的小头头。语句下方保持相同缩进的代码块)中的语句就会被重复执行,当表达式的值为。我们在写程序的时候,极有可能遇到需要重复执行某条或某些指令的场景。关键字,它的作用是终止循环结构的执行。

2025-11-21 03:54:40 73

原创 Java面向对象 之包(二)

java.util和java.util.zip是不同的包,两者没有任何继承关系。注意:自动导入的是java.lang包,但类似java.lang.reflect这些包仍需要手动导入。在 Java 虚拟机执行的时候,JVM 只看完整类名,因此,只要包名不同,类就不同。,它使用的是默认包,非常容易引起名字冲突,因此,不推荐不写包名的做法。即所有 Java 文件对应的目录层次要和包的层次一致。文件也需要按照包结构存放。位于同一个包的类,可以访问包作用域的字段和方法。的语法,它可以导入一个类的静态字段和静态方法。

2025-11-21 01:27:58 53

原创 Java面向对象 之类和对象(一)

本文通过一个幽默的编程对话引入Java中的类和对象概念,解释了面向对象编程(OOP)与面向过程编程的区别。文章详细阐述了类的定义、new关键字创建对象的过程、对象初始化的三种方式(引用变量赋值、方法初始化、构造方法初始化),并介绍了Object类及其主要方法(如equals、toString等)。通过实例说明了多线程调度中wait/notify机制的使用,以及反射和垃圾回收相关概念。最后总结了面向对象编程的六大特性:抽象、接口、访问控制、组合、继承和多态,强调这些特性在Java编程中的重要性。全文采用生活化

2025-11-19 11:44:39 550

原创 Java 之如何拆分字符串(十五)

假如现在有这样一串字符序列“浩妹,一枚有趣的程序员”,需要按照中文逗号“,”进行拆分,这意味着第一串字符序列为逗号前面的“浩妹“,第二串字符序列为逗号后面的“一枚有趣的程序员”。“大约有 12 种英文特殊符号,如果直接拿这些特殊符号替换上面代码中的分隔符(中文逗号),这段程序在运行的时候就会出现以下提到的错误。”我依然保持着微笑继续说,“在拆分之前,要先进行检查,判断一下这串字符是否包含逗号,否则应该抛出异常。这是建立在字符串是确定的情况下,最重要的是分隔符是确定的。方法的时候,就需要使用正则表达式。

2025-11-10 11:27:19 447

原创 Java 之详解字符串拼接(十四)

方法在遇到字符串为 null 的时候,会抛出 NullPointerException,而“+”号操作符会把 null 当做是“null”字符串来处理。+ 号操作符其实被 Java 在编译的时候重新解释了,换一种说法就是,+ 号操作符是一种语法糖,让字符串的拼接变得更简便了。如果拼接的字符串是一个空字符串(""),那么 concat 的效率要更高一点,毕竟不需要。把拼接的字符串 str 复制到字符数组 buf 中,并返回新的字符串对象。的效率就会下降,因为创建的字符串对象越来越多。如果拼接的字符串非常多,

2025-11-10 11:25:33 267

原创 Java 之equals() 和 == 的区别和用法(十三)

如果对象为 String 类型,则比较两个字符串的长度是否相等,如果长度不相等,则返回 false。该版本中,String 类使用字节数组实现的,所以比较两个字符串的内容是否相等时,可以先比较字节数组的长度是否相等,不相等就直接返回 false;首先,如果两个字符串对象的可以“==”,那就直接返回 true 了,因为这种情况下,字符串内容是必然相等的。拿 String 类来说,我们在比较字符串的时候,的确只想判断它们俩的内容是相等的就可以了,并不想比较它们俩是不是同一个对象。你看,Object 类的。

2025-11-10 11:23:33 593

原创 Java 之StringBuilder、StringBuffer的区别(十二)

由于字符串是不可变的,所以遇到字符串拼接(尤其是使用 + 号操作符)的时候,就需要考量性能的问题,你不能毫无顾虑地生产太多 String 对象,对珍贵的内存造成不必要的压力。如果当前容量小于指定的容量,就会为字符序列分配一个新的内部数组。随着字符串的拼接,value 数组的长度会不断增加,因此在 StringBuilder 对象的实现中,value 数组的长度是可以动态扩展的,就像ArrayList那样。方法会检查当前字符序列中的字符是否够用,如果不够用则会进行扩容,并将指定字符串追加到字符序列的末尾。

2025-11-10 11:21:56 554

原创 Java 之详解String.intern()方法(十一)

方法,该方法会从字符串常量池中查找“二哥三妹”这个对象是否存在,此时不存在的,但堆中已经存在了,所以字符串常量池中保存的是堆中这个“二哥三妹”对象的引用,也就是说,s2 和 s1 的引用地址是相同的,所以输出的结果为 true。第一行代码,会在字符串常量池中创建两个对象,一个是"浩妹",一个是"好美",然后在堆中会创建两个匿名对象"浩妹"和"好美",最后还有一个"浩妹好美"的对象(稍后会解释),s1引用的是堆中的"浩妹好美"这个对象。“好是好,但我就是看不懂!”浩妹委屈地说,“哥,还是你亲自给我讲讲吧?

2025-11-10 11:19:07 814

原创 Java 之深度了解字符串常量池(十)

我直接否定了浩妹的答案,“使用 new 关键字创建一个字符串对象时,Java 虚拟机会先在字符串常量池中查找有没有‘二哥’这个字符串对象,如果有,就不会在字符串常量池中创建‘二哥’这个对象了,直接在堆中创建一个‘二哥’的字符串对象,然后将堆中这个‘二哥’的对象地址返回赋值给变量 s。“如果没有,先在字符串常量池中创建一个‘二哥’的字符串对象,然后再在堆中创建一个‘二哥’的字符串对象,然后将堆中这个‘二哥’的字符串对象地址返回赋值给变量 s。这两行代码只会创建一个对象,就是字符串常量池中的那个。

2025-11-06 19:54:36 844

原创 Java 之解读String源码(九)

在 Latin1 编码中,每个字符使用一个 8 位(即一个字节)的编码,可以表示 256 种不同的字符,其中包括 ASCII 字符集中的所有字符,即 0x00 到 0x7F,以及其他西欧语言中的特殊字符,例如 é、ü、ñ 等等。由于String是不可变的,所以遇到字符串拼接的时候就可以考虑一下String的另外连个好兄弟,StringBuffer 和 StringBuilder, 它俩是可变的。该算法的基本思想是将字符串中的每个字符乘以一个固定的质数 31 的幂次方,并将它们相加得到哈希值。

2025-10-30 21:46:23 699

原创 python 之字符串(七)

所谓字符串,就是由零个或多个字符组成的有限序列在 Python 程序中,我们把单个或多个字符用单引号或者双引号包围起来,就可以表示一个字符串。字符串中的字符可以是特殊符号、英文字母、中文字符、日文的平假名或片假名、希腊字母、Emoji 字符(如:💩、🐷、🀄️)等。s2 = "你好,世界!

2025-10-30 21:41:57 937

原创 python 之列表(五)

当然,更为可怕的是,如果我们要掷两颗或者掷更多的筛子,然后统计每种点数出现的次数,那就需要定义更多的变量,写更多的分支结构,大家想想都会感到恶心。这个任务对大家来说应该是非常简单的,我们可以用 1 到 6 均匀分布的随机数来模拟掷色子,然后用 6 个变量分别记录每个点数出现的次数,相信通过前面的学习,大家都能比较顺利的写出下面的代码。可以产生由3个随机整数构成的列表,我们把这段代码又放在了另一个列表生成式中作为列表的元素,这样的元素一共生成5个,最终得到了一个嵌套列表。方法向空列表中追加元素的方式。

2025-10-28 20:56:40 690

原创 Java 之数组(八)

本文主要介绍了Java中数组的基础知识与操作。首先通过ArrayList源码展示了数组的实现方式,解释了数组索引从0开始的原因。详细讲解了数组的声明初始化、常用操作(访问、遍历)、与List的转换、排序查找、复制等核心用法。同时涵盖了二维数组的创建和访问,并提醒了数组越界等常见问题。文章还对比了数组与List的关系,介绍了Arrays工具类的使用技巧,为Java初学者提供了全面的数组学习指南。

2025-10-27 11:20:01 865

原创 Java 之流程控制语句(七)

do - while 和 while的区别就是,do - while 无论条件成立与否,都会执行一次do 里面的代码块,也就是说,do - while 的第一次循环不依赖于while里面的条件。当我们需要在 for 循环或者 (do)while 循环中立即跳转到下一个循环时,就可以使用 continue 关键字,通常用于跳过指定条件下的循环体,如果循环是嵌套的,仅跳过当前循环。如果为 false,就跳出循环。break 关键字是可选的,如果没有,则执行下一个 case,如果有,则跳出 switch 语句。

2025-10-22 10:50:05 955

原创 机器学习 之浅谈机器学习(一)

本文概述了机器学习的基本概念、发展历程及应用领域。人工智能自1956年诞生以来,经历了从专家系统到深度学习的演进,如今已广泛应用于医疗、金融、自动驾驶等领域。机器学习通过数据学习模式进行预测和决策,主要分为监督学习、无监督学习和强化学习等类型。文章通过一个简单的收入与网购支出关系的案例,演示了kNN算法和线性回归模型的应用,帮助读者理解机器学习的基本原理。随着计算能力的提升,机器学习技术正在深刻改变人类生活。

2025-10-21 22:33:09 865

原创 python 之运算符(二)

算术运算需要先乘除后加减,这一点跟数学课本中讲的知识没有区别,也就是说乘除法的运算优先级是高于加减法的。如果想改变算术运算的执行顺序,可以使用英文输入法状态下的圆括号(小括号),写在圆括号中的表达式会被优先执行。所谓优先级就是在一个运算的表达式中,如果出现了多个运算符,应该先执行什么再执行什么的顺序。海象运算符也是将运算符右侧的值赋值给左边的变量,与赋值运算符不同的是,运算符右侧的值也是整个表达式的值,看看下面的代码大家就明白了。赋值运算符应该是最为常见的运算符,它的作用是将右边的值赋给左边的变量。

2025-10-21 21:35:25 711

原创 python 之分支结构(三)

如果你已经习惯了这么做,可以设置你的代码编辑器自动将 1 个制表键变成 4 个空格,很多代码编辑器都支持这项功能,PyCharm 中默认也是这样设定的。Python 的官方文档在介绍这个新语法时,举了一个 HTTP 响应状态码识别的例子(根据 HTTP 响应状态输出对应的描述),非常有意思。下面用 Java 代码做了同样的事情,看不懂 Java 代码没关系,感受一下它和 Python 语法的区别就可以了。,它只能放在分支结构的最后面,如果它的后面还有其他的分支,那么这些分支将是不可达的。

2025-10-21 21:33:15 598

原创 Java 之运算符(六)

左移变大,右移变小,都以2的次方变。

2025-10-20 15:48:55 914

原创 springBoot3 实现视频的上传存在本地(ffmpeg)保证教会

本文详细介绍了大视频文件分片上传与合并的技术实现方案。系统采用预上传机制生成唯一ID,通过Redis暂存元数据减少数据库压力。前端分片上传时,后端按"日期+用户ID+上传ID"建立目录结构,确保文件唯一性。上传完成后,使用FFmpeg工具进行视频合并、格式转换和切片处理,生成TS流媒体文件。系统设计了完善的异常处理机制,包括文件大小校验、分片顺序控制、自动清理过期数据等。该方案虽功能全面,但实现复杂度较高,作者建议新手可优先考虑使用OSS等云存储服务简化开发流程。整个系统通过线程池异步处

2025-10-20 14:44:07 1560

原创 Java 之基本数据类型缓存池(五)

使用数据类型缓存池可以有效提高程序的性能和节省内存开销,但需要注意的是,在特定的业务场景下,缓存池可能会带来一些问题,例如缓存池中的对象被不同的线程同时修改,导致数据错误等问题。拿 Integer 来举例子,Integer 类内部中内置了 256 个 Integer 类型的缓存数据,当使用的数据范围在 -128~127 之间时,会直接返回常量池中数据的引用,而不是创建对象,超过这个范围时会创建新的对象。创建对象,即使值在 -128 到 127 范围内,也不会被缓存,每次都会创建新的对象。

2025-10-19 13:33:38 1108

原创 Java 之自动类型转换与强制类型转换(四)

a 和 b 都是 int 类型,于是 a+b 的和也是 int 类型,但超出了 int 的取值范围,所以会出现溢出的情况;,a 和 b 都是 int 类型,a+b 的结果也是 int 类型,但超出了 int 的取值范围,所以会出现溢出的情况;,a 和 b 都是 int 类型,所以 a+b 的结果也是 int 类型,但是 a+b 的结果超出了 int 类型的取值范围,所以会出现溢出的情况。,而 a 和 b 的值都是 1500000000,和超出了 int 类型的取值范围,所以会出现溢出的情况。

2025-10-19 12:09:44 686

原创 python 之 变量(一)

按照玛雅人的历法,2012 年是上一个所谓的“太阳纪”的最后一年,而 2013 年则是新的“太阳纪”的开始。但是,我们必须知道,计算机是使用二进制计数的,不管什么样的数据,到了计算机内存中都是以二进制形态存在的。,前者就是我们常说的内存,它是中央处理器可以直接寻址的存储空间,程序在执行的过程中,对应的数据和指令需要加载到内存中。,可以用来表示现实世界中的“是”和“否”,命题的“真”和“假”,状况的“好”与“坏”,水平的“高”与“低”等等。是两个不同的变量,这一条其实并不算规则,而是需要大家注意的地方。

2025-10-16 15:06:08 1011 1

原创 Java的基本数据类型(三)

对于 32 位得正二进制数,除去符号位,从右到左的每一位分别代表 2^0, 2^1, 2^2, ..., 2^30,这个二进制数转换为十进制就是 2^0 + 2^1 + 2^2 + ... + 2^30,也就是 2,147,483,647。一般地,指一个用小数形式表示的浮点数中,从第一个非零的数字算起的所有数字。因此, Java中的对象就放在这里,这样做的好处就是:当需要一个对象的时候,只需要通过一个new关键字写一行代码,当执行这个代码的时候,会自动在内存的堆区分配空间,这样就很灵活了。

2025-10-14 19:54:05 790 1

原创 Java 注释大讲解(二)

2)文档注释中可以嵌入一些 HTML 标记,比如说段落标记 ,超链接标记 等等,但不要使用标题标记,比如说 ,因为 javadoc 会插入自己的标题,容易发生冲突。default 和 private 修饰的字段和方法的注释将会被忽略掉。3)文档注释中可以插入一些 注解,比如说 引用其他类, 版本号, 参数标识符, 作者标识符, 已废弃标识符,等等。文档注释可以用在三个地方,类、字段和方法,用来注释它们3是来干嘛的。单行注释通常用于解释方法内的某单行代码的作用。一下是正确的且多数程序猿遵循的单行代码注释。

2025-10-14 16:25:42 172

原创 JAVA 48个关键字和2个保留字(一)

本文系统梳理了Java的48个关键字和2个保留字的用法,包括数据类型(如int、boolean)、流程控制(如if、for)、访问修饰符(如public、private)、异常处理(如try、catch)等核心语法。每个关键字都配有简明定义和典型代码示例,如abstract演示抽象类定义、synchronized展示线程同步等。文章采用对话式教学风格,通过"学长解答学妹疑问"的情境展开讲解,强调关键字的实际应用场景而非死记硬背。特别指出goto和const作为保留字在Java中的替代方案

2025-10-13 16:33:08 882

原创 SpringBoot集成MQTT客户端(百分百给你教会)

至此,springboot集成mqtt正式结束,版本呢支持 springboot2.7以上。

2025-09-03 12:16:26 2354 7

空空如也

空空如也

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

TA关注的人

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