java
文章平均质量分 78
川川~
剪水行舟
展开
-
使用ThreadPoolExecutor实现控制一个方法的并发量,实现同时只能有10个线程进入方法
线程池是什么线程池是一种基于池化思想管理线程的工具,设计它的核心目的是解决资源管理问题,可以降低资源消耗、提高响应速度以及提高线程的可管理性。ThreadPoolExecutorThreadPoolExecutor是Executor最下层的实现类参数1:corePoolSize:核心池大小参数2:maximumPoolSize 线程池中允许的最大线程数参数3:keepAliveTime 线程空闲时的存活时间,即当线程没有任务执行时,继续存活的时间,默认情况下,该参数只在线程数大.原创 2021-03-15 08:00:09 · 1585 阅读 · 7 评论 -
依赖倒置、控制反转、依赖注入、面向接口编程的理解
我的另一篇文章 :《以面向对象的角度分析抽象类和接口》依赖倒置依赖倒置原则(Dependence Inversion Principle,DIP)是指设计代码结构时,高层模块不应该依赖低层模块,二者都应该依赖其抽象。通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并且能够降低修改程序所造成的风险。比如,我们有一个TeaRoom类(茶室),有drinkBlackTea 喝红茶与drinkGreenTea 喝绿茶两个方法,来模拟去茶室喝茶代码如下(完整例子放在g原创 2020-07-30 17:04:07 · 861 阅读 · 0 评论 -
浅析Java中创建对象的过程
前言当Java程序中使用new 创建对象时,类加载机制会检查这个类是否被加载过(类加载机制可以看一下另一篇文章《Android中ClassLoader双亲委托机制》),如果没被加载过会执行对象的创建过程,流程图如下类加载一个Java程序,会通过javac编译成class文件,然后通过虚拟机加载到方法区检查加载检查 new 这个指令的参数是否能在常量池中定位到一个类的 符号引用,并检查类是否已经被加载、解析和初始化过。分配内存JVM为对象分配内存。相当于把一块确定大小的内存从堆中划分出来。分配原创 2020-07-30 17:03:32 · 185 阅读 · 0 评论 -
一个你读框架源码之前必须要理解的技术点,泛型(二)
上一篇介绍了一下各种定义,包括什么是泛型、泛型的优点、泛型擦除、泛型类、泛型接口、泛型方法、泛型通配符以及泛型上下边界,这一篇主要是上一篇的延续和补充限定类型变量在上一篇中,我们知道在使用泛型的时候,可以通过extends 限制泛型实参的上边界,除了限制上边界,我们还可以对泛型的类型变量加以约束,看下例子:class ExampleClass8{ //计算最小值 public <T extends Comparable> T min(T paramA, T paramB){原创 2020-07-30 17:01:39 · 165 阅读 · 0 评论 -
记一下Java中基本数据类型所占大小以及bit、Byte和KB的联系
基本数据类型有8种:byte、short、int、long、float、double、boolean、char整数型:byte、short、int、long浮点型:float、double布尔型:boolean字符型:charbyte:1byte = 8bitshort:2byteint:4bytelong:8bytefloat:4bytedouble:8byteboolean:1bytechar:2byte计算机中数据用0或1来表示,0或1占1位(1bit),bit 也是计算机存原创 2020-07-30 16:31:53 · 351 阅读 · 0 评论 -
数据结构篇 --- 线性表数据结构,数组
数组数组(Array)是一种线性表数据结构,用连续的内存空间,存储相同类型的数据线性表线性表(Linear List)数据是线性排列的,每个线性表中的数据最多只有一个头和一个尾(或者一个前一个后),线性表数据结构包括:数组、队列、栈、链表等非线性表非线性表中,数据之间并不是前后关系,一个数据可能跟多个数据有关系,非线性表包括 二叉树、堆、图等。连续的内存空间如图所示,系统给数组分配了一个连续的内存空间,即数组各个内元素的存地址也是连续的当我们需要访问到数组的某个位置的元素时,可以根据首地址与原创 2020-07-30 16:29:08 · 636 阅读 · 0 评论 -
垃圾回收器如何判断对象的“存活”,以及类何时回收
前言在垃圾回收器回收堆里面的对象的时候,需要判断对象是否还被其它地方使用,此时的状态我们可以比作对象是“存活”的,如果对象没有被其它地方使用,就回被垃圾回收器回收。如何判断对象是否是“存活”的呢?有两个方法:引用计数法和可达性分析...原创 2020-07-30 14:51:14 · 301 阅读 · 0 评论 -
Java中对象到底存在堆中还是栈中
创建一个对象的时候,到底是在栈中分配还是在堆中分配需要看2个方面:对象类型和在Java中存在的位置1.如果是基本数据类型,byte、short、int、long、float、double、char,如果是在方法中声明,则存储在栈中,其它情况都是在堆中(比方说类的成员变量就在堆中);2.除了基本数据类型之外的对象,JVM会在堆中创建对象,对象的引用存于虚拟机栈中的局部变量表中3.并不是所有的对象都在堆中存储,可以走栈上分配,在不在栈上分配取决于Hotspot的一个优化技术:“逃逸分析”一般JVM 执行原创 2020-07-30 14:50:02 · 13919 阅读 · 1 评论 -
虚拟机篇 --- 浅谈JVM内存结构
目录前言JVM运行时数据区(内存区域划分)虚拟机栈局部变量表操作数栈动态连接返回地址/完成出口本地方法栈程序计数器前言Java引以为傲的就是其内存管理机制,相比C++的手动内存管理、复杂难以理解的指针等,Java程序写起来方便的多。本文中所说的JVM均是HotSpot版本JVM运行时数据区(内存区域划分)Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区,包括:虚拟机栈(VM Stack)本地方法栈(Native Method Stack)程序计数器(Pro原创 2020-07-30 14:48:43 · 138 阅读 · 0 评论 -
以面向对象的角度分析抽象类和接口
一、面向对象思想的理解面向对象即 OOP(Object Oriented Programming)它有三大特征 :封装、继承、多态封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。多态是同一个行为具有多个不同表现形式或形态的能力。面向对象思想相当于对万物的一个抽象,抽象具体体现在接口和抽象类抽象类和接口1.首先在定原创 2020-07-19 18:00:07 · 483 阅读 · 0 评论 -
反射有性能损失,损失在哪里?Class.getDeclaredMethod与Class.getMethod方法的区别是什么?
反射有性能损失,损失在哪里?反射的执行过程:ClassLoader加载一个类会把类信息加载到JVM中,反射方法时,会动态解析Class需要获取方法中的数据组成Method对象,反射执行的时候会通过Method对象执行需要执行的方法整个过程会产生额外的对象,并且在执行方法时(Method.invoke),每次执行都会检查方法的可见性,相当于用Method对象作为中间者来执行,这种方式比直接执行慢。反射是基于程序集和元数据的,在使用反射的时候,会搜索元数据,而元数据是基于字符串的,并且无法预编译,所以这原创 2020-06-23 16:30:14 · 910 阅读 · 0 评论 -
搞清Class.forName()和ClassLoader.loadClass()的区别
反射定义在运行状态中,对任意一个类,都能知道这个类中所有的属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性。反射的使用过程中要基于Class对象,那通过Class.forName()或者ClassLoader.loadClass()获取Class有什么区别呢?查看Class.forName()源码 @CallerSensitive public static Class<?> forName(String className) t原创 2020-06-22 17:37:13 · 3031 阅读 · 0 评论 -
转发:UML类图详解和示例(超详细)
写在前面日常工作中用到UML类图,从网上找到一篇博客关于其用法写的不错,在此转发一下方便自己以后查看原文链接:UML类图详解和示例目录写在前面UML类图概述什么是UML类图UML类图的组成类和对象类之间的关系依赖关系泛化关系关联关系聚合关系组合关系实现关系类的多重性UML类图概述什么是UML类图要认识UML类图,要从UML是什么开始.UML(Unified Modeling Language)即统一建模语言,是用于系统可视化建模语言。它是国际统一软件建模标准,融合了OMT、OOSE、Booch方转载 2020-06-19 11:31:27 · 4706 阅读 · 2 评论 -
“码上理解”---RxJava 线程调度分析(一)切换子线程
目录RxJava简单介绍文章目的环境搭建和代码示例分析subscribeOn(Schedulers.io())Schedulers.io()subscribeOn()三级目录RxJava简单介绍RxJava现在几乎每个Android项目中都有它的身影,RxJava是使用了Rx(ReactiveX)函数库的语言库,除了RxJava,Rx几乎支持了全部的流行编程语言,例如:RxJS、Rx.NET等等。RxJava的优点和使用这篇文章不做详细介绍,今天关注一下框架内部原理:比如我们平时用RxJava的时候原创 2020-06-06 17:52:29 · 636 阅读 · 0 评论 -
“码上理解”--- 手撕RxJava订阅关系,事件发送和接收
目录RxJava简单介绍文章目的环境搭建和代码示例subscribe()方法Observable.create(new ObservableOnSubscribe< String>() {})1.以observer为参数创建了一个发射器2.调用observer的onSubscribe方法3.调用source的subscribe方法,并将发射器传递过去总结(以create操作符为例)RxJava简单介绍RxJava现在几乎每个Android项目中都有它的身影,RxJava是使用了Rx(Reac原创 2020-06-05 10:42:22 · 432 阅读 · 0 评论 -
一个你读框架源码之前必须要理解的技术点,泛型(一)
泛型泛型的本质是参数化类型,在不创建新的类型的情况下,通过泛型指定某一个类、方法或接口成不同类型。将类型由原来的具体类参数化,此时的参数可以称为类型形参public class Test1 { /** * @param args * ArrayList<Integer>,ArrayList被指定了一个Integer的类型形参,所以此时的ArrayList只能添加Integer的对象 * @throws Exception */ public static void ma原创 2020-06-01 18:30:40 · 224 阅读 · 0 评论 -
svn: E230001: Server SSL certificate verification failed: certificate issued
今天接手了一个SVN项目,在AndroidStudio中check代码的时候报错svn: E230001: Server SSL certificate verification failed: certificate issued字面上的大致意思是服务器的SSL证书验证失败。解决方法:在终端执行svn ls https://***/svn/** (你的项目地址)然后终端会让你...原创 2019-04-11 17:28:03 · 3661 阅读 · 1 评论 -
微信云支付之退款
前言上一篇文章,我们介绍了微信云支付的扫码支付实现的大体流程,这篇文章我们将介绍的是退款。一、 计算签名我们查看API说明的时候,发现退款的时候,需要传递签名和签名算法,如下图 签名生成算法:RSASSA-PSS-2048-SHA256,私钥为服务商在云支付录入商户时,在网页上生成的签名私钥(该私钥只有服务商知道,云支付不知道,请妥善保存) 使用java实现计算签名...原创 2018-08-21 16:24:13 · 1991 阅读 · 0 评论 -
微信云支付的扫码支付
前言之前研究微信云支付的扫码支付,我将认为重要的内容在本文中分享给大家。微信云支付相关介绍微信云支付的相关特点文档中已经介绍的很清楚了,这里就不在介绍了。 微信云支付文档何为扫码支付 1.“商户主动下单,为每个订单生成一个二维码,顾客打开扫一扫进行扫码后,完成支付” 2.“每个订单一个单独的二维码” 3.“收银机具需要有给顾客展示二维码的屏幕,顾客扫码...原创 2018-07-31 13:15:56 · 2568 阅读 · 1 评论 -
Caused by: java.lang.ClassNotFoundException: org.apache.http.HttpEntity
第一次接触后台写接口,接口写出来了,本地运行的时候报了异常Caused by: java.lang.ClassNotFoundException: org.apache.http.HttpEntity at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1309...原创 2018-07-25 10:23:45 · 6370 阅读 · 2 评论 -
java.security.NoSuchProviderException: no such provider: BC 问题
在使用SHA256生成签名的时候,报错java.security.NoSuchProviderException: no such provider: BC,这个问题之前我是遇到过的,解决方法是在jre/lib/security目录下,使用vim打开“java.security”配置上security.provider.10=org.bouncycastle.jce.provider.Bouncy...原创 2018-07-25 09:50:33 · 28142 阅读 · 13 评论