自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Day62 | Java IO之NIO三件套--通道和缓冲区(上)

本文介绍了Java NIO模块的核心组件Buffer和Channel。NIO是Java 1.4引入的高性能I/O解决方案,相比BIO提供了更精细的控制。Buffer通过capacity、limit、position和mark四个指针实现了对内存数据的精准管理,支持读/写模式切换、标记重置等操作。Channel作为数据传输管道,与Buffer配合使用,支持双向操作。文章详细讲解了FileChannel和网络Channel的实现原理和使用场景。

2025-11-19 17:12:04 977

原创 Day61 | Java IO之序列化

本文介绍了Java序列化和反序列化机制,主要包含三部分内容:首先讲解了Serializable接口的作用,说明只有实现该接口的类才能被序列化;其次详细演示了使用ObjectOutputStream和ObjectInputStream进行对象序列化与反序列化的过程,并解释了transient关键字和serialVersionUID的作用;最后指出了Java原生序列化的安全隐患,比如可能存在的反序列化漏洞问题。文章通过具体代码示例,帮助开发者理解Java对象持久化的核心机制。

2025-11-18 11:19:07 612

原创 Day60 | Java IO之字符流详解

本文介绍了字符流的概念及其与字节流的区别,重点讲解了字符编码和解码机制。文章首先阐述了Unicode字符集和UTF-8/GBK等编码方式的原理,分析了乱码和BOM问题的成因。然后详细讲解了Java中的字符流体系,包括InputStreamReader/OutputStreamWriter的编解码功能以及BufferedReader/BufferedWriter的性能优化作用。

2025-11-13 18:03:58 562

原创 Day59 | Java I/O之字节流解读

本文详细介绍了Java I/O体系中的基础类InputStream和OutputStream的核心API及使用方法。InputStream定义了字节输入流的核心方法read()和read(byte[]),OutputStream则提供了write()系列方法实现字节输出。文章通过实例解析了字节流处理数据的底层原理,包括UTF-8编码规则和字节转字符的过程。

2025-11-12 12:03:47 767

原创 Day58 | Java IO模块概览

本文介绍了Java中IO模块的演进历程,从BIO(同步阻塞IO)到NIO(非阻塞IO)再到AIO(异步IO)。BIO采用一个连接一个线程的模式,在高并发场景下资源消耗大;NIO通过Channel、Buffer和Selector组件实现非阻塞,避免了线程阻塞问题;AIO则更进一步实现了操作系统级别的异步IO。尽管AIO在概念上更先进,但由于Linux底层实现仍基于NIO,在实际应用中未被广泛采用。理解这些IO模型的核心概念和演进路线,对后续学习NIO细节和Netty框架有重要帮助。

2025-11-10 15:02:29 935

原创 Day57 | 一文详解ThreadLocal

本文深入解析了Java中的ThreadLocal机制,其核心是采用空间换时间的思路,通过为每个线程创建变量的独立副本实现线程隔离。作者详细讲解了ThreadLocal的API使用、底层原理和内存泄露问题:1)数据实际存储在Thread内部的ThreadLocalMap中;2)Entry采用弱引用键避免内存泄漏;3)在线程池环境下必须使用remove()及时清理。文章通过生动的比喻和示例代码,强调了ThreadLocal的正确使用模式(try-finally+remove)

2025-11-04 14:13:14 1092

原创 Day16:Python实现一个汇率查询器

本文介绍了如何用Python开发一个自动查询汇率的机器人程序。首先利用requests模块从免费API获取汇率数据,然后逐步优化程序功能:第一版实现基础查询功能;第二版添加循环查询机制,使用time模块定时执行;第三版引入schedule库实现更灵活的定时任务调度。文章详细讲解了代码实现逻辑,包括API调用、数据解析和定时任务设置方法,最终构建了一个能7x24小时运行的汇率监控程序。

2025-11-03 16:47:34 904

