Java核心技术
文章平均质量分 77
分享Java核心技术,多线程,JVM,流,新特性等。
Java技术栈
Java每天一篇干货,微信公众号:Java技术栈
展开
-
20200202,千年难遇啊!
本文收录在Java技术栈Github,欢迎Star:https://github.com/javastacks/javastack已经在家好几天没出门了,是不是都憋疯了?今天又是个特殊的日子,我来给大家分享一个节日小知识。20200202 为什么说是千万难遇的一天?因为今天是:世界完全对称日,很少遇见,看起来和回文数差不多,如:2020 倒过来就是 0202,拼在一起就是:202...原创 2020-02-02 15:12:29 · 1643 阅读 · 0 评论 -
小伙子,你真的搞懂 transient 关键字了吗?
先解释下什么是序列化我们的对象并不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序列化技术。Java序列化技术正是将对象转变成一串由二进制字节组成的数组,可以通过将二进制数据保存到磁盘或者传输网络,磁盘或者网络接收者可以在对象的属类的模板上来反序列化类的对象,达到对象持久化的目的。更多序列化请参考:《关于Java序列化你应该知道的一切》这篇文章。什么是 tr...原创 2019-03-06 08:50:08 · 4876 阅读 · 0 评论 -
分享一份Java架构师学习资料,2019年最新整理!
分享一套不错的架构师学习参考资料,免费领取的,无任何套路!关注Java大后端公众号,在后台回复关键字:大大,即可免费领取,觉得资料不错,转发给其他朋友呗~长按关注Java大后端公众号领取。...原创 2019-02-28 17:09:54 · 3350 阅读 · 4 评论 -
10 个深恶痛绝的 Java 异常。。
异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题。什么是异常及异常的分类请看这篇文章:一张图搞清楚 Java 异常机制。今天,栈长来列一下 Java 中经常遇到的前 10 个异常,排名不分先后。1、NullPointerException空指针异常,操作一个 null 对象的方法或属性时会抛出这个异...原创 2019-02-15 09:29:28 · 697 阅读 · 0 评论 -
从 0 开始搭建一个技术博客,私藏干货~
技术博客的选型有很多种,如:博客园、CSDN、开源中国、简书、知乎等……都可以用来写文章,形成自己的技术博客。上面的博客都是第三方的,有没有方式搭建自己的服务器、自己的域名的博客呢?栈长知道的成熟方案有:WordPress, Hexo 等,栈长的博客就是用 Hexo 搭建的。下面贴上栈长博客的地址,也是Java技术栈的官方博客地址:www.javastack.cn今天分享一下,如何从...原创 2019-01-25 14:07:30 · 1174 阅读 · 0 评论 -
别再写 bug 了,避免空指针的 5 个案例!
空指针是我们 Java 开发人员经常遇到的一个基本异常,这是一个极其普遍但似乎又无法根治的问题。本文,栈长将带你了解什么是空指针,还有如何有效的避免空指针。什么是空指针?当一个变量的值为 null 时,在 Java 里面表示一个不存在的空对象,没有实际内容,没有给它分配内存,null 也是对象成员变量的默认值。所以,一个对象如果没有进行初始化操作,这时候,如果你调用这个对象的方法或者变量,...原创 2019-01-18 14:59:51 · 994 阅读 · 0 评论 -
StringBuffer 和 StringBuilder 的 3 个区别
StringBuffer 和 StringBuilder 它们都是可变的字符串,不过它们之间的区别是 Java 初中级面试出现几率十分高的一道题。这么简单的一道题,栈长在最近的面试过程中,却经常遇到很多求职者说反,搞不清使用场景的情况。今天,栈长我带大家彻底搞懂 StringBuffer 和 StringBuilder 的几个区别和它们的应用场景,如果你是大牛,请略过,如果你是菜鸟,或者对这两个...原创 2019-01-16 11:25:07 · 1109 阅读 · 0 评论 -
Java 11 已发布,String 还能这样玩!
在文章《Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码》中,我有介绍到 Java 11 的八个新特性,其中关于 String 加强部分,我觉得有点意思,这里单独再拉出来讲。Java 11 增加了一系列的字符串处理方法,如以下所示。// 判断字符串是否为空白" ".isBlank(); // true// 去除首尾空格" Javastac...原创 2018-12-12 09:17:14 · 1069 阅读 · 0 评论 -
Hashtable 为什么不叫 HashTable?
前几天在写《HashMap 和 Hashtable 的 6 个区别》这篇文章的时候,差点把 Hashtable 写成了 HashTable,后来看源码证实了是:Hashtable,小写的 "t"able,不符合驼峰命名规则。什么是驼峰命名规则,来看下面的关键字:HashMapArrayListConcurrentHashMap简单来说就是,标识符的每个单词首字母必须大写,看起来像是...原创 2018-12-10 10:25:40 · 993 阅读 · 0 评论 -
Java 中初始化 List 集合的 6 种方式!
List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下。1、常规方式List<String> languages = new ArrayList<>();languages.add("Java");languages.add("PHP");languages.add("Pyt...原创 2018-12-06 08:58:54 · 83986 阅读 · 5 评论 -
HashMap 和 Hashtable 的 6 个区别,最后一个没几个人知道!
HashMap 和 Hashtable 是 Java 开发程序员必须要掌握的,也是在各种 Java 面试场合中必须会问到的。但你对这两者的区别了解有多少呢?现在,栈长我给大家总结一下,或许有你不明朗的地方,在栈长的指点下都会拨开迷雾见晴天。1、线程安全Hashtable 是线程安全的,HashMap 不是线程安全的。为什么说 HashTable 是线程安全的?来看下 Hashtable...原创 2018-12-05 08:55:05 · 617 阅读 · 0 评论 -
多线程通信的三大法器,你真的会用吗?
wait, notify, notifyAll 是多线程之间通信最重要的 3 个方法,今天,栈长给大家普及一下它们的知识要点及应用实战。定义wait:让持有该对象锁的线程等待;notify: 唤醒任何一个持有该对象锁的线程;notify: 唤醒所有持有该对象锁的线程;它们 3 个的关系是,调用对象的 wait 方法使线程暂停运行,通过 notify/ notifyAll 方法唤醒调用 w...原创 2018-11-27 09:42:28 · 411 阅读 · 0 评论 -
多线程 Thread.yield 方法到底有什么用?
概念我们知道 start() 方法是启动线程,让线程变成就绪状态等待 CPU 调度后执行。那 yield() 方法是干什么用的呢?来看下源码。/** * A hint to the scheduler that the current thread is willing to yield * its current use of a processor. The scheduler is...原创 2018-11-20 09:31:55 · 18696 阅读 · 2 评论 -
多线程 start 和 run 方法到底有什么区别?
昨天栈长介绍了《Java多线程可以分组,还能这样玩!》线程分组的妙用。今天,栈长会详细介绍 Java 中的多线程 start() 和 run() 两个方法,Java 老司机请跳过,新手或者对这两个不是很理解的可以继续往下看。首先要知道实现多线程最基本的两种方式:1、继承 java.lang.Thread 类;2、实现 java.lang.Runnable接口;其中 Thread 类也是实现...原创 2018-11-13 11:44:31 · 1554 阅读 · 0 评论 -
刚写完排序算法,就被开除了…
刚写完这段代码,就被开除了……栈长前些天刚写完上面这篇文章,没几天,又来一个悲剧。。。据说是一个月薪 9K 的 Java 程序员,因老板让他写一个排序算法,然后他就写了一段屌炸天的休眠排序算法,接着他就被老板开除了……排序算法代码大概是这样的:这段代码有什么问题?这个程序员更屌啊,数字排序,用一行简单的 Arrays.sort 就搞定的东西,他竟用到了这么多概念。1、循环2、线程休...原创 2018-11-13 11:38:13 · 6274 阅读 · 5 评论 -
Java多线程可以分组,还能这样玩!
前面的文章,栈长和大家分享过多线程创建的3种方式《实现 Java 多线程的 3 种方式》。但如果线程很多的情况下,你知道如何对它们进行分组吗?和 Dubbo 的服务分组一样,Java 可以对相同性质的线程进行分组。来看下线程类 Thread 的所有构造方法。如图所示,带有 ThreadGroup 的所有线程构造方法都可以定义线程组的。线程组使用 java.lang.ThreadGrou...原创 2018-11-09 08:52:14 · 1424 阅读 · 0 评论 -
Java 程序员必备的 15 个框架,前 3 个地位无可动摇!
Java 程序员方向太多,且不说移动开发、大数据、区块链、人工智能这些,大部分 Java 程序员都是 Java Web/后端开发。那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢?今天,栈长我给大家列举了一些通用的、必须掌握的框架,学会这些,20K+ 不是问题。1.Spring毫无疑问,Spring 框架现在是 Java 后端框架家族里面最强大的一个,其拥有 IOC 和 AOP...原创 2018-11-06 09:28:09 · 1879 阅读 · 0 评论 -
写完这段代码,就被开除了……
最近在Java技术栈微信公众号粉丝微信群里看到一张图,说是刚写完这段下面这段代码就被开除了。开除的原因是因为没写注释吗?显然不是,休眠的逻辑,大家都懂,不需要写注释,你注释写休眠 1 天也没意义啊。。。这个程序员的思维不是一般的牛啊,获取下一天的日期,居然要休眠等到下一天再获取,欲哭无泪。。。再来看下加强版的,获取未来几天的日期。。。/** * 获取未来几天的日期 * @param...原创 2018-11-01 09:22:59 · 4023 阅读 · 2 评论 -
Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码
美国时间 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本。为什么说是长期版本,看下面的官方发布的支持路线图表。可以看出 Java 8 扩展支持到 2025 年,而 Java 11 扩展支持到 2026 年。现在大部分都在用 Java 8,Java 9 和 10 目前很少有人在用,至少我没有发现有公司在生产环境应用的,那就是找死。...原创 2018-09-27 09:05:42 · 760 阅读 · 0 评论 -
一文搞懂 Java 线程中断
在之前的一文《如何"优雅"地终止一个线程》中详细说明了 stop 终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程的方法吗?答案是肯定的,它就是我们今天要分享的——线程中断。下面的这断代码大家应该再熟悉不过了,线程休眠需要捕获或者抛出线程中断异常,也就是你在睡觉的时候突然有个人冲进来把你吵醒了。try { Thread.sleep(3000);} catch (Interrup...原创 2018-09-25 10:23:00 · 3358 阅读 · 0 评论 -
为了写中秋这篇文章,我学了 20 种编程语言!
为了给大家送中秋祝福,老哥也是绞尽脑汁了啊,最后想出了用排行榜前 20 名的编程语言输出中秋快乐这种方式!首先来看下 9 月编程语言排行!排行榜来自 TIOBE 2018.09虽然这些语言大部分我都不会,但为了给大家送中秋祝福,我豁出去了,决定撸起键盘就是干!!!1.JavaSystem.out.println("Java技术栈祝大家中秋快乐!");2.Cprintf("...原创 2018-09-25 10:20:12 · 609 阅读 · 1 评论 -
sleep( ) 和 wait( ) 的这 5 个区别,你知道几个?
sleep(休眠) 和 wait(等待) 方法是 Java 多线程中常用的两个方法,它们有什么区别及一些该注意的地方有哪些呢?下面给大家一一分解。区别1:使用限制使用 sleep 方法可以让让当前线程休眠,时间一到当前线程继续往下执行,在任何地方都能使用,但需要捕获 InterruptedException 异常。try { Thread.sleep(3000L);} catch (In...原创 2018-09-19 09:02:59 · 2887 阅读 · 1 评论 -
Java 中的 String 真的是不可变吗?
我们都知道 Java 中的 String 类的设计是不可变的,来看下 String 类的源码。public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character stor...原创 2018-09-17 15:54:01 · 413 阅读 · 0 评论 -
深入浅出 Java 中的包装类
前阵子,我们分享了《Java中的基本数据类型转换》这篇文章,对许多粉丝还是有带来帮助的,今天讲一下 Java 包装类的的由来,及自动装箱、拆箱的概念和原理。什么是包装类型Java 设计当初就提供了 8 种 基本数据类型及对应的 8 种包装数据类型。我们知道 Java 是一种面向对象编程的高级语言,所以包装类型正是为了解决基本数据类型无法面向对象编程所提供的。下面是基本数据类型与...原创 2018-09-14 08:59:22 · 614 阅读 · 0 评论 -
Java异常处理 10 个最佳实践
异常处理是Java 开发中的一个重要部分。它是关乎每个应用的一个非功能性需求,是为了处理任何错误状况,比如资源不可访问,非法输入,空输入等等。Java提供了几个异常处理特性,以try,catch 和 finally 关键字的形式内建于语言自身之中。Java 编程语言也允许你创建新的异常,并通过使用 throw 和 throws关键字抛出它们。事实上,在Java编程中,Java的异常处理不单单是知道...原创 2018-08-27 10:16:34 · 742 阅读 · 0 评论 -
阿里巴巴制定了这 16 条设计规约!
1、【强制】存储方案和底层数据结构的设计获得评审一致通过,并沉淀成为文档。说明:有缺陷的底层数据结构容易导致系统风险上升,可扩展性下降,重构成本也会因历史数据迁移和系统平滑过渡而陡然增加,所以,存储方案和数据结构需要认真地进行设计和评审,生产环境提交执行后,需要进行 double check。正例:评审内容包括存储介质选型、表结构设计能否满足技术方案、存取性能和存储空间能否满足...原创 2018-08-27 10:10:01 · 814 阅读 · 0 评论 -
Java 虚拟机对锁优化所做的努力
作为一款公用平台,JDK 本身也为并发程序的性能绞尽脑汁,在 JDK 内部也想尽一切办法提供并发时的系统吞吐量。这里,我将向大家简单介绍几种 JDK 内部的 “锁” 优化策略。1、 锁偏向锁偏向是一种针对加锁操作的优化手段。如果一个线程获得了锁,那么锁就进入偏向模式。当这个线程再次请求锁时,无须再做任何同步操作。这样就节省了大量有关锁申请的操作,从而提高了程序性能。因此,对于几...原创 2018-08-27 10:05:14 · 341 阅读 · 0 评论 -
推荐:7 月份值得一看的 Java 技术干货!
月底了,又到了我们总结这一个月 Java 技术干货的时候了,又到了我们给粉丝免费送书的日子了。7 月份干货总结Oracle 发布了一个全栈虚拟机 GraalVM一文带你深入拆解 Java 虚拟机图文带你了解 8 大排序算法Spring Boot 2.x 新特性总结及迁移指南Spring Boot 核心配置文件详解Spring Boot 配置随机数那些小技巧Java 8 之...原创 2018-08-02 17:53:11 · 674 阅读 · 0 评论 -
屌炸天,Oracle 发布了一个全栈虚拟机 GraalVM,支持 Python!
前阵子,Oracle 发布了一个黑科技 “GraalVM”,号称是一个全新的通用全栈虚拟机,并具有高性能、跨语言交互等逆天特性,真有这么神奇?GraalVM 简介GraalVM 是一个跨语言的通用虚拟机,不仅支持了 Java、Scala、Groovy、Kotlin 等基于 JVM 的语言,以及 C、C++ 等基于 LLVM 的语言,还支持其他像 JavaScript、Ruby、Pyth...原创 2018-07-26 10:32:47 · 1819 阅读 · 0 评论 -
出场率比较高的一道多线程安全面试题
这个问题是 Java 程序员面试经常会遇到的吧。工作一两年的应该都知道 ArrayList 是线程不安全的,要使用线程安全的就使用 Vector,这也是各种 Java 面试宝典里面所提及的,可能很多工作好几年的程序员都停留在这个知识面上。先说说为什么 ArrayList 是线程不安全的吧,来看以下的代码。/** * 微信公众号:Java技术栈 */public class T...原创 2018-07-13 09:21:38 · 717 阅读 · 0 评论 -
6月份值得一看的 Java 技术干货!
6月过完了,这一年都 TM 过了一半了,大家都回想下自己这大半年,你都收获了什么??技术有提升吗?对象搞定了吗?说多了都是泪,唯有 WIFI、空调、西瓜、足球能够解忧。。话说中国队怎么还不上场?哈哈,中国队和你一样在家看球呢。上界冠军德国战车队情况怎么样了?很惨,都被韩国棒子队打爆了。。买了多少德国?先让让,把天台先让给 6 月暴跌股民们。还不如看下 6 月的 Java 干货,提升...原创 2018-07-04 10:52:50 · 696 阅读 · 0 评论 -
90 % Java 程序员被误导的一个性能优化策略
我们经常看到一些 Java 性能优化的书或者理念,说不要在循环内定义变量,这样会占用过多的内存影响性能,而要在循环外面定义。接触 Java 这么久以来,相信很多 Java 程序员都被这种代码性能优化策略所误导。看下面两个示例,示例1在循环外定义变量,示例2是在循环内定义变量。/** * 循环外定义变量 */private static void outer() { Jav...原创 2018-07-04 10:52:22 · 376 阅读 · 0 评论 -
Java 11 快要来了,编译 & 运行一个命令搞定!
Java 11 马上要来了,原定于 9 月发布,还有不到 3 个月了,敬请期待更多新功能被加入到 11 当中,本文本讲的是 JEP 330 这个新特性。化繁为简,一个命令编译运行源代码看下面的代码。// 编译javac Javastack.java// 运行java Javastack在我们的认知里面,要运行一个 Java 源代码必须先编译,再运行,两步执行动作。而...原创 2018-06-19 09:37:36 · 2573 阅读 · 0 评论 -
Java 10 实战第 1 篇:局部变量类型推断
现在 Java 9 被遗弃了直接升级到了 Java 10,之前也发过 Java 10 新特性的文章,现在是开始实战 Java 10 的时候了。今天要实战的是 Java 10 中最重要的特性:局部变量类型推断,大家都知道是 var 关键字,但具体怎么使用,及要注意什么要点呢?我们通过几个例子来讲解局部变量类型推断这个新特性!什么是局部变量类型推断var javastack =...原创 2018-06-11 08:51:47 · 522 阅读 · 0 评论 -
Java 中的伪共享详解及解决方案
1. 什么是伪共享CPU 缓存系统中是以缓存行(cache line)为单位存储的。目前主流的 CPU Cache 的 Cache Line 大小都是 64 Bytes。在多线程情况下,如果需要修改“共享同一个缓存行的变量”,就会无意中影响彼此的性能,这就是伪共享(False Sharing)。2. 缓存行由于共享变量在 CPU 缓存中的存储是以缓存行为单位,一个缓存行可以存储多个...原创 2018-06-05 09:07:10 · 412 阅读 · 0 评论 -
5月份值得一看的 Java 技术干货!
5月又即将要离我们远去了,这个月有小长假51劳动节,有54青年节,有513母亲节,更有坑爹的520神马节?!!废话不说,又到了总结上个月干货的时候了,这个月我们带来了各种Java技术干货,都是不得不看的 Java 实战经验及最新的热门资讯。如果你有错过本月干货,那么你可以在这里统一回顾一下。Java序列化技术即将被废除!分布式作业 Elastic-Job 从理论到实战京东购物车的...原创 2018-05-31 09:09:55 · 588 阅读 · 0 评论 -
彻底理解Java中的基本数据类型转换(自动、强制、提升)
我们的对象并不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序列化技术。Java序列化技术正是将对象转变成一串由二进制字节组成的数组,可以通过将二进制数据保存到磁盘或者传输网络,磁盘或者网络接收者可以在对象的属类的模板上来反序列化类的对象,达到对象持久化的目的。如果你还不熟悉 Java 序列化技术,请详细阅读《关于Java序列化你应该知道的一切》这篇文章。目...原创 2018-05-30 16:37:47 · 2890 阅读 · 0 评论 -
Java序列化技术即将被废除!!!
我们的对象并不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序列化技术。Java序列化技术正是将对象转变成一串由二进制字节组成的数组,可以通过将二进制数据保存到磁盘或者传输网络,磁盘或者网络接收者可以在对象的属类的模板上来反序列化类的对象,达到对象持久化的目的。如果你还不熟悉 Java 序列化技术,请详细阅读《关于Java序列化你应该知道的一切》这篇文章。目...原创 2018-05-30 09:02:53 · 3856 阅读 · 0 评论 -
干货 | Java中获取类名的3种方法!
获取类名的方法Java 中获取类名的方式主要有以下三种。getName()返回的是虚拟机里面的class的类名表现形式。getCanonicalName()返回的是更容易理解的类名表示。getSimpleName()返回的是类的简称。都有什么区别?通过一个实例来看下它们主要的区别。public class TestClass { ...原创 2018-05-22 15:36:20 · 5346 阅读 · 0 评论 -
switch case 支持的 6 种数据类型!
有粉丝建议可以偶尔推送一些 Java 方面的基础知识,一方面可以帮助一初学者,也可以兼顾中高级的开发者。那么今天就讲一下 Java 中的 switch case 语句吧,有忘记的同学正好可以温习一下。Java 中 switch case 语句用来判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。语法格式如下:switch(expression){ case v...原创 2018-05-22 15:29:22 · 24112 阅读 · 1 评论