
程序员
文章平均质量分 88
加班不秃顶
这个作者很懒,什么都没留下…
展开
-
《深入理解Mybatis原理》MyBatis的sqlSession执行流程!
由于数据库会话不是永久的,因此Sqlsession的生命周期也不应该是永久的,相反,在你每次访问数据库时都需要创建它(当然并不是说在Sqlsession里只能执行一次sql,你可以执行多次,当一旦关闭了Sqlsession就需要重新创建它)。这里面最重要的一句其实就是最后一句代码,它的作用是用合适的TypeHandler完成参数的设置。在mybatis中,通过MapperProxy动态代理咱们的dao, 也就是说, 当咱们执行自己写的dao里面的方法的时候,其实是对应的mapperProxy在代理。原创 2025-05-30 17:04:14 · 774 阅读 · 0 评论 -
深入理解Mybatis原理》MyBatis配置解析过程!
假如我们系统的开发环境和正式环境所用的数据库不一样(这是肯定的), 那么可以设置两个environment, 两个id分别对应开发环境(dev)和正式环境(final),那么通过配置environments的default属性就能选择对应的environment了, 例如,我将environments的deault属性的值配置为dev, 那么就会选择dev的environment。默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。原创 2025-05-30 16:54:08 · 685 阅读 · 0 评论 -
《深入理解Mybatis原理》MyBatis初始化机制详解!
接着上述的 MyBatis初始化基本过程讨论,当SqlSessionFactoryBuilder执行build()方法,调用了XMLConfigBuilder的parse()方法,然后返回了Configuration对象。的方法mapperElements(root.evalNode("mappers")), 它将解析我们配置的Mapper.xml配置文件,Mapper配置文件可以说是MyBatis的核心,MyBatis的特性和理念都体现在此Mapper的配置和设计上。原创 2025-05-30 16:49:57 · 619 阅读 · 0 评论 -
Git指南-从入门到精通!
注意,这次合并的实现,由于当前 master 分支所指向的 commit (C4)并非想要并入分支(issueFix)的直接祖先,Git 不得不进行一些处理。可以看到 ======= 隔开的上半部分,是 HEAD(即 master 分支,在运行 merge 命令时检出的分支)中的内容,下半部分是在 issueFix 分支中的内容。慎用,一般情况下,本地分支比远程要新,所以可以直接推送到远程,但有时推送到远程后发现有问题,进行了版本回退,旧版本或者分叉版本推送到远程,需要添加 -f参数,表示强制覆盖。原创 2025-05-29 13:00:00 · 881 阅读 · 0 评论 -
Maven入门,读完这篇就够了!
考虑有5个项目,每个项目都有一个 core模块,如果没有前缀,我们会看到很多 core-1.2.jar这样的文件,加上实际项目名前缀之后,便能很容易区分 foo-core-1.2.jar、bar-core-1.2.jar …首先,打包方式通常与所生成构件的文件扩展名对应, 如上例中 packaging 为 jar, 最终文件名为 nexus-indexer-2.0.0.jar, 而使用 war 打包方式的Maven 项目,最终生成的构件会有一个 .war 文件, 不过这不是绝对的。原创 2025-05-29 12:30:00 · 756 阅读 · 0 评论 -
CAP与BASE:分布式系统设计的灵魂与妥协!
CAP也就是Consistency(一致性)Availability(可用性)Partition Tolerance(分区容错性)这三个单词首字母组合。CAP 理论的提出者布鲁尔在提出 CAP 猜想的时候,并没有详细定义三个单词的明确定义。因此,对于 CAP 的民间解读有很多,一般比较被大家推荐的是下面这种版本的解读。一致性(Consistency) : 所有节点访问同一份最新的数据副本可用性(Availability): 非故障的节点在合理的时间内返回合理的响应(无论是响应成功或失败)。原创 2025-05-29 10:30:00 · 870 阅读 · 0 评论 -
为什么Raft算法是分布式系统的首选?
举例如下:假如现在一共有 3 个将军 A,B 和 C,每个将军都有一个随机时间的倒计时器,倒计时一结束,这个将军就把自己当成大将军候选人,然后派信使传递选举投票的信息给将军 B 和 C,如果将军 B 和 C 还没有把自己当作候选人(自己的倒计时还没有结束),并且没有把选举票投给其他人,它们就会把票投给将军 A,信使回到将军 A 时,将军 A 知道自己收到了足够的票数,成为大将军。每个服务器的状态机按照日志顺序处理已提交的命令,并将输出返回给客户端,因此,这些服务器形成了一个单一的、高度可靠的状态机。原创 2025-05-28 20:01:13 · 911 阅读 · 0 评论 -
解密ZAB协议:Zookeeper一致性的核心实现!
ZAB(ZooKeeper Atomic Broadcast 原子广播) 协议是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子广播协议。在 ZooKeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性,基于该协议,ZooKeeper 实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性。ZAB 协议包括两种基本的模式,分别是。原创 2025-05-28 19:59:06 · 881 阅读 · 0 评论 -
Java场景题:电商平台中订单未支付过期如何实现自动关单?
日常开发中,我们经常遇到这种业务场景,如:外卖订单超 30 分钟未支付,则自动取订单;用户注册成功 15 分钟后,发短信息通知用户等等。这就是延时任务处理场景。在电商,支付等系统中,一设都是先创建订单(支付单),再给用户一定的时间进行支付,如果没有按时支付的话,就需要把之前的订单(支付单)取消掉。这种类以的场景有很多,还有比如到期自动收货,超时自动退款,下单后自动发送短信等等都是类似的业务问题。原创 2025-05-28 18:40:14 · 509 阅读 · 0 评论 -
Java面试:ZooKeeper如何实现分布式锁?
如果发现比自己小的那个节点被删除,则客户端的Watcher会收到相应通知,此时再次判断自己创建的节点是否是lock子节点中序号最小的,如果是则获取到了锁,如果不是则重复以上步骤继续获取到比自己小的一个节点并注册监听。使用顺序节点,是因为所有尝试获取锁的客户端都会对持有锁的子节点加监听器。在整个分布式锁的竞争过程中,大量的「Watcher通知」和「子节点列表的获取」操作重复运行,并且大多数节点的运行结果都是判断出自己当前并不是编号最小的节点,继续等待下一次通知,而不是执行业务逻辑。使用完锁后,将该节点删除。原创 2025-05-28 17:17:10 · 688 阅读 · 0 评论 -
缓存穿透的解决方式?—布隆过滤器
布隆过滤器是由布隆(Burton Howard Bloom)在1970年提出的 一种紧凑型的、比较巧妙的概率型数据结构,特点是高效地插入和查询,查询时可以用来判断 “一定不存在或者可能存在”,它是用多个哈希函数,将一个数据映射到位图结构中。布隆过滤器的空间效率O(m) 和查询时间O(k) 都很优秀,但是存在一定的误判率 (布隆过滤器认为不存在,则一定不存在;布隆过滤器认为存在,则只是可能存在)bit数组的位数m越大,hash函数的个数k越多,误判率就越低。原创 2025-05-27 21:33:29 · 987 阅读 · 0 评论 -
MySQL:索引失效的12种场景+解决方案!
索引优化是一个持续的过程,需要结合具体的业务场景和数据特点。通过了解这些索引失效的场景和原理,你可以更有针对性地设计索引策略,显著提升数据库性能。没有一劳永逸的索引方案,随着数据量的增长和业务的变化,索引策略也需要不断调整和优化。持续监控、分析和优化是保持高性能数据库的关键。原创 2025-05-27 20:47:56 · 799 阅读 · 0 评论 -
深入浅出JVM(十六)之三色标记法与并发可达性分析
本篇文章围绕并发的可达性分析深入浅出的解析三色标记法、并发可达性分析可能出现的浮动垃圾,对象丢失问题以及解决对象丢失问题的增量更新、原始快照两种方式在三色标记法中,黑色代表已经扫描完成、灰色代表至少有一个引用未扫描、白色代表还未扫描,GC根节点默认黑色隐式可达三色标记法从GC根节点开始将引用对象变成灰色并放入灰色集合,并将自己变成黑色,接着再从灰色集合中取出下一个对象进行处理,直到灰色集合为空,还是白色的对象就是不可达对象。原创 2024-12-12 21:04:35 · 833 阅读 · 0 评论 -
深入浅出JVM(十五)之垃圾收集器(上篇)
本篇文章作为垃圾收集器系列文章的上篇,主要介绍从各个方面对垃圾收集器的分类、GC性能指标、串行垃圾收集器、并行垃圾收集器等垃圾收集器可以划分为串行、并行、并发垃圾收集器,其中串行表示单GC线程独自执行、并行表示多GC线程同时刻执行、并发表示GC、用户线程并发执行发生GC时需要考虑到的性能指标是高吞吐量(GC执行效率高)、低延迟(GC时的停顿时间尽量低),这两个指标往往不能都满足,不同的垃圾收集器有不同特点适合在不同场景下发挥作用。原创 2024-12-12 21:03:07 · 847 阅读 · 0 评论 -
深入浅出JVM(十四)之内存溢出、泄漏与引用
本篇文章围绕引用深入浅出的解析内存溢出与泄漏、强引用、软引用、弱引用、虚引用当JVM没有足够的内存为新对象分配空间时就会发生内存溢出抛出OOM内存溢出有两种情况,一种是分配的资源太少,不满足必要对象的内存;另一种是发生内存泄漏,不合理的设置对象的生命周期、不关闭资源都会导致内存泄漏使用最常见的就是强引用,强引用只有在可达性分析算法中不可达时才会回收,强引用使用不当是造成内存泄漏的原因之一使用软引用时,只要内存不足触发Full GC时就会对软引用进行回收使用弱引用时,只要发生GC就会对弱引用进行回收。原创 2024-12-12 21:02:16 · 735 阅读 · 0 评论 -
深入浅出JVM(十三)之垃圾回收算法细节
本篇文章围绕垃圾回收算法细节深入浅出解析STW、根节点枚举避免长时间STW、安全区与安全区域、记忆集解决跨代引用增大GC Root扫描范围、维护卡表的写屏障等为了避免用户线程改变引用关系,能够正确的进行可达性分析,需要stop the word 停止用户线程枚举GC Roots时为了避免长时间的STW,使用OopMap记录引用位置,避免扫描方法区由于引用关系的变化,实时更新维护OopMap的开销是很大的,只有在循环、异常跳转、方法调用位置的安全点才更新OopMap,因此只有在安全点中才能正确的进行GC。原创 2024-12-12 21:00:05 · 652 阅读 · 0 评论 -
深入浅出JVM(十二)之垃圾回收算法
本篇文章围绕垃圾回收算法,深入浅出解析垃圾回收分类、标记清除、复制、标记整理、分代收集、增量收集、分区算法等多种算法从垃圾回收空间上划分可以分为Full GC回收整个堆加上元空间、Minor GC回收新生代、major GC回收老年代、mixed GC回收新生代加老年代标记清除算法会遍历引用链标记可达对象从而清理不可达对象,会产生内存碎片,速度一般复制算法不会产生内存碎片,并且速度很快,但是会浪费survivor区一半空间,并且会移动对象。原创 2024-12-12 20:58:52 · 915 阅读 · 0 评论 -
深入浅出JVM(十一)之如何判断对象“已死”
主要探讨了 JVM 中如何判断对象“已死”。介绍了引用计数法,其有循环引用等缺点,JVM 未采用。重点讲解了可达性分析算法,包括其原理、可作为根节点的对象及缺点。还阐述了对象真正死亡需经过至少 2 次标记,不可达对象会经筛选,有必要执行 finalize 方法的放入队列,若在方法中自救成功则可达,finalize 方法仅执行一次。原创 2024-12-11 16:12:38 · 666 阅读 · 0 评论 -
深入浅出JVM(十)之字节码指令(下篇)
本文是关于字节码指令的下篇,解析了方法调用与返回、操作数栈管理、控制转义、异常处理、同步等字节码指令。包括各类方法调用指令,如静态、私有等;操作数栈的出栈入栈指令;条件跳转等控制转义指令;抛出异常的处理指令;以及同步控制的加锁解锁指令,并说明了异常时的处理情况。原创 2024-12-11 16:10:14 · 1035 阅读 · 0 评论 -
深入浅出JVM(九)之字节码指令(上篇)
这篇文章是关于 JVM 字节码指令(上篇)的解析。介绍了由于指令种类多分为上下篇,上篇包括加载存储、算术、类型转换、对象创建与访问等指令。指出字节码指令多以特定字母开头,数据来源多样,算术指令用后缀表达式,类型转换有宽化和窄化且可能失精度,对象创建与访问指令包含多种具体操作。还提到了参考资料和相关交流方式。原创 2024-12-11 16:07:15 · 989 阅读 · 0 评论 -
深入浅出JVM(七)之执行引擎的解释执行与编译执行
本文围绕 JVM 执行引擎展开,包括解释器与即时编译器的执行方式、优缺点及原理。执行引擎由解释器、即时编译器和垃圾收集器构成,默认混合执行。即时编译器分 C1、C2,C2 有逃逸分析优化。只编译热点代码,通过计数器探测。解释器、C1、C2 同时工作,分层编译。原创 2024-12-11 15:51:11 · 802 阅读 · 0 评论 -
深入浅出JVM(六)之前端编译过程与语法糖原理
深入浅出JVM(六)之前端编译过程与语法糖原理原创 2024-12-10 22:16:28 · 639 阅读 · 0 评论 -
深入浅出JVM(五)之Java中方法调用
深入浅出JVM(五)之Java中方法调用原创 2024-12-10 22:10:04 · 1229 阅读 · 0 评论 -
深入浅出JVM(四)之类文件结构
深入浅出JVM(四)之类文件结构原创 2024-12-10 22:05:42 · 790 阅读 · 0 评论 -
深入浅出JVM(二)之运行时数据区和内存溢出异常
主要介绍了 JVM 运行时的内存区域(包括程序计数器、虚拟机栈、本地方法栈、堆、方法区、直接内存等)及其可能出现的内存溢出异常。程序计数器线程私有且无 OOM 异常;虚拟机栈和本地方法栈服务方法,可能有栈溢出和 OOM 异常;堆存储对象,可能因内存不足或泄漏导致 OOM;方法区存储类信息等,大量加载类可能 OOM;直接内存也可能 OOM。原创 2024-12-09 16:25:32 · 814 阅读 · 0 评论 -
深入浅出JVM(一)之Hotspot虚拟机中的对象
主要介绍了 Hotspot 虚拟机中的对象相关知识,包括对象创建的五个步骤(类加载、分配内存等),对象的内存布局(对象头、实例数据、对齐填充),对象的访问定位方式(直接指针和句柄访问),还提及内存分配优化及对象占用空间的分析。原创 2024-12-09 16:21:01 · 805 阅读 · 0 评论 -
MySQL结构流程,看这一篇就够了!
MySQL结构流程,看这一篇就够了!原创 2024-12-08 09:30:00 · 497 阅读 · 0 评论 -
Java里你为什么不用这种优雅的方式封装处理和抛出异常?
Java里你为什么不用这种优雅的方式封装处理和抛出异常?原创 2024-12-06 20:16:46 · 272 阅读 · 0 评论 -
HashMap 的实现原理和扩容原理是怎样的?
HashMap 的实现原理和扩容原理是怎样的?原创 2024-12-06 20:10:00 · 887 阅读 · 0 评论 -
深入浅出kafka【3】消费者客户端详解
深入浅出kafka【3】消费者客户端详解原创 2024-12-06 20:00:57 · 903 阅读 · 0 评论 -
深入浅出kafka【2】生产者客户端详解
深入浅出kafka【2】生产者客户端详解原创 2024-12-05 15:14:52 · 1053 阅读 · 0 评论 -
4年Java开发经验,应聘薪资16K却被秒杀,这是经历了些什么?
现在正值大家跳槽面试的高峰时期,今天小编给大家分享一个案例:4年Java开发经验,应聘薪资16K没过...咱先看这位老弟的简历基本情况:xx,26岁,毕业于青岛理工大学,有4年的开发经验…专业技能: 熟悉Sping 了解SpringMVC、SpringBoot、 Mybatis 等框架、了 解SpringCloud微服务 熟悉常用项目管理工具: SVN、 GIT、MAVEN、 Jenkins 熟悉 Nginx、tomcat 等的调优 熟悉多线程、并.原创 2021-08-27 21:11:20 · 1406 阅读 · 1 评论 -
爆款!Alibaba内部疯传《Java权威指南(面试)》,不肝后悔!
假如“金三银四”过得匆匆忙忙不理想,那么,满打满算还有40天的样子即是“金九银十”,这次你准备好了吗?莫慌莫慌,“面试造火箭,工作拧螺丝”说得不无道理,偶然从朋友那得到的这份Alibaba内部疯传《Java权威指南(面试)》堪称精品,或可能助你一臂之力,事半功倍!注:《Java权威指南(面试)》分七大部分:分布式、中间件、大数据与高并发、数据库、设计模式与实践、数据结构与算法、面试题举例等逐一攻克,迅速造火箭应对面试官!全文会一一详细展现,且如需源文档pdf进行深入学习的分享便是--【点我.原创 2021-07-21 14:22:02 · 662 阅读 · 2 评论 -
渣本立志阿里P7,历经4面技5面HR,收获36*16薪
前言来自一个5面阿里的面经总结:4面技术+5面HR我觉得有一个能够找一份大厂的 offer的想法,这是很正常的,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司 / 小公司,如果说能够在这样的公司锻炼几年,相信对自己能力的提升还是非常大的。不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的。因为大厂面试一般都有专业团队负责,某个知识点你到底是掌握了还是单原创 2021-07-20 17:32:17 · 656 阅读 · 2 评论 -
牛逼!阿里出品彩印版《Elasticsearch实战》文档,必须拿下!
众所周知,ELK是包含但不限于Elasticsearch(简称es)、 Logstash、Kbana三个开源软件的组成的一个整体。这三个软件合成ELK,是用于数据抽取(Logstash)、搜索分析(Elasticsearch)、数据展现(Kibana)的一整套解决方案,所以也称作ELK stack。Elasticsearch是ELK的核心,偶然从朋友那里获得阿里内部的彩印图文版<Elasticsearch实战>文档,从es底层对文档、索引、搜索、聚合、集群进行介绍,从搜索和聚合分析实例来..原创 2021-07-05 14:37:22 · 364 阅读 · 2 评论 -
偶得这份“25大专题Java高分面试指南”,秋招跳槽有望了!
面试造火箭,工作拧螺丝!偶得朋友赠送的这“25大专题Java高分面试指南”:Elasticsearch、微服务、Linux、JavaOOP、集合/泛型、Mysql、Redis、JVM、MongoDB、IO与NIO、反射、Spring、Spring Boot、序列化、Kafka、ZooKeeper、算法、注解、MyBatis、Dubbo、多线程、RabbitMQ、Dubbo 、数据结构、Memcached、Spring Cloud等等,内含1000+Java个专题精品面试问题并附有详细的答案解读,秋招跳槽有望原创 2021-07-05 14:31:55 · 242 阅读 · 1 评论 -
BATJ必备神技:数据结构与算法,程序员必过的坎!
数据结构与算法,程序员必过的坎?不掌握一定挤不进BATJ的神技?为啥今天会如此突然的提到“数据结构与算法”呢?这个缘由还得从吐槽我的朋友开始...其实啊,我这个朋友一直都想进个BATJ,学历和能力也都还不错啦,但是却始终挤不进呀,太难了吧..说到底,还是数据结构与算法没有弄明白,所以哪怕刷再多的LeetCode,也永远只能掌握一些些的基础知识,一旦涉及到图、排序、递归等等这些个高级点的就凉凉了呗~所以,关于数据结构与算法,我们真的应该好好用心学一学,打好这个基础,争取拿下这项进阶原创 2021-06-28 22:17:53 · 191 阅读 · 1 评论 -
教你手撸一个Spring框架,从Spring.xml解析到注册Bean对象
一、前言你写的代码,能接的住产品加需求吗?接,是能接的,接几次也行,哪怕就一个类一片的 if...else 也可以!但接完成什么样可就不一定了,会不会出事故也不是能控制住的。那出事故时,你说因为我写 if...else 多了导致代码烂了,但可是你先动的手啊:你说的需求还得加、你说的老板让上线、你说的合同都签了,搬砖码农的我没办法,才以堆代码平需求,需求太多不好搞,我才以搬砖平需求!诸侯不服,我才以兵服诸侯,你不服,我就打到你服!但代码烂了有时候并不是因为需求加的快、也不是着急上线。因为往往在原创 2021-06-22 16:47:26 · 283 阅读 · 2 评论 -
真香!180页100+题15W+字解析的《Java高级面试指南》,果断收下!
近期有很多朋友在考虑跳槽,“面试造火箭,工作拧螺丝”这话说的十分吻合他们的现状!而说到准备面试,那是真不容易,趁着空挡我也收集了不少Java高级面试资源!而这180页100+题15W+字解析的《Java高级面试指南》更是深得我心,100+题包含:消息队列、Redis缓存、MySQL的分库分表读写分离、高并发系统设计、分布式、高可用、SpringCloud微服务架构等的内容,每一道题皆从面试官的角度分析题意,然后再附带完整的解析,先看题目,答不上的再翻阅答案!注意:考虑到篇幅原因,这份《Java原创 2021-06-22 13:21:02 · 393 阅读 · 2 评论 -
Alibaba5轮视频面:同事+组长+主管+项目+HR,收割Java岗offer!
前言前段时间有幸被阿里的一位同学内推,参加了阿里巴巴Java岗位的面试,本人19年双非本科软件工程专业,目前有一年半的工作经验,面试前就职于一家外包公司。如果在自己本人拿到offer之前,如果有人告诉我一年工作经验可以直接从外包进阿里,我肯定是不信。但是真的发生在自己身上,真的觉得非常非常幸运与不可思议。Alibaba的这次面试总共有五面,包括:第一轮电话面试(同事面):将近1h20min,主要是介绍项目与基础知识 第二轮视频面试(组长面):将近1h,同样也是介绍项目与基础知识 第三轮视频面原创 2021-06-18 14:05:05 · 486 阅读 · 2 评论