自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(136)

原创 学会使用debug模式调试代码

在企业开发中,质量和效率显得尤为重要。学会通过debug模式调试代码是每一个开发的必修课。下面我通过一个案例来描述一下如何来调试、跟踪代码。步骤:在接口或方法的入口打上调试端点,如下所示。通过“debug as”运行代码,进入debug代码调试模式。下面介绍几个重要的调试技巧:step into(F5),进入函数内部调试、step over(F6),在当前函数步进调试、step retur...

2019-05-15 03:33:33 2005

原创 #数据结构--基于双端链表实现双端队列

4.8.3.5 源码package com.yzh.maven.entity;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import com.yzh.maven.base.abstracts.MyQueueAbstract;import com.yzh.maven.base.da...

2019-05-04 19:29:43 314

原创 #数据结构--基于数组实现双端队列

4.8.4.6 源码package com.yzh.maven.entity;import java.util.ConcurrentModificationException;import java.util.EmptyStackException;import com.yzh.maven.base.abstracts.MyQueueAbstract;import com.yzh.ma...

2019-05-04 19:27:14 110

原创 #经典面试题--全组合问题

给定一个非重复数数列,求该数列的全组合。例如,{1,2,3}的全组合为{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}。这是一道非常经典的笔试题,可以通过递归来求解。这里我们可以利用上面已知的二进制方法来求解,我们可以将组合数中的每一个数标记为”1”,0表示未击中该组合数的任何数字,例如,110表示击中了该组合数的前两个数字,这样我们可以通过数组来取出这两个数字,从得到...

2019-05-04 19:24:47 105

原创 #栈--基于链表实现栈

