自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ThinkWon的博客

敏于观察,勤于思考,善于综合,勇于创新。

  • 博客(115)
  • 收藏
  • 关注

原创 一分钟了解约定优于配置

文章目录什么是约定优于配置Maven与Spring Boot项目的约定Maven项目的约定Spring Boot项目的约定约定优于配置是新的概念吗什么是约定优于配置约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。补充:约定优于配置也被称为习惯优于配置、约定大...

2019-09-29 17:36:02 15295 5

原创 Java异常面试题

文章目录1. Error 和 Exception 区别是什么?2. 运行时异常和一般异常区别是什么?3.NoClassDefFoundError 和 ClassNotFoundException 区别?4. JVM 是如何处理异常的?5. throw 和 throws 的区别是什么?6. 常见的 RuntimeException 有哪些?7. Java常见异常有哪些1. Error 和 Exce...

2019-09-29 11:56:29 15561 9

原创 如何选择异常类型

1. 如何选择异常从个人开发经验来看,如果在一个应用中,需要开发一个方法(如某个功能的service方法),这个方法如果中间可能出现异常,那么你需要考虑这个异常出现之后是否调用者可以处理,并且你是否希望调用者进行处理。如果调用者可以处理,并且你也希望调用者进行处理,那么就要抛出受检异常,提醒调用者在使用你的方法时,考虑到如果抛出异常时如果进行处理。相似的,如果在写某个方法时,你认为这是个偶然...

2019-09-29 11:49:49 4723 3

原创 Java异常处理流程

在Java应用中,异常的处理机制分为抛出异常和捕获异常。文章目录1. 抛出异常2. 捕获异常3. 异常的抛出与捕获3.1 直接抛出异常3.2 封装异常再抛出3.3 捕获异常3.4 自定义异常3.5 try-catch-finally3.6 try-with-resource1. 抛出异常当一个方法出现错误而引发异常时,该方法会将该异常类型以及异常出现时的程序状态信息封装为异常对象,并交给本应...

2019-09-29 10:57:49 11742 9

原创 Java异常架构与异常关键字

文章目录1. Throwable2. Error(错误)3. Exception(异常)3.1 运行时异常3.2 编译时异常4. 受检异常与非受检异常4.1 受检异常4.2 非受检异常1. Throwable Throwable 是 Java 语言中所有错误与异常的超类。 Throwable 包含两个子类: Error(错误)和 Exception(异常)它们通常用于指示发生...

2019-09-29 10:50:07 14172 6

原创 Java数据类型