原创 Day56 | J.U.C工具-Phaser详解

Phaser是J.U.C提供的并发工具,兼具CountDownLatch和CyclicBarrier特性,支持动态调整参与方数量。核心特点包括:1)可重用;2)运行时可增减参与方(register/deregister);3)支持分阶段(phase)自动推进;4)可构建分层结构降低竞争;5)提供终止机制。通过arriveAndAwaitAdvance()实现同步,onAdvance()控制阶段行为。相比固定数量的同步器,Phaser更适用于参与方数量动态变化的复杂场景。

2025-11-03 14:33:48 1016

原创 Day55 | J.U.C工具-Exchanger详解

本文介绍了Java并发工具Exchanger的用法和实现原理。Exchanger提供了一个同步点,允许两个线程在此相遇并交换数据。文章通过"一手交钱一手交货"和双缓冲区两个示例,展示了Exchanger的实际应用场景,并对比了其与BlockingQueue在批量数据交换场景下的性能优势。从源码层面分析了Exchanger的slot+arena两级架构设计:slot处理低并发快速交换,arena通过分段数组解决高竞争问题。

2025-11-02 09:00:00 849

原创 Day54 | J.U.C工具-Semaphore详解

本文介绍了Java并发工具Semaphore(信号量)的工作原理和应用场景。Semaphore通过许可证机制控制线程对共享资源的并发访问,初始化时指定许可证数量,线程通过acquire()获取许可证,release()释放许可证。文章通过停车场和数据库连接池的类比案例,演示了Semaphore在限流和资源管理中的典型应用,并分析了其底层基于AQS的实现原理。与锁不同,Semaphore允许多个线程同时访问资源,但限制总数,适用于资源池化、流量控制等并发场景。

2025-11-01 08:00:00 664

原创 我第一次意识到自己随时能被替换,是在带一个22岁新人之后

一位自诩靠谱的十年程序员在带教22岁应届生时遭遇职业危机。

2025-10-31 09:39:53 356

原创 Day53 | J.U.C工具-CyclicBarrier详解

CyclicBarrier是Java并发包中的重要同步工具,允许多个线程在到达共同屏障点(barrier)时互相等待,直到所有线程都到达后才一起继续执行。与CountDownLatch不同,CyclicBarrier支持可重用性和屏障动作(barrierAction),适用于循环任务和多阶段同步场景。文章通过登山集合的比喻解释了其工作原理,并提供了并行计算、游戏准备和并发测试等典型应用场景的代码示例。

2025-10-31 07:45:00 805

原创 Day52 | J.U.C工具-CountDownLatch详解

本文深入讲解了J.U.C中的CountDownLatch同步工具。CountDownLatch通过倒计时计数器实现线程协调,允许一个或多个线程等待其他线程完成任务。核心方法包括:构造初始化计数器、countDown()减计数、await()阻塞等待计数归零。文章通过赛跑发令、任务并行计算、服务初始化、并发测试等典型场景演示其应用,并对比Thread.join(),突出其线程间任务协调的细粒度优势。同时指出其不可重用性及异常处理注意事项,底层基于AQS共享模式实现。

2025-10-30 07:45:00 1949

原创 Day15:Python实现实时天气爬虫

本文介绍了如何使用Python的requests库构建一个简单的天气预报爬虫工具。文章首先阐述了网络爬虫的必要性,指出互联网是最丰富的数据源。然后详细讲解了requests库的安装和使用方法,推荐通过API而非网页爬取来获取结构化数据。以wttr.in天气API为例,演示了如何发送HTTP请求、解析返回的JSON数据,并逐步优化代码:从基础数据获取到解析JSON格式,再到添加用户输入城市查询功能,最后将查询结果写入本地日志文件。

2025-10-30 07:45:00 1034

原创 Day14:Python实现简单的账单分析机器人

