
Java
Hollis在csdn
www.hollischuang.com
-
原创 丢弃掉那些BeanUtils工具类吧,MapStruct真香!!!
在前几天的文章《为什么阿里巴巴禁止使用Apache Beanutils进行属性的copy?》中,我曾经对几款属性拷贝的工具类进行了对比。然后在评论区有些读者反馈说MapStruct才是真的香,于是我就抽时间了解了一下MapStruct。结果我发现,这真的是一个神仙框架,炒鸡香。这一篇文章就来简单介绍下MapStruct的用法,并且再和其他几个工具类进行一下对比。为什么需要MapStruct ?首先,我们先说一下MapStruct这类框架适用于什么样的场景,为什么市面上会有这么多的类似的框架。在软件2020-08-10 12:55:3017745
11
-
原创 原来不只是fastjson,这个你每天都在用的类库也被爆过反序列化漏洞!
在《fastjson到底做错了什么?为什么会被频繁爆出漏洞?》文章中,我从技术角度分析过为什么fastjson会被频繁爆出一些安全漏洞,然后有人在评论区发表"说到底就是fastjson烂…"等言论,一般遇到这种评论我都是不想理的。但是事后想想,这个事情还是要单独说一下,因为这种想法很危险。一旦这位读者有一天当上了领导,那么如果他负责的项目发生了漏洞,他还是站出来说"都怪XXX代码写的烂…",这其实是非常可怕的。工作久了的话,就会慢慢有种感觉:代码都是人写的,是人写的代码就可能存在漏洞,这个是永远都无法2020-07-14 10:16:07634
0
-
原创 fastjson到底做错了什么?为什么会被频繁爆出漏洞?
GitHub 15.8k Star 的Java工程师成神之路,不来了解一下吗!GitHub 15.8k Star 的Java工程师成神之路,真的不来了解一下吗!GitHub 15.8k Star 的Java工程师成神之路,真的真的不来了解一下吗!fastjson大家一定都不陌生,这是阿里巴巴的开源一个JSON解析库,通常被用于将Java Bean和JSON 字符串之间进行转换。前段时间,fastjson被爆出过多次存在漏洞,很多文章报道了这件事儿,并且给出了升级建议。但是作为一个开发者,我更关注的2020-07-06 09:53:4517256
23
-
原创 谁说双非本科就一定无缘阿里?H哥粉丝6棉通过,喜提Offer!
本文来自作者投稿(原作者:小胖儿),原作者是一位2021届本科毕业生,就读于一所双非(非985、非211)院校,在今年2月份的时候,我曾经帮他指导过简历,并且根据他的简历内容帮他提了一些可能会问到的问题。4月份的时候说是已经通过了阿里的四面,最近又得知已经顺利的拿到了阿里的Offer,非常为他感到高兴。他还顺便总结了一下自己面试经历,介绍了一下自己是如何准备的,也希望能够给大家带来一些帮助。以下是他的原文内容,我也对其中的部分内容做了些批注。前言前两天,我收到了阿里巴巴的暑假实习offer,从学2020-05-27 10:38:402313
2
-
原创 我说我精通字符串,面试官竟然问我Java中的String有没有长度限制!?|附视频讲解
关于String有没有长度限制的问题,我之前单独写过一篇文章分析过,最近我又抽空回顾了一下这个问题,发现又有了一些新的认识。于是准备重新整理下这个内容。这次在之前那篇文章的基础上除了增加了一些验证过程外,还有些错误内容的修正。我这次在分析过程中会尝试对Jdk的编译过程进行debug,并且会参考一些JVM规范等全方面的介绍下这个知识点。因为这个问题涉及到Java的编译原理相关的知识,所以通过视频的方式讲解会更加容易理解一些,视频我上传到了B站:https://www.bilibili.com/video/2020-05-20 09:46:495561
10
-
原创 老板:kill -9 的原理都不知道就敢去线上执行?明天不用来了!
GitHub 14.5k Star 的Java工程师成神之路,开放阅读了!相信很多程序员对于Linux系统都不陌生,即使自己的日常开发机器不是Linux,那么线上服务器也大部分都是的,所以,掌握常用的Linux命令也是程序员必备的技能。但是,怕就怕很多人对于部分命令只是一知半解,使用不当就能导致线上故障。前段时间,我们的线上应用报警,频繁FGC,需要紧急处理问题,于是有同事去线上重启机器(正常程序应该是先采集堆dump,然后再重启,方便排查是否存在内存泄露等问题)。但是在重启过程中,同事发现正常的重2020-05-13 09:58:242170
4
-
原创 《新版阿里巴巴Java开发手册》提到的三目运算符的空指针问题到底是个怎么回事?
最近,阿里巴巴Java开发手册发布了最新版——泰山版,这个名字起的不错,一览众山小。新版新增了30+规约,其中有一条规约引起了作者的关注,那就是手册中提到在三目运算符使用过程中,需要注意自动拆箱导致的NullPointerException(后文简称:NPE)问题:因为这个问题我很久之前(2015年)遇到过,曾经在博客中也记录过,刚好最新的开发手册再次提到了这个知识点,于是把之前的文章内容翻...2020-05-07 10:07:351124
2
-
原创 Java工程师成神之路 | 2020正式版
主要版本更新时间备注v3.02020-03-31知识体系完善,在v2.0的基础上,新增20%左右的知识点调整部分知识的顺序及结构,方便阅读和理解通过GitHub Page搭建,便于阅读v2.02019-02-19结构调整,更适合从入门到精通;进一步完善知识体系; 新技术补充;v1.12018-03-12增加新技术知识、完善知识体系v1.0201...2020-04-13 09:50:271842
2
-
原创 新版任你发,我用Java 8
最近,新版本的JDK又双叒叕发布了,目前已经JDK 14 了,从2017年8月份开始,JDK的更新频率变成了每半年一次,将固定在每年的3月份和9月份发布新版本。按照这个频率,过不了多久,JDK 20 就要推出了…最早的JDK发布于1996年,相信比很多读者的年龄都要小,其发布频次如下:Java 8 与 Java 11 为当前提供支持的LTS(长期支持)版本;2018年9月,随着 Java...2020-03-23 10:00:172598
9
-
原创 Java 14 发布了,不使用"class"也能定义类了?还顺手要干掉Lombok!
2020年3月17日发布,Java正式发布了JDK 14 ,目前已经可以开放下载。在JDK 14中,共有16个新特性,本文主要来介绍其中的一个特性:JEP 359: Records官方吐槽最为致命早在2019年2月份,Java 语言架构师 Brian Goetz,曾经写过一篇文章(http://cr.openjdk.java.net/~briangoetz/amber/datum.html )...2020-03-20 09:51:455174
4
-
原创 求你了,别再说Java对象都是在堆内存上分配空间的了!
Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点,所以,即使是一个Java的初学者,也一定或多或少的对JVM有一些了解。可以说,关于JVM的相关知识,基本是每个Java开发者必学的知识点,也是面试的时候必考的知识点。在JVM的内存结构中,比较常见的两个区域就是堆内存和栈内存(如无特指,本文提到的栈均指的是虚拟机栈),关于堆和栈的区别,很多开发者也是如数家珍,有很多书籍,...2020-03-16 09:40:521947
2
-
原创 Java堆内存是线程共享的!面试官:你确定吗?
Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点,所以,即使是一个Java的初学者,也一定或多或少的对JVM有一些了解。可以说,关于JVM的相关知识,基本是每个Java开发者必学的知识点,也是面试的时候必考的知识点。在JVM的内存结构中,比较常见的两个区域就是堆内存和栈内存(如无特指,本文提到的栈均指的是虚拟机栈),关于堆和栈的区别,很多开发者也是如数家珍,有很多书籍,...2020-03-10 10:06:262785
10
-
原创 我说我了解集合类,面试官竟然问我为啥HashMap的负载因子不设置成1!?
在Java基础中,集合类是很关键的一块知识点,也是日常开发的时候经常会用到的。比如List、Map这些在代码中也是很常见的。个人认为,关于HashMap的实现,JDK的工程师其实是做了很多优化的,要说所有的JDK源码中,哪个类埋的彩蛋最多,那我想HashMap至少可以排前五。也正是因为如此,很多细节都容易被忽视,今天我们就来关注其中一个问题,那就是:为什么HashMap的负载因子设置成0.7...2020-02-24 09:17:594033
2
-
原创 阿里巴巴Java开发手册建议创建HashMap时设置初始化容量,但是多少合适呢?
集合是Java开发日常开发中经常会使用到的,而作为一种典型的K-V结构的数据结构,HashMap对于Java开发者一定不陌生。关于HashMap,很多人都对他有一些基本的了解,比如他和hashtable之间的区别、他和concurrentHashMap之间的区别等。这些都是比较常见的,关于HashMap的一些知识点和面试题,想来大家一定了熟于心了,并且在开发中也能有效的应用上。但是,作者在很多...2020-02-19 10:34:012084
0
-
原创 新来个技术总监,禁止我们使用Lombok!
我有个学弟,在一家小型互联网公司做Java后端开发,最近他们公司新来了一个技术总监,这位技术总监对技术细节很看重,一来公司之后就推出了很多"政策",比如定义了很多开发规范、日志规范、甚至是要求大家统一使用某一款IDE。但是这些都不是我这个学弟和我吐槽的点,他真正和我吐槽的是,他很不能理解,这位新来的技术总监竟然禁止公司内部所有开发使用Lombok。但是又没给出十分明确的,可以让人信服的理由。于...2020-02-11 10:42:02152822
191
-
原创 2020年Java程序员应该学习的10大技术
对于Java开发人员来说,最近几年的时间中,Java生态诞生了很多东西。每6个月更新一次Java版本,以及发布很多流行的框架,如Spring 5、Spring Security 5和Spring Boot 2等,这些都给我们带来了很大的挑战。在2019年初,我认为Java 10还是比较新的,但是,在我学习完所有Java 10的特性之前,Java 11、Java 12、Java 12 已经接踵而至...2020-01-09 10:22:2117745
19
-
原创 为啥HashMap的默认容量是16?
集合是Java开发日常开发中经常会使用到的,而作为一种典型的K-V结构的数据结构,HashMap对于Java开发者一定不陌生。在日常开发中,我们经常会像如下方式以下创建一个HashMap: Map<String, String> map = new HashMap<String, String>(); 但是,大家有没有想过,上面的代码中,我们并没有给H...2019-12-09 09:39:3013992
19
-
原创 我以为我对Mysql索引很了解,直到我遇到了阿里的面试官
本文来自微信公众号:Hollis,原作者是一位不愿意透露姓名的粉丝相信很多人对于MySQL的索引都不陌生,索引(Index)是帮助MySQL高效获取数据的数据结构。因为索引是MySQL中比较重点的知识,相信很多人都有一定的了解,尤其是在面试中出现的频率特别高。楼主自认为自己对MySQL的索引相关知识有很多了解,而且因为最近在找工作面试,所以单独复习了很多关于索引的知识。但是,我还是图样图森...2019-12-05 09:16:271796
0
-
原创 关于HashMap容量的初始化,还有这么多学问。
在《[HashMap中傻傻分不清楚的那些概念][1]》文章中,我们介绍了HashMap中和容量相关的几个概念,简单介绍了一下HashMap的扩容机制。文中我们提到,默认情况下HashMap的容量是16,但是,如果用户通过构造函数指定了一个数字作为容量,那么Hash会选择大于该数字的第一个2的幂作为容量。(3->4、7->8、9->16)本文,延续上一篇文章,我们再来深入学习下,到底应不应该设置...2019-12-03 09:41:591749
0
-
原创 什么鬼,面试官竟然让我用Redis实现一个消息队列!!?
GitHub 9.4k Star 的Java工程师成神之路 ,不来了解一下吗?GitHub 9.4k Star 的Java工程师成神之路 ,真的不来了解一下吗?GitHub 9.4k Star 的Java工程师成神之路 ,真的确定不来了解一下吗?众所周知,redis是一个高性能的key-value数据库,在NoSQL数据库市场上,redis自己就占据了将近半壁江山,足以见到其强大之处。同时,...2019-12-02 09:49:242961
0
-
原创 不瞒你说,我也参加过培训
最近,经常有很多粉丝问我一些关乎培训的事情。最多的莫过于以下几个问题:1、我技术不太好,到底要不要报培训班2、如果要报培训班,什么时候报最合适3、到底哪家机构最靠谱呢?不知道该怎么选择4、现在很多公司都歧视培训的,你怎么看?还有人和我表达过这样的想法:没有培训的时候,很多人很迷茫;有了培训以后,很多人更迷茫了。关于这个问题,我倒是可以简单谈一谈,毕竟我也是个过来人,因...2019-11-18 09:42:102268
3
-
原创 FastJson稍微使用不当就会导致StackOverflow
GitHub 9.4k Star 的Java工程师成神之路 ,不来了解一下吗?GitHub 9.4k Star 的Java工程师成神之路 ,真的不来了解一下吗?GitHub 9.4k Star 的Java工程师成神之路 ,真的确定不来了解一下吗?对于广大的开发人员来说,FastJson大家一定都不陌生。FastJson(https://github.com/alibaba/fastjson...2019-11-11 09:34:542077
0
-
原创 感觉自己不会的东西太多了,不知道如何下手?
GitHub 8.8k Star 的Java工程师成神之路 ,不来了解一下吗?GitHub 8.8k Star 的Java工程师成神之路 ,真的不来了解一下吗?GitHub 8.8k Star 的Java工程师成神之路 ,真的确定不来了解一下吗?如果让我统计下,粉丝问我做多的问题是什么,这个问题肯定可以排前5,问出这个问题的朋友们遍布各个年龄段。实话说,这个问题同样也困扰过我,大概就是我刚...2019-10-14 09:59:3646653
54
-
原创 为什么阿里巴巴建议集合初始化时,指定集合容量大小
集合是Java开发日常开发中经常会使用到的。在之前的一些文章中,我们介绍过一些关于使用集合类应该注意的事项,如《为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作》。关于集合类,《阿里巴巴Java开发手册》中其实还有另外一个规定:本文就来分析一下为什么会有如此建议?如果一定要设置初始容量的话,设置多少比较合适?为什么要设置HashMap的初始化容量我们先...2019-04-17 09:44:011708
4
-
原创 一不小心就踩坑的fail-fast是个什么鬼?
什么是fail-fast首先我们看下维基百科中关于fail-fast的解释:In systems design, a fail-fast system is one which immediately reports at its interface any condition that is likely to indicate a failure. Fail-fast systems a...2019-04-19 09:54:311724
2
-
原创 一份还热乎的蚂蚁面经(已拿Offer)!附答案!!
本文来自我的知识星球的球友投稿,他在最近的校招中拿到了蚂蚁金服的实习生Offer,整体思路和面试题目由作者——泽林提供,部分答案由Hollis整理自知识星球《Hollis和他的朋友们》中「直面Java」板块。经历了漫长一个月的等待,终于在前几天通过面试官获悉已被蚂蚁金服录取,这期间的焦虑、痛苦自不必说,知道被录取的那一刻,一整年的阴霾都一扫而空了。笔者面的是阿里的Java研发工程师岗,面试流程...2019-04-24 14:51:362783
9
-
原创 时间的遍历
public Calendar getDate(String dateString){ int year = Integer.parseInt(dateString.substring(0,dateString.indexOf("-"))); int mounth = Integer.parseInt(dateString.substring(dateString.indexOf("-"2015-01-07 15:26:031401
0
-
原创 Java是如何实现平台无关性的
相信对于很多Java开发来说,在刚刚接触Java语言的时候,就听说过Java是一门跨平台的语言,Java是平台无关性的,这也是Java语言可以迅速崛起并风光无限的一个重要原因。那么,到底什么是平台无关性?Java又是如何实现平台无关性的呢?本文就来简单介绍一下。什么是平台无关性平台无关性就是一种语言在计算机上的运行不受平台的约束,一次编译,到处执行(Write Once ,Run Anywhe...2019-04-10 09:54:333605
0
-
原创 Java 8中处理集合的优雅姿势——Stream
在Java中,集合和数组是我们经常会用到的数据结构,需要经常对他们做增、删、改、查、聚合、统计、过滤等操作。相比之下,关系型数据库中也同样有这些操作,但是在Java 8之前,集合和数组的处理并不是很便捷。不过,这一问题在Java 8中得到了改善,Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。本文就来介绍下如何使用Stream。特别说明一下,关于Str...2019-03-19 11:52:153098
1
-
原创 为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作
GitHub 1.3k Star 的Java工程师成神之路 ,不来了解一下吗?在阿里巴巴Java开发手册中,有这样一条规定:但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考。foreach循环Foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数组或集合中的元素。Java语言从JDK 1.5.0开始引入foreach循...2019-03-07 11:18:433112
8
-
原创 Java 8中字符串拼接新姿势:StringJoiner
在为什么阿里巴巴不建议在for循环中使用”+”进行字符串拼接一文中,我们介绍了几种Java中字符串拼接的方式,以及优缺点。其中还有一个重要的拼接方式我没有介绍,那就是Java 8中提供的StringJoiner ,本文就来介绍一下这个字符串拼接的新兵。如果你想知道一共有多少种方法可以进行字符串拼接,教你一个简单的办法,在Intellij IDEA中,定义一个Java Bean,然后尝试使用快捷键...2019-03-05 10:37:552100
0
-
原创 Java工程师成神之路(2019正式版)
主要版本更新时间备注v1.02015-08-01首次发布v1.12018-03-12增加新技术知识、完善知识体系v2.02019-02-19结构调整,更适合从入门到精通;进一步完善知识体系; 新技术补充;一、基础篇面向对象什么是面向对象面向对象、面向过程面向对象的三大基本特征和五大基本原则平台无关性Java如何实现的平台无关JVM...2019-02-19 09:08:3410454
27
-
原创 Hollis原创|深入分析Java的编译原理
GitHub 2.6k Star 的Java工程师成神之路 ,不来了解一下吗?GitHub 2.6k Star 的Java工程师成神之路 ,真的不来了解一下吗?GitHub 2.6k Star 的Java工程师成神之路 ,真的确定不来了解一下吗?在《Java代码的编译与反编译》中,有过关于Java语言的编译和反编译的介绍。我们可以通过javac命令将Java程序的源代码编译成Java字节码,...2019-05-14 09:46:072004
0
-
原创 为什么强烈禁止开发人员使用isSuccess作为变量名
在日常开发中,我们会经常要在类中定义布尔类型的变量,比如在给外部系统提供一个RPC接口的时候,我们一般会定义一个字段表示本次请求是否成功的。关于这个"本次请求是否成功"的字段的定义,其实是有很多种讲究和坑的,稍有不慎就会掉入坑里,作者在很久之前就遇到过类似的问题,本文就来围绕这个简单分析一下。到底该如何定一个布尔类型的成员变量。一般情况下,我们可以有以下四种方式来定义一个布尔类型的成员变量:...2019-05-07 09:58:573392
5
-
原创 Java开发者薪资最低?程序员只能干到30岁?国外真的没有996?Intellij真的比Eclipse受欢迎?
Stack Overflow作为全球最大的程序设计领域的问答网站,每年都会出据一份开发者调查报告。近日,Stack Overflow公布了其第9次年度开发者调查报告(https://insights.stackoverflow.com/survey/2019),这份报告基于对9万 Stack Overflow用户的调查。涉及众多领域,今天,挑其中和广大开发者最息息相关的几个重点调查结果给大家介绍一...2019-09-23 09:32:422467
1
-
原创 Java 13 来袭,最新最全新特性解读
2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,新的发布周期严格遵循时间点,将在每年的3月份和9月份发布。目前,JDK官网上已经可以看到JDK 13的进展,最新版的JDK 13将于2019年9月17日发布。![][1]目前,JDK13处于Release-Candidate Phase(发布候选阶段),将于9月17日正式发布。目前该版本包含的特性已经全部固定,主要包含...2019-09-16 09:40:5162712
116
-
原创 为什么阿里巴巴建议开发者谨慎使用继承?
很多人都知道,博主最近在更新一个专题——《解读阿里巴巴Java开发手册》,本文是该专题中的另外一篇。从学习Java的第一天起,我们就知道Java是一种面向对象语言,而学习Java的第二天,我们就知道了面向对象的三大基本特性是:封装、继承、多态。所以,对于很多开发者来说,继承肯定都是不陌生的。但是,继承一定适合所有的场景吗?毫无忌讳的使用继承来做代码扩展真的好吗?为什么《阿里巴巴Java开发手...2019-09-09 09:54:292050
0
-
原创 国内Java面试总是问StringBuffer,StringBuilder区别是啥?档次为什么这么低?
这是一个知乎上面很火的问题(https://www.zhihu.com/question/50211894 ),下面是我关于这个问题的回答,截止今天,这个答案收获了500+赞和70+评论。原答案这个问题只是开个场,热个身而已啊。StringBuffer,StringBuilder区别是啥?什么是线程安全?如何保证线程安全?什么是锁?死锁?synchronized的实现原理是什么?有...2019-08-13 09:46:254636
4
-
原创 既然synchronized是"万能"的,为什么还需要volatile呢?
GitHub 6.6k Star 的Java工程师成神之路 ,不来了解一下吗?GitHub 6.6k Star 的Java工程师成神之路 ,真的不来了解一下吗?GitHub 6.6k Star 的Java工程师成神之路 ,真的确定不来了解一下吗?在我的博客和公众号中,发表过很多篇关于并发编程的文章,之前的文章中我们介绍过了两个在Java并发编程中比较重要的两个关键字:synchronized...2019-08-21 10:47:144116
8
-
原创 我以为我对Mysql索引很了解,直到我遇到了阿里的面试官
GitHub 4.8k Star 的Java工程师成神之路 ,不来了解一下吗?GitHub 4.8k Star 的Java工程师成神之路 ,真的不来了解一下吗?GitHub 4.8k Star 的Java工程师成神之路 ,真的确定不来了解一下吗?本文来自一位不愿意透露姓名的粉丝投稿相信很多人对于MySQL的索引都不陌生,索引(Index)是帮助MySQL高效获取数据的数据结构。因为索引...2019-07-09 09:42:5226061
111