Hutool 工具不糊涂
前言这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战 。还在对项目中的工具类和工具方法进行封装吗?让 Hutool 帮你,它是项目中 util 包的友好替代,覆盖了 Java 开发底层的方方面面,既是大型项目中解决小问题的利器,也是小项目中的效率担当,它能让你专注业务,极大地提升开发效率,可以
这可能是你从未见过如此优雅的写法
前言看到这样的标题,第一反应是不是那个“渣渣辉”在电脑屏幕中挥舞着大砍-刀,听着古天乐说着,“这是你从未玩过的全新版本”。当然,这并不是标题党,既然“这是你从未玩过的全新版本”,那么“是兄弟就来看我的文章”。(不是兄弟也请留步,嘤嘤嘤)背景在对公司一个几百年没有更新维护旧项目进行功能开发的时候,由于当初开发这个项目的人早已各奔前程,也没有留下什么可视性的文档,所以只能从一些代码以及注释
【建议使用】告别if,Java超好用参数校验工具类
一、前言今天和小伙伴们分享一个常用的工具类,共计四个方法,使用场景比较广泛,有用于校验某个对象或对象中指定属性为空值时,直接返回异常,常用语校验前端请求参数;也有当值不为空时,执行指定动作,可减少大量的if条件,如:mybatis请求参数设置;还有用于判断当值不为空时,替代为新值,完成后续动作。这样描述可能不够清晰,这里花哥列举了几个使用场景,更多的场景需要小伙伴们根据自己业务需求合理使用。//场
大厂的 404 页面都长啥样?看到最后一个,我笑了。。。
https://shimo.im/docs/rYGyxThdRHkRWxK8/ 《为什么我墙裂建议大家使用枚举来实现单例。》
Java后端学习路线
前言自学/学习路线这样的一期我想写很久了,因为一直想写的全一点硬核一点所以拖到了现在,我相信这一期对不管是还在学校还是已经工作的同学都有所帮助,不管是前端还是后端我都墙裂建议大家看完,因为这样会让你对你所工作的互联网领域相关技术栈有个初步的了解。我毕业后主要接触的都是电商领域,所以这一期我把目前所了解的技术栈加上之前电商系统的经验臆想了一个完整的电商系统,大家会看到很多熟悉的技术栈我相
细思极恐 - 你真的会写 Java 吗?
导语自2013年毕业后,今年已经是我工作的将近十个年头了,总在做java相关的工作,终于有时间坐下来,写一篇关于java写法的一篇文章,来探讨一下如果你真的是一个java程序员,那你真的会写java吗?笔者是一个务实的程序员,故本文绝非扯淡文章,文中内容都是干货,望读者看后,能有所收获。文章核心其实,本不想把标题写的那么恐怖,只是发现很多人干了几年java以后,都自认为是一个不错的java程序员了
都什么年代了你还在用 Date
前言上篇文章搞清楚了时区,这篇文章就主要来谈一谈 Java 中处理日期时间用什么 API 比较好。我本来不准备写这篇文章的,因为我觉得 Java17 都特么出来了,大家对 Java8 提供的时间日期 API 都很熟悉了。但是经过我调研,很多中小公司还在用老版本的 Date 来处理时间日期,视 Java8 提供的时间日期 API 于无物,所以还是想来推荐一下新一代的时
习惯于CRUD,不求上进呢?-为什么有很多程序员沉醉于舒适区
前言近日,渣渣烟有一次十点多下班,然后喊了一辆首汽约车,接着展开了一段很有意思的聊天。我觉得挺有收获的,拿来分享一下!ps:这里说一下,很多人坐专车的时候,都是在那埋头苦摁手机。但是渣渣烟不一样(人丑,所以安全),渣渣烟每次都和专车司机在那闲聊。这是一种和陌生人沟通能力的锻炼,聊到现在基本能和所有专车司机相谈甚欢,比如什么子女教育、城市发展、电影等等,增加自己所见所闻嘛!所以和专车司机
一个朋友学会Java泛型后直接薪资翻倍!
背景对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。本文参考java 泛型详解、Java中的泛型方法、 java泛型详解一些相关书籍文档我都有整理,可以无偿分享给大家,点击链接进群就可以啦!5本Java 泛型相关学习书籍22本Java架构师核心书籍从0到1Java学习路线和资料1000+道2021年最新面试题1. 概述泛型在java中有
送你九年经验,我的Java学习之路你也可以复制
这篇文章写的非常认真,足足花了两周时间,不是简单的资料聚合,我将多年的工作和学习经验写下来了,相信看完后你能有一种豁然开朗的感觉,这就是我要达到的目的,希望不要被打脸。最近身边很多人在问:Java 怎么学习啊?有没有什么学习路线?我相信这些人或多或少都有一些 Java 基础,但由于看不到全貌,学了一段时间很容易迷失。所以我在寻思着能不能写一个学习的地图或者路线,让读者能知道下一步该学什
彻底理解synchronized
1. synchronized简介在学习知识前,我们先来看一个现象:public class SynchronizedDemo implements Runnable { private static int count = 0; public static void main(String[] args) { &nb
漫画:什么是红黑树?
————————————————————————二叉查找树(BST)具备什么特性呢?1.左子树上所有结点的值均小于或等于它的根结点的值。2.右子树上所有结点的值均大于或等于它的根结点的值。3.左、右子树也分别为二叉排序树。下图中这棵树,就是一颗典型的二叉查找树:1.查看根节点9:2.由于10 > 9,因此查看右孩子13:3.由于10 < 13,因此查看左孩子11:4.由于10 <
漫画:什么是中台?
没有中台的时代在传统IT企业,项目的物理结构是什么样的呢?无论项目内部的如何复杂,都可分为“前台”和“后台”这两部分。什么是前台?首先,这里所说的“前台”和“前端”并不是一回事。所谓前台即包括各种和用户直接交互的界面,比如web页面,手机app;也包括服务端各种实时响应用户请求的业务逻辑,比如商品查询、订单系统等等。什么是后台?后台并不直接面向用户,而是面向运营人员的配置管理系统,比如商品管理、物
看看阿里程序员是怎样讲限流的
有读者说自己准备的项目是秒杀系统,他在 Redis 和 MySQL 的设计上准备了很多,但是每次面试偏偏面试官先问他怎么限流。限流他又没准备,回答的很不条理,刚面试开始自己就慌了。其实在实际的秒杀系统中,限流是特别重要的,所以面试官也特别注意这方面的问题。今天看到一篇很系统的讲解限流的文章,一起来学习下。为什么要限流日常生活中,有哪些需要限流的地方?像我旁边有一个国家景区,平时可能根本没什么人前往
我说我精通字符串,面试官竟然问我Java中的String有没有长度限制!?
String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西容易被忽略的。就如本文我们要讨论的问题:Java中的String有没有长度限制?这个问题要分两个阶段看,分别是编译期和运行期。不同的时期限制不一样。编译期首先,我们先来合理的推断一下,当我们在代码中使用String s = “”;的形式来定义String对
处理Java异常的10个最佳实践
线上代码不要使用printStackTrace()写完代码后请一定要检查下,代码中千万不要有printStackTrace()。因为printStackTrace()只会在控制台上输出错误的堆栈信息,他只适合于用来代码调试。真正需要记录异常,请使用日志记录。永远不要在catch块中吞掉异常catch (NoSuchMethodException e) { return null;}永
灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?
JVM内存结构,是很重要的知识,相信每一个静心准备过面试的程序员都可以清楚的把堆、栈、方法区等介绍的比较清楚。上图,是一张在作者根据《Java虚拟机规范(Java SE 8)》中描述的JVM运行时内存区域结构画的。很多人都知道Java对象是在堆内存中分配空间的(JIT优化除外),也知道内存分配过程中是线程安全的,那么虚拟机到底是如何保证线程安全的呢?本文就来简单介绍一下。Java对象的内存分配我
一个小的技术细节
在学习过之前的《单例》之后,相信大家一定对单例有了很深的理解,对于双重校验锁的单例实现大家一定都不陌生。不知道大家有没有关注过一个细节,那就是在双重校验锁中的getInstance方法中,定义了一个局部变量来接收Singleton的单例对象。代码实现如下:public class Singleton { private static volatile Singleton
自定义注解!绝对是程序员装逼的利器!!
相信很多人对Java中的注解都很熟悉,比如我们经常会用到的一些如@Override、@Autowired、@Service等,这些都是JDK或者诸如Spring这类框架给我们提供的。在以往的面试过程中,我发现,关于注解的知识很多程序员都仅仅停留在使用的层面上,很少有人知道注解是如何实现的,更别提使用自定义注解来解决实际问题了。但是其实,我觉得一个好的程序员的标准就是懂得如何优化自己的代码,那在代码
教你使用1行代码在Java中实现字符串的逆序
字符串逆序,这是非常普遍的一道算法面试题,相信很多刷过算法题的朋友都一定对这个问题并不陌生。这个问题有很多衍生问题,他的实现方式也有很多。今天,就来教大家一个代码行数最好的实现方式。那就是使用递归的方式,用1行代码实现字符串逆序。代码如下:public class MyClass { public static void main(String args[]) { &nb