自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

coding 1024

coding 1024

  • 博客(64)
  • 资源 (6)
  • 收藏
  • 关注

原创 Java Thread

interrupt(): 由对象调用,该对象的线程会进行线程中断(只有RUNNING状态下的线程才能中断[isinterrupt=true], 否则发生中断异常)sleep(): 线程休眠,会释放掉CPU资源给其他线程,但锁是不会释放的,线程会由RUNNING状态进入到TIMED_WAITING状态。在Hotspot的JVM中,每个线程与操作系统本地线程直接映射的;join(): 方法是进行线程同步的,暂停当前线程,等待子线程的执行,也称之为线程合并。守护线程:用来服务用户线程的线程,例如垃圾回收线程。

2026-01-25 21:29:19 370

原创 JVM与JAVA

检查类是否加载的委托过程是单向的,这个方式虽然从结构上说比较清晰,使各个classLoader的职责非常明确,但是同时会带来一个问题,即顶层的classloader无法访问底层的classloader所加载的类。加载:通过类全名获取类二进制流,并将静态的存储结构,加载到运行时数据区中的方法区(生成class类对象),加载的来源常见有本地文件,网络流,压缩包,动态代理等等。类加载子系统---->程序计数器--->虚拟机栈--->本地方法栈--->Heap堆--->方法区--->String对象。

2026-01-24 14:45:23 695

原创 MySQL多版本管理MVCC

读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。不同事务或相同事务对同一条记录进行修改,会导致该记录的undolog生成一条记录版本链表,链表的头部是最新的旧记录,链表尾部是最早的旧记录。简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。max_trx_id:预分配事务ID,当前最大事务ID+1(因为事务的ID是自增的)开启事务后,另外的事务更新、并且提交后,在事务中仍然读取不到另外事务更新的内容。

2026-01-24 14:32:36 514

原创 MAT(memory analyzer tool)主要功能

Shallow Heap代表一个对象结构自身所占用的内存大小,如java.util.ArrayList对象的Shallow Heap包含8字节的对象头、8字节的对象数组属性elementData引用、4字节的size属性、4字节的modcount属性,Shallow Heap又叫浅堆。Retained Heap是一个对象被GC回收后,可释放的内存大小,等于释放对象的Retained Set中所有对象的Shallow Heap的和,Retained Heap又叫深堆。

2026-01-12 22:21:51 245

原创 MySQL的逻辑存储结构

Change Buffer:更改缓冲区(针对于非唯一二级索引页),在执行DML语句时,如果这些数据Page没有在Buffer Pool中,不会直接操作磁盘,而会将数据变更存在更改缓冲区Change Buffer中,在未来数据被读取时,再将数据合并恢复到Buffer Pool中,再将合并后的数据刷新到磁盘中。段用来管理多个区(extent)。Log Buffer:日志缓冲区,用来保存要写入到磁盘中的log日志数据(redo log、undo log),默认大小为16MB,日志缓冲区的日志会定期刷新到磁盘中。

2026-01-10 15:53:59 725

原创 MySQL的锁(行锁)

InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。InnoDB的行锁是针对于索引加的锁,不通过索引条件检索数据,那么InnoDB将对表中的所有记录加锁,此时就会升级为表锁。行级锁是操作锁住对应的行数据,锁定粒度最小,发生锁冲突的概率最低,分为行锁、间隙锁、临键锁。表级锁是操作锁住整张表,锁定粒度大,发生锁冲突的概率高,分为表锁、元数据锁,意向锁。行级锁,每次操作锁住对应的行数据。(1)索引上的等值查询(唯一索引),给不存在的记录加锁时,优化为间隙锁。

2026-01-07 22:31:53 455 1

原创 MySQL的锁-全局锁及表锁

