自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 因为一个跨域请求,我差点丢了饭碗!

浏览器基本原理我叫小珉,是Windows帝国一个普通的上班族。今天,我入职了一家浏览器公司,公司的主营业务是为人类提供Internet上网服务,我的岗位是负责执行JavaScript代码。上午的晨会上,认识了负责网络连接的老白,所有网络请求都得找他帮忙,还有负责存储管理的小黑,什么Cookie,LocalStorage,SessionStorage之类的都归他管。哦,差点忘了,还有一个妹子小雪,她负责网页渲染。随后主管安排了我的工作:老白从网络取回网页之后交给小雪来解析渲染,遇...

2020-06-30 15:03:25 187

原创 Java优雅的记录日志:log4j实战篇

写在前面项目开发中,记录错误日志有以下好处: 方便调试 便于发现系统运行过程中的错误 存储业务数据,便于后期分析 在java中,记录日志有很多种方式: 自己实现:自己写类,将日志数据,以io操作方式,写数据到文本文件、数据库中。 使用log4j:log4j可以将日志输出到console窗口、文本文件、数据库等,功能强大! 使用slfj:slfj也是一个很强大的功能,slfj旨在一统天下,提供了logging.jar 和 log4j的接口,可以通过s

2020-06-29 15:21:15 237

原创 你还在使用 try-catch-finally 关闭资源?

