自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 二进制底层加减法的实现原理

计算机底层存储的基本单位为bit 也就是0与1,数字的表示也是以一串二进制来表示。那么如何通过一连串的二进制来完成计算的呢?大体分为5部分:1.求异或^首先对这俩数求异或操作求值;(啥是异或,俩数的对应位做比较,如果不相等,则结果为1)0000 00011111 1101---------^1111 1100 求出该值之后记录下来,后边会用到!!2.求与结果&紧接着对这俩数进行与操作(对应位的俩数都为1则结果为1,否则都为0),如果求出的与结果为0,则..

2020-09-24 16:08:26 1526

原创 Java通过递归方式实现数的阶乘,斐波那契数列与汉诺塔

何为递归算法所谓递归,通俗易懂的理解就是自己直接或者间接的调用自己来实现一些复杂的操作;自己调用自己?那不一直调用变成死循环了嘛?别急,如果我们提前定义好了出口,等到出口那里就终止调用,这样就可以完美解决死循环的问题了。下面通过递归算法求阶乘与汉诺塔两个小例子来熟悉下递归的思想。1.计算阶乘当求第n个数的阶乘的时候,我们只需要知道n-1的阶乘即可,通过n*(n-1)就可以求出n的阶乘;public static void main(String[] args) { S

2020-07-25 12:49:13 246

原创 时间复杂度如何计算

算法时间复杂度:时间复杂度描述的是方法执行的渐进时间复杂度(随着数据的增加的一种时间变化趋势)用T(n)=O(f(n)) 表示。其中 f(n)表示当数据量为n的时候这个方法中的代码的执行次数总和代码1int i = 1; int j = 2; ++i; j++; int m = i + j;如上面代码所示代码没有循环 上面的代码执行次数与数据量无关,永远都是5则f(n...

2020-04-02 14:08:32 507 1

原创 java中Vector.add()方法底层源码跟踪

Vector与ArrayList的关系Vector与ArrayList底层都是基于可变数组来实现的Vector是线程安全的 ,ArrayList是不安全的(Vector的操作方法上都加了锁)数组长度需增长时,Vector默认增长一倍,ArrayList增长50% 我的上一篇博客中已经跟了ArrayList.add()方法源码https://blog.csdn.net/qq_343573...

2019-12-13 14:18:02 387

原创 java中ArrayList.add()方法底层源码跟踪

ArrayList中的属性ArrayList为List接口的一个实现类基于数组实现的,数据都是保存到数组中,类中定义了如下属性: //需要存放数据时定义的初始化数组大小 private static final int DEFAULT_CAPACITY = 10; //定义默认空数组 private static final Object[] DEFAULTCA...

2019-12-13 10:37:16 517

原创 JVM垃圾回收内存分配担保机制

jvm中一般情况下新对象的产生都是在新生代分配内存(大对象除外)当新生代内存不足以存放新产生的对象的时候,就需要进行新生代的垃圾回收Minor GC以便于给新生代腾出更多的可用内存。在Minor GC之前,首先查看老年代最大可用连续存储空间是否大于新生代所有对象之和,如果大于,则此次Minor GC是安全的,可放心的进行Minor GC,反之虚拟机会查看HandlerPromotionFa...

2019-11-15 10:56:56 691

原创 Linux系统安装配置JAVA

1.在usr/local下新建java文件夹cd /usr/local 定位到local文件夹mkdir java 创建java文件夹2.将提前下载好的jdk安装包jdk-8u221-linux-x64.tar.gz传输到该文件夹里并且解压下载链接:https://pan.baidu.com/s/1c18ICHOWNCjzA1sFSkp4pA提取码:9kc3解压...

2019-11-04 11:22:52 169

原创 JDBC连接数据库中为什么forName()方法没有调用newInstance()方法

常规连接数据库通过原生的jdbc代码进行数据库操作咱们以mysql数据库为例,分为以下7步:1.定义连接数据库的驱动全类名driverName2.定义连接数据的url3.定义用户名user与密码password4.通过Class.forName(driverName)加载驱动类5.通过DriverManager.getConnection(url,user,password...

2019-10-30 11:15:10 509

原创 什么是动态代理?动态代理有哪些应用?如何编写动态代理案例

什么是动态代理?当我们需要给某个类或者接口中的方法添加一些额外的功能比如日志、事务的时候,可以通过创建一个代理类来实现这些功能;该代理类既包含了原有类的完整功能,同时在这些功能的基础上添加了其他的逻辑。这个代理类不是事先定义好的,而是动态生成的,比较灵活;有几种动态代理1.java动态代理 java动态代理有个缺点就是要被代理的类必须实现一个接口,否则没法代理2.cgli...

2019-06-28 10:34:28 4320

原创 HashMap的底层实现原理

HashMap的数据结构HashMap的底层实现原理是根据散列表来实现的,我们可以认为是"链表数组"来实现的;其数据结构如下图所示:从上图我们可以看出哈希表是由数组+链表组成的,数组是什么类型?当我们在系统中创建hashMap时,系统中定义一个长度默认为16的(Node[])数组,源码如下所示:transient Node<K,V>[] table;数组中...

2019-06-25 19:01:00 544

原创 JAVA中值类型与引用类型通过形参与实参不同的表现

什么是值类型?java中值类型包括8中基本类型(byte 、short、int、 long 、float 、double、 char、boolean) 与String类型;String类型比较特殊,虽然是对象类型,但被final修饰符修饰 一旦被定义就不能再被修改,所以jvm为了提高效率为其分配了常量池,可以当成基本类型处理,不过是在常量池中分配空间(通过new指令也可以在堆中分配此处不多...

2019-06-25 11:29:25 440

原创 JAVA中JDK与JRE有什么区别?

JDK与JRE的关系1.JDKJDK是Java Development Kit的缩写,是Java的开发工具包,主要包含了各种类库和工具,提供给程序员使用的,JDK包含了JRE,同时也包含了编译java代码的编译器javac,同时包含了很多调试工具与监视工具例如jconsole等之类的工具;2.JREJRE是Java Runtime Environment的缩写,顾名思义是java运...

2019-06-24 11:27:10 779

原创 JAVA中new()指令都进行了那些操作

java代码(.java)文件如何通过java虚拟机(jvm)运行起来呢?首先将.java文件通过编译生成java虚拟机可以识别的.class文件,然后java虚拟机将.class文件翻译成机器可识别的机器码,这样一份java代码在机器上就可以运行起来了如下图所示:使用new()创建对象后台都进行了什么操作?那我们在代码中创建对象的时候常用的指令为new(类),这样子就会在java...

2019-06-24 10:32:57 1470

原创 JAVA中String在内存中如何分配空间

java中创建String类型对象有两种方式1.String a="***";2.String a=new String ("***");两者创建相同的字符串在内存中的地址却是不一样的,如下面的代码所示:public static void StringTest(){String s1="abc";String s2="abc";String s3=new String...

2019-06-14 10:19:20 2923

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除