当对表进行select, insert, update, delete, select ... for update时, MDL加的是shared_read, shared_write锁;MDL加锁过程是系统自动控制,无需显式使用,在访问一张表的时候会自动加上. MDL锁主要作用是维护表元数据的数据一致性, 在表上有活动事务的时候,不可以对元数据进行写入操作.为了避免DML在执行时, 加的行锁与表锁的冲突, 在InnoDB中引入了意向锁, 使得表锁不用检查每行数据是否加锁, 使用意向锁来减少表锁的检查.

2026-01-03 11:46:30 619

原创 SQL性能优化-2

没有not null约束:InnoDB引擎会遍历整张表把每一行的字段值都取出来,返回给服务层,服务层判断是否为null,不为null,计数累加。count()是一个聚合函数,对于返回的结果集,一行行地判断,如果count函数的参数不是NULL, 累计值就加1,否则不加,最后返回累计值。当分页很大时,查询数据变慢。InnoDB引擎就麻烦了,它执行count(*)的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。用法:count(*)、count(主键)、count(字段)、count(1);

2025-12-29 21:58:02 541 1

原创 SQL-性能优化

当页中删除的记录达到MERGE_THRESHOLD(默认为页的50%),InnoDB会开始寻找最靠近的页(前或后)看看是否可以将两个页合并以优化空间使用。Using filesort: 通过表的索引或全表扫描,读取满足条件的数据行,然后在排序缓冲区sort buffer中完成排序操作,所有不是通过索引直接返回排序结果的排序都叫filesort排序。使用了临时表,性能很低。using index: 通过有序索引顺序扫描直接返回有序数据,这种情况即为using index,不需要额外排序,操作效率高。

2025-12-28 09:43:11 649

原创 索引的使用及设计规则

