- 博客(17)
- 收藏
- 关注
原创 初识 SpringBoot 的依赖管理和自动配置
一、依赖管理1、自动版本仲裁机制Spring Boot 项目默认依赖了一个父项目。父项目中声明了开发中常用的依赖的版本号,称为自动版本仲裁机制。这也就是说默认的依赖都不需要写版本号。如果需要使用 Spring Boot 默认版本以外的版本,需要在 properties 节点中声明。例如:<properties> <mysql.version>5.1.43</mysql.version></properties>2、场景启动器我们在 po
2021-06-20 19:39:11
389
原创 LinkedList的源码解析
看到 LinkedList 的内部类 Node,我们可以知道,它的底层是双向链表结构。// 内部类private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.ne.
2021-06-19 11:44:28
93
原创 显式转换和隐式转换
首先,我们来看一下基本数据类型之间的转换。显式转换:从表示范围大的类型转换为表示范围小的类型,需要强制转换。强制类型转换的语法格式就是加一个括号,然后给出想要转换的类型。例如:double x = 9.876;int y = (int)x;这个时候 y 的结果为 9。因为强制类型转换是通过截断小数点部分而将浮点型转换为整型。隐式转换:从表示范围小的类型转换为表示范围大的类型,可以直接转换。例:short x = 5;int y = x;因为 int 可以存储的范围要比 short
2021-06-19 10:58:21
1714
1
原创 常见的几种排序算法(待完善)
快速排序public void quickSort(int[] nums, int l, int r) { if (l >= r) { return; } int mid = partition(nums, l, r); quickSort(nums, l, mid - 1); quickSort(nums, mid + 1, r);}//填坑法public int patition(int[] nums, int l, int r) {
2021-06-19 10:50:22
79
原创 快速幂的实现
所谓的快速幂,是指手动实现幂运算。public double myPow(double x, int n) { double res = 1.00; for (int i = n; i != 0; i /= 2) { if (i % 2 != 0) { res *= x; } x *= x; } return n < 0 ? 1 / res : res;}解释:for 循环运行的次数为 i
2021-06-19 10:47:33
78
原创 ArrayList的源码解析
首先,来总览一下 ArrayList 的类结构图。接着,我们来看一下 ArrayList 的属性:private static final int DEFAULT_CAPACITY = 10; // 初始化容量为10private static final Object[] EMPTY_ELEMENTDATA = {}; // 指定该ArrayList容量为0时,返回该空数组private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTD
2021-06-19 10:39:40
68
原创 List接口及其常用的子类
一、什么是 List 接口一个 List 是一个元素有序的、可以重复、可以为 null 的集合(有时候我们也叫它“序列”)。Java 集合框架中最常使用的几种 List 实现类是 ArrayList,LinkedList 和 Vector。二、Vector 和 ArrayList 的区别Vector 是线程安全的,许多方法由 synchronized 修饰;而 ArrayList 不是。因此 Vector 的效率比 ArrayList 低得多。Vector 和 ArrayList 的底层都是数
2021-06-19 09:48:23
377
原创 什么是 fail-fast 机制?
fail-fast 机制,即快速失败机制,是 Java 集合中的一种错误检测机制。当在迭代集合的过程中,该集合在结构上发生改变的时候,就有可能发生 fail-fast,即抛出 ConcurrentModificationException 异常。fail-fast 机制并不保证在不同步的修改下抛出异常,他只是尽最大努力去抛出,所以这种机制一般仅用于检测 bug。那么如何解决 fail-fast 呢?使用 java.util.concurrent 包下的集合来替代。比如使用 CopyOnWriteArra
2021-06-18 09:30:47
639
转载 深拷贝和浅拷贝
深拷贝:把要复制的对象所引用的对象都复制了一遍。浅拷贝:仅仅复制所考虑的对象,而不复制它所引用的对象。原文链接:Java 深入理解深拷贝和浅拷贝
2021-05-14 14:01:36
54
转载 final关键字的一些总结
final 关键字主要用在三个地方:变量、方法、类。当用 final 修饰一个变量时,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。当用 final 修饰一个类时,表明这个类不能被继承。final 类中的所有成员方法都会被隐式地指定为 final 方法。原文链接:JavaGuide_面试突击版...
2021-05-14 11:31:37
60
转载 值传递和引用传递
值传递表示方法接收的是调用者提供的值。引用传递表示方法接收的是调用者提供的变量地址。Java 程序设计语言总是采用值传递。也就是说,方法得到的是所有参数值的一个拷贝,也就是说,方法不能修改传递给它的任何参数变量的内容。下面来看两个例子加深理解:传递的是基本数据类型:public static void main(String[] args) { int num1 = 10; int num2 = 20; swap(num1, num2); System.out.
2021-05-14 11:14:45
71
转载 理解 String 类常量及对象
用于理解 String类常量和对象的例子:public static void main(String[] args) { String s1 = "AB"; String s2 = new String("AB"); String s3 = "A"; String s4 = "B"; String s5 = "A" + "B"; String s6 = s3 + s4; System.out.println(s1 == s2); //false
2021-05-14 08:51:34
418
转载 为什么重写了 equals() 还要重写 hashCode() ?
https://blog.csdn.net/qq_28051453/article/details/52701171
2021-05-14 08:35:08
66
原创 回溯算法题的解题思路
做题的时候,建议 先画树形图 ,画图能帮助我们想清楚递归结构,想清楚如何剪枝。拿题目中的示例,想一想人是怎么做的,一般这样下来,这棵递归树都不难画出。在画图的过程中思考清楚:分支如何产生;题目需要的解在哪里?是在叶子结点、还是在非叶子结点、还是在从跟结点到叶子结点的路径?哪些搜索会产生不需要的解的?例如:产生重复是什么原因,如果在浅层就知道这个分支不能产生需要的结果,应该提前剪枝,剪枝的条件是什么,代码怎么写?作者:liweiwei1419来源:力扣(LeetCode)...
2021-05-12 18:45:48
121
转载 Java 面向对象编程三大特性: 封装 继承 多态
封装性封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。继承性继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承我们能够非常方便地复用以前的代码。关于继承如下 3 点请记住:子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类
2021-05-12 15:38:44
61
转载 重载和重写的区别
重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同。重写: 重写发生在运行期,是子类对父类的允许访问的方法的实现过程进行重新编写。返回值类型、方法名、参数列表必须相同,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类。如果父类方法访问修饰符为 private/final/static 则子类就不能重写该方法,但是被 static 修饰的方法能够被再次声明。构造方法无法被重写综上:重载就是同一个类中多个同名方法根据不同的传参来执行不同
2021-05-12 15:33:51
108
转载 面向对象和面向过程的区别
面向过程 :面向过程性能比面向对象高。 因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发。但是,面向过程没有面向对象易维护、易复用、易扩展。面向对象 :面向对象易维护、易复用、易扩展。 因为面向对象有封装、继承、多态性的特性,所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是,面向对象性能比面向过程低。这个并不是根本原因,面向过程也需要分配内存,计算内存偏移量,Java 性能差的主要原
2021-05-12 08:32:58
93
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人