代码一定得写的优雅一点!你还在使用try-catch-finally关闭资源吗,如果是,那么就有点out了。JIAMIN把手教你使用JDK7引用的try-with-resourceJDK7之前资源的关闭姿势:/** * jdk7以前关闭流的方式 * * @author hetiantian * */public class CloseResourceBefore7 { private static final String FileName = "file.txt";

2020-06-28 16:46:17 360

原创 Java 14 祭出代码简化神器,Lombok 要被干掉了?

Java 14 3 月发布距现在已经发布已经3个多月了,发布了很多新特性,详细的新特性介绍可以看这篇文章:http://www.javastack.cn/article/2020/java14-has-been-released/栈长之前也陆续分享过两篇 Java 14 的新特性: Java 14 之模式匹配,非常赞的一个新特性! Java 14 来势汹汹,这回让空指针无处遁形!! 感觉很好玩,今天再来分享一个新特性:JEP 359: Records (Preview)

2020-06-27 15:31:33 285

原创 Spring Boot 把 Maven 干掉了,正式拥抱 Gradle!

在国外某社交网站上有一个关于迁移 Spring Boot 迁移 Maven 至 Gradle 的帖子:该贴子上也有很多人质疑:Maven 用的好好的,为什么要迁移至 Gradle?虽然该贴子只是说 Gradle 牛逼,但并没有说迁移至 Gradle 所带来的影响和价值。所以,Spring Boot 官方对此也发了博文作了解释:https://spring.io/blog/2020/06/08/migrating-spring-boot-s-build-to-gradle栈长简单概

2020-06-27 14:57:05 218

原创 总结了大量的 Java 代码精简之道,非常棒!

前言古语有云:道为术之灵,术为道之体;以道统术,以术得道。其中:“道”指“规律、道理、理论”,“术”指“方法、技巧、技术”。意思是:“道”是“术”的灵魂,“术”是“道”的肉体;可以用“道”来统管“术”,也可以从“术”中获得“道”。在拜读大佬“孤尽”的文章《Code Review是苦涩但有意思的修行》时,感受最深的一句话就是:“优质的代码一定是少即是多的精兵原则”,这就是大佬的代码精简之“道”。工匠追求“术”到极致,其实就是在寻“道”,且离悟“道”也就不远了,亦或是已...

2020-06-27 14:51:04 416

原创 Java 10 大装 B 写法,看完可以出去吹牛逼了!

1、集合初始化集合的创建、赋值一步到位,想不想学?来,上边跟我一起画个 List,在你下边画一个Map……List<String>list=newArrayList<String>(){{add("www.");add("javastack.");add("cn");}};Map<String,String>map=newHashMap<String,String>(){{pu...

2020-06-26 19:27:36 261

原创 Java:如何更优雅的处理空值?

导语在笔者几年的开发经验中,经常看到项目中存在到处空值判断的情况,这些判断,会让人觉得摸不着头绪,它的出现很有可能和当前的业务逻辑并没有关系。但它会让你很头疼。有时候,更可怕的是系统因为这些空值的情况,会抛出空指针异常,导致业务系统发生问题。此篇文章,我总结了几种关于空值的处理手法,希望对读者有帮助。业务中的空值场景存在一个UserSearchService用来提供用户查询的功能:publicinterfaceUserSearchService{List<Use...

2020-06-23 18:55:40 505

原创 如何基于 String 实现同步锁?

如何基于String实现同步锁?在某些时候,我们可能想基于字符串做一些事情,比如:针对同一用户的并发同步操作,使用锁字符串的方式实现比较合理。因为只有在相同字符串的情况下,并发操作才是不被允许的。而如果我们不分青红皂白直接全部加锁,那么整体性能就下降得厉害了。因为String的多样性,看起来string锁是天然比分段锁之类的高级锁更有优势呢。因为String 类型的变量赋值是这样的:Stringa = "hello world."; 所有往往会有个错误的映象,String对象就是不可变的..

2020-06-23 16:53:41 321

原创 怎么对 Java 程序调优?不看别后悔!

Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢、接口超时,服务器负载高、并发数低,数据库频繁死锁等。尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的臃肿,各种性能问题开始纷至沓来。Java 应用性能的瓶颈点非常多,比如磁盘、内存、网络 I/O 等系统因素,Java 应用代码,JVM GC,数据库,缓存等。笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层、数据库层、框架层、JVM 层,如图 1 所示。图 1.Java 性能优

2020-06-23 16:48:30 233

原创 如何不重启热更新线上 Java 代码?

一、前言热更新代码的场景1)当线上服务器出现问题时,有些时候现有的手段不足以发现问题所在,可能需要追加打印日志或者增加一些调试代码,如果我们去改代码重新部署,会破坏问题现场,可以通过热部署的手段来增加调试代码2)线上出现紧急bug,通过Review代码找到问题,修改好后打包部署的流程可能比较久,可以通过热部署代码及时解决问题。二、Arthas的使用使用阿里巴巴开源的Java诊断工具---Arthas,他可以附着在我们的Java服务器进程上面,查看服务器状态,jvm状态等各种参数指标,还可

2020-06-23 16:45:41 620

原创 Spring Boot 最核心的 25 个注解,都是干货!

Spring Boot 最核心的 25 个注解1、@SpringBootApplication这是 Spring Boot 最最最核心的注解,用在 Spring Boot 主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。其实这个注解就是@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan这三个注解的组合,也可以用这三个注解来代替@SpringBootApplicati..

2020-06-22 20:52:53 186

原创 打破你的认知,数字除以 0 一定会崩溃吗?

一、引言在这个浮躁的社会,我们都学会了一种技能,快速学习使用各种开源库、开源框架。学习使用各种高端大气的技术,热修复、插件化、模块化、ORM……这些技能固然重要,但是有时候也要放慢脚步,耐着性子,打打基本功。不要看不起这些零零碎碎的基础知识,这些基础日积月累,慢慢的会让你跟同事拉开差距。接下来,我们直奔主题。开始我们的基本功。二、代码1System.out.println("1/0=" + 1/0);大叔的灵魂拷问:上面的代码会崩溃吗?如果不会,会输出什么呢?

2020-06-22 15:05:30 269

原创 Java 高并发之设计模式

本文主要讲解几种常见并行模式, 具体目录结构如下图.单例单例是最常见的一种设计模式, 一般用于全局对象管理, 比如xml配置读写之类的.一般分为懒汉式, 饿汉式.我公众号 Java 相关的文章整理成了 PDF ,关注微信公众号 Java后端 回复 666 下载。懒汉式: 方法上加synchronized1publicstaticsynchronizedSingletongetInstance(){2if(single ==null) {3...

2020-06-22 14:00:21 193

原创 Java 代码精简之道

前言古语有云:道为术之灵,术为道之体;以道统术,以术得道。其中:“道”指“规律、道理、理论”,“术”指“方法、技巧、技术”。意思是:“道”是“术”的灵魂,“术”是“道”的肉体;可以用“道”来统管“术”,也可以从“术”中获得“道”。在拜读大佬“孤尽”的文章《Code Review是苦涩但有意思的修行》时,感受最深的一句话就是:“优质的代码一定是少即是多的精兵原则”,这就是大佬的代码精简之“道”。工匠追求“术”到极致,其实就是在寻“道”,且离悟“道”也就不远了,亦或是已...

2020-06-22 13:54:08 341

原创 Java是未来的第一编程语言吗?

一、前言Java语言长期以来一直霸占多数热门编程语言榜单的榜首,可见这是一个备受程序员热捧的编程语言。Java语言具有什么魅力?想必这都是已经为大多数人们所熟知的了,不值得过多赘述。而Java语言发展至今,面对发展势头迅猛又十分简单易学的python,以及各种层出不穷的高级语言,Java程序员的份额已经逐步下降,那它是否还能在未来保持领先的优势呢?本文就主要从Java语言所不擅长的领域,以及它在自己的领土内受到的对手入手,聊一聊Java语言在未来所面临的挑战。二、Java帝国的今天2.1 .

2020-06-22 13:48:08 403

原创 Java 反射:框架设计的灵魂

在学习 Java 反射之前,先让我们看看这几个概念。01解释型语言和编译型语言解释型语言:不需要编译,在运行的时候逐行翻译解释;修改代码时可以直接修改,可以快速部署,不过性能上会比编译型语言稍差;比如 JavaScript、Python ;编译型语言:需要通过编译器将源代码编译成机器码才能执行;编译之后如果需要修改代码,在执行之前就需要重新编译。比如 C 语言;Java 严格来说也是编译型语言,但又介于编译型和解释型之间;Java 不直接生成机器...

2020-06-22 13:44:05 195

原创 请不要再说Java中final方法比非final性能更好了

无继承有 static 修饰static final 123456789101112131415161718 // 生成随机数字和字母, public static final String getStringRandomFinal(int length) { String val = ""; Random random = new Random(); // 参数lengt

2020-06-20 22:38:42 389

原创 JAVA多线程之volatile 与 synchronized 的比较

一,volatile关键字的可见性要想理解volatile关键字,得先了解下JAVA的内存模型,Java内存模型的抽象示意图如下:从图中可以看出:①每个线程都有一个自己的本地内存空间--线程栈空间???线程执行时,先把变量从主内存读取到线程自己的本地内存空间,然后再对该变量进行操作②对该变量操作完后,在某个时间再把变量刷新回主内存因此,就存在内存可见性问题,看一个示例程序:(摘自书上)publicclassRunThreadextendsThread{pr...

2020-06-20 18:00:23 165

原创 涨姿势,Java中New一个对象是个怎么样的过程?

在语言层面创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象(普通Java对象,不包括数组和Class对象等)的创建时一个怎么样的过程?一、对象的创建当虚拟机遇到一条new指令时候,首先去检查这个指令的参数是否能在常量池中能否定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。在类加载检查通过后,接下来虚拟机将为新生的对象分配内存。对象所需的内存的大小在类加载完成后便可以完全确定,为对象分配空间的

2020-06-19 18:28:42 202

原创 如何编写可怕的 Java 代码?

我决定告诉你如何编写可怕的Java代码。如果你厌倦了所有这些美丽的设计模式和最佳实践,并且想写些疯狂的东西,请继续阅读。如果你正在寻找有关如何编写良好代码的建议,请点击查看这篇文章。对一切使用异常你知道循环对吗?差一错误(英语:Off-by-one error,缩写 OBOE,是在计数时由于边界条件判断失误导致结果多了一或少了一的错误,通常指计算机编程中循环多了一次或者少了一次的程序错误,属于逻辑错误的一种)很容易犯。当你迭代一个集合时,很容易出错。让我们看看如...

2020-06-17 21:12:38 318

原创 JAVA8教程

JAVA8有什么新的特性?JAVA8是JAVA编程语言开发的一大特色版本。它的最初版本发布于2014年3月18日。使用Java8版本,提供Java支持功能编程,新的JavaScript引擎,日期时间操作,新的流API等新API。新功能 Lambda 表达式- 增加函数处理能力到JAVA。 方法引用- 引用函数由他们名称,而不是直接调用它们。使用函数的参数。 默认方法- 接口有默认的方法实现。 新工具- 新的编译器工具和实用程序被添加,如jdeps找出依赖。...

2020-06-17 18:12:04 309

原创 JavaFX教程

JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。JavaFX允许开发人员快速构建丰富的跨平台应用程序。JavaFX通过硬件加速图形支持现代GPU。JavaFX允许开发人员在单个编程接口中组合图形,动画和UI控件。图表编程语言可用于开发互联网应用程序(RIA)。JavaFX技术主要应用于创建Rich Internet applications(RIAs)。当前的JavaFX包括JavaFX脚本和JavaFX Mobi

2020-06-17 18:03:17 935

原创 Java基础知识总结

1Java基础知识总结1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具和jre。2,JRE:Java Runtime Environment,java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)。3,配置环境变量:让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。环境变量的配置:1)永久配置方式:JAVA_HOME=%安装路.

2020-06-16 19:59:52 332

原创 Java:就是要让你学会内部类

看了很多源码,都有用到内部类,但是自己以前在生产环境上,用的确实少,也有用过但是很少,所以今天就打算好好的把它从头到尾的过一遍。定义可以将一个类的定义放在里另一个类的内部,这就是内部类,所谓的内部类的概念只是出现在编译阶段,对于jvm层是没有内部类这个概念的。我们可以利用内部类来解决 类的单继承问题,外部类不能再继承的类可以交给内部类继承 我们可以通过定义内部类来实现一个类私属于一个类,实现更好的封装性 代码优化:它需要更少的代码 分类内部类可以分为: 静态内

2020-06-16 19:32:59 202

原创 Java 类中可以覆盖静态方法吗?

Java 类中可以覆盖静态方法吗?不,你不能在Java中覆盖静态方法,但在子类中声明一个完全相同的方法不是编译时错误,这称为隐藏在Java中的方法。你不能覆盖Java中的静态方法,因为方法覆盖基于运行时的动态绑定,静态方法在编译时使用静态绑定进行绑定。虽然可以在子类中声明一个具有相同名称和方法签名的方法,看起来可以在Java中覆盖静态方法,但实际上这是方法隐藏。Java不会在运行时解析方法调用,并且根据用于调用静态方法的 Object 类型,将调用相应的方法。这意味着如果你使用父类.

2020-06-16 19:00:25 375

原创 Java语言特性和技术特点探究

Java语言特性和技术特点探究1 引子Java一直以来是排名前二的编程语言, 这篇文章我们来学习和探讨一下Java的语言特性和技术特点。2 通用的JavaJava是一种通用的编程语言,它是比较经典的面向对象编程语言,面向对象编程的一个重要特性就是更容易实现高内聚低耦合的代码。 Java的主要特点是让应用程序开发人员编写一次即可在任何地方运行(WORA。这意味着已编译的Java代码可以在支持Java的所有平台上运行,而无需重新编译。 Java应用程序通常被编译为可...

2020-06-16 18:52:54 847

原创 Java中堆和栈的区别

堆和栈都是Java用来在RAM中存放数据的地方。 堆1. Java的堆是一个运行时数据区,类的对象从堆中分配空间。这些对象通过new等指令建立,通过垃圾回收器来销毁。2. 堆的优势是可以动态地分配内存空间,需要多少内存空间不必事先告诉编译器,因为它是在运行时动态分配的。但缺点是,由于需要在运行时动态分配内存,所以存取速度较慢。栈1. 栈中主要存放一些基本数据类型的变量(byte,short,in...

2020-06-16 16:52:38 699

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除