当字段类型为字符串(varchar,text等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO,影响查询效率。// mysql数据库使用的是联合索引。尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。要控制索引的数量,索引并不是多多益善,索引越多,维护索引结构的代价也就越大,会影响增删改的效率。

2025-12-24 23:02:35 440

原创 大语言模型简介

PE(Prompt Engineering)是微调的“前置试探”,先验证方向,再决定是否投入资源进行参数层面的“换锁”。架构:Transformer, 其核心是”注意力机制“,赋予模型”上帝视角“,能同时关注句中所有词,动态判断关联性。为何大语言模型能写诗却算错数,那是因为它擅长模仿文字套路,却不具备人类的因果逻辑和真实世界的感官经验。通才模型的盲区,像百科全书,知识面广博,能谈天说地、写代码,但缺乏深度。一个强大的模型等于海量优质的数据,加上精巧的架构,再加上科学的训练方法。

2025-12-20 15:42:14 767

原创 MySQL索引使用--最左前缀法则

explain select * from tb_user where profession = '软件工程' and age >= 30 and status = '0';可能使用的索引是idx_pro_age_sta, 实际使用的索引是idx_pro_age_sta;可能使用的索引是idx_pro_age_sta, 实际使用的索引是idx_pro_age_staidx_pro_age_sta。可能使用的索引是 idx_pro_age_sta;实际使用的索引是 idx_pro_age_sta;

2025-12-14 21:42:39 283

原创 MySQL索引性能分析

sql的执行计划:explain select s., c. from student s, course c , student_course sc where s.id = sc.studentid and sc.courseid= c.id。表示select的类型,常见的取值有SIMPLE(简单表,即不使用表连接或子查询)、PRIMARY(主查询,即外层的查询)、UNION(UNION中的第二个或者后面的查询语句)、SUBQUERY(SELECT/WHERE之后包含了子查询)等。

2025-12-13 15:05:41 967 1

原创 MySQL的索引

在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问的性能。索引列也是要占用空间的,索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行INSERT、UPDATE、DELETE时,效率也降低。假设:一行数据大小为1k,一页中可以存储16行这样的数据,InnoDB的指针占用6个字节的空间,主键即使为bigint,占用字节数为8。提高数据检索的效率,降低数据库的IO成本,通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。

2025-12-07 09:10:06 787

原创 Python的基础语法

本文介绍了Python基础语法的核心要素:1.标识符命名规则(区分大小写、字符限制、避免关键字冲突);2.33个关键字的特殊功能(如as、nonlocal、yield的用法示例);3.变量的动态类型特性;4.代码注释规范(#用法和编码声明);5.模块导入机制(import、from...import及别名设置)。

2025-12-01 21:01:01 334

原创 动手----编写和运行第一个Hello World程序

本文介绍了Python程序的两种编写运行方式:交互式和文件式。交互式适合学习基础语法,通过Python Shell或IDLE即时执行代码;文件式适合复杂程序,需先编写.py文件再用Python指令运行。

2025-11-30 08:56:59 275

原创 搭建Python开发环境

Python安装指南:从官网(www.python.org)下载安装包,内含解释器、基础库和交互工具。安装时勾选"Add python.exe to Path"将Python添加到环境变量,方便全局使用。点击"Install Now"开始安装,完成后可通过python -V或python --version命令验证安装是否成功。

2025-11-28 13:02:25 392

原创 Python每日一练---第二十二天:串联所有单词的子串

本文介绍了如何在给定字符串s和字符串数组words中查找所有串联子串的起始位置。串联子串需包含words中所有字符串以任意顺序排列连接而成。文章通过滑动窗口算法实现,统计words中单词出现次数,遍历s中所有可能的起始位置,检查符合条件的子串。符串匹配问题。

2025-11-24 13:10:06 61

原创 SpringBoot的启动过程(1)

摘要:本文分析了SpringBoot应用程序的启动过程,重点解析了SpringApplication.run()方法的执行流程。该方法作为SpringBoot应用的入口点,负责初始化引导类、创建应用上下文、配置环境参数等核心操作。文章详细介绍了启动过程中涉及的BootstrapRegistryInitializer、ApplicationContextInitializer等关键组件的作用,以及SpringBoot 3.x版本中引入的Startup计时机制。

2025-11-23 10:52:10 385

原创 Python每日一连---第二十一天:无重复字符的最长字串

本文介绍了如何用Python解决查找字符串中最长无重复字符子串的问题。采用滑动窗口算法,通过维护左右指针和字符位置字典来高效查找最长子串。算法核心是当遇到重复字符时移动左指针,并始终记录字符最新位置。代码实现简洁,时间复杂度为O(n),适用于处理最长5×10^4长度的字符串

2025-11-22 14:50:42 58

原创 Python每日一练---第二十天:长度最小的子数组

本文介绍了使用滑动窗口算法在Python中寻找满足和≥target的最短连续子数组的方法。通过双指针(fast和slow)控制窗口边界,动态调整窗口大小:右指针扩展窗口求和,左指针收缩窗口优化长度。时间复杂度为O(n),适用于全正数数组。代码示例展示了具体实现,当窗口和≥target时记录最小长度,最终返回结果。

2025-11-21 22:44:44 33

原创 Python每日一练---第十九天:反转字符串中的单词

本文介绍了两种Python反转字符串中单词顺序的方法:1. 使用内置函数s.split()[::-1]分割后反转再连接,简洁高效;2. 利用栈结构,遍历字符串构建单词,遇到空格压栈,最后弹出连接实现反转。两种方法都能处理多余空格问题,确保结果中单词间仅保留单个空格。

2025-11-20 23:05:04 449

原创 核心注解@SpringBootApplication的三大秘密

本文详解了SpringBoot核心注解@SpringBootApplication的三大组成部分:1)@SpringBootConfiguration标识主配置类;2)@EnableAutoConfiguration实现自动配置,通过条件化装配和扫描spring.factories文件加载配置;3)@ComponentScan自动扫描组件。这三个注解协同工作,使开发者仅需一个注解就能快速启动功能完备的SpringBoot应用,体现了约定优于配置的设计理念。

2025-11-20 22:23:31 173

