编码实践的角度,...
public static int compare(int x, int y) { return (x < y) ? -1 : ((x == y) ? 0 : 1);}return (x < y) ? -1 : ((x == y) ? 0 : 1);3个条件的三元表达式:((x == y) ? 0 : 1) 这里面又是一个三元表达式(x == y) ? 0 :...
package com.example.demo;/** * @Description return test * @Auther gf.x * @Date 2019/11/21 00:33 */public class ReturnNullTest { public static void main(String[] args) { /*new Retur...
package com.example.demo;import java.io.UnsupportedEncodingException;import java.util.Arrays;/** * @Description * 1、char charAt(int index) * 2、char[] toCharArray() * 3、getChars(int srcBeg...
package com.example.demo;import java.util.Objects;public class EqualsTest { public static void main(String[] args) { }}class Person { int id; String name; String address;...
package com.example.demo;/** * @Description return and finally test * @Auther gf.x * @Date 2019/11/21 00:47 */public class ReturnFinallyTest { public static void main(String[] args) { ...
package com.example.demo;/** * @Description 装箱和拆箱 * @Auther gf.x * @Date 2020/1/8 13:44 */public class IntegerTest { public static void main(String[] args) { Integer t = new Intege...
如果对上面的执行结果还有疑问,也先不用急, ;public class SynchronizedDemo { public void method() { ...
synchronize底层原理:monitor对象存在于每个Java对象的对象头中(存储的指针的指向),synchronized锁便是通过这种方式获取锁的,也是为什么Java中任意对象可以作为锁的原因,同时也是notify/notifyAll/wait等方法存在于顶级对象Object中的原因。Java 虚拟机中的同步(Synchronization)基于进入和退出Monitor对象实现, ...
一、NIO的简介Java NIO( non-blocking IO)是从Java 1.4版本开始引入的一个新的IO API,Java NIO提供了与标准IO不同的IO工作方式:IO NIO 面向流 面向缓冲区 阻塞 非阻塞 1. 面向流与面向缓冲Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每...
经历很久之前就听说了可重入锁,可重入锁究竟是什么意思,以前是囫囵吞枣的,只要记住ReentrantLock和sychronized是可重入锁就行了,爱咋用咋用,好吧,原谅我的无知,最近对基础查漏补缺,发现竟然对其一问三不知,赶紧预习一波,觉得有必要写一篇博客来讲解,就当做什么都没有发生吧,嘿嘿。。。释义广义上的可重入锁指的是可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并...
1.ASMASM官网—官方文档ASM是什么ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。ASM能做
Java对象头与Monitorjava对象头是实现synchronized的锁对象的基础,synchronized使用的锁对象是存储在Java对象头里的。对象头包含两部分:Mark Word 和 Class Metadata Address其中Mark Word在默认情况下存储着对象的HashCode、分代年龄、锁标记位等以下是32位JVM的Mark Word默认存储结构由...
首先 RPC 框架配置复杂,如果走 HTTP 请求同样也能做到相同功能,而且配置可以几乎为零配置。项目也不用引用太多的包。虽然如果单纯用 RPC,可以不用类似于 Servlet 的 Web 标准。这个回答里恰巧讲了一些rpc通信协议的细节,但是强调一遍通信协议不是rpc最重要的部分,不要被这个回答带偏了。如果要了解rpc请更多的去了解服务治理(soa)的一些基本策略,推荐去看看dubbo的文...
昨天在开发中遇到一个场景,调用RPC,拿到返回结果(int[]数组),使用jackSon序列化为Json对象时,发现一个诡异的现象,在使用Lists.newArrayList和Arrays.asList将数组转为List时,转出来的对象并不是与原数组对应的一个List,二十一个很诡异的对象。后来研究一下JDK,发现了陷阱所在。 首先看一下Arrays.asList这个方法,这个方法可以将数组转成
上篇《Spring Boot 2.x 启动全过程源码分析(一)入口类剖析》我们分析了 Spring
什么是自旋锁多线程中,对共享资源进行访问,为了防止并发引起的相关问题,通常都是引入锁的机制来处理并发问题。问题引入:获取到资源的线程A对这个资源加锁,其他线程比如B要访问这个资源首先要获得锁,而此时A持有这个资源的锁,只有等待线程A逻辑执行完,释放锁,这个时候B才能获取到资源的锁进而获取到该资源。这个过程中,A一直持有着资源的锁,那么没有获取到锁的其他线程比如B怎么办?通常就...
1、什么是自选锁自旋锁是指当一个线程尝试获取某个锁时,如果该锁已被其他线程占用,就一直循环检测锁是否被释放,而不是进入线程挂起或睡眠状态。2、为什么要使用自旋锁多个线程对同一个变量一直使用CAS操作,那么会有大量修改操作,从而产生大量的缓存一致性流量,因为每一次CAS操作都会发出广播通知其他处理器,从而影响程序的性能。3、线程自旋与线程阻塞阻塞的缺点显而易见,线程一旦进入阻塞(...
对于Lock与synchronized的区别1、Lock能够完成synchronized所实现的所有功能,并且提供了多样化的同步,比如有时间限制的同步,可以被Interrupt的同步(synchronized的同步是不能Interrupt的)等。如果使用synchronized,如果A不释放,B将一直等下去,不能被中断。 如果使用ReentrantLock,如果A不释放,可以使B在等...
问题引入: 为什么泛型类的类型不能是基本数据类型? 问题解答:
一、引言 如你所知,Java是一门面向对象的编程语言。我们平常在写代码的时候也是在不停的操作各种对象,那么当你在写出User user = new User();这样一行代码的时候,JVM都做了些什么呢? 二、了解对象 1、内存布局 在Hotspot虚拟机中一个对象的内存布局分为三个部分:对象头、实例数据、对齐填充。 对象头又有两部分的信息,第一部分是用于存储对象自身的运行数据(HashCod
Object object = MethodUtils.invokeMethod(Class.forName("类名").newInstance(), "方法名", new Object[] {参数});
新建一个空的java项目。客户端发送的是一些字节数组,需要对字节数组进行解析后放入到IO流中。所以,新建request和response这两个对象==>>Myrequest&Myresponse。回顾一下http协议中请求所包含的内容,并对这些内容进行解析。package com.mashibing;import java.io.InputStream;/** * @author msb * @version : 1.0 *请求类 */public cl.
1 前言LinkedHashMap继承于HashMap,如果对HashMap原理还不清楚的同学,请先看上一篇:图解HashMap原理2 LinkedHashMap使用与实现先来一张LinkedHashMap的结构图,不要虚,看完文章再来看这个图,就秒懂了,先混个面熟:LinkedHashMap结构.png2.1 应用场景HashMap是无序的,当我们希望有顺序地去...
1、Object对象的toString()方法 /** * Object对象的toString()方法 * * @return */ public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode());...
引言不论在工作中,亦或是求职面试,Spring Boot已经成为我们必知必会的技能项。除了某些老旧的政府项目或金融项目持有观望态度外,如今的各行各业都在飞速的拥抱这个已经不是很新的Spring启动框架。当然,作为Spring Boot的精髓,自动配置原理的工作过程往往只有在“面试”的时候才能用得上,但是如果在工作中你能够深入的理解Spring Boot的自动配置原理,将无往不利。Spr...
严格讲既不是基础类型也不是对象类型,是一个特殊的类型,并可以看作允许cast成任意类型的对象。There is also a special null type, the type of the expression null, which has no name. Because the null type has no name, it is impossible to declare ...
Spring Boot 可以通过 @PropertySource,@Value,@Environment, @ConfigurationProperties 来绑定变量。Spring Boot读取配置的几种方式:读取application文件在application.yml或者properties文件中添加:info.address=USAinfo.company=Spring...
1、自定义异常类package com.example.demo.myCollection;/** * @Description 数组索引越界异常类 * @Auther gf.x * @Date 2020/5/13 19:09 */public class IndexOutOfBoundsMyException extends RuntimeException { private static final long serialVersionUID = -407752045512
先说作用:@EnableConfigurationProperties注解的作用是:使使用 @ConfigurationProperties 注解的类生效。说明:如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component,那么在IOC容器中是获取不到properties 配置文件转化的bean。说白了 @EnableConfiguratio...
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号