- 博客(183)
- 收藏
- 关注
转载 Spring Boot自动配置原理分析
我们知道,spring boot自动配置功能可以根据不同情况来决定spring配置应该用哪个,不应该用哪个,举个例子: Spring的JdbcTemplate是不是在Classpath里面?如果是,并且DataSource也存在,就自动配置一个JdbcTemplate的Bean; Thymeleaf是不是在Classpath里面?如果是,则自动配置Thymeleaf的模板...
2019-07-15 21:16:00
304
转载 Spring Boot配置文件
一、基本介绍 Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件。application.propertiesapplication.yml 他们的作用都是修改Spring Boot自动配置的默认值。相对于properties文件而言,yml文件更年轻,也有很多的坑。可谓成也萧何败也萧何,yml通过空格来确定层级关系,使...
2019-07-15 14:30:00
346
转载 Spring Boot入门
一、什么是Spring Boot Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的轻量级代替品。无需开发重量级的 Enterprise JavaBean(EJB),Spring 为企业级Java 开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java 对象(Plain Old Java Obj...
2019-07-14 09:59:00
292
转载 动态代理机制
一、动态代理概述1.1什么是代理? 大道理上讲代理是一种软件设计模式,目的是希望能做到代码重用。具体上讲,代理这种设计模式是通过不直接访问被代理对象的方式,而访问被代理对象的方法。这个就好比 商户---->明星经纪人(代理)---->明星这种模式。我们可以不通过直接与明星对话的情况下,而通过明星经纪人(代理)与其产生间接对话。 代理可以看作是对调用目标的一个...
2019-06-20 12:48:00
174
转载 Dubbo在项目中的两种使用方法
一、声明需要暴露的服务接口方式1.1service服务层【applicationContext-service.xml配置文件】 在applicationContext-service.xml中需要配置基本的包扫描,且使用一个服务就要暴露一个 服务接口<context:component-scan base-package="com.pinyougou.se...
2019-05-28 17:35:00
187
转载 Hash问题
一、哈希函数1.1 什么是哈希函数 哈希函数(Hash Function),也称为散列函数。是将一个大文件映射成一个小串字符。与指纹一样,就是以较短的信息来保证文件的唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。 举个例子:服务器存了10个文本文件,你现在想判断一个新的文本文件和那10个文件有没有一个是一样的。你不可能去比对...
2019-05-25 14:51:00
459
转载 二叉树问题
一、二叉树的遍历1.1 先序遍历 先序遍历:按照根节点->左子树->右子树的顺序访问二叉树【递归版】 1 public class PreOrderRecur { 2 public static class Node { 3 public int value; 4 public Node left;...
2019-05-25 14:50:00
218
转载 矩阵问题
一、转圈打印矩阵【题目】 给定一个整型矩阵matrix,请按照转圈的方式打印它。例如: 打印结果为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11, 10 要求:额外空间复杂度为O(1)。【分析】 用4个变量来标记左上角的点和右下角的点。 如果要打印这2个点形成矩阵的边界,可以写一个函数,具体是:col1++,...
2019-05-25 14:49:00
271
转载 链表问题
一、打印两个有序链表的公共部分【题目】 给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。【分析】 假设有如下两个有序链表 整个流程是这样的:谁小动谁,一开始1<2,所以head1来到3的位置 此时2<3,所以head2来到3的位置 head1=head2,打印3,并且head1和head2共...
2019-05-25 14:48:00
138
转载 非比较排序——计数排序、基数排序、桶排序
前面讲的是比较排序算法,主要有冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 非比较排序算法:计数排序,基数排序,桶排序。在一定条件下,它们的时间复杂度可以达到O(n)。一、桶排序(Bucket Sort)1.1桶排序介绍 桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。 桶排序 (Bucket so...
2019-05-25 14:47:00
169
转载 队列和栈的问题
一、用数组结构实现大小固定的栈【核心思想】 栈结构是“后进先出”,有初始化栈、入栈、出栈、返回栈顶等功能,题目大意就是要求我们用数组实现栈的这些功能。 初始化栈:给定一个初始大小,创建一个栈。定义一个变量 size ,初始化为 0,用来记录栈中的元素数量。 入栈:如果 size 小于栈的大小,将要入栈的数放入数组的 size 位置上,size 加 1。否则报错。...
2019-05-25 14:47:00
153
转载 排序的比较方式
这里所说到的Java中的排序并不是指插入排序、希尔排序、归并排序等具体的排序算法。而是指执行这些排序算法时,比较两个对象“大小”的比较操作。我们很容易理解整型的 i>j 这样的比较方式,但当我们对多个对象进行排序时,如何比较两个对象的“大小”呢?这样的比较 stu1 > stu2 显然是不可能通过编译的。为了解决如何比较两个对象大小的问题,JDK提供了两个接口 java....
2019-05-25 14:46:00
160
转载 递归
一、剖析递归行为 举个简单的例子来理解递归,以及系统上递归是怎么实现的。假设有个功能:在整个数组中找最大值。 这本是一个很简单的功能,我们可以直接用遍历的方式来完成。但如果把它改成递归的形式,又会是怎么样的呢? 递归思路:将数组分为左边L和右边R两个部分,L边的最大值为max左,R边的最大值为max右,max左和max右最大的一个,就是全局最大值。 1 publ...
2019-05-25 14:46:00
156
转载 对数器的使用
一、对数器的作用 对数器是通过用大量测试数据来验证算法是否正确的一种方式。在算法笔试的时候,我们经常只能确定我们写出的算法在逻辑上是大致正确的,但是谁也不能一次性保证绝对的正确。特别是对于一些复杂的题目,例如贪心算法,我们往往无法在有限时间内用数学公式来推导证明我们程序的正确性。而且在线的OJ一般只会给出有数的几个简单的samples,可能我们的算法在这些简单的samples偶然通...
2019-05-25 14:43:00
152
转载 常见的比较排序
一、冒泡排序(BubbleSort)【原理】 比较两个相邻的元素,将值大的元素交换至右端。【思路】 依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。 第一趟比较完...
2019-05-25 14:42:00
678
转载 认识时间复杂度
时间复杂度就是用来评价算法流程的标准,你可以随意脑补一个算法,它的正确性保证了后,你怎么去评价整个流程的好坏?就是用时间复杂度来评价的。介绍时间复杂度之前,我们先解释一下常数时间的操作,常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。 比如,数组寻址操作、加减乘除操作、位运算操作,这些是和样本的数据量无关,你每次完成这些操作...
2019-05-25 14:41:00
148
转载 JavaSE学习笔记(三十三)—— 类的加载器和反射
一、类加载器1.1 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。【加载 】 就是指将class文件读入内存,并为之创建一个Class对象。任何类被使用时系统都会建立一个Class对象。【连接】验证:是否有正确的内部结构,并和其他类协调一致准备:负责为类的静态成员分配内存,并设置默认初始化值...
2019-05-25 14:39:00
141
转载 JavaSE学习笔记(三十二)—— 多线程(下)
一、电影院卖票问题1.1 最初版 某电影院目前正在上映贺岁大片(红高粱,少林寺传奇藏经阁),共有100张票,而它有3个售票窗口售票,请设计一个程序模拟该电影院售票。【继承Thread类来实现】public class SellTicket extends Thread { // 定义100张票 // private int tickets = ...
2019-05-24 19:36:00
470
转载 JavaSE学习笔记(三十一)—— 多线程(上)
一、多线程概述1.1 多线程引入 如果程序只有一条执行路径,那么该程序就是一个单线程程序。 如果程序有多条执行路径,那么该程序就是一个多线程程序。举例:扫雷程序、迅雷下载。1.2进程以及多进程的意义 要想了解多线程,必须先了解线程,而要想了解线程,必须先了解进程,因为线程是依赖于进程而存在。【什么是进程】 通过任务管理器我们就看到了进程的存在。...
2019-05-23 13:12:00
126
转载 JavaSE学习笔记(三十)—— Properties集合
一、Properties概述 Properties是一个属性集合类。是一个可以和IO流相结合使用的集合类。 Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。 Properties是Hashtable的子类,说明是一个Map集合。该类的继承层次为: 简单来说,Properties类的特点是:该集合中的键和值都...
2019-05-23 10:04:00
249
转载 JavaSE学习笔记(二十九)—— 其它流
一、操作基本数据类型的流 数据输入流:DataInputStreamDataInputStream(InputStream in) 数据输出流:DataOutputStreamDataOutputStream(OutputStream out) 数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输...
2019-05-21 22:47:00
194
转载 JavaSE学习笔记(二十八)—— IO流练习
一、复制文本文件 复制数据,如果我们知道用记事本打开并能够读懂,就用字符流,否则用字节流。 通过该原理,我们知道我们应该采用字符流更方便一些。 而字符流有5种方式,所以做这个题目我们有5种方式。推荐掌握第5种——字符缓冲流一次读写一个字符串/** * 数据源: * e:\\a.txt -- FileReader -- BufferdRea...
2019-05-20 22:12:00
189
转载 JavaSE学习笔记(二十七)—— 字符流
一、字符流概述【字符流是什么】 字符流:就是在字节流的基础上,加上编码,形成的数据流。即,字符流=字节流+编码表。【为什么要使用字符流】 既然字节流提供了能够处理任何类型的输入/输出操作的功能,那为什么还要存在字符流呢? 因为使用字节流操作汉字或特殊符号语言的时候容易乱码,比如我要将a.txt的文本内容读取到控制台上打印: public clas...
2019-05-20 21:23:00
127
转载 JavaSE学习笔记(二十六)—— IO流概述&字节流
一、IO流概述1.1什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作。Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。 IO又分为流IO(java.io)和块IO(java.nio)...
2019-05-18 17:37:00
181
转载 JavaSE学习笔记(二十五)—— File类
一、File类概述 存储在变量,数组和对象中的数据是暂时的,当程序终止时他们就会丢失。为了能够永久的保存程序中创建的数据,需要将他们存储到硬盘或光盘的文件中,这些文件可以移动、传送,亦可以被其他程序使用。由于数据存储在文件中,所以我们需要学习一个和文件有密切关系的类,叫做File类。 在Java中,File 类是文件和目录路径名的抽象形式,它是 java.io 包中唯一代表...
2019-05-17 18:09:00
205
转载 JavaSE学习笔记(二十四)—— 异常
一、异常概述1.1 什么是异常 异常就是程序出现了不正常的情况。 发现错误的理想时机是在编译期。然而,编译器并不能发现所有的错误,余下的问题就需要在程序运行时解决。这就需要错误能通过某种方式,把适当的信息传递给特定的接收者处理。Java中的异常处理的目的在于通过使用少量的代码来简化大型、可靠的程序的生成,通过此方式让你的应用中没有未处理的错误,而且它还带来了一个明显的好处...
2019-05-16 23:20:00
156
转载 JavaSE学习笔记(二十三)—— Collections工具类
一、Collections概述 Collections是针对集合进行操作的工具类,都是静态方法。【Collection和Collections的区别】 Collection:是单列集合的顶层接口,有子接口List和Set。 Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法二、Collections的主要方法public...
2019-05-15 23:30:00
160
转载 JavaSE学习笔记(二十二)—— Map集合
一、Map集合概述1.1 Map引入 作为学生来说,是根据学号来区分不同的学生的,那么假设我现在已经知道了学生的学号,我要根据学号去获取学生姓名,请问怎么做呢?如果采用前面讲解过的集合,我们只能把学号和学生姓名作为一个对象的成员,然后存储整个对象,将来遍历的时候,判断,获取对应的名称。但是呢,如果我都能把学生姓名拿出来了,我还需要根据编号去找吗? 针对我们目前的这种需求:仅仅...
2019-05-15 22:48:00
308
转载 JavaSE学习笔记(二十一)—— Set集合
一、Set集合概述 Set和List一样,也继承于Collection,是集合的一种。和List不同的是,Set内部实现是基于Map的,所以Set取值时不保证数据和存入的时候顺序一致,并且不允许空值,不允许重复值。 Set主要有2个实现方式:HashSet和TreeSet,其中HashSet还有一个子类LinkedHashSet 这个Set的特点,主要由其内部的Map决...
2019-05-15 14:56:00
134
转载 JavaSE学习笔记(二十)—— Arrays工具类
一、Arrays工具类概述 JDK 提供了一个工具类专门用来操作数组的工具类,即 Arrays,该 Arrays 工具类提供了大量的静态方法,在实际项目开发中,推荐使用,这样既快捷又不会发生错误。 注意,Arrays不能创建对象,因为它底层的构造方法被私有化了,使用时只能通过Arrays直接调用静态方法。 二、Arrays的常用方法方法声明功能描述...
2019-05-14 12:18:00
218
转载 JavaSE学习笔记(十九)—— JDK5新特性之可变参数
可变参数:定义方法的时候不知道该定义多少个参数 格式:修饰符 返回值类型 方法名(数据类型… 变量名){} 注意:这里的变量其实是一个数组。如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个public class ArgsDemo { public static void main(String[] args) ...
2019-05-14 11:09:00
107
转载 JavaSE学习笔记(十八)—— JDK5新特性之增强for
一、增强for概述 增强for:是for循环的一种。【格式】for(元素数据类型 变量 : 数组或者Collection集合) { 使用变量即可,该变量就是元素}【好处】 简化了数组和集合的遍历。【弊端】 增强for的目标不能为null。 如何解决呢?对增强for的目标先进行不为null的判断,然后在使用。public...
2019-05-14 11:05:00
115
转载 JavaSE学习笔记(十七)—— JDK5新特性之泛型
一、泛型概述1.1 泛型引入 先看下面代码:public class GenericDemo { public static void main(String[] args) { ArrayList list = new ArrayList(); // 添加元素 list.add("hello");...
2019-05-14 10:38:00
141
转载 JavaSE学习笔记(十六)—— List集合
一、List接口概述1.1 List概述 有序(存储和取出的元素一致)的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与 set 不同,列表通常允许重复的元素。1.2 List案例【List集合存储字符串并遍历】public class L...
2019-05-14 10:37:00
154
转载 JavaSE学习笔记(十五)—— 集合概述及Collection接口
一、集合概述1.1 集合的由来 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储。而要想存储多个对象,就不能是一个基本的变量,而应该是一个容器类型的变量,在我们目前所学过的知识里面,有哪些是容器类型的呢?数组和StringBuffer。但是呢?StringBuffer的结果是一个字符串,不一定满足我...
2019-05-13 11:47:00
117
转载 JavaSE学习笔记(十四)—— 基本类型包装类
一、基本类型包装类介绍 Java有8种基本类型byte,int,long,double,float,boolean,char,short,它们只能做赋值、运算、取值等简单操作,相对其进行复杂操作就不方便了。例如:通过文本框获得用户输入的数字数据,因为文本框里面是书写文本数据的,所以后台得到的都是字符串。如果想要对字符串中的数字进行运算,必须将字符串转换成数字。 怎么解决上述出...
2019-05-12 11:40:00
142
转载 JavaSE学习笔记(十三)—— StringBuffer
一、StringBuffer概述 String和StringBuffer他们都可以存储和操作字符串,即包含多个字符的字符串数据。不同的是String类是字符串常量,是不可更改的常量,这时因为String底层使用了一个不可变的字符数组(final char[])。 而StringBuffer是字符串变量,它的对象是可以扩充和修改的,因为它底层使用的是可变的字符数组(ch...
2019-05-11 17:59:00
153
转载 JavaSE学习笔记(十二)—— 常用API之String类
一、String类概述 在API中是这样描述: String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )也可以看成是一个字符串对象。 字符串是常量;一旦被赋值,就不能被改变。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。 java.lang.String: 二、String类的构造方法...
2019-05-10 16:12:00
133
转载 JavaSE学习笔记(十一)—— 常用API之Object类
Object 是类层次结构的根类。每个类都使用 Object 作为超类。每个类都直接或者间接的继承自Object类。 Object类的构造方法有一个,并且是无参构造。这其实就是理解当时我们说的,子类构造方法默认访问父类的构造是无参构造。一、hashCode() public int hashCode():返回该对象的哈希码值。 注意:哈希值是根据哈希算法计算出...
2019-05-10 13:21:00
134
转载 JavaSE学习笔记(十)—— 权限修饰符&内部类
一、权限修饰符 在java中有四种权限修饰符:范围从大到小分别是:public、protect、default(friendly)、private,它们之间的区别是:public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。protect: 介于public 和 privat...
2019-05-08 22:46:00
160
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人