Java进阶必看
文章平均质量分 91
深入学习Java技术,欢迎查阅
七哥带你学编程
一个写文章也喜欢拍视频的程序员。IT咨询到微信公众号:“七哥聊编程” 直接私信即可。
展开
-
白嫖?为铁粉准备的Java开发学习路线(2021最新版,含自学资源)
大家好呀,我是七哥。路线图和自学资源都在下面,我先叨叨两句:七哥整理的这份 《2021版 Java开发工程师学习路线》 适合于初、中、高级别的 Java 程序员,也确实是非常用心的,花费了两个周末的时间。同时我自己也是按照这个路线来学习的,建议收藏 或者 分享给和你关系好的小伙伴。七哥也结合市场上各家公司对应职位等级所需要掌握的技术知识和薪资范围进行了匹配划分,在学习过程中多参考,做到心中有数(想想你要拿多高的工资就得付出多大的努力),当然这个是市场普遍水平,不是绝对!区别于其它学习原创 2021-07-11 10:51:13 · 723 阅读 · 0 评论 -
一个线程中断引发Bug的“爆肝”排查经历
背景在之前的版本上线了一个接收大数据推送交易数据文件的接口,这个接口要做的逻辑就是解析文件,分批入库。 当然为了数据的可靠性,以及支持重推,最终的流程大概就是这样:上面的流程就是每日增量文件的处理流程,除此之外,还有一个历史交易数据的全量文件也需要推送过来,这个文件由于只推送一次,而且无法按照日期来支持重推,所以就约定只推一次(现在看来这里的处理方法是有点粗糙了。。),下个版本我将初始化接口对应的代码干掉。版本上线后,业务在验证时发现不对劲,开始在开发业务验证群爆出问题:交易数据对不上! 既然不对.原创 2020-11-04 08:33:47 · 400 阅读 · 0 评论 -
想成为优秀的Java程序员,你需要读哪些书?
如果你想成为一名优秀的程序员,那么你需要做什么?七哥认为最重的就是——多读书!那么你可能要问了,书籍那么多我该读哪本呢?答案是读那些经典地经受住时间考验的书。今天我分享给大家三本属于Java开发人员都应该必读的Java书籍。如果你已经做了2-3年的程序员,那么很可能你已经读过这些书了。但是如果你还没有读过,那么你阅读它们的最佳时机就是--现在!你不会后悔把时间和金额投资在这些书上,因为回报是无限的。划重点:本次推荐的三本书,免费送出5本给支持七哥的小伙伴们 !!! ...原创 2020-09-23 23:21:51 · 422 阅读 · 0 评论 -
Java线程堆栈分析
不知觉间工作已有一年了,闲下来的时候总会思考下,作为一名Java程序员,不能一直停留在开发业务使用框架上面。老话说得好,机会是留给有准备的人的,因此,开始计划看一些Java底层一点的东西,尝试开始在学习的过程中写博客,希望和大家一起交流学习。写在前面: 线程堆栈应该是多线程类应用程序非功能问题定位的最有效手段,可以说是杀手锏。线程堆栈最擅长与分析如下类型问题:系统无缘无故CPU过高。...原创 2017-12-12 17:59:00 · 363 阅读 · 0 评论 -
深入理解Java线程池
深入理解Java线程池线程池初探所谓线程池,就是将多个线程放在一个池子里面(所谓池化技术),然后需要线程的时候不是创建一个线程,而是从线程池里面获取一个可用的线程,然后执行我们的任务。线程池的关键在于它为我们管理了多个线程,我们不需要关心如何创建线程,我们只需要关系我们的核心业务,然后需要线程来执行任务的时候从线程池中获取线程。任务执行完之后线程不会被销毁,而是会被重新放到池子里面,等待机...原创 2017-10-03 17:36:00 · 189 阅读 · 0 评论 -
Java类型信息详解
类型信息运行时类型信息使得你可以在程序运行时发现和使用类型信息本章节将讨论Java是如何让我们在运行时识别对象和类的信息的. 主要有两种方式,一种是"传统的" RTTI(Run-Time Type Identification),它假定我们在编译时已经知道了所有的类型;另一种是"反射机制",它允许我们在运行时发现和使用类的信息.Class对象 要理解RTTI在Java中的工作...原创 2018-05-06 18:12:00 · 3218 阅读 · 0 评论 -
面试官:Java线程池了解?如果你还回答不好,那还不赶快收藏!
本文已收录到七哥的github:https://github.com/coderluojust/qige_blogs,感谢每颗star。写在前面本文将根据面试中常被问到的 Java线程池 展开抽丝剥茧的解析,这个问题可以说是百分之百会在Java程序员面试中被问到,因为在工作中这个需求实在是太普遍了。Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。本文成文的思路将根据面试中问答的流程展开,读者完全可以将本文展开的知识点作为回答此问题的常规套路,如果..原创 2020-11-09 07:05:40 · 241 阅读 · 0 评论 -
想使用多线程来提高处理速度,却还不知道使用CountDownLatch与CyclicBarries?
本文已收录到七哥的github:https://github.com/coderluojust/qige_blogs,感谢每颗star。上一篇文章介绍了Java并发包中提供的实现限流的工具类,不了解的小伙伴可以点击查阅:Semaphore是如何实现限流效果的,今天我们学习下控制、协调多线程同步的工具类 CountDownLatch 与 CyclicBarrier。 它们俩主要用在当我们想使用多线程技术来提高程序的运行效率时,常常需要汇总结果,那么如果控制线程之间的步调一致就是需要解决的问题。背景.原创 2020-11-08 08:16:27 · 242 阅读 · 0 评论 -
阻塞队列之ArrayBlockingQueue源码解析
之前的文章我们学了 ConcurrentHashMap、 ConcurrentLinkedQueue 等线程安全容器,而且也说了 Java并发包中的 Concurent 开头的并发容器都是非阻塞的,是使用 CAS 自旋操作实现的线程安全。 今天我们来学习实现线程安全的另一种方法:就是「阻塞」形式,即使用锁,这样的容器也被称为阻塞队列。什么是阻塞队列阻塞队列支持阻塞的插入和移除。支持阻塞的插入:就是当队列满了的情况下,队列会阻塞插入元素的线程,直到队列不满。支持阻塞的移除:就是当队列为空的情况下,队列原创 2020-11-02 08:51:10 · 359 阅读 · 2 评论 -
Java并发|Semaphore如何实现并发控制(限流)
大家好,我是七哥,今天是2020.10.24,也是我们程序员的节日,在这里祝大家节日快乐。絮叨一下今天我们一起来学习下如何使用JDK提供的并发工具类来实现限流。 在之前的工作中,我们有一个限流的场景,那就是在调用关联方系统的时候需要限流,因为提供服务方是保险的核心系统,大家应该都懂这种系统支持的并发不会大,为了保护双方系统的可用性,作为调用方我们在调用的时候也会做一个限流控制。 这种场景在工作中很常见,之前面试的时候也经常会被问到:Java并发包你有哪些使用场景?你可能已经想到了,我们当时的解决方案.原创 2020-10-25 09:44:36 · 1359 阅读 · 0 评论 -
Java并发| Atomic包下的原子操作类使用与原理解析
我们为什么一定要学习 Atomic 包下的这些原子操作类呢? 下面告诉你原因。Java中有那么一些类,是以Atomic开头的。这一系列的类我们称之为原子操作类。以最简单的类AtomicInteger为例。它相当于一个int变量,我们执行Int的 i++ 的时候并不是一个原子操作。而使用AtomicInteger的incrementAndGet却能保证原子操作。 更新变量这种场景下效果和 synchronized 相同,却要简单高效的多。这篇文章主要介绍了 Java并发包下 Atomic包中的原子操作原创 2020-09-30 10:20:21 · 1446 阅读 · 2 评论 -
死磕Java并发编程(9):无界线程安全队列ConcurrentLinkedQueue源码解析
这篇文章理解起来不难,相比于 ConcurrentHashMap 比较简单,因为不涉及扩容以及数据迁移等操作,相信你读完一定会有收获的。本文是死磕Java并发编程系列文章的第 9 篇,主角就是 java 并发包中提供的 ConcurrentLinkedQueue 这是一个线程安全且无界的队列(因为是基于链表实现的,所以无界) ,在并发编程中经常需要用到线程安全的队列,面试线程池时,其中的队列也可以采用这个队列来实现,它线程安全,且采用先进先出的规则排序。通过整个并发系列文章的学习,我们能想到如果要实现原创 2020-05-12 14:32:06 · 706 阅读 · 0 评论 -
死磕Java并发编程(8):CurrentHashMap如何实现高效地线程安全?在Java8中有哪些设计实现的演进?
这篇文章一开始我以为会比较简单,但是在深入源码分析时,遇到了很大的阻碍,比前面我们分析AQS以及读写锁的源码要难理解的多,断断续续也写了4天了。 如果你看完还是没有理解的话,那我在这里表示深深的歉意,同时也欢迎你和我一起沟通。本文是死磕Java并发编程系列文章的第 8 篇,主角就是 java 并发包中提供的 CurrentHashMap 这是一个线程安全且高效的HashMap ,也是面试的高...原创 2020-05-07 00:54:43 · 2258 阅读 · 2 评论 -
死磕Java并发编程(7):读写锁 ReentrantReadWriteLock 源码解析
这是《死磕Java并发编程》系列的第7篇文章 我们在一起来看看 读写锁 ReentrantReadWriteLock 的源码分析,基于Java8。阅读建议:由于Java并发包中的锁都是基于AQS实现的,本篇的读写锁也不例外。如果你还不了解的话,阅读起来会比较吃力。建议先阅读上一篇文章关于 AbstractQueuedSynchronizer 的源码解析。什么是读写锁?提到锁,你可能会想到...原创 2020-05-02 16:19:34 · 364 阅读 · 0 评论 -
死磕Java并发编程(6):AQS详解,这次就彻底搞懂Java并发包中的锁原理,不用每次面试都去背一遍了
你是不是在面试过程中经常被问到了解Java中的锁? 可能你也会从网上的博客文章中看到过相关概念和知识,可是如果没有深入理解,对锁这块知识做相关的梳理,形成自己的知识脑图,过不久就会忘记。结果就是每次面试都得从头复习一遍,费时费力。今天开始Java并发中锁的学习,主要的目的是梳理学习Java并发包中有关锁的API和组件。目标是知道如何使用以及具体实现原理。真正做到知其然知其所以然,才能得心应...原创 2020-04-26 09:25:04 · 690 阅读 · 4 评论 -
Java开发这么久,这些线程的基础知识你确定都会了?
熟悉Java开发的同学都知道,Java天生支持多线程编程的。这篇文章我们主要来学习下Java线程的基础知识,从线程的启动到不同线程间的通信方式,目的是更系统的掌握Java线程基础。本文的讲解主要从以下几个点展开:什么是线程线程都有哪几种状态线程的启动和终止线程间的通信利用本文讲解的线程知识,实现一个简单的线程池如果上面列出的这几个点,你都已经熟练的掌握了,那么可能本文就无法给你带来帮助...原创 2020-04-12 12:58:41 · 316 阅读 · 2 评论 -
happens-before是什么?JMM最最核心的概念,看完你就懂了
happens-before是JMM最核心的概念。对应Java程序员来说,理解happens-before是理解JMM的关键。我的并发系列文章,前面三篇学习了 Java并发机制底层实现的三个关键要素:volatile、synchronized、原子性操作。以及Java内存模型是为了解决在并发环境下由于 CPU缓存、编译器和处理器的指令重排序 导致的可见性、有序性问题。 其中重点学习了 vo...原创 2020-04-06 15:53:45 · 804 阅读 · 0 评论 -
volatile关键字你不了解?赶紧来看看
通过上一篇文章对 JMM 的学习,你一定掌握了,Java 内存模型就是规范了 JVM 如何提供按需禁用缓存和编译优化的方法。具体来说,这些方法包括 volatile、synchronized 和 final 三个关键字,以及六项 Happens-Before 规则。这篇文章,我们就来深入了解下 高频面试点 volatile 关键字的内存语义和实现。 同时搞清楚了volatile,对我们后续...原创 2020-04-04 23:28:40 · 254 阅读 · 0 评论 -
死磕Java并发?首先需要学习的并发机制底层实现的三个原理
开篇 Java并发编程的基底层实现 探究volatile的前世今生 synchnorized的原理与应用 Java对象头 锁的升级与对比 偏向锁 轻量级锁 原子操作 Java如何实现原子操作 使用循环CAS实现原子操作 使用锁机制实现原子操作 总结开篇说到并发编程,相信很多人和我一样,对于“并发编程” ...原创 2020-04-03 02:50:14 · 576 阅读 · 0 评论 -
阿里面试,一面就倒在了Java内存模型上
目录什么是Java内存模型可见性问题原子性问题指令重排序带来的问题敲黑板总结扩展最近金三银四跳槽找工作的高峰期,我也凑热闹准备出去看看机会,结果就写了简历,一边投一边复习准备试虽然还没开始就结束了,伤心归伤心,失落就失落,该复盘我们还是要的撒?短短半个小时,我觉得回答最不好的可能就是面试官问:谈谈你对Java内存模型的理解?这个问题吧,问的比较泛,可能是...原创 2020-04-04 13:47:49 · 415 阅读 · 0 评论