自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Git介绍与基本使用

Git是目前世界上最先进的的分布式控制系统(没有之一)。很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!

2025-03-12 14:53:41 747

原创 Java基础系列:深入解析反射机制与代理模式及避坑指南

反射的本质:突破静态类型系统的限制,在运行时动态操作类和对象,为框架开发提供基础能力,但需要谨慎处理安全和性能问题。代理模式的价值:通过中间层控制对象访问,实现功能增强和系统解耦,是现代框架设计的核心模式之一。避坑关键点反射操作需处理安全检查异常(SecurityException)动态代理方法调用注意异常传播CGLIB无法代理final方法和类代理对象的equals/hashCode需特殊处理反射性能优化依赖元数据缓存建议在IDE中开启以下检测:反射API使用警告检查代理类生成配置优化。

2025-03-09 20:11:11 1202

原创 Java基础系列:深入解析抽象类、接口与Lambda表达式及避坑指南

抽象类核心价值:在继承体系中提供代码复用和扩展的基础结构,通过定义部分实现来规范子类行为。接口进化意义:从纯粹的行为契约发展为支持实现细节的描述工具,通过默认方法实现接口的平滑演进。Lambda表达式革命:通过简洁的语法实现行为参数化,结合函数式接口推动Java函数式编程能力。避坑关键点抽象类构造方法避免调用可覆盖方法接口默认方法冲突需显式解决Lambda捕获的变量必须等效final方法引用需注意重载歧义函数式接口必须严格单抽象方法正确运用这些特性需要深入理解其设计哲学和实现机制。

2025-03-09 19:49:16 987

原创 Java基础系列:深入解析Object类与面向对象编程核心机制

Object类的核心地位:作为所有类的超类,其方法规范是Java类型体系的基石,正确理解和实现这些方法是编写健壮Java程序的前提。面向对象本质:通过封装隐藏实现细节,利用继承建立类型层次,借助多态实现灵活扩展,三者协同构建可维护、可扩展的软件系统。避坑关键点equals/hashCode必须成对重写clone方法需谨慎处理对象引用构造方法中避免调用可覆盖方法多态行为受限于方法可见性接口默认方法需解决冲突掌握这些核心机制和最佳实践,能够显著提升面向对象设计能力。

2025-03-09 19:25:29 639

原创 Java基础系列:深入解析final与static关键字的奥秘与避坑指南

final设计哲学:通过不可变性保障程序稳定性的三重机制(常量不可修改、方法不可重写、类不可继承),在并发编程中构建安全防线,同时为JVM优化提供基础。static核心价值:实现类级别资源共享,优化内存使用效率,但需警惕生命周期管理问题,特别注意静态成员的初始化顺序和线程安全问题。避坑关键点final修饰对象时内部状态仍可变静态方法不能访问实例成员匿名内部类捕获的外部变量隐式final多线程环境共享static变量的同步控制静态代码块的执行顺序依赖声明顺序。

2025-03-09 19:08:44 784

原创 Java基础系列:深入解析String与自定义类型的不可变性设计及避坑指南

/ 引用类型需特殊处理this.x = x;this.y = y;// 防御性拷贝// 返回副本String不可变设计的本质:通过层层防御机制(final类、私有不可变数组、无状态修改方法)确保对象状态的永恒性,这种设计带来内存优化、线程安全、哈希缓存等多重优势,虽然牺牲了部分修改性能,但通过StringBuilder等配套类弥补了缺陷。自定义类型设计启示:根据业务需求选择可变性设计,值对象优先考虑不可变性,实体对象可采用可变设计。无论哪种设计,都要注意防御性编程,避免暴露内部状态。

2025-03-09 17:52:40 639

原创 Java基础系列:深入解析包装器类型与类型转换的奥秘与陷阱

包装器类型与类型转换是Java开发中的双刃剑,既提供了强大的灵活性,也暗藏诸多陷阱。关键注意点:自动装箱拆箱的性能代价与NPE风险包装类对象比较必须使用equals方法数值转换时的精度丢失与溢出问题字符串转换必须处理格式异常理解这些机制背后的原理,结合防御性编程思维,才能写出既安全又高效的Java代码。建议开发者在IDE中开启自动装箱检查(如IntelliJ的检测),从工具层面规避潜在风险。

2025-03-08 20:37:03 673

原创 Java基础系列:深入理解八大基本数据类型及避坑指南