文章目录定义分类计算机存储单元Java基本数据类型图数据类型转换定义Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。分类基本数据类型数值型整数类型(byte,short,int,long)浮点类型(float,double)字符型(char)布尔型(boolean)引用数据类型类(class)接口(...

2019-09-29 00:14:25 24983 20

原创 Java常量

定义常量定义:在程序执行的过程中,其值不可以发生改变的量。常量不同于常量值,它可以在程序中用符号来代替常量值使用,因此在使用前必须先定义。常量值定义:常量和常量值是不同的概念,常量值又称为字面常量,它是通过数据直接表示的。关系:常量值是常量的具体和直观的表现形式,常量是形式化的表现。通常在程序中既可以直接使用常量值,也可以使用常量。分类字符串常量 用双引号括起来的内容(“Hello...

2019-09-29 00:09:54 17106 6

原创 Java变量

文章目录定义分类按被声明的位置划分成员变量局部变量成员变量和局部变量的区别使用原则按所属的数据类型划分基本数据类型变量引用数据类型变量定义格式注意事项定义在程序执行的过程中,在某个范围内其值可以发生改变的量。从本质上讲,变量其实是内存中的一小块区域分类按被声明的位置划分成员变量方法外部,类内部定义的变量类变量(静态变量):独立于方法之外的变量,用 static 修饰。类...

2019-09-29 00:07:56 25621 9

原创 Java运算符

文章目录定义分类算术运算符比较运算符(关系运算符)赋值运算符逻辑运算符(符号的两端都是boolean类型)位运算符(两端都是数值型的数据)三元运算符(三目运算符)运算符的优先级定义运算符指明对操作数的运算方式。分类算术运算符+ - + - * / % ++ -- +注意事项1、/ 左右两端的类型需要一致;2、%最后的符号和被模数相同;3、前++;先+1,后运算 后++;先...

2019-09-28 23:59:31 21426 15

原创 Java表达式

定义用运算符把常量或者变量连接起来符号java语法的式子就可以称为表达式。类型和值表达式值的数据类型即为表达式的类型。对表达式中操作数进行运算得到的结果是表达式的值。运算顺序应按照运算符的优先级从高到低的顺序进行;优先级相同的运算符按照事先约定的结合方向进行;举例a + b3.14 + a(x + y) * z + 100boolean b= i < 1...

2019-09-28 23:44:00 26326 7

原创 Java流程控制语句

定义流程是指程序运行时,各语句的执行顺序。流程控制语句就是用来控制程序中各语句执行的顺序。分类顺序结构Java流程控制语句-顺序结构分支结构(选择结构)Java流程控制语句-分支结构(选择结构)循环结构Java流程控制语句-循环结构...

2019-09-28 23:05:39 29232 4

原创 Java流程控制语句-循环结构

定义循环语句就是在满足一定条件的情况下反复执行某一个操作。包括while循环语句、do···while循环语句和for循环语句。分类for循环语句执行流程执行流程图执行流程说明A:执行初始化语句B:执行判断条件语句,看其结果是true还是false如果是false,循环结束。如果是true,继续执行。C:执行循环体语句D:执行控制条件语句E:回到B继续格式for(初...

2019-09-28 23:02:38 25812 11

原创 Java流程控制语句-分支结构(选择结构)

文章目录定义分类if分支结构第一种格式格式执行流程举例第二种格式格式执行流程举例第三种格式格式执行流程举例注意事项switch分支结构执行流程举例注意事项定义条件语句可根据不同的条件执行不同的语句。包括if条件语句与switch多分支语句。分类if分支结构第一种格式格式if(条件表达式){执行的代码块;}执行流程执行流程图执行流程说明首先判断关系表达式看其结果是true...

2019-09-28 22:54:25 30350 15

原创 Java流程控制语句-顺序结构

定义顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的举例/* * 顺序结构:从上往下,依次执行 */public class OrderDemo { public static void main(String[] args) { System.out.println("开始"); System.out...

2019-09-28 22:48:58 30322 4

原创 Java进制

定义进制也就是进位计数制,是人为定义的带进位的计数方法。十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。常用进制类型二进制计算机底层都是使用二进制进行存储以及运算0b****;(以0b或者0B开始,*表示0或1)比如:010101原码、反码、补码原码原码:将一个整数转换成二进制表示以 int 类型为例,int类型占4个字节、...

2019-09-28 22:36:38 26363 20

原创 Java转义字符

定义转义字符是一种特殊的字符常量。转义字符以反斜线""开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。常见转义字符表Java中需要转义的字符在Java中,不管是String.split(),还是正则表达式,有一些特殊字符需要转义,这些字符是( [ { / ^ - $ ¦ } ] ...

2019-09-28 22:33:54 43288 8

原创 Java分隔符

定义空格、逗号、分号以及行结束符都被称为分隔符,规定任意两个相邻标识符、数字、保留字或语句之间必须至少有一个分隔符,以便程序编译时能够识别。分类; 分号 用来终止一个语句{} 花括号、大括号 用来包括自动初始化的数组的值,也用来定义程序块、类、方法以及局部范围[] 方括号、中括号 用来声明数组的类型,也用来表示撤消对数组值的引用, 逗号 在变量声明中,区分变量说明的各个变量...

2019-09-28 22:31:50 32075 10

原创 Java访问修饰符

定义Java中,可以使用访问修饰符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。分类private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)default (即缺省,什么也不写,不使用任何关键字): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。protected : 对同一包内的类和所有子类可见。使...

2019-09-28 22:27:52 44235 11

原创 Java注释

定义用于解释说明程序的文字分类单行注释格式: // 注释文字多行注释格式: /* 注释文字 */文档注释格式:/** 注释文字 */作用在程序中,尤其是复杂的程序中,适当地加入注释可以增加程序的可读性,有利于程序的修改、调试和交流。注释的内容在程序编译的时候会被忽视,不会产生目标代码,注释的部分不会对程序的执行结果产生任何影响。注意事项多行和文档注释都不能...

2019-09-28 22:24:38 29214 9

原创 Java关键字(Java 8版本)

定义被Java语言赋予了特殊含义,用作专门用途的字符串(单词),这些关键字不能用于常量、变量、和任何标识符的名称。Java关键字(Java 8版本)Java关键字(Java 8 以后版本)注意事项true,false和,null看起来像关键字,但它们实际上是文字; 您不能在程序中将它们用作标识符。...

2019-09-28 22:11:38 45306 14

原创 Java标识符

文章目录定义组成规则命名原则:见名知意注意事项定义给包,类,方法,变量起名字的符号。组成规则标识符由字母、数字、下划线、美元符号组成。命名原则:见名知意包名:全部小写,多级包用.隔开。举例:com.jourwon类、接口:一个单词首字母大写,多个单词每个单词的首字母大写。举例:Student,Car,HelloWorld方法和变量:一个单词首字母小写,多个单词从第二个...

2019-09-28 20:44:38 61728 11

原创 Log4j2配置文件详解

文章目录ConfigurationPropertiesAppendersFiltersPatternLayoutPolicy & StrategyLoggersConfiguration根节点,有status和monitorInterval等多个属性status的值有 “trace”, “debug”, “info”, “warn”, “error” and “fatal”,用于控制...

2019-09-28 18:30:11 9748 2

原创 Log4j2的Loggers配置详解

Loggers节点,常见的有两种:Root和Logger。Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出Root每个配置都必须有一个根记录器Root。如果未配置,则将使用默认根LoggerConfig,其级别为ERROR且附加了Console appender。根记录器和其他记录器之间的主要区别是:1.根记录器没有name属性。2.根记录器...

2019-09-28 18:21:55 25413 2

原创 Log4j2的Policy触发策略与Strategy滚动策略配置详解

文章目录Policy触发策略SizeBasedTriggeringPolicyCronTriggeringPolicyTimeBasedTriggeringPolicyStrategy滚动策略Policy是用来控制日志文件何时(When)进行滚动的;Strategy是用来控制日志文件如何(How)进行滚动的。如果配置的是RollingFile或RollingRandomAccessFile,则...

2019-09-28 18:13:24 24841 5

原创 Log4j2的Filters配置详解

Filters决定日志事件能否被输出。过滤条件有三个值:ACCEPT(接受),DENY(拒绝),NEUTRAL(中立)。ThresholdFilter输出warn级别一下的日志<Filters> <!--如果是error级别拒绝,设置 onMismatch="NEUTRAL" 可以让日志经过后续的过滤器--> <ThresholdFilter l...

2019-09-28 17:52:19 10245 3

原创 Log4j2的Appenders配置详解

Appenders是输出源,用于定义日志输出的地方。log4j2支持的输出源有很多,有控制台ConsoleAppender、文件FileAppender、AsyncAppender、RandomAccessFileAppender、RollingFileAppender、RollingRandomAccessFile 等文章目录ConsoleAppenderAsyncAppenderFileA...

2019-09-28 17:47:47 11901 4

原创 Log4j2同步日志,混合日志和异步日志配置详解

Log4j 2中记录日志的方式有同步日志和异步日志两种方式,其中异步日志又可分为使用AsyncAppender和使用AsyncLogger两种方式。文章目录同步日志混合同步和异步日志异步日志(性能最好,推荐使用)同步日志所谓同步日志,即当输出日志时,必须等待日志输出语句执行完毕后,才能执行后面的业务逻辑语句。下面给出小编在开发中的配置<?xml version="1.0" enco...

2019-09-28 17:20:43 14226 5

原创 常用日志框架Log4j,Logback,Log4j2性能比较与日志门面SLF4J简介

文章目录常用日志框架Log4jLogbackLog4j 2Log4j1/Logback/Log4j2性能比较日志门面SLF4J常用日志框架Log4jLog4j是Apache的一个Java的日志库,通过使用Log4j,我们可以控制日志信息输送的目的地(控制台、文件、数据库等);我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。Logbac...

2019-09-28 16:17:20 16181 2

原创 日志作用

不管是在开发环境还是线上生产环境的程序,我们都会进行日志的记录,因为日志非常重要,不但可以进行调试,还有错位定位和数据分析的作用。调试在Java项目调试时,查看栈信息可以方便地知道当前程序的运行状态,输出的日志便于记录程序在之前的运行结果。如果你大量使用System.out或者System.err,这是一种最方便最有效的方法,但显得不够专业。错误定位不要以为项目能正确跑起来就可以高枕无忧,...

2019-09-28 15:49:47 11025 4

原创 Java基础语法

标识符定义给包,类,方法,变量起名字的符号。组成规则标识符由字母、数字、下划线、美元符号组成。命名原则:见名知意包名:全部小写,多级包用.隔开。举例:com.jourwon类、接口:一个单词首字母大写,多个单词每个单词的首字母大写。举例:Student,Car,HelloWorld方法和变量:一个单词首字母小写,多个单词从第二个单词开始每个单词的首字母大写。举例:a...

2019-09-28 00:05:08 24144 6

原创 基数排序(Radix Sort)

基数排序也是非比较的排序算法,对每一位进行排序,从最低位开始排序,复杂度为O(kn),为数组长度,k为数组中的数的最大的位数;基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。基数排序基于分别排序,分别收集,所以是稳定的。算法描...

2019-09-27 17:10:47 10142 6

原创 桶排序(Bucket Sort)

桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排算法描述人为设置一个BucketSize,作为每个桶所能放置多少个不同数值(例如当BucketSize==5时,该桶可以存放{...

2019-09-27 16:56:01 6943 4

原创 计数排序(Counting Sort)

计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。它只能对整数进行排序。算法描述找出待排序的数组中最大和最小的...

2019-09-27 16:53:10 15795 8

原创 堆排序(Heap Sort)

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。算法描述将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区;将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,……Rn-1)和新的有序区(Rn),且满足R[1,2...

2019-09-27 16:50:25 7183 3

原创 快速排序(Quick Sort)

快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。算法描述快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:从数列中挑出一个元素,称为 “基准”(pivot);重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆...

2019-09-27 16:45:34 10231 2

原创 归并排序(Merge Sort)

和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有...

2019-09-27 15:38:54 8765 2

原创 希尔排序(Shell Sort)

希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。希尔排序是把记录按下表的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词...

2019-09-27 15:30:46 8933 7

原创 插入排序(Insertion Sort)

插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。算法描述一般来说,插入排序都采用in-place在数组...

2019-09-27 15:26:28 11159 4

原创 选择排序(Selection Sort)

表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。理论上讲,选择排序可能也是平时排序一般人想到的最多的排序方法了吧。选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找...

2019-09-27 14:46:00 12247 3

原创 冒泡排序(Bubble Sort)

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。算法描述比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素...

2019-09-27 14:41:37 15441 7

空空如也

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

TA关注的人

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