原创 Python每日一练---第十八天:最长公共前缀

本文介绍了如何用Python编写函数查找字符串数组中的最长公共前缀。算法思路是以第一个字符串为初始前缀,依次与后续字符串比较,通过不断缩短前缀来寻找公共部分。若在比较过程中前缀为空,则直接返回空字符串。示例代码演示了该方法的实现,时间复杂度为O(n*m),其中n是字符串数量,m是最短字符串长度。该方法能正确处理不存在公共前缀的情况,返回空字符串。

2025-11-19 22:16:56 249 1

原创 项目结构深度解析:理解Spring Boot项目的标准布局和约定

摘要:本文深度解析SpringBoot项目的标准结构及其"约定优于配置"理念。通过分析典型的Maven项目结构,展示了src/main/java核心代码组织、resources资源目录配置、test测试代码规范等关键部分。重点阐述了标准结构如何实现自动配置,包括组件扫描规则、分层架构约定、静态资源处理等机制。同时指出在特殊需求下可打破约定的场景,如自定义配置路径或组件扫描范围。这种标准化结构带来的好处包括快速启动、低配置、项目一致性及工具友好性,体现了SpringBoot自动配置核心思想

2025-11-19 13:10:36 592

原创 Python每日一练---第十七天:整数转罗马数字

本文介绍了将整数转换为罗马数字的算法实现。罗马数字由特定符号组合表示,转换时需要遵循特殊规则(如4和9需用减法表示)。算法采用贪心策略,预先定义包含特殊情况的降序映射表(如1000→"M",900→"CM"),然后从高到低依次匹配最大符号值。通过循环减去对应数值并拼接符号,最终得到罗马数字表示。该方法确保了正确转换所有1-3999范围内的整数,时间复杂度为O(1)。

2025-11-18 22:59:02 184

原创 Python每日一练---第十六天:加油站

这篇Python练习讲解如何判断汽车能否绕环形加油站一周行驶。给定汽油数组gas和消耗数组cost,算法首先比较总汽油和总消耗量,若不足则返回-1。否则通过贪心算法遍历加油站:跟踪当前剩余油量,若油量不足则重置起点,最终若总油量足够则返回起点编号。

2025-11-17 21:03:07 1070

原创 Python每日一练---第十五天:三数之和

本文介绍了如何用Python解决三数之和为0的问题。算法思路是对数组排序后固定一个数,再用双指针法查找满足条件的另外两个数,同时跳过重复元素。代码实现中先排序数组,然后遍历每个元素,对于当前元素,使用左右指针寻找和为0的组合,并处理重复情况,最终返回所有不重复的三元组。

2025-11-13 13:22:50 311

原创 Python每日一练---第十四天:两数之和II - 输入有序数组

本文介绍了一种使用双指针算法在非递减排序数组中寻找两数之和等于目标值的解决方案。算法通过初始化左右指针分别指向数组首尾,根据当前和与目标值的比较动态调整指针位置:和小于目标则左移,大于则右移。最终返回满足条件的下标(从1开始计数)。该方法保证在O(n)时间复杂度和常量空间复杂度内解决问题,适用于唯一解的情况。

2025-11-12 22:16:50 803

原创 Python每日一练---第十三天:判断子序列

本文介绍了如何判断字符串s是否为字符串t的子序列。通过双指针法,一个指针遍历s,另一个遍历t,依次匹配字符。匹配成功则同时移动两个指针,否则只移动t的指针。最终如果s指针走完全程,说明s是t的子序列。该算法时间复杂度为O(m+n),空间复杂度O(1),适用于单次查询。文中提供了Python实现代码,并解析了算法思路,简单直观且高效。

2025-11-12 13:04:04 445

原创 Python每日一练---第十二天:验证回文串