3.4.2.2 基于本地创建的链表实现栈package com.yzh.maven.entity;import com.yzh.maven.base.dao.MyStackDao;public class MyLinkedStack<E> implements MyStackDao<E>{ private int size; private MyDobbleL...

2019-05-04 19:22:43 154

原创 #面试--单链表常见面试题汇总

2.7.4.3.8.1 找出单链表中的倒数第k个元素,实现该方法这是一道经典的笔试题,其实实现该方法十分简单。直接找倒数第k个元素似乎不太容易,要想找出倒数第k个元素,我们可以从第k个元素和倒数第k个元素的关系来获取倒数第k个元素。该关系如下所示。从上图可以看出来,倒数第k个节点的索引 = size – (k+1)。所以方法实现如下:/**@functionName reverseGe...

2019-05-04 18:57:22 321

原创 #Java源码分析--LinkedList容器之实现单链表(2)

2.7.4.2单链表add方法的实现2.7.4.2.1循环法但是,从上面链表添加元素的操作来看,一点也不觉得优雅,而且它将所有的节点数据信息全部暴露给外部了。在Java中,将数据信息暴露给外部已经违背它的设计特点—封装的完整性。那么,如何进行改进呢?实际上,我们可以这样考虑,由于第一个节点可以表示为头节点.getNext(),第二个节点可以表示为头节点.getNext().getNext(),...

2019-05-04 18:39:12 94

原创 #Java源码分析--LinkedList容器(1)

2.7.1 链表的概念链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作。2.7.2 链表的分类从链表的实现方式可以把链表分为单链表,循环链表,双向链表...

2019-05-04 18:25:42 38

原创 #架构师之性能优化篇--防止SQL注入攻击

要解决SQL注入攻击,首先必须要认识什么是SQL注入攻击。先来看一个例子:package com.yzh.maven.main;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.St...

2019-01-21 00:07:52 90

原创 #架构师之性能优化篇--应使用日志打印语句代替e.printStackTrace()

例try{ int i = 3/0;}catch(Exception e){ e.printStackTrace();}需要将其修改为日志打印异常的方式:private static final Logger logger = Logger.getLogger(TestA.class);try{ int i = 3/0;}catch(Exception e){ logger...

2019-01-21 00:06:24 2077

原创 #架构师之性能优化篇--不要在循环中使用try…catch…,应该把其放在最外层

除非需要在循环中进行特殊的捕获处理,否则禁止在循环内部使用try…catch…语句。正确的做法是在for循环外部进行异常捕获处理。

2019-01-21 00:05:05 2411

原创 #架构师之性能优化篇--不要在循环体内声明变量或对象

List<Object> myList = new ArrayList<Object>(); for(int k = 0;k<10;k++){ //注意即使是将str提到循环外声明拼接字符串还是会创建多个StringBuilder对象 String str = k+""; A a = new A(); a.set(s...

2019-01-21 00:02:26 316

原创 #架构师之性能优化篇--ArrayList遍历最优化探究

你已经知道遍历ArrayList的方式有三种,分别是get(i)/size()、增强型for(forEach)和使用迭代器。那么这三种方式效率最高的是哪一种方式呢?List<String> list = new ArrayList<String>();List<String> list2 = new ArrayList<String>();Li...

2019-01-20 23:55:26 192

原创 #架构师之性能优化篇--String与StringBuffer的拼接

4 String与StringBuffer的拼接例 对下面的代码进行优化String str = "";for(int i = 0;i<10;i++){str +=""+i;}说明:在java中,String的+拼接方式不适合使用在大量的拼接场合中。那么这是为什么呢?换句话说,+拼接符在拼接字符串的时候都做了什么呢?我们可以使用Java反编译工具来查看+拼接符到底做了些什么。首...

2019-01-20 23:51:40 184

原创 #架构师之性能优化篇--两个Integer类型比较大小

由于Integer是引用类型,因此比较大小使用equals方法,但是Integer与int类型比较时,会转化为int类型进行比较。对于-128-127之间的数据,可以使用==进行比较两个Integer类型数据的大小(因为此时使用的是缓存数据,数据的内存地址都是使用的缓存数据的内存地址),但是以外的数据需要使用equals()进行数据大小比较。...

2019-01-20 23:48:19 251

原创 #架构师之性能优化篇--遍历map最优方法entrySet的迭代方式

假设创建了如下的map:Map<String,String> map = new HashMap<String,String>();for(int i = 1001;i<149511;i++){ map.put(i+"",i+"");}遍历map有五种遍历方式,如下所示:2.1 通过增强型for遍历keySetlong start1 = System....

2019-01-20 23:45:18 231

原创 #架构师之性能优化篇--使用包装类的parseXXX()代替valuesOf()

valuesOf和parseXXX都是包装类的静态方法,都可以将字符串类型的数字转化为整型数据,但略有不同,我们来看下面这一段代码:String numStr1 = "127";String numStr2 = "127";System.out.println(Integer.valueOf(numStr1) == Integer.valueOf(numStr2));System.out....

2019-01-19 11:25:52 370

转载 #Eclipse中使用javap命令打出字节码虚指令(转)

1、Eclipse中Run->External Tools->External Tools Configurations,打开看到如下界面:2、右键点击Program->new,然后出现界面:3、然后配置Location、Working Directory、Arguments:Location:C:\Program Files\Java\jdk1.7.0_80\bin...

2019-01-18 02:31:24 94

原创 #Java算法设计与分析1--递归算法

1.递归算法1.1递归的概念所谓递归,就是程序方法在运行过程中自身调用自身。定义如下所示。fn(){ if(递归出口条件){ return x;}else{ //some codes…return fn();}}1.2递归的使用条件1.2.1 必须要有明确的递归出口所谓递归出口就是需要有明确的结束条件。1.2.2 每次递归都要使问题的规模减小1.2.3 递归的规模...

2019-01-09 07:33:03 233

原创 #源码分析篇--Java集合操作(9)重写顺序表的toString()方法

2.6.12 重写顺序表的toString()方法默认情况下,普通类都是继承了Object超类的toString(),这个方法如下所示:public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode());}在打印某个对象时,其实是省略了toString(),因...

2019-01-02 02:19:00 191

原创 # 源码分析篇--Java集合操作(8)根据源码设计一个顺序表

2.6.6 get(int index)方法我们知道,顺序表中的get方法通过元素的索引获取底层数组的元素。我们可以把该方法理解为顺序表的查询操作,该方法返回元素范型类型,源代码如下所示:public E get(int index) { //范围检查rangeCheck(index);return elementData(index);}rangeCheck(index);方法...

2019-01-02 02:12:33 75

原创 #数据结构--用Java实现一个顺序表

一个顺序表应该具有基本的增删改查功能,它最显著的特点是能够自动扩容,底层是基于数组实现的,下面我们来自己实现一个包含基本功能的顺序表。定义MyList接口,该接口声明了顺序表功能的基本方法:package com.yzh.maven.main;public interface MyList<E> { /*** * @functionName:add * @descrip...

2019-01-02 02:01:29 181

原创 源码分析篇--Java集合操作(7)自己实现一个add()方法

2.6.5 自己实现一个add()方法分析:add()方法涉及到扩容,扩容需要size(顺序表大小)、顺序表底层支持数组、默认容量大小以及默认的控元素数组四个必要属性,代码实现如下所示。package com.yzh.maven.main;/** * @className MyArrayList<E> * @description 创建一个顺序表 * @author yz...

2018-12-31 13:41:32 328 3

原创 源码分析篇--Java集合操作(6)顺序表的扩容原理

2.6.4 顺序表的扩容原理之add()方法的实现原理add()方法用于将元素动态添加到ArrayList容器中。将数据保存在list后,我们可以通过该list进行CRUD操作。我们知道,list(列表)的底层是由数组设计的,因此,数组具备了哪些优缺点,list就具备了哪些优缺点。我们知道,链表与数组是两种不同的数据结构,数据结构可以分为线性结构和非线性结构,在线性结构中,存储方式又分为连续存...

2018-12-31 13:35:18 173

原创 源码分析篇--Java集合操作(5)

2.6 ArrayList容器ArrayList类实现了List接口,它继承自AbstractList抽象类,继承机构如下所示:public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Seri...

2018-12-31 13:23:37 61

原创 源码分析篇--Java集合操作(4)

2、List的实现类List是一个接口,继承自Collection接口,包为java.util.*,由于继承的特性,因此,List接口具有了Collection接口的全部方法。但是,List本身又重新定义了这些方法:int size();boolean isEmpty();boolean contains(Object o);Iterator iterator();Object[] t...

2018-12-31 12:57:11 69 1

原创 源码分析篇--Java集合操作(3)

二、Collection接口Collection是一个集合顶层接口,位于java.util包下,继承了Iterable接口, public interface Collection extends Iterable { Iterable接口只有一个iterator()方法,如下所示。public interface Iterable<T> { /** * Ret...

2018-12-31 12:35:14 67

原创 源码分析篇--Java集合操作(2)

4、两大集合接口在Java集合中,有两大集合,一个是Collection接口及其实现类,另一个是Map接口及其实现类。下面给出这两种集合的框架图。如下所示。4.1Collection接口框架图4.2Map接口框架图从上面两个框架图可以看出,Cllection接口和Map接口是两大顶层接口。二者最为显著的区别是:Cllection接口的实现类及其子类的元素都是单一的,不可分割的元素,而M...

2018-12-31 12:27:40 67

原创 源码分析篇--Java集合操作(1)

一、集合框架1、集合框架体系图2、集合的概念 Java集合是使程序能够存储和操纵元素不固定的一组数据。 所有Java集合类都位于java.uti包中。与Java数组不同,Java集合中不能存放基本数据类型,只能存放对象的引用。但是在JDK5.0以后的版本当中,JAVA增加了“自动装箱”和“自动拆箱”的机制,比如如果要存入一个INT类型的数据,JVM会把数据包装成Integer然后再存入集合...

2018-12-31 12:16:12 84

原创 #Postman--接口测试工具Postman的使用

一、什么是Postman?Postman是google开发的一款功能强大的网页调试与发送网页HTTP请求,并能运行测试用例的的Chrome插件。其主要功能包括:(1)模拟各种HTTP requests从常用的 GET、POST 到 RESTful 的 PUT 、 DELETE …等等。 甚至还可以发送文件、送出额外的 header。(2)Collection 功能(测试集合)Collec...

2018-12-18 00:11:27 241

原创 #Java集合框架--ArrayList容器的构造器

ArrayList类实现了List接口,它继承自AbstractList抽象类,继承机构如下所示:public class ArrayList extends AbstractListimplements List, RandomAccess, Cloneable, java.io.Serializable其中,AbstractList抽象类的继承结构如下所示:public abstrac...

2018-12-10 23:14:13 214

原创 #Java--范型匹配符

在创建集合对象的时候,要保证前后的泛型一致,或者创建集合时与前面的范型保持某种关系,如果不一致或不存在关系在编译时就会出错。例如,下面这句就会编译出错:List<Object> listTest = new ArrayList<String>();为什么会编译出错呢?这是因为ArrayList虽然是List的实现类,String是Object的实现类,但是Array...

2018-12-10 05:05:00 42

原创 #Java集合--ListIterator和Iterator迭代器的联系与区别

List的listIterator()方法会返回一个ListIterator迭代器对象,该迭代器的功能和Iterator迭代器基本相同,基本使用如下所示:ListIterator<String> iterator = list.listIterator(); for(;iterator.hasNext();){ String value = iterator.next(); S...

2018-12-03 00:10:37 134

原创 # Java面试--switch结构

1、switch 语句的格式:switch ( 变量 ){ case 变量可能值1 :  分支一; break;case 变量可能值2 :  分支二; break;case 变量可能值3 :  分支三; break;…default :最后分支;}2、switch支持的类型switch支持整型、字符串、和char类型,不支持浮点类型。3、break和def...

2018-11-11 10:48:42 98

原创 #底层原理&经典面试题--Integer类型的大小比较

(1)Integer i = 156;Integer j =156;if(i == j)System.out.println(true);System.out.println(true);(2)Integer i1 = 126;Integer j1 = 126;if(i1 == j1)System.out.println(true);System.out.println(tr...

2018-11-11 07:02:44 321

原创 #简单算法知识--插入排序

1.1.1插入排序的原理通过上面的原理图我们可以看出,直接插入排序的基本操作是将一个记录插入到已经排好的有序表中,从而得到一个新的、记录数增1的有序表。对于给定的一组记录,初始时假定第一个记录自成一个有序序列,其余记录为无序序列。接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直到最后一个记录插到有序序列中为止。因此,在上图中,插入排序实际上完成插入的轮数为n...

2018-11-10 20:03:57 48

原创 #简单算法知识--选择排序(与冒泡排序对比分析)

冒泡排序代码:1,-23,-6,0,34,2,87,43,-65//表示有多少轮比较 for(int i = 1;i<=arr.length-1;i++){ //表是每轮需要比较的次数 for(int j = 1;j<=arr.length-i;j++){ int temp; if(arr[j-1] > arr[j]){ //交...

2018-11-08 06:02:04 995

原创 #简单算法知识--字符串逆向输出

2018-11-08 03:15:38 158

原创 解决跨域的两种方案

一、跨域与同源策略跨域,通俗地讲,是指一个服务A的客户端请求另一个服务B的数据。下面给出了跨域的图示。在上面这个图中,描述了客户端与服务A关系,也就是说,客户端不允许对服务A以外的服务进行访问。这就是典型的跨域问题。通常同源策略与跨域紧密联系在一起。同源策略,它是由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用这个策略。所谓同源是指,域名,协议,...

2018-11-07 13:52:48 18271 2

原创 #maven--maven打包报告某个类找不到符号

如果打包时遇到下面的错误:[ERROR] D:\bootstrapWorksource\test\src\main\java\com\yzh\maven\interceptor\HandlerInterceptor1.java:[45,24] 错误: 找不到符号[ERROR] 符号: 类 HttpServletRequest解决办法:缺少该类的pom的jar依赖,在pom.xml引入ja...

2018-11-07 07:50:00 2028

空空如也

空空如也

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