这篇文章演示了如何用Python的pandas和matplotlib库将零散的消费记录转化为直观的分类统计柱状图。通过Excel记账数据,先进行分组汇总计算各消费类别总金额,然后生成基础柱状图。最终版本优化了图表效果:按金额降序排列柱子,添加顶部金额标签,调整颜色为天蓝色,并增加了网格线。完整代码可直接运行,输出包括控制台汇总结果和保存的图表图片。这个方法比传统记账APP提供更清晰直观的消费结构分析。

2025-10-29 11:57:32 777

原创 Day51 | J.U.C集合-BlockingQueue详解

本文分析了BlockingQueue阻塞队列接口及其主要实现类。BlockingQueue提供了插入、移除和检查操作的四种方法,分别对应不同行为(抛出异常、返回特殊值、阻塞等待、超时等待)。重点介绍了ArrayBlockingQueue(有界数组)、LinkedBlockingQueue(高吞吐链表)、PriorityBlockingQueue(优先级调度)、SynchronousQueue(直接传递)和DelayQueue(延迟机制)五种实现类,详细说明了它们的数据结构、锁机制和适用场景。

2025-10-29 08:00:00 884

原创 Day13:Python实现我们的第一张图表

本文介绍了如何用Python的Matplotlib库将Excel数据自动转换为可视化图表。通过一个阅读记录分析案例,展示了从基础柱状图绘制到图表美化的完整流程。文章详细讲解了代码实现步骤,包括数据读取、图表绘制、标题添加、坐标轴调整、网格线设置等核心功能,最终生成可直接用于汇报的专业图表。该工具能将枯燥的数据转化为直观的视觉呈现,提升数据分析效率和报告质量。

2025-10-28 07:00:00 710

原创 Day50 | J.U.C集合-ConcurrentLinkedQueue详解

本文深入解析了ConcurrentLinkedQueue这一线程安全队列的实现原理和应用场景。文章详细分析了其核心结构(head/tail指针和Node内部类)、构造方法以及关键操作(offer/poll/peek),重点阐述了其独特的延迟更新tail指针策略和失效节点处理机制。通过与LinkedBlockingQueue的对比,清晰区分了有界/无界、阻塞/非阻塞、有锁/无锁等核心概念。文章还通过图示生动展示了并发场景下队列的动态变化过程,帮助读者深入理解这一高性能并发容器的设计精髓。

2025-10-28 07:00:00 1126

原创 Day49 | J.U.C集合-CopyOnWriteArrayList详解

本文深入解析了CopyOnWriteArrayList的实现原理与应用场景。作为ArrayList的线程安全替代品,其核心采用写时复制机制:读操作直接访问数组无需加锁,写操作则通过加锁复制新数组完成修改。文章通过源码分析展示了其内部结构、读写方法的实现细节,特别指出写操作会导致数组复制,因此适用于读多写少场景(如配置缓存、静态数据),但不适合大数据量或实时性要求高的场景。最后对比了ArrayList与CopyOnWriteArrayList在一致性、性能等方面的差异,强调后者在高并发读场景下的优势。

2025-10-27 09:11:06 1350

原创 Day12:Python实现邮件自动发送

本文介绍了如何用Python自动发送邮件及附件,主要包含以下内容: 获取邮箱授权码:需要在邮箱设置中开启SMTP服务并生成16位授权码,这是发送邮件的前提 基础邮件发送: 使用smtplib和email模块 通过SMTP_SSL建立安全连接 设置邮件主题、收发人、内容等基本信息 带附件发送: 以二进制模式读取附件文件 使用add_attachment方法添加附件 指定MIME类型(如application/octet-stream)

2025-10-27 09:04:37 981

原创 Day48 | J.U.C集合-ConcurrentHashMap详解

本文深入剖析了ConcurrentHashMap的核心原理。从JDK1.7的分段锁机制到JDK1.8的CAS+synchronized实现,详细介绍了其内部结构(Node数组、红黑树转换等)和关键操作(初始化、put、get)。重点分析了扩容机制,包括渐进式迁移和多线程协作扩容策略。通过源码解读,展示了如何实现高并发下的高效读写操作,是无锁读、细粒度锁写的典型实现。