本文介绍了一个判断字符串是否为回文串的Python算法。算法核心是忽略大小写和非字母数字字符,使用双指针从两端向中间比较字母数字字符是否对称。时间复杂度为O(n),空间复杂度为O(1)。代码示例展示了如何处理带标点的字符串,如"A man, a plan, a canal: Panama"能正确识别为回文,而"race a car"则不是。空字符串和简单回文也通过了测试验证。

2025-11-11 23:21:21 385

原创 Python每日一练---第十一天:除自身以外数组的乘积

本文介绍了如何在O(n)时间复杂度内,不使用除法的情况下计算数组中除自身外所有元素的乘积。通过构建左右前缀积数组,实现每个元素的乘积计算。算法先从左到右计算左前缀积,再从右到左计算右前缀积,最后将两者相乘得到结果。该方法高效解决了LeetCode上"除自身以外数组的乘积"问题,保证了时间复杂度和空间效率。

2025-11-10 13:08:13 263

原创 ELK Stack架构深度解析:从零搭建千万级日志分析平台(LogStash部署)

Logstash是一个开源的ELK Stack核心组件,用于数据收集、处理和转发。其管道式架构包含input(数据输入)、filter(数据处理)和output(数据输出)三大模块,支持多种插件如File、Kafka、Grok、Elasticsearch等。Event是Logstash内部数据处理的基本单位,包含原始数据和元数据。Codec负责数据编解码,支持json、plain等格式。安装时需配置JDK环境,并通过简单命令测试运行。调试可通过多阶段stdout输出或条件标签实现,使用rubydebug格式

2025-11-09 21:41:49 1278

原创 Python每日一练---第十天:买卖股票的最佳时机II

本文介绍了使用Python解决股票最佳买卖时机问题的算法。题目要求在最多持有一只股票的条件下,通过多次买卖获得最大利润。算法思路是遍历每日价格,只要第二天价格高于当天就进行买卖,将所有上涨收益累加。代码实现了一个简单的循环来比较相邻两天的价格差并累加利润,最终返回最大总利润。该方法可以处理所有可能的上涨情况,实现利润最大化。

2025-11-08 09:01:05 310

原创 Python每日一练---第九天:H指数

本文介绍了如何计算研究者的h指数。h指数定义为研究者有h篇论文,每篇至少被引用h次。算法思路是从最大可能的h值开始递减,统计引用次数小于h的论文数量,并与允许的低引用论文数比较。Python实现通过遍历数组进行统计,找到满足条件的最大h值。

2025-11-07 22:33:50 379

原创 Python每日一练---第八天:最后一个单词的长度

Python编程题:计算字符串中最后一个单词的长度。题目要求找出由字母组成、不包含空格的最后一个子串的长度。算法采用从字符串末尾逆向遍历的方式:先跳过末尾空格定位单词结尾,再向前计数直到遇到空格或开头。时间复杂度O(n),空间复杂度O(1),高效避免了分割字符串操作。代码示例展示了具体实现过程。

2025-11-06 21:58:40 306

原创 Python每日一练---第七天:跳跃游戏II

本文介绍了使用贪心算法解决数组跳跃问题,寻找到达终点的最小跳跃次数。算法通过维护当前可达范围和在每一步选择能跳得最远的位置来优化跳跃策略。具体实现时,遍历数组时记录当前跳跃边界和下一步能到达的最远位置,当到达边界时更新跳跃次数。以示例[2,3,1,1,4]为例,只需2次跳跃即可到达终点。该算法时间复杂度为O(n),空间复杂度O(1),高效地解决了问题。

2025-11-06 13:12:24 891

原创 Python每日一练---第六天:罗马数字转整数

本文介绍了将罗马数字转换为整数的Python实现方法。首先解释了罗马数字的基本规则和六种特殊情况,如IV=4、IX=9等。然后提出了从左到右遍历字符串的算法思路,比较当前字符与下一个字符的值,处理特殊情况时跳过下一个字符。提供了两种代码实现:一种是常规的左到右遍历方法,另一种是从右到左的优化遍历方法。两种方法都能正确处理罗马数字到整数的转换,示例验证了代码的正确性,如"MCMXCIV"被正确转换为1994。该练习有助于提高编程能力和逻辑思维能力。

