- 博客(162)
- 收藏
- 关注
原创 Mysql事务原理
摘要 本文详细介绍了数据库事务隔离级别及其实现原理。主要内容包括: 事务隔离问题:脏读、不可重复读和幻读的概念及区别 隔离级别:从低到高分为Read uncommitted、Read committed、Repeatable read和Serializable,分别解决不同隔离问题 MySQL实现: 默认采用REPEATABLE_READ级别 通过MVCC(多版本并发控制)实现 不同隔离级别下的锁机制差异 事务特性实现: 持久性:redo log和checkpoint技术 隔离性:当前读与快照读、undol
2025-07-30 21:57:00
901
原创 Mysql事务基础
摘要:事务是数据库操作的原子性单元,具有ACID特性(原子性、一致性、隔离性、持久性)。锁机制包括共享锁(读锁)和排他锁(写锁),以及不同粒度的表级、行级和页级锁。间隙锁用于防止幻读。事务日志包括Redo log(保证持久性)和Undo log(实现原子性和回滚),分别记录物理修改和逻辑修改。Redo log用于系统恢复,Undo log支持事务回滚和多版本并发控制(MVCC)。
2025-07-30 21:36:03
580
原创 Mysql缓冲池和LRU
缓冲池的作用:缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速访问的作用。速度快,那为啥不把所有数据都放到缓冲池里?凡事都具备两面性,抛开数据易失性不说,访问快速的反面是存储容量小:因此,只能把“最热”的数据放到“最近”的地方,以“最大限度”的降低磁盘访问。
2025-07-29 21:13:01
653
原创 Mysql索引
首先B+树是B树的一种扩展,在B+树里面,非叶子节点不再存储数据,仅仅存在索引,而叶子这点存储具体的数据,并且最底层的数据直接之间从左到右是按照从小到大的顺序分布,并且是一个双链表的结构。叶子节点存放的也是行记录数据所在的页,但还是页中存放的不是完整的行,而是仅仅是一对key-value和一个指针,该指针指向相应行数据的聚集索引的主键。假设辅助索引树高3层,聚集索引树为3层,那么根据辅助索引查找数据,需要先经过3次IO找到主键,再经过3次IO找到行做在的数据页。eq_ref:最多只返回一条符合条件的记录。
2025-07-29 21:00:57
617
原创 Mysql InnoDB存储引擎
InnoDB存储引擎的体系结构包含三大组件:后台线程、内存缓冲池和文件系统。后台线程包括Master Thread(负责核心数据同步)、IO Thread(处理异步IO)、Purge Thread和Page Cleaner Thread。内存缓冲池通过LRU算法管理数据页,包含修改缓冲(针对非唯一二级索引)和日志缓冲区。文件系统包括表数据文件(.ibd)、表结构文件(.frm)和日志文件(redo/undo/binlog)。这种设计通过内存缓冲减少磁盘IO,配合后台线程确保数据一致性,实现高性能的数据库操作
2025-07-29 20:45:13
1127
原创 Mybatis
摘要:MyBatis是一款半自动ORM框架,相比全自动的Hibernate,它需要手动编写SQL但更灵活。优点包括SQL解耦、减少冗余代码和良好数据库兼容性,缺点是SQL工作量大且移植性差。核心对象包括SqlSession、Executor等,工作原理涉及配置加载、会话创建和SQL执行。支持延迟加载和两级缓存(一级基于Session,二级基于Namespace)。插件机制通过动态代理拦截特定接口方法,扩展功能强大。
2025-07-29 19:57:07
520
原创 SpringMVC
摘要:Spring MVC是基于Java的轻量级Web框架,采用MVC模式实现职责分离,简化开发。核心组件包括DispatcherServlet、HandlerMapping等,工作流程涉及请求分发、处理器适配等步骤。常用注解有@Controller、@RequestMapping等,支持REST风格API。控制器默认单例模式,需注意线程安全问题,可通过ThreadLocal解决。异常处理可交由Spring框架统一管理。该框架通过分层设计有效解耦,提高了Web应用的开发效率和可维护性。(149字)
2025-07-28 20:42:41
879
原创 Spring事务管理
摘要:Spring事务本质依赖数据库的事务支持,提供统一管理接口。支持编程式(TransactionTemplate)和声明式(基于AOP)事务管理,后者通过配置或注解实现,减少代码侵入。事务传播机制包括7种行为(如REQUIRED、REQUIRES_NEW等),通过ThreadLocal实现。隔离级别涵盖数据库默认及4种标准隔离级别(读未提交至串行化)。声明式事务的优点是业务逻辑与事务管理的解耦。
2025-07-28 20:37:19
248
原创 Spring AOP
摘要:AOP(面向切面编程)是对OOP的补充,通过抽取公共逻辑(如日志、权限)为可重用模块(切面),减少代码重复和耦合。Spring AOP采用动态代理实现,包括JDK代理(基于接口)和CGLIB代理(基于继承)。AOP核心概念包括连接点、切面、切点、通知等,其中通知分为前置、后置、环绕等类型,执行顺序因是否异常而异。AOP通过动态织入将增强逻辑与目标对象方法结合,提升系统可维护性。
2025-07-28 20:34:24
662
原创 Spring解决循环依赖
摘要:Spring通过三级缓存机制解决单例模式下setter注入的循环依赖问题。三级缓存包括单例池(完整实例)、早期曝光对象(实例化未初始化)和对象工厂。处理流程为:A实例化时工厂放入三级缓存,发现依赖B;B实例化时从缓存获取A的早期引用,完成初始化后放入一级缓存;A继续完成初始化。该机制利用实例化与属性赋值的分离特性,但无法解决构造器注入和多例模式的循环依赖问题。
2025-07-28 20:14:02
500
原创 Spring Bean创建
本文详细介绍了Spring Bean的创建过程及常用扩展接口。Bean创建过程包括:读取元信息、注册元信息、获取Bean、实例化、属性赋值、Aware接口回调、初始化等阶段,每个阶段都涉及特定的处理逻辑。文章还重点讲解了Spring的扩展接口(如BeanPostProcessor、BeanFactoryPostProcessor等)及其使用场景,这些接口提供了定制化能力和扩展能力,有助于实现模块解耦、提高代码复用性。通过理解这些机制,可以更好地控制Spring容器的行为,实现更灵活的应用程序开发。
2025-07-28 20:05:28
1149
原创 Spring IOC
Spring框架是一个轻量级的IoC和AOP容器,具有低侵入性、降低耦合度、支持集中式任务管理等优点。它采用了多种设计模式,包括工厂模式、单例模式、代理模式等。Spring的核心是IoC(控制反转),通过BeanFactory和ApplicationContext实现对象生命周期管理,支持多种bean作用域。ApplicationContext在启动时预加载所有bean,而BeanFactory采用延迟加载。Spring提供工厂注入模式(静态工厂和实例工厂)和自动装配功能,其中@Autowired注解可实现
2025-07-28 19:54:56
833
原创 JVM调优
JVM调优的核心目标是减少GC频率,尤其是耗时的Full GC。关键优化点包括:合理选择垃圾回收器(根据CPU核数和需求选择Serial、Parallel、CMS或G1等);调整堆内存大小并保持初始和最大值一致;优化新生代与老年代比例;设置合适线程堆栈和Survivor区比例;调整对象晋升老年代年龄;启用GC日志监控。调优需在吞吐量和停顿时间间权衡,通过监控发现问题后针对性调整参数,如提高新生代比例减少Young GC,或增大老年代降低Full GC频率。G1等现代回收器可设置最大停顿时间目标进一步提升性能
2025-07-27 19:04:25
608
原创 JVM工具
JDK 自带多种监控工具,主要位于 bin 目录下。常用工具包括: jps:查看 Java 进程状态 jstat:监控 JVM 内存、GC 等运行数据,可检测 OOM 和内存泄漏 jstack:生成线程快照,定位死锁、死循环等问题 jmap/jhat:分析堆内存对象分布 JConsole 和 VisualVM:图形化监控工具 这些工具可帮助开发者诊断内存泄漏、GC 问题、线程阻塞等常见性能问题,是 Java 性能调优的重要辅助工具。
2025-07-27 17:18:19
626
原创 类加载机制
本文系统介绍了Java类加载机制,包括加载时机、过程和类加载器。类加载分为加载、验证、准备、解析和初始化五个阶段,由启动类、扩展类和应用程序类加载器实现。双亲委派模型确保类加载的安全性和唯一性,但可通过线程上下文类加载器破坏。文章还分析了ClassNotFoundException和NoClassDefFoundError两种常见异常的成因及解决方案。整体讲解了Java虚拟机如何加载和管理类,以及相关异常处理机制。
2025-07-27 17:01:41
603
原创 G1回收器
G1(Garbage First)收集器是针对大内存场景设计的新一代垃圾回收器。它采用Region分区机制替代传统物理分代,将堆划分为2048个大小可调的独立区域(1-32MB),包括Eden、Survivor、Old和Humongous(存放大对象)四种类型。G1通过维护优先级列表优先回收价值最高的Region,实现可预测的停顿时间(通过-XX:MaxGCPauseMillis参数设定)。其核心机制包括:使用记忆集(RSet)记录跨Region引用,卡表标记跨代引用,写屏障实时更新引用关系。GC过程分为Y
2025-07-27 15:26:47
898
原创 CMS回收器
摘要:CMS收集器是HotSpot虚拟机中第一款并发垃圾收集器,采用标记-清除算法,主要关注降低停顿时间。其工作流程包括初始标记、并发标记、重新标记和并发清除四个阶段。虽然具有低延迟优势,但存在空间碎片、CPU资源敏感、浮动垃圾等问题,可能导致Concurrent Mode Failure。可通过调整启动阈值、增加老年代大小等参数优化性能。CMS于JDK1.4引入,JDK14中被移除。适用于重视响应速度的Web服务等场景。
2025-07-27 15:03:30
925
原创 垃圾回收器
摘要:本文介绍了Java虚拟机中的主要垃圾收集器及其特点。新生代收集器包括Serial、ParNew和Parallel Scavenge;老年代收集器有CMS、Serial Old和Parallel Old;整堆收集器G1和ZGC。文章详细分析了Serial/Serial Old、ParNew和Parallel Scavenge收集器的工作原理,包括它们的收集算法(复制算法)、单/多线程特性以及Stop The World机制。重点比较了不同收集器在单/多CPU环境下的性能表现,并介绍了关键配置参数如-XX
2025-07-27 14:54:49
640
原创 GC算法介绍
本文介绍了四种常见的垃圾回收(GC)算法及其特点。标记-清除算法实现简单但会产生碎片;复制算法效率高但内存利用率低;标记-整理算法能有效利用堆但耗时较长;分代收集算法根据不同对象生命周期采用不同策略,新生代使用复制算法,老年代采用标记-整理算法。各算法在吞吐量、暂停时间和收集频率等评判标准上各有优劣,需根据应用场景选择。分代收集算法因其高效性成为目前主流JVM的默认选择。
2025-07-27 14:48:32
462
原创 GC Roots
解决这个问题,主要是依赖三色标记算法,它一种JVM中垃圾标记的算法,他可以减少JVM在GC过程中的STW时长,他是CMS、G1等垃圾收集器中主要使用的标记算法。既然灰色对象在扫描完成后删除了对白色对象的引用,那么我是否能在灰色对象取消引用之前,先将灰色对象引用的白色对象记录下来。在重新标记阶段结束之后,垃圾回收器会执行清除操作,将未被标记为可达对象的对象进行回收,从而释放内存空间。一个节点在并发标记过程中,由于父节点到本节点的连接发生变化,本可以被回收的节点结果被标记,不能被回收。
2025-07-27 14:41:52
650
原创 JVM内存结构
本文介绍了Java跨平台特性及JVM内存结构。Java通过虚拟机实现跨平台运行,源文件编译为字节码由JVM执行。JVM内存分为程序计数器、Java栈、本地方法栈(线程私有)、Java堆和方法区(线程共享)。堆是垃圾回收主要区域,分为新生代和老年代,采用分代收集策略避免频繁Full GC。方法区存储类信息、常量等,溢出会抛出OOM异常。文章还分析了Survivor区的作用和对象分配规则,并列举了常见内存异常类型如堆溢出、栈溢出等。
2025-07-27 14:22:07
523
原创 Java8 新特性
摘要:Java8引入多项重要特性:1)Lambda表达式简化单方法接口实现;2)方法引用优化代码复用;3)接口默认方法增强扩展性;4)Stream API支持声明式集合操作,包含惰性求值和并行处理;5)HashMap底层加入红黑树提升查询性能;6)ConcurrentHashMap改用更细粒度锁。Stream流提供链式操作,包含生成、中间处理和终端操作三类方法,如filter/map等中间操作和forEach/collect等终端操作,显著提升代码简洁性和处理效率。这些特性共同推动Java向函数式编程发展,
2025-07-27 14:09:53
793
原创 Java集合
Java集合框架主要包含List、Set、Queue和Map四大类接口。ArrayList基于数组实现,查询快增删慢;LinkedList基于链表实现,增删快查询慢。HashSet使用哈希表去重,TreeSet基于红黑树实现有序存储。HashMap采用数组+链表+红黑树结构,ConcurrentHashMap通过分段锁实现线程安全。LinkedHashMap在HashMap基础上维护双向链表保持插入顺序。PriorityQueue基于堆结构实现优先级队列,默认小根堆。线程安全集合包括Collections.
2025-07-27 13:59:21
687
原创 Java泛型
摘要:泛型通过类型参数化提供编译时类型安全检测,避免Object类的强制转换问题。包括泛型类、接口和方法,使用尖括号<>和T、E等惯例符号。相比Object类,泛型具有类型安全检查和隐式转换优势。类型通配符<?>、<? extends T>和<? super T>分别实现不同限制。Java采用泛型擦除机制,编译时将泛型转换为普通类型。泛型提高了代码重用率并减少了运行时错误。
2025-07-27 13:40:42
248
原创 Java反射
Java反射机制允许程序在运行时动态获取类信息和调用对象方法。通过反射API(Class、Field、Method、Constructor类)可以操作编译时无法确定的类型。获取Class对象的三种方式:getClass()、.class属性、Class.forName()。创建对象可通过Class.newInstance()或Constructor.newInstance()实现。反射常用于处理运行时类型不确定的场景,如接收外部传入的Object对象时需要调用其实际类型的方法。
2025-07-27 13:31:15
342
原创 Java语言基础
本文介绍了Java语言的核心基础知识。主要内容包括:Java面向对象编程的特性(封装、继承、多态)及其与面向过程的比较;JVM实现跨平台的原理;JDK与JRE的区别;接口与抽象类的差异;构造方法的作用;equals与==的区别;字符串存储机制;final关键字的三种用法;以及异常处理中finally的执行特点。文章还对比了Java与C++在内存安全、继承机制和内存管理方面的区别,为理解Java语言特性提供了全面参考。
2025-07-27 13:23:56
565
原创 CS224n课程Assignment3参考答案
Assignment#3−solutionBy Jonariguez Assignment\#3 -solution\quad By\ JonariguezAssignment#3−solutionBy Jonariguez所有的代码题目对应的代码已上传至github/CS224n/Jonariguez所有的代码题目对应的代码可查看对应文件夹Assignment3_Code...
2019-07-14 17:52:48
2252
原创 CS224n课程Assignment2参考答案
Assignment#2−solutionBy Jonariguez Assignment\#2 -solution\quad By\ JonariguezAssignment#2−solutionBy Jonariguez所有的代码题目对应的代码已上传至github/CS224n/Jonariguez解:(提示使用keepdims参数会方便一些哦。 )解:(积...
2019-06-18 12:01:12
2841
原创 CS224n课程Assignment1参考答案
Assignment#1−solutionBy  Jonariguez Assignment\#1-solution\quad By\; Jonariguez Assignment#1−solutionByJonariguez所有的代码题目对应的代码已上传至github/CS224n/Jonariguez解:softmax(x)i=exi∑jexj=ecexie...
2019-06-13 21:26:48
1969
原创 window下将pip修改为国内源
window下将pip修改为国内源打开我的电脑,然后在地址路径栏上输入%appdata%之后点回车,它会自动跳到某个文件夹下面,你也不用管这是哪里。创建一个文件夹,名字为pip,然后进入pip文件夹,在里面创建一个名字为pip.ini的文件。打开pip.ini,输入如下内容:[global]index-url = http://pypi.douban.com/simple[inst...
2019-04-25 16:52:34
662
原创 python爬虫错误:http.client.HTTPException: got more than 100 headers的解决方法
python爬虫错误:http.client.HTTPException: got more than 100 headers的解决方法Traceback (most recent call last): File "C:\Users\Jonariguez\AppData\Roaming\Python\Python36\site-packages\urllib3\connectionpool...
2019-04-16 10:52:16
2148
原创 json和txt文件的读取和json文件与字典之间的格式读取转换
json和txt文件的读取和json文件与字典之间的格式读取转换一. 读取txt文件with open('filename.txt','r',encoding='utf-8') as f: data = f.readlines()这样会将filename.txt文件中的内容以列表的形式读入到data中,每一行数据为一个元素。二. 将字典写入到json文件import json...
2019-04-16 10:30:55
10185
1
原创 python操作本地浏览器webbrowser
python操作本地浏览器webbrowserwebbrowser是python3自带的库,可以直接用import webbrowser导入。webbrowser的使用import webbrowser as webweb.open('https://www.baidu.com')就可以直接使用默认的浏览器打开https://www.baidu.com 选用别的浏览器那就需要先注册...
2019-04-16 10:01:03
12993
4
原创 docker的使用以及在docker中使用mongodb
docker的使用以及在docker中使用mongodb参考博客:https://blog.csdn.net/laodengbaiwe0838/article/details/79340818查看现有镜像docker images查看容器状态docker ps查看全部的容器docker ps -a删除镜像docker rmi <IMAGE_ID or IMAGE_NA...
2019-04-04 17:22:19
3225
原创 github在fork之后如何保持与原仓库同步
参考博客整体思路为:在自己的本地仓库添加原仓库为上游仓库upstream,然后将所有更新拉取到本地,然后通过push操作推送本地到自己远程仓库。git remote -v在查看现在的远程仓库路径。其中origin后面的就是你自己的远程仓库路径git remote add upstream 远程仓库路径添加原仓库为上游仓库。其中红色框里的远程仓库路径为原仓库路径再次用g...
2019-01-01 20:03:47
1582
原创 Python核心编程(第二版) 第十二章 习题答案
已放在我的GitHub:https://github.com/Jonariguez/Core_Python_Programing_Exercises_Answers模块12-1 路径搜索和搜索路径之间有什么不同路径搜索:在所有的文件路径里搜索某个文件的操作搜索路径:是文件系统“预定义的区域”,包含多个路径。在搜索路径里进行路径搜索,来搜索某些文件。12-2 假设模块mymodule里有...
2019-01-01 19:19:11
496
原创 github在pull request时只提交指定commit的方法
我们在fork了别人的仓库之后,如果进行了修改,可以pull request到原仓库,但是如果你进行了很多的修改,并有很多的commit,那你在pull request的时候,同时也会把之前pull request的commit一块带上(很可能影响不大),不过还是介绍一下每次pull request某个指定的commit。假设你的远程仓库为origin,原仓库即上游仓库为upstream。修...
2018-12-30 18:08:28
13535
4
原创 Python核心编程(第二版) 第十一章 习题答案
已放在我的GitHub:https://github.com/Jonariguez/Core_Python_Programing_Exercises_Answers函数和函数式编程11-1def countToFour1(): for eachNum in range(5): print eachNum,def countToFour2(n): for e...
2018-12-30 14:04:37
727
原创 Python核心编程(第二版) 第九章 习题答案
已放在我的GitHub:https://github.com/Jonariguez/Core_Python_Programing_Exercises_Answers文件和输入输出9-1 显示一个文件的所有行,忽略以#之后的内容import osf=open('input.txt','r')for line in f: idx = line.find('#') if idx...
2018-12-30 14:01:47
987
2
原创 Python核心编程(第二版) 第八章 习题答案
已放在我的GitHub:https://github.com/Jonariguez/Core_Python_Programing_Exercises_Answers条件和循环8-1 看下面的代码:# statement Aif x&amp;gt;0: # statement B passelif x&amp;lt;0: # statement C passelse: ...
2018-12-28 21:48:17
1306
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