Java作为强类型语言,提供了八种基本数据类型(Primitive Types),构成了Java程序的基石。与引用类型不同,基本类型直接存储数据值,具有固定内存空间和默认值,在内存分配和访问效率方面具有优势。

2025-03-08 20:00:07 562

原创 Java虚拟机之类加载机制

3. Shared ClassLoader:加载 Web 应用共享类(对 Tomcat 不可见)。4. Webapp ClassLoader:加载当前 Web 应用的私有类(各应用相互隔离)。掌握 JVM 类加载机制,是排查类冲突、优化应用性能的基石。父加载器无法完成时(搜索范围内无该类),子加载器才尝试加载。:理解类加载器层次、避免类冲突、合理利用自定义加载器。:同一类被不同加载器加载,或不同版本类共存。:加载子类时,父类尚未加载则会先加载父类。解析对象:类、接口、字段、方法、接口方法。

2025-03-07 19:09:44 596

原创 Java虚拟机之垃圾收集(二)

用户线程与垃圾收集线程并发运行时,对象引用关系可能动态变化(如对象被重新赋值、新对象创建),导致标记结果不准确。以标记开始时对象图的快照为基准,忽略后续删除的引用(如 G1 使用 SATB 记录引用删除)。记录并发标记过程中新增的引用关系(如 CMS 使用写屏障记录引用变化)。的情况下完成对象图的遍历,从而减少垃圾回收的停顿时间(STW)。并发标记:基于初始快照遍历对象图,忽略并发期间删除的引用。最终标记(STW):处理 SATB 队列中的引用变更记录。:短暂 STW,修正并发标记期间遗漏的引用变动。

2025-03-07 18:55:35 691

原创 Java虚拟机之垃圾收集(一)

每个对象维护一个引用计数器,被引用时计数器 +1,引用失效时 -1。:频繁 Full GC 会导致应用停顿(Stop-The-World),需谨慎使用。垃圾收集(GC)的核心是识别无用对象。无法解决循环引用问题(如对象 A 引用 B,B 也引用 A)。本地方法栈中 JNI 引用的对象(Native 方法)。Java 虚拟机内部对象(如系统类加载器、异常对象)。(STW):标记 GC Roots 直接关联对象。(STW):标记 GC Roots 直接关联对象。:熬过多次 GC 的对象难以消亡(老年代)。

2025-03-07 17:37:05 926

原创 Java虚拟机之内存分配原则

JVM 的内存分配围绕 “堆(Heap)” 展开,堆内存按对象生命周期划分为不同区域,以实现高效的内存管理和垃圾回收(GC)。:若某年龄段对象总大小 > Survivor 区的 50%,则年龄 ≥ 该值的对象直接晋升。:为每个线程在 Eden 区预先分配一小块私有内存,避免多线程竞争。- GC 后仍不足 → 尝试分配至老年代(需空间担保)。:根据业务场景调整参数,减少不必要的对象晋升和 GC 开销。:对象每经历一次 Minor GC 且存活,年龄 +1。:频繁 Full GC,老年代占用高。

2025-03-07 16:55:40 934

原创 Java虚拟机之HotSpot虚拟机对象

如果Java堆中的内存并不是规整的,已被使用的内存和空闲的内存相互交错在一起,那就没有办法简单地进行指针碰撞了,虚拟机就必须维护一个列表,记录上哪些内存块是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录,这种分配方式称为“空闲列表”(Free List)。在 64 位 JVM 中,默认开启指针压缩的情况下,对象头一般占 12 字节,普通对象的实例数据按照实际数据类型占用空间,对齐填充根据需要补充,以确保对象整体占用空间是 8 字节的倍数。:用于标记对象是否为偏向锁状态。

2025-02-28 08:49:32 793

原创 Java虚拟机之运行时数据区域

等参数信息,但经常忽略掉直接内存,使得 各个内存区域总和大于物理内存限制(包括物理的和操作系统级的限制),从而导致动态扩展时出现 OutOfMemoryError异常。堆里面的 DirectByteBuffer对象作为这块内存的引用进行操作。分区或者分页文件)大小以及处理器寻址空间的限制,一般服务器管理员配置虚拟机参数时,会根据实际内存去设置-Xmx。堆大小的限制,但是,既然是内存,则肯定还是会受到。)并不是虚拟机运行时数据区的一部分,也不是《显然,本机直接内存的分配不会受到。唯一 一个不会oom的区域。

