【方向盘】-JDK
文章平均质量分 95
JavaSE基础部分,万物之核
YourBatman
也许当我老了,也一样写代码。不为别的,只为了爱好。
展开
-
【方向盘】逐渐碎片化的Java生态圈:Oracle JDK、OpenJDK、阿里Dragonwell、华为毕昇
Oracle JDK开始收费后,我们还能用什么?原创 2022-06-06 09:00:00 · 4885 阅读 · 2 评论 -
【方向盘】Java二进制和位运算,这一万字准能喂饱你
按位与、或、非、异或、左移、右移、无符号右移原创 2020-08-25 15:09:24 · 1685 阅读 · 2 评论 -
【方向盘】JDK15正式发布,划时代的ZGC同时宣布转正
你发任你发,我用Java8。原创 2020-09-16 20:24:26 · 20818 阅读 · 86 评论 -
一文搞懂常用的网络概念:域名、动态IP、DNS、DDNS
网络通讯概念扫盲原创 2020-07-14 16:05:39 · 13125 阅读 · 9 评论 -
【方向盘】jdbc使用到了哪些设计模式
jdbc用到了哪些设计模式?原创 2018-05-21 18:34:55 · 8817 阅读 · 1 评论 -
【方向盘】通俗易懂版讲解JWT和OAuth2,以及他俩的区别和联系(Token鉴权解决方案)
JWT vs OAuth2通俗易懂版原创 2018-11-10 16:36:17 · 20964 阅读 · 4 评论 -
一文搞懂Executor执行器和线程池的关系,整体介绍其任务执行/调度体系:ThreadPoolExecutor、ScheduledExecutorService
本文进行JavaSE基础内容:Executor执行器体系的整体介绍。该文是整体框架介绍,并非局限于某一个使用的细节。由于我不止一次的被咨询说`ExecutorService`和`ScheduledExecutorService`什么区别和联系,以及`ThreadPoolExecutor`和`ThreadPoolTaskExecutor`有什么不一样之类的问题,因此决定写此文科普一下。本文内容不深,但比较全,因此我相信绝对是你值得阅读的一篇文章(即使你可能已经工作了5年+)。原创 2020-04-02 18:30:42 · 3465 阅读 · 0 评论 -
Java中InetAddress的使用(二):获取本机IP地址的正确姿势【享学Java】
本文接着上文的内容,主要解答上文留下的疑问:既然不能使用`InetAddress#getLocalHost()`直接去获取到本机的IP地址,那么如何破呢?本文将介绍的是一种通用的获取本机IP地址的解决方案,也就是所谓的“正确姿势”。原创 2020-03-31 23:10:28 · 9253 阅读 · 2 评论 -
Java中InetAddress的使用(一):域名解析【享学Java】
Java具有较好的网络编程模型/库,其中非常重要的一个API便是`InetAddress`。在在`java.net`网络编程中中有许多类都使用到了`InetAddress`,包括`ServerSocket,Socket,DatagramSocket`等等。你要进行网络编程就得有IP地址、域名、主机等要素,而一个`InetAddress`里就保存着IP地址,同时还**可能**包含主机名,并且它提供了主机名 - IP地址**互转**的方法(比简单的域名解析还牛有木有),本来主要就介绍它看看能够怎么玩。原创 2020-03-31 22:19:44 · 5567 阅读 · 0 评论 -
3分钟带你了解:轻量级依赖注入框架Google Guice【享学Java】
说起依赖注入(DI),相信你首先想到的必然是`Spring`,Spring是Java技术全家桶,是Java EE开发的一站式解决方案和实际开发标准。但本文并不聊它,而是介绍一款谷歌开源的**轻量级**依赖注入框架:`Guice`。`Guice`在Java领域并不流行(相较于Spring),但因为它轻量级,所以可以作为你去学习理解DI的一个抓手,适合你去进行独立的分析和理解依赖注入的思想,毕竟程序员经常说的:思想都是相通的。原创 2020-03-25 17:33:28 · 2930 阅读 · 0 评论 -
JavaEE的RESTful标准技术JAX-RS,jersey-client客户端使用介绍【享学Java】
在`Spring`大行其道的今天,很多人对Java的RESTful规范`JAX-RS(JSR 311)`可能比较陌生甚至未曾听闻,当然这也是能被“理解”的,毕竟Spring似乎现在已是`JavaEE`的事实标准。现在有越来越多的公司希望能以简单而又贴合Web架构本身的方式公开Web API,因此REST变得越来越重要和流行。使用Ajax进行通信的富浏览器端也在朝这个目标不断迈进。这个架构原则提升了万维网的**可伸缩性**,无论何种应用都能从该原则中受益无穷。原创 2020-03-14 20:58:36 · 3236 阅读 · 2 评论 -
ThreadLocal垮线程池传递数据解决方案:TransmittableThreadLocal【享学Java】
企业不是慈善机构:创造利润是你存在的核心价值。目录前言正文InheritableThreadLocal的局限性Thread#init方法探究TransmittableThreadLocal如何实现?使用场景总结声明前言在 上篇文章 了解到了,ThreadLocal它并不能解决线程安全问题,它旨在用于传递数据。但是它能成功传递数据比如有个大前提:放数据和取数据的操作必须是处于相同线程。即...原创 2020-02-29 23:51:37 · 4636 阅读 · 4 评论 -
ThreadLocal能解决线程安全问题?胡扯!本文教你正确的使用姿势【享学Java】
`ThreadLocal`:线程 + 本地 -> **线程本地变量**(所以说我觉得它取名叫`ThreadLocalVariable`获取还更能让人易懂些),它的出镜率可不低。虽然写业务代码一般用不着,但它是开源工具的常客:用于在**线程生命周期内**传递数据。有的人说,每看一遍`ThreadLocal`都会有新的感受,这其实是比较诡异的现象,因为我认为“真理”是不应该经常变的(或者说是不可能变化的)。我自己百度了一波,关于`ThreadLocal`的文章满天飞,有讲使用的亦有讲原理的,鱼龙混杂。其中有原创 2020-02-29 18:05:21 · 10352 阅读 · 33 评论 -
聊聊Java中的位运算:与、或、非、异或、左移、右移、无符号右移【小家Java】
提及位运算,相信对绝大多数Java程序员是感觉既陌生又熟悉的。陌生是因为你大概率没有去真实的使用过,熟悉是有时在看些开源框架(或者JDK源码)时会时长看到有使用的地方(譬如Jackson/Fastjson这些JSON库都大量的使用了位运算)。当然,不能“流行”起来是有原因的:不好理解,不符合人类的思维,阅读性差...位运算它在low-level的语言里使用得比较多,但是对于Java这种高级语言它就很少被提及了。虽然我们使用得很少但Java也是支持的,毕竟很多时候使用位运算才是**最佳实践**。位运算在原创 2020-01-04 02:18:08 · 3142 阅读 · 11 评论 -
静态代码块、静态变量,构造代码块、实例变量的执行顺序和继承逻辑
如果问:Java的三大特性是什么?你顺口就能答出:封装、继承、多态。如果继续问:你真的了解Java中的继承吗?或许你本来很懂,但被我这么一问就有点怀疑了。那么,就看看本文的说明吧,保证你会有收获,能让你更好的理解Java中的继承机制。原创 2018-05-17 15:21:15 · 8002 阅读 · 14 评论 -
静态类、静态方法、内部类、匿名内部类、非静态类的一些实践
如题,在实际开发中,关于静态类、静态方法、内部类、匿名内部类、非静态类一般都会遇到,特别是你在研究开源框架源码的时候很是常见,它是内聚性的体现。本文针对这些“概念”的实战,做些总结。原创 2018-05-17 15:28:10 · 2786 阅读 · 0 评论 -
你知道匿名内部类、Lambda表达式为嘛只能使用外部final的变量吗?
1、概述各位都知道,匿名内部类在使用的时候需要使用外部的变量,该变量必须被final修饰,否则编译报错。实际使用中,有时候确实还给我们造成了不少麻烦,可大家可曾想过这是为什么吗?2、栗子在了解原因之前,我们最好先了解一下javascript的一个概念:js闭包。然而Java内部类其实就是闭包:包含指向外部类的指针。 比如这个结构:就是典型的闭包class Outer { ...原创 2018-05-17 19:10:57 · 4430 阅读 · 2 评论 -
【小家java】java8中接口方法引发的思考(默认方法、static静态方法)
1、概述java8可以说是jdk版本的一次重大升级,给我们也带来了非常多的新特性,而本文就针对于java8中很重要的新特性之一:接口方法。来讨论一下平时使用中可能遇到的问题2、栗子大家都知道,在jdk8之后,接口里面咱们都可以写具体的方法了,但这方法比较特殊,只能是静态方法或者默认方法。这又让我们有更好的设计,可以设计出更加高内聚的代码,更加方便的管理封装。3、使用场景匿名内部...原创 2018-05-21 14:11:23 · 2612 阅读 · 3 评论 -
【小家java】java中维护常量使用常量类?接口?还是枚举呢?
1、概述在编码过程中,避免不了维护一些常量。而通过这么多的项目中发现,使用方式都不尽相同。有用常量类的、有用接口的、有用枚举的,因此本文针对于常量的管理做一些讨论2、栗子第一种使用接口:public interface Constants{ int AUDIT_STATUS_PASS = 1; int AUDIT_STATUS_NOT_PASS = 2;}第二...原创 2018-05-21 16:50:45 · 8635 阅读 · 4 评论 -
【小家java】对java中null、void、Void的理解学习
1、概述本篇博文很简单啊,主要说说咱们平时最长看见的null、void和Void等。一般人可能不会留意,但此文通过一些简单的例子,希望可以加深同学们对他哥几个的了解2、栗子关于null,估计很多人可能恨透它了,因为它是NullPointerException的罪魁祸首。但是用好了它,我们还是能成为好朋友滴。null是所有引用类型的默认值,但是我要澄清一些误解,null既不是对象也不是一...原创 2018-05-22 17:46:36 · 5430 阅读 · 1 评论 -
【小家java】Java中集合List、Set、Map删除元素的方法大总结(避免ConcurrentModificationException异常)
1、概述java中的集合框架是我们日常使用得最多的数据结构,而List作为Collection里最重要的一员,使用就更加的频繁了。因此我们平时使用中少不了对List的增删改查,本文就针对于对List的“删”操作进行一个分析,顺便说几个坑,希望能帮助到大家以后可以避免踩坑2、栗子有一个List,如果我们要删除其中的一个元素,怎么办呢? 这里我们先用remove方法3、使用场景...原创 2018-05-23 17:23:02 · 2486 阅读 · 3 评论 -
【小家java】关于java中方法重载与方法重写的区别
1、概述事务在后端开发中无处不在,是数据一致性的最基本保证。在Spring中可以通过对方法进行事务的配置,而不是像原来通过手动写代码的方式实现事务的操作,这在很大程度上减少了开发的难度。因此我们在使用spring事务的时候,门槛变得异常的低,小学生水平就能很好的管理好事务,但是同学们或多或少都遇见过一些事务不生效的难题,为啥呢?本文就针对于此来做一些具体举例分析,尽量做到全覆盖2、栗子...原创 2018-05-29 18:55:07 · 883 阅读 · 0 评论 -
【小家java】大杂烩---那些年我们一起躺过的坑
1、概述此篇博文没有具体的主题,主要针对于平时开发过程中遇到的一些小问题的记录,并且大都从源码的角度去解释为什么会报错。并且此篇博文是持续更新中2、栗子1、包装类型的的> < =的比较public static void main(String[] args) { Integer i = null; Integer i2 = null; Sy...原创 2018-05-24 21:00:15 · 1046 阅读 · 0 评论 -
【小家java】final修饰的变量真的不可变吗?
1、概述这可能是大家的一个共识:如果我们希望这个变量不可变,我们可以用final进行修饰。但本篇将带你深入了解不变的含义,我相信可以让你更深的了解final的原理,也能记得更牢靠2、栗子被final修饰过的变量,只是说栈存储的地址不能再改变,但是却没有说地址指向的内容不能改变。所以用final修饰,但内容是个对象啥的,然后改变对象属性值,这个不在本文讨论的范围以内。本文想讨论的是,直接...原创 2018-05-24 22:43:42 · 6771 阅读 · 0 评论 -
【小家java】用 ThreadPoolExecutor/ThreadPoolTaskExecutor 线程池技术提高系统吞吐量(附带线程池参数详解和使用注意事项)
1、概述很多人想问,线程池听起来高大上,但在实际工作中却很少使用。其实不然,在各种流行框架或者高性能的架构中,池化技术是无处不在的。所有有人就想问了,线程池有什么用呢? 一言以蔽之,就是提高系统效率。如果服务器对每个请求都分别创建一个线程的话,在很短时间内就会产生很多创建和销毁的动作,然而服务器在创建和销毁线程上花费的时间和消耗的系统资源都相当大。线程池就可以尽量减少这种情况的发生。 因此...原创 2018-06-27 17:34:34 · 19800 阅读 · 24 评论 -
【小家java】剖析for、while、foreach、标签循环语句的控制( break,continue,return )
1、概述java一共提供了3中循环语法:for循环(含增强for循环)、while循环、do…while循环。java8之后提供了基于stream的foreach循环,然后本文就针对于这几个循环,分别介绍一下循环控制语句:break,continue,return对循环体的影响。 特别隆重介绍:foreach循环中,如何停止本次循环和停止所有循环,因为stream的使用非常方便和广泛2、...原创 2018-06-28 16:29:21 · 1137 阅读 · 1 评论 -
【小家java】Java反射机制中Class.getXXX()和Class.getDeclaredXXX()的使用区别和注意事项
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 那么本文就针对性说明一下,在我们使用反射时候经常用到也是经常会让我们迷糊的一些方法的区别。getMethods()和getDeclaredMethods的区别我们先来看看Class...原创 2018-07-18 11:29:33 · 2932 阅读 · 1 评论 -
【小家java】Java中5种创建对象的方法,你知道几种?
作为一个Java开发者,一种面向对象的语言,我们每天都创建很多对象。但后续我们开发中,采用了spring的依赖管理系统,我们就很少自己去创建对象了,全部交给容器去托管,那么本篇文章回源塑本,讲述一下java中能够创建一个对象的5中方法。 本文最大的特色是,我不仅给出案例,还给出对应的字节码解释,从底层来解释现象1.使用new关键字这是最常见也是最简单的创建对象的方式了。通过这种方...原创 2018-07-18 18:31:57 · 970 阅读 · 0 评论 -
【小家java】Java中Random ThreadLocalRandom 设置随机种子获取随机数精讲
我们都知道,随机数在太多的地方使用了,比如加密、混淆数据等,我们使用随机数是期望获得一个唯一的、不可仿造的数字,以避免产生相同的业务数据造成混乱。 在Java项目中通常是通过Math.random方法和Random类来获得随机数的。那么本文针对于这两种产生随机数的方法进行源码级别的精度,让你以后不再犯错。先说平时使用绝大多数情况,我们其实是想通过此类来生成一个随机整数。此处不鳌诉推倒...原创 2018-07-19 14:42:51 · 3068 阅读 · 0 评论 -
【小家java】Java里的进程、线程、协程 、Thread、守护线程、join线程的总结
说到线程,很多人最直观的感受就是多线程。本章不讨论高并发、多线程之类的。返璞归真,咱们来讨论讨论线程这个东西到底是什么东西,着眼于线程本身,我们怎么玩? 为了了解线程,这里我不得不搬出来线程的概念了: 进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.(比如一个qq程序就是一个进程或者多个进程),系统进行资源分配的最小单位.。进程比...原创 2018-07-20 14:37:25 · 2280 阅读 · 2 评论 -
【小家java】JUC并发编程之Synchronized和Lock、ReadWriteLock、ReentantLock的使用以及原理剖析
我们很多人在学习多线程开发的时候,一遇到并发问题就是synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。 但是我们知道synchronized是一把重量级的锁,对效率是不友好的,所以在JDK1.5版本之后,推出了轻量级的锁Lock。但是呢,随着Javs SE 1.6对synch...原创 2018-07-20 18:01:35 · 1556 阅读 · 1 评论 -
【小家java】并发编程中wait/notify await/singal notify/notifyAll sleep/yield 的区别以及死锁案例
并发编程中,容易混淆的一些概念和方法使用,本文来解惑。是否释放锁:调用sleep和yield的时候不释放当前线程所获得的锁,但是调用await/wait的时候却释放了其获取的锁并阻塞等待。调用后何时恢复:sleep让线程阻塞,且在指定的时间之内都不会执行,时间到了之后恢复到就绪状态,也不一定被立即调度执行; yield只是让当前对象回到就绪状态,还是有可能马上被再次被调用执行...原创 2018-07-21 14:02:08 · 1065 阅读 · 0 评论 -
【小家java】一道多线程面试题引发对BlockingQueue的使用的思考
在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。题目:面试题:有两个线程A,B, A线程每200ms就生成一个[0,100]之间的随机数, B线程每...原创 2018-07-21 15:38:52 · 1858 阅读 · 0 评论 -
【小家java】Java反射性能问题,你真的需要考虑吗?
Java的反射,是我们进阶的敲门砖。反射肯定比直接调用慢,这个毋庸置疑了,我这篇文章也不是证明反射有多高效的。我举个快递小哥的例子:举个栗子如果快递员就在你住的小区,那么你报一个地址:xx栋xx号,那么快递员就可以马上知道你在哪里,直接就去到你家门口;但是,如果快递员是第一次来你们这里,他是不是首先得查查百度地图,看看怎么开车过去,然后到了小区是不是得先问问物管xx栋怎么找,然后,有可...原创 2018-07-26 18:19:44 · 4180 阅读 · 3 评论 -
【小家java】HashMap原理、TreeMap、ConcurrentHashMap的原理、性能、安全方面大解析-----看这一篇就够了
Map的遍历问题,选择哪种方式性能最优? java8之后提供了lambda表达式的遍历方式。因此如果可以用lambda表达式遍历,那就毫无疑问的直接选择即可。遍历方式代码如下: //entrySet方式:key和value一次性都拿出来 for (Entry<String, String&amp原创 2018-07-21 21:40:54 · 2713 阅读 · 0 评论 -
【小家java】java8新特性(简述十大新特性) 饱受赞誉
截止稿前,java10都已经发布了,现在我们来讨论一下java8。 本文的讨论,只是一个简述,更加具体的,各位可以参照各自的专题讲解说在前面Java 8可谓是自Java 5以来最具革命性的版本了,她在语言、编译器、类库、开发工具以及Java虚拟机等方面都带来了不少新特性。我们来一一回顾一下这些特性。一、Lambda表达式Lambda表达式可以说是Java 8最大的卖点,她将函数式...原创 2018-07-30 15:41:31 · 14634 阅读 · 8 评论 -
【小家java】java8新特性之---Base64加密和解密原理
概述Base64是一种字符串编码格式,采用了A-Z,a-z,0-9,“+”和“/”这64个字符来编码原始字符(还有垫字符“=”)。一个字符本身是一个字节,也就是8位,而base64编码后的一个字符只能表示6位的信息。也就是原始字符串中的3字节的信息编码会变成4字节的信息。Base64的主要作用是满足MIME的传输需求。 在Java8中Base64编码已经成为Java类库的标准,且内置了Ba...原创 2018-07-30 17:54:42 · 3139 阅读 · 0 评论 -
【小家java】java8新特性之---反射获取方法参数名
方法的参数名,在很多时候我们是需要反射得到的。但是在java8之前,代码编译为class文件后,方法参数的类型是固定的,但参数名称却丢失了,这和动态语言严重依赖参数名称形成了鲜明对比。(java是静态语言,所以入参名称叫什么其实无所谓的)。虽然名称无所谓,但很多时候,我们需要此名称来做更好的安排.比如mybatis的Dao层接口方法,需要特意用个注解@Param来显示标识出参数名,当时写的时候...原创 2018-07-30 20:11:14 · 6758 阅读 · 2 评论 -
【小家java】使用volatile关键字来实现内存可见性、实现轻量级锁
内存可见性volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchronized相比(synchronized通常称为重量级锁),volatile更轻量级,相比使用synchronized所带来的庞大开销,倘若能恰当的合理的使用volatile,自然是美事一桩。 为了能比较清晰彻底的理解volatile,我们一步一步来分析。首先来看看如下...原创 2018-07-27 14:46:00 · 1488 阅读 · 2 评论 -
【小家java】使用lambda表达式传参是否有性能问题?
随着java8的普及,lambda表达式的书写日益增多。咱们看下面一个例子: 编程有一条原则如下: 避免创建不必要的对象:最好能重用对象,而不要在每次需要的时候就创建一个相同功能的新对象。List<String> names = Arrays.asList("peter", "anna&q原创 2018-07-27 15:38:12 · 5998 阅读 · 2 评论