2025-10-25 09:00:00 905

原创 Day11:Python实现Word模版自动生成

本文介绍如何利用Python的docxtpl和pandas模块实现Word文档的批量自动生成。首先准备一个Word模板文件,其中包含用双大括号标记的占位符(如{{姓名}}),再准备一个包含数据的Excel表格。通过Python程序读取Excel数据,将每行数据填充到Word模板中,自动生成独立的文档文件。文章详细讲解了单份文档生成的实现过程,并在此基础上扩展为批量处理功能,通过循环遍历Excel所有行数据,为每条记录生成对应的Word文件。

2025-10-25 09:00:00 695

原创 Day10:Python实现Excel自动汇总

本文介绍了一个使用Python和Pandas自动合并Excel销售数据的实用工具。通过几个步骤的开发演化:从最初手动指定文件名合并两个文件,到利用glob模块自动扫描文件夹合并任意数量文件,再到最终实现销售数据的自动汇总分析。工具核心功能包括:读取多个Excel文件、合并数据、计算总销售额、生成分销售人员的业绩报表等。文章详细讲解了Pandas的基本使用方法,包括DataFrame的创建、合并、保存等操作,并提供了完整的代码示例。

2025-10-24 09:02:13 958

原创 Day47 | J.U.C中AQS的完全指南(补充)

本文深入解析AQS的条件队列与中断响应机制。条件队列部分详细剖析了await()的三步流程:释放锁入队、循环等待检查状态、重新获取锁;以及signal()如何将节点从条件队列转移到同步队列。中断机制部分重点解读了acquireInterruptibly()的实现原理,包括中断检测点和取消获取锁的善后处理。全文通过源码分析揭示了AQS如何实现线程在同步队列与条件队列间的状态转换,以及不同中断响应方式的底层逻辑,为理解基于AQS的同步工具提供了理论基础。

2025-10-24 08:56:03 657

原创 Day9:Python实现个人通讯录

本文介绍了一个简易通讯录工具的Python实现,主要功能包括添加联系人和查看所有联系人。通过使用CSV文件存储数据,程序实现了数据的持久化存储。文章详细讲解了文件操作的核心技能,包括安全打开文件的with语句、读写模式选择、编码格式处理等关键技术点。该工具结构简单但功能完整,可作为学习Python文件操作的入门项目。版本迭代过程展示了从单一功能到完整菜单系统的开发思路,适合编程初学者参考学习。

2025-10-23 09:26:31 668

原创 Day46 | J.U.C中AQS的完全指南(下)

本文深入分析了AQS在独占锁模式下的动态工作流程,以ReentrantLock非公平锁为例,详细讲解了线程获取和释放锁的完整过程。在获取锁时,线程会先尝试插队获取,失败后进入等待队列,通过自旋优化和LockSupport.park()实现阻塞;释放锁时,通过tryRelease检查状态,并通过signalNext唤醒队列中的下一个线程。文章重点剖析了acquire()和release()方法的内部实现,包括状态判断、节点入队、自旋优化、线程阻塞与唤醒等核心机制

2025-10-23 09:22:05 1208

原创 Day8:Python实现批量文件分类

本文介绍了一个自动整理文件的Python脚本开发过程。针对常见的文件混乱问题,作者通过三版代码迭代实现了从简单到完善的解决方案:1)基础版仅整理图片文件;2)进阶版通过字典规则实现多类型文件分类;3)终极版增加"其他"类别处理未定义文件。代码使用了os和shutil模块的核心功能,重点讲解了文件操作、字典遍历等关键技术点。该脚本能自动创建分类文件夹并按规则移动文件,有效解决了桌面和下载文件夹杂乱无章的问题。

2025-10-22 11:46:35 1023