2025-11-05 22:24:02 1119

原创 Python每日一练---第五天:轮转数组

本文介绍了Python中实现数组轮转的几种方法。给定整数数组nums和轮转次数k,通过三步反转法(整体反转→前k个反转→剩余元素反转)实现高效轮转,时间复杂度O(n),空间复杂度O(1)。文章还对比了其他实现方式:逐步移动法(效率低)、额外数组法(直观但空间高)以及Python切片法(简洁)。其中三步反转法在效率和代码简洁性上表现最佳,是最优解。不同方法各具特点,可根据实际需求选择合适算法。

2025-11-04 21:47:25 358

原创 Python每日一练---第四天:多数元素

本文介绍了两种Python解决数组多数元素问题的方法。题目要求找出出现次数超过数组长度一半的元素。第一种方法使用字典统计元素频率,时间复杂度O(n),空间复杂度O(n)。第二种采用Boyer-Moore投票算法,通过计数变量高效地找到多数元素,空间复杂度O(1)。文章包含算法思路、代码实现和示例分析,帮助读者理解这两种解决多数元素问题的方法。

2025-11-04 13:10:45 303

Java透明窗口

java透明窗口源码,让你了解Java透明窗口开发的基本原理,代码简洁明了。

2012-08-03

HttpClient入门教程

HttpClient入门教程 HttpClient 是 apache 组织下面的一个用于处理 HTTP 请求和响应的开源工具。它不是一个浏览器,也不处理客户端缓存等浏览器的功能。它只是一个类库!它在 JDK 的基本类库基础上做了更好的封装!

2024-01-23

Java工具类CookieUtils、IdWorker、JsonUtils、NumberUtils

工具类CookieUtils、IdWorker、JsonUtils、NumberUtils Java工具类

2024-01-08

台大-李宏毅-B站机器学习视频-课件 -Backpropagation

台大-李宏毅-B站机器学习视频-课件 -Backpropagation

2024-01-08

台大-李宏毅-B站机器学习视频-课件

台大-李宏毅-B站机器学习视频-课件 Deep Auto-encoder Unsupervised Learning

2024-01-08

jdk8新特性详细介绍

jdk8新特性详细介绍

2024-01-08

idea入门简明操作手册

idea入门简明操作手册

2024-01-08

markdown简明语法说明

markdown简明语法说明

2024-01-08

从0到1实战,快速搭建SpringBoot工程

从0到1实战,快速搭建SpringBoot工程

2024-01-02

PPT模板,年终总结PPT模板

PPT模板,年终总结PPT模板, 工作计划、通用商务、网络科技模板

2024-01-01

MySQL数据库导入100万数据,三种不同方式的性能比较

MySQL数据库导入100万数据,三种不同方式的性能比较: (1)单笔导入 (2)批量导入 (3)通过load data命令导入; 单笔导入、批量导入通过Java代码连接数据库进行操作,并且统计导入的时间。 所有的操作均在相同的硬件、软件环境下。 资源中包括了操作过程中的所有代码。

2023-12-30

使用raw_socket进行双网口数据转发

使用raw_socket进行对一个网卡的数据抓取,再对数据修改,将数据从另外一个网口发送出去,实现数据的抓取转发

2018-07-06

objective-c基础教程

objective-c清晰版,适合ios初学者看。

2012-03-09

wireshark用户手册

wireshark是强大的抓包工具,此用户手册能够帮助你尽快地学会使用wireshark

2010-03-13

适合初学者的java源程序

非常适合初学者的源程序,总共有140个不同类型的java源程序,保证让你满意,物有所值

2009-08-30

winpcap学习资料

winpcap入门学习资料,既有英文版,又有中文版,绝对好东西。

2010-04-22

空空如也

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

TA关注的人

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