
Java基础 小菜一碟
文章平均质量分 66
这不简简单单嘛
Werido_wjh
这个作者很懒,什么都没留下…
展开
-
Volatile是如何保证线程可见的?详解 volatile 主内存 工作内存 jmm 缓存一致性 总线
Volatile是如何保证线程可见的?摘要本文以volatile最常见的2个问题为线索,基于汇编lock前缀指令和cpu原子操作等底层知识,初步对volatile的底层原理进行描述。通过本文的论述,基本上能够解释以下2个问题:1)为什么volatile能够保证线程可见性?2)为什么volatile不能实现操作原子性?研究思路首先分析jmm内存模型,结合cpu的8个原子操作然后介绍CPU的缓存一致性协议最后结合jmm和缓存一致性协议,解释为什么volatile可以保证线程可见基本概念首先对后文原创 2021-08-12 14:54:26 · 388 阅读 · 0 评论 -
ConcurrentHashMap分段锁详解 ConcurrentHashMap和Hashtable实现同步的区别 分段锁
concurrenthashmap采用分段锁思路我们都知道ConcurrentHashMap的底层数据结构实现原理其实和HashMap没什么两样,都是数组+链表+红黑树。那么我们就从HashMap入手,来理解。具体HashMap的实现原理剖析请看个人博客:https://blog.youkuaiyun.com/weixin_44104798/article/details/118683464怎么将HashMap数据结构使用分段锁的思想进行细分化。在jdk1.7及以前,是这样实现的:比如容器HashMap中存在1原创 2021-07-29 16:18:38 · 655 阅读 · 0 评论 -
接口中属性的默认修饰符 方法的默认修饰符
接口中的属性默认是public static final 的,方法默认是public abstract的原创 2021-07-27 19:54:05 · 3078 阅读 · 0 评论 -
spring boot 约定大于配置
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。spring Boot采用约定大约配置的方式,大量的减少了配置文件的使用。使用SpringBoot的同学可能经常看到这几个字“约定大于配置”,那么它到底是什么意思呢?百度一下意思如下:约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,原创 2021-07-27 17:11:44 · 1110 阅读 · 1 评论 -
try catch finally 执行顺序 多情况分析
情况1:try{} catch(){}finally{} return;显然程序按顺序执行。情况2:try{ return; }catch(){} finally{} return;程序执行try块中return之前(包括return语句中的表达式运算)代码;再执行finally块,最后执行try中return;finally块之后的语句return,因为程序在try中已经return所以不再执行。情况3:try{ } catch(){return;} finally{} return;程序先原创 2021-07-27 15:36:07 · 503 阅读 · 0 评论 -
Java 类初始化顺序 实例讲解
对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。package javaThreadLearning;class Parent { // 静态变量 public static String p_StaticField = "父类--静态变量"; protected int i = 1; protected int j = 8; // 变量 publi原创 2021-07-27 15:32:37 · 437 阅读 · 0 评论 -
i++与++i 详解 真正区别 一看就懂 深层理解
问题描述记得刚开始学编程的时候还是从c语言开始的,还是看的谭浩强写的那本书,上面对介绍i++和++i的区别如下:i++是先赋值,然后再自增;++i是先自增,后赋值。用代码表示就是:若 a = i++; 则等价于 a=i;i=i+1;而 a = ++i; 则等价于 i=i+1;a=i;那么事实真是这样么,只是曾经我深信不疑,但是直到我看到下面这段代码: @Test public void test(){ int i = 0; i=i++; System.o原创 2021-07-27 15:27:40 · 2558 阅读 · 0 评论 -
RPC 一篇文章搞懂rpc 不看后悔五百年
1. 基本的RPC模型主要介绍RPC是什么,基本的RPC代码,RPC与REST的区别,gRPC的使用1.1 基本概念RPC(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务本地过程调用:如果需要将本地student对象的age+1,可以实现一个addAge()方法,将student对象传入,对年龄进行更新之后返回即可,本地方法调用的函数体通过函数指针来指定。远程过程调用:上述操作的过程中,如果addAge()这个方法在服务端,执行函数的函数体原创 2021-07-27 14:57:34 · 591 阅读 · 0 评论 -
Spring Security 原理
Spring Security核心原理Spring Security是Spring生态系统的一个安全组件,而且和Spring MVC整合非常方便。Spring Security最基本的原理是基于J2EE的拦截器原理,拦截器会形成一个拦截器链,这是一种责任链设计模式。Spring Security使用实现的一些拦截器来对访问的url进行拦截,通过对缓存中的角色进行相应判定后决定是否能url访问权限。当一个URL请求到来时,Spring Security的AuthenticationProcessingFi原创 2021-07-25 21:52:37 · 1120 阅读 · 0 评论 -
关于理解Java虚拟机总结 JVM高级特性与最佳实践 jvm自动内存分配
笔者最近在总结关于JVM的知识,此篇文章建立在 周志明编写的 《深入理解Java虚拟机 JVM高级特性与最佳实践》第三版的基础之上进行总结。总结如果不正之处,还望多多指教。关于对Java虚拟机的介绍以及虚拟机的发展史在这里就不在赘述,如果感兴趣可以看一些资料。Java内存区域学过c++的开发人员会知道,c++在内存管理领域是扮演者“皇帝”的角色,他们负责着一个对象从出生到终结的整个过程。然而对于Java程序员来说,他们只负责创建对象,而不用去释放这些对象所消耗的内存,这些工作全部交由jvm去做。原创 2021-07-15 14:25:53 · 824 阅读 · 0 评论 -
ArrayList的扩容机制
ArrayList是实现了List的接口的类,底层数据结构是一个数组,但是该数组实现了可变大小,具备了更好的性能。那么Arraylist是如何实现可变大小的呢,一起深入源码看一下。首先看一下它的几个属性 /** * Default initial capacity. */ private static final int DEFAULT_CAPACITY = 10; /** * Shared empty array instance used f原创 2021-07-12 21:27:50 · 4864 阅读 · 0 评论 -
代理(Proxy)模式
代理模式(Proxy Pattern),23个经典模式中的一个,又称之为委托模式,就是为目标对象提供了一个代理,这个代理可以控制对目标对象的访问。代理对象可以在被代理对象的基础上添加额外功能。为什么要使用代理?某人要找对象,但是由于某些原因(如工作太忙)不能直接去找,于是委托一个中介机构去完成这一过程,如婚姻介绍所,在这里婚姻介绍所就是一个代理,与此相类似的还有房屋中介、职业中介,它们充当的都是一个代理的角色。所谓代理,就是一个人或者一个机构代表另一个或者另一个机构采取行动。静态代理静态代理要求被代原创 2021-07-12 08:46:34 · 1090 阅读 · 0 评论 -
关于对反射的理解 java
反射的定义JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。反射的作用一般情况下,我们使用一个类时,都知道它是用来干什么的。先是对其进行实例化,然后在使用它。反射正好与之相反。当我们不知道一个类是什么时可以用反射对其进行分析。若想了解一个类,那一定是从其属性和方法下手,通过反射可以获得一个类的所有属性和方法。import java.lang.原创 2021-07-11 21:39:13 · 721 阅读 · 0 评论 -
Java 128陷阱
在java中 List list = new ArrayList(); 中 如果写为List<> list = new ArrayList(); 这样会报错的。 那么int 和Integer有什么区别呢??我们知道int是基本数据类型,而Integer是int的包装类。这里就设计到了自动装箱和自动拆箱了,简单一点讲装箱就是基本数据类型自动转换为包装类,拆箱与之对应,包装类自动转换为基本数据类型。 //自动装箱 Integer s = 123; /原创 2021-07-10 18:36:30 · 840 阅读 · 1 评论 -
关于微信商家向个人零钱付款 后端实现
关于微信商家向用户零钱付款 后端实现网络上大部分都是用户向商家付款的案例。近期碰到这样一个需求,要求商家向个人账号付款,查询相关资料却寥寥无几。现将个人实现过程总结如下,以供大家批评指正。首先我先是看了微信支付的接口文档:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1,建议大家在实现之前可以阅读一下,熟悉一下流程。整体的实现思路:1、获取数据,具体请求参数请参考微信支付文档(https://pay.weix原创 2021-07-05 17:03:44 · 1526 阅读 · 1 评论 -
关于java常见异常举例
Java常见异常 1. RuntimeException子类: 序号 异常名称 异常描述 1 java.lang.ArrayIndexOutOfBoundsException 数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。 2 java.lang.ArithmeticException 算术条件异常。譬如:整数除零等。 3 java.lang.SecurityException 安全性异常 4 ...原创 2020-11-05 08:47:46 · 985 阅读 · 0 评论 -
有关Java集合中List、set、Map的详解
Java集合一、Java集合概述二、集合框架结构图2.1 Collection和Map两种体系2.2 Collection接口继承树2.3 Map接口继承树三、常用集合的分类3.1 Collection3.1.1 Collection的常用方法3.1.2 源码分析3.1.3 List和Set总结3.2 Map3.2.1 Map的常用方法3.2.2 源码分析3.2.3 HashMap、Hashtable和TreeMap比较一、Java集合概述面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操原创 2020-11-03 17:15:29 · 1076 阅读 · 0 评论