- 博客(22)
- 收藏
- 关注

原创 关于理解Java虚拟机总结 JVM高级特性与最佳实践 jvm自动内存分配
笔者最近在总结关于JVM的知识,此篇文章建立在 周志明编写的 《深入理解Java虚拟机 JVM高级特性与最佳实践》第三版的基础之上进行总结。总结如果不正之处,还望多多指教。关于对Java虚拟机的介绍以及虚拟机的发展史在这里就不在赘述,如果感兴趣可以看一些资料。Java内存区域学过c++的开发人员会知道,c++在内存管理领域是扮演者“皇帝”的角色,他们负责着一个对象从出生到终结的整个过程。然而对于Java程序员来说,他们只负责创建对象,而不用去释放这些对象所消耗的内存,这些工作全部交由jvm去做。
2021-07-15 14:25:53
820

原创 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
4856

原创 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
834
1

原创 零件分组 题目描述 某工厂生产一批棍状零件,每个零件都有一定的长度(Li)和重量(Wi)。现在为了加工需要,要将它们分成若干组,使每一组的零件都能排成一个长度和重量都不下降
零件分组题目描述某工厂生产一批棍状零件,每个零件都有一定的长度(Li)和重量(Wi)。现在为了加工需要,要将它们分成若干组,使每一组的零件都能排成一个长度和重量都不下降(若i<j,则Li<=Lj,Wi<=Wj)的序列。请问至少要分成几组?输入第一行为一个整数N(N<=1000),表示零件的个数。第二行有N对正整数,每对正整数表示这些零件的长度和重量,长度和重量均不超过10000。输出仅一行,即最少分成的组数。样例输入58 4 3 8 2 3 9 7 3 5样例输出
2021-07-05 09:36:31
1990

原创 关于java常见异常举例
Java常见异常 1. RuntimeException子类: 序号 异常名称 异常描述 1 java.lang.ArrayIndexOutOfBoundsException 数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。 2 java.lang.ArithmeticException 算术条件异常。譬如:整数除零等。 3 java.lang.SecurityException 安全性异常 4 ...
2020-11-05 08:47:46
978

原创 有关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
1073
原创 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
382
原创 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
638
原创 接口中属性的默认修饰符 方法的默认修饰符
接口中的属性默认是public static final 的,方法默认是public abstract的
2021-07-27 19:54:05
3063
原创 spring boot 约定大于配置
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。spring Boot采用约定大约配置的方式,大量的减少了配置文件的使用。使用SpringBoot的同学可能经常看到这几个字“约定大于配置”,那么它到底是什么意思呢?百度一下意思如下:约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,
2021-07-27 17:11:44
1101
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
497
原创 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
431
原创 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
2545
原创 算法基础 滑动窗口算法 原理分析
滑动窗口算法基本原理学过计算机网络的同学,都知道滑动窗口协议(Sliding Window Protocol),该协议是 TCP协议 的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认。因此该协议可以加速数据的传输,提高网络吞吐量。滑动窗口算法其实和这个是一样的,只是用的地方场景不一样,可以根据需要调整窗口的大小,有时也可以是固定窗口大小。滑动窗口算法(Sliding Window Algorith
2021-07-27 15:08:11
1196
原创 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
584
原创 八大排序算法 排序 C语言
前言不管是提高自身的能力,还是面试,八大排序都是很重要的一个知识点,所以理解并实践实现是很有必要的,以下给出算法思想与代码实现,并且进行运行时间测试八大排序的效率。时间复杂度对比图先看下对于算法时间复杂度的对比:冒泡排序冒泡排序是一种简单的排序算法。主要思想是顺序的比较相邻的两个数,如果符合比较条件就替换两个数,做法可以从后往前推,也可以从前往后推,每次推出当前长度的最大值,直至最后便可以完整的排序。时间复杂度为 : O(n*n);#include<time.h>#include
2021-07-27 09:12:01
505
原创 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
1115
原创 mysql 排序 (row_number、dense_rank、rank)索引(主键索引、唯一索引、普通索引、全文索引、多列索引)语句执行顺序
mysql 添加索引 mysql 如何创建索引1.添加PRIMARY KEY(主键索引)mysql>ALTER TABLE table_name ADD PRIMARY KEY ( column )2.添加UNIQUE(唯一索引)mysql>ALTER TABLE table_name ADD UNIQUE ( column )3.添加INDEX(普通索引)mysql>ALTER TABLE table_name ADD INDEX index_name ( column )
2021-07-25 21:47:55
1238
原创 约瑟夫环问题
约瑟夫环问题。你和另外 n-1 个人围成一个圈,按 1,2,…,n 依次编号。第一个人从 1 开始报数,数到 k 的人会被杀掉,然后下一个人重新从 1 开始报数。如此往复,直到最后只剩下一个人。问题是,你应该如何选择自己的初始位置,才能保证最后不被杀掉呢?速度越快的算法当然越好,毕竟这是一个生死攸关的问题。下面你将会看到,我们如何通过一些基本的数学推导最终得到这个问题的递推解。初步思考考虑这样一种相对简单的情况:总共有 5 个人,数到 3 的人被杀掉。那么,死亡过程如下图所示:经过一番模拟之后,
2021-07-13 21:46:40
731
原创 代理(Proxy)模式
代理模式(Proxy Pattern),23个经典模式中的一个,又称之为委托模式,就是为目标对象提供了一个代理,这个代理可以控制对目标对象的访问。代理对象可以在被代理对象的基础上添加额外功能。为什么要使用代理?某人要找对象,但是由于某些原因(如工作太忙)不能直接去找,于是委托一个中介机构去完成这一过程,如婚姻介绍所,在这里婚姻介绍所就是一个代理,与此相类似的还有房屋中介、职业中介,它们充当的都是一个代理的角色。所谓代理,就是一个人或者一个机构代表另一个或者另一个机构采取行动。静态代理静态代理要求被代
2021-07-12 08:46:34
1084
原创 关于对反射的理解 java
反射的定义JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。反射的作用一般情况下,我们使用一个类时,都知道它是用来干什么的。先是对其进行实例化,然后在使用它。反射正好与之相反。当我们不知道一个类是什么时可以用反射对其进行分析。若想了解一个类,那一定是从其属性和方法下手,通过反射可以获得一个类的所有属性和方法。import java.lang.
2021-07-11 21:39:13
716
原创 关于微信商家向个人零钱付款 后端实现
关于微信商家向用户零钱付款 后端实现网络上大部分都是用户向商家付款的案例。近期碰到这样一个需求,要求商家向个人账号付款,查询相关资料却寥寥无几。现将个人实现过程总结如下,以供大家批评指正。首先我先是看了微信支付的接口文档: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
1517
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人