2025-02-24 22:40:19 1008

原创 SpringBoot入门——配置文件

这些组件的属性是从对应的properties类中获取 的,这些类里面的每一个属性又是和配置文件绑定的;我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml默认使用application.properties的配置;高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置。4)、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。每一个这样的xxxAutoConfiguration类都是容器中的一个组件,都加入到容器中;

2025-02-24 15:44:22 931

原创 SpringBoot介绍与入门

简化Spring应用开发的一个框架;整个Spring技术栈的一个大整合;J2EE开发的一站式解决方案;快速创建独立运行的spring项目以及与主流框架集成使用嵌入式的Servlet容器,应用无需打成war包,内嵌TomcatStarters自动依赖和版本控制大量的自动装配,简化开发,也可以修改默认值无需配置XML无代码生成开箱即用准生产环境的运行时应用监控与云计算的天然集成。

2025-02-23 23:04:16 650

原创 Tasker介绍及使用

Tasker是一款运行在Android系统上的具有强大自动化执行任务的辅助应用程序。Tasker是一个让系统根据用户定制的”配置文件 Profiles“,在特定的”场景 Contexts“下,执行指定”任务 Tasks“的软件。它还提供“可供点击 Clickable” 或 “定时任务” 的桌面 Timer 插件 Widget。Tasker的自动化任务主要由【触发条件】和【执行任务】两部分组成。触发器:程序、时间、日期、位置、硬件/软件状态、事件、快捷方式、小工具、计时器。任务:循环、变量、操作。

2025-02-22 22:55:46 2858

原创 操作系统中的任务调度算法

先来先服务调度算法(First-Come, First-Served, FCFS)是最简单的调度算法之一。它按照任务到达的顺序进行调度,先到达的任务先执行。短作业优先调度算法(Shortest Job First, SJF)选择执行时间最短的任务优先执行。SJF可以是非抢占式的,也可以是抢占式的(称为最短剩余时间优先,SRTF)。优先级调度算法(Priority Scheduling)根据任务的优先级进行调度。优先级可以是静态的(在任务创建时确定)或动态的(根据任务的执行情况动态调整)。

2025-02-21 22:59:06 812

原创 Java爬虫之selenium(超详细)

Selenium 是一个开源的自动化测试框架,专门用于Web应用程序的测试。它支持多种编程语言,如Java、C#、Python、Ruby等,并提供了不同的工具和库来模拟用户在浏览器中的交互行为selenium的原理涉及到3个部分,分别是:浏览器、driver(一般我们都会下载driver)、client(也就是我们写的代码)client其实并不知道浏览器是怎么工作的,但是driver知道,在selenium启动以后,driver其实充当了。

2025-02-21 22:36:04 2090

原创 Spring AOP详解,Spring模拟转账,实现事务

模拟支付宝转账,张三、李四原本各有账户余额 2000 元,张三转账 500 元给李四,但转账过程中出现了异常。

2024-11-01 20:47:51 421

原创 Spring框架介绍,创建demo,IOC讲解

IOC -- Inverse of Control,控制反转,将对象的创建权力反转给Spring框架!在java当中一个类想要使用另一个类的方法,就必须在这个类当中创建这个类的对象,那么可能会出现如下情况, 比如A类当中创建着B对象,B类当中有C对象,C类当中有A对象,这个如果一个类出了问题,那么可能会导致这个框架出现问题。Spring 将创建对象的权利给了IOC,在IOC当中创建了ABC三个对象吗,那么我们我们其他的类只需要调用集合, 大大的解决了程序耦合性的问题。

2024-10-31 22:23:10 568

原创 mysql事务

undo log是mysql中比较重要的事务日志之一,顾名思义,undo log是一种用于撤销回退的日志, 在事务没提交之前,MySQL会先记录更新前的数据到 undo log日志文件里面, 当事务回滚时或者数据库崩溃时,可以利用 undo log来进行回退。可见,无论是删除还是添加,commit后都是成功的,但是另一边却还是读出原来的数据,这就是可重复读,读取的是备份数据不是真正的数据。不可重复读和脏读的区别是,脏读读取到的是一个未提交的数据,而不可重复读读取到的是前一个事务已提交的数据。

2024-10-24 22:31:10 729

空空如也

空空如也

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

TA关注的人

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