原创 Day45 | J.U.C中AQS的完全指南(上)

本文深入解析了AQS(AbstractQueuedSynchronizer)的核心设计和工作原理。AQS是构建锁和同步器的框架,采用模板方法模式,通过同步状态(state变量)和等待队列(CLH变体的双向链表)实现线程调度。文章详细介绍了AQS的核心组件:Node内部类、ConditionObject条件队列,并通过生产者-消费者模型展示了await()/signal()的实际应用。

2025-10-22 09:27:59 922

原创 Day7:Python实现批量文件重命名

本文介绍了一个Python批量文件重命名工具的开发过程。该工具主要解决日常文件命名混乱问题,支持添加前缀、序号、修改扩展名等功能。文章从基础版本逐步迭代到通用版本,讲解了使用os模块进行文件操作的关键技术点,包括路径拼接、文件过滤、重命名等。最终版本增加了预览模式、扩展名过滤和防冲突机制,使工具更加实用可靠。文章还提供了常见错误处理方法和进一步改进思路,如支持子目录递归和撤销功能。整个开发过程展示了如何通过Python快速构建实用小工具的思路和方法。

2025-10-21 09:31:57 1108

原创 Day44 | J.U.C中的LockSupport详解

本文深入解析Java并发包中的LockSupport工具类,它是J.U.C核心的底层线程阻塞/唤醒机制。LockSupport通过"许可"机制(park/unpark)解决了传统wait/notify的信号丢失问题,支持先unpark后park的灵活操作。文章详细剖析了其核心原理:基于Unsafe类调用操作系统原语实现线程调度,并演示了三种典型使用场景(基本阻塞唤醒、先unpark后park、中断响应)。

2025-10-21 09:20:22 832

原创 Day43 | J.U.C中的原子类

本文深入探讨了Java中的原子类及其应用场景。原子类基于CAS机制和volatile特性,实现了线程安全的非阻塞更新。文章首先介绍了原子性和Java内存模型等前置知识,然后详细分析了单值原子变量、数组原子类、引用+元信息(解决ABA问题)以及分段累加器四大类应用。通过代码示例对比了普通变量和原子变量的线程安全性差异,并特别展示了在高并发场景下LongAdder相比AtomicLong的性能优势。最后总结了不同原子类的适用场景和特性差异,帮助开发者根据实际需求选择合适的并发控制工具。

2025-10-20 09:25:28 896

原创 Day6:Python实现随机密码生成器

本文介绍了如何用Python编写一个随机密码生成器。首先分析了手动创建密码的痛点,然后逐步实现基础功能:从固定长度的随机密码,到可自定义长度,再到支持特殊符号。重点讲解了random、string模块和生成器表达式的使用,并增加了将密码复制到剪贴板的功能。最终实现了一个包含字母、数字和可选符号的密码生成工具,能自动复制结果,方便用户直接粘贴使用。通过这个项目,读者可以掌握随机数生成、字符串处理和第三方库pyperclip等知识点。

2025-10-20 09:15:29 768

原创 Day5:Python实现简易计算器

本文介绍了如何将一个简单的四则运算工具升级为支持连续计算的命令行计算器。主要改进包括:1. 使用while循环实现连续计算功能;2. 通过try/except实现错误输入的友好提示;3. 支持输入exit退出程序。进阶版本还增加了记忆功能,可以记住上次计算结果,支持连续运算。文章详细讲解了代码实现中的关键点,包括循环结构、异常处理、字符串处理等编程概念,并提供了完整代码示例。这个计算器不仅能处理基本运算,还能优雅地处理错误输入,为用户提供更好的交互体验。

2025-10-18 09:39:41 1108

原创 Day42 | 关于Java中J.U.C的概述

本文概述了Java并发工具包J.U.C(java.util.concurrent)的核心组件,包括锁机制(ReentrantLock、ReadWriteLock等)、线程控制工具(ThreadFactory、Executor框架)、原子变量类(AtomicInteger等)、并发容器(ConcurrentHashMap等)和同步工具(CountDownLatch等)。文章通过思维导图展示了J.U.C的完整知识体系,并简要说明了各组件的主要功能和应用场景,为后续深入探讨Java并发编程的基础设施提供了框架指引

2025-10-18 09:33:41 1171

原创 Day4:用Python实现一个四则运算小工具

本文介绍了一个面向非程序员群体的Python四则运算计算器开发教程,从基础版本到优化版本逐步实现。文章避开了传统语法讲解,聚焦实际问题解决,通过变量、输入输出、运算符和条件判断等核心概念,帮助用户快速上手Python。教程包含代码示例、优化思路和进阶挑战,强调动手实践,让读者体验用代码解决问题的成就感。适合上班族、学生等零基础人群学习Python实用技能。

2025-10-17 13:48:55 1013

原创 Day3:Python开发环境搭建

本文介绍了Python开发环境的搭建步骤。首先需要从官网下载独立安装程序安装Python解释器,推荐初学者使用Standalone Installer。接着介绍了PyCharm IDE的安装方法,重点讲解了虚拟环境的创建和使用:通过venv工具为项目创建隔离环境,可以选择Project venv、Base conda或Custom environment三种方式。文章还演示了如何在虚拟环境中通过终端或图形界面安装第三方库(如tqdm),并展示了创建和运行第一个Python程序。

2025-10-17 09:24:23 1371

原创 Day41 | Java中的锁分类

本文系统梳理了Java中的锁机制,从多维度进行分类:1)乐观锁与悲观锁(CAS与synchronized);2)互斥锁与共享锁(ReentrantLock与ReadWriteLock);3)公平锁与非公平锁(FIFO与插队机制);4)可重入锁与不可重入锁(计数器实现);5)自旋锁与阻塞锁(CPU占用差异)。文章通过代码示例详解各类锁的实现原理及适用场景,强调合理选择锁策略对多线程编程的重要性,为后续JUC学习奠定基础。

2025-10-17 09:19:30 1174

原创 Day2:Python程序是怎么跑起来的?

Python程序执行机制解析:Python采用解释器与编译器的混合方式运行代码。程序首先被编译为平台无关的字节码(.pyc文件),再由Python虚拟机(PVM)解释执行,实现跨平台特性。这种方式既保留了开发灵活性(解释器特性),又通过字节码缓存提升运行效率。主流CPython解释器外,还存在Jython、PyPy等特色实现。核心优势在于将高级语言转化为中间字节码,由PVM完成最终执行,平衡了开发便利性与运行性能。

2025-10-16 11:43:09 730

原创 Day40 | Java中的ReadWriteLock读写锁

本文介绍了Java中的读写锁ReadWriteLock及其实现类ReentrantReadWriteLock。它通过区分读锁(共享锁)和写锁(互斥锁)来解决读多写少场景下的性能问题,遵循"读读共享、读写互斥、写写互斥"原则。文章通过示例展示了读写锁的使用方法,分析了其内部实现原理(32位state变量记录状态)和公平策略(公平/非公平模式),并解释了锁降级的应用场景和不支持锁升级的原因。

2025-10-16 09:16:06 1251

原创 Day39 | Java线程通信的两种方式

本文详细讲解了Java中线程协作的两种方式:1)使用synchronized配合Object的wait/notify机制,通过生产者-消费者模型演示了线程如何在共享资源上协作;2)使用ReentrantLock配合Condition接口,通过创建多个等待队列实现更精细化的线程控制。两种方式都能实现线程间的通信与协调,但Condition提供了更灵活的等待/唤醒机制,可以精准控制特定条件下的线程唤醒,减少不必要的上下文切换。文章通过包子铺案例对比了两种实现方式的代码差异,帮助读者理解多线程协作的核心机制。

2025-10-15 09:12:38 978

空空如也

空空如也

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

TA关注的人

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