自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

韩云昊的菜园

真正的大师永远怀着一颗学徒的心

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

转载 junit 单元测试报错:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

今天在写代码的时候想把老系统里面加上单元测试,所以用最近做的springmvc上的一个项目中的junit扒一个下来:junit-4.12.jar 但是很奇怪在原来系统中好好能运行的,放到现在的项目中就老是报错:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing。疯掉了后来查发现有人说换一个低版本的就行了,引入junit4.10.jar。果然行了,但是我们要知其然更要只其所以然查官网:JUnit now uses the latest

2020-09-17 22:55:43 164

原创 IDEA 部署Tomcat Web项目出现404错误的解决方式(保姆级别演示,绝对有效)

最近使用IDEA开发项目,Tomcat启动正常,没有报错,但是打开之后一直是404状态,由此推断可能是Project Structure配置有问题可以看出Tomcat是可以正常启动的:/usr/local/ApacheTomcat/bin/catalina.sh run[2020-09-16 03:34:19,684] Artifact 07_servlet: Waiting for server connection to start artifact deployment...16-Sep-20

2020-09-16 16:06:22 9735 5

原创 剑指offer:最小的k个数的两种Java解决(冒泡排序与大根堆)

题目输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。方法1,改进后的冒泡排序(时间复杂度为O(n*k))问题分析普通的冒泡排序使用了两层循环,第一层循环遍历了数组中所有的元素,第二层循环比较相邻的元素。如果第一个比第二个大,就交换他们两个。因此,我们并不需要得到所有数组元素的大小排序结果,我们只需要将外循环执行k次即可。注意!!!冒泡排序每一次冒泡最大值(或最小值)都在数组最末端,每一次添加元素时,需要从数组末尾抽取,这时的元

2020-09-10 16:19:40 199

原创 计算机网络基础知识:TCP、TCP/IP、UDP协议的联系与区别

TCP/IP协议簇简介TCP/IP协议(Transmission Control Protocol/Internet Protocol)叫做传输控制/网际协议,又叫网络通讯协议,这个协议是Internet国际互联网络的基础。TCP/IP是网络中使用的基本的通信协议。虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通

2020-09-04 10:14:27 718

原创 Java实现字符串的排序以及全排列变形题目(求字符的所有组合、国际象棋8皇后问题)

题目要求输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。代码思路1.首先考虑递归。例如输入字符串abcd,提取第一个字符a,交换bcd的位置;提取第一个字符b,交换acd的位置…以此类推。整个核心代码就是一手交换,难点在于确定每一步的“第一个元素”。2.接着考虑如何去重与排序,由于Collcetion集合中提供了Set接口:存储无序的(不等于随机性,根据数据的hash

2020-09-02 14:32:01 581

原创 通过简单的死锁实例来理解同步监视器与死锁

在介绍死锁的概念之前,首先对线程的生命周期进行复习。线程的生命周期新建:Thread thread=new Thread();,用new关键字创建一个线程后,构造方法中将当前thread对象加入ThreadGroup,虚拟机为其分配内存。就绪:调用线程实例的start(),JVM为其创建方法调用栈和程序计数器,线程何时开始运行取决于JVM里线程调度器的调度。阻塞:如果处于就绪状态的线程获得了CPU,开始执行run方法的线程执行体,则该线程处于运行状态,如果计算机只有一个CPU,那么在任何时刻只有一个

2020-08-19 11:02:05 149

原创 Java面试题:单核CPU支持多线程吗?

答案:支持,CPU通过给每个线程分配CPU时间片(时间单元)来实现这个机制。由于CPU频率很高,故时间单元非常短,用户不易察觉。

2020-08-16 22:42:34 1307

原创 Java面试题-throw 和 throws的区别

throw 和 throwsthrow:表示方法内抛出某种异常对象如果异常对象是非 RuntimeException 则需要在方法申明时加上该异常的抛出 即需要加上 throws 语句 或者 在方法体内 try catch 处理该异常,否则编译报错执行到 throw 语句则后面的语句块不再执行throws:方法的参数后加上 throws 表示这个方法可能抛出某种异常需要由方法的调用者进行异常处理只有一类异常,抛出的时候方法可以不用声明,就是RuntimeException异常。th

2020-08-13 18:28:18 475

原创 剑指offer34:二叉树中和为某一值的路径(最全解题方法总结和遇到的坑及反思)

题目输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。如图所示:思路我的思路是递归:递归方法是返回当前路径下匹配目标值的路径。共有几种情况:当节点为空,return当和大于目标值,return当和等于目标值 并且 节点下无其他节点节点下无其他节点说明是叶子节点,并且路径值的和满足了目标值,添加到结果中 并且return当和小于目标值,继续递归遇到的坑第一眼看到这道题的时候

2020-08-13 10:50:12 110

原创 树的广度优先遍历和深度优先遍历并用Java实现

现在假设有一颗这样树,(是不是二叉树都没关系,原理都是一样的)1.广度优先遍历英文缩写为BFS即Breadth FirstSearch。其过程检验来说是对每一层节点依次访问,访问完一层进入下一层,而且每个节点只能访问一次。对于上面的例子来说,广度优先遍历的 结果是:A,B,C,D,E,F,G,H,I(假设每层节点从左到右访问)。先往队列中插入左节点,再插右节点,这样出队就是先左节点后右节点了。广度优先遍历树,需要用到队列(Queue)来存储节点对象,队列的特点就是先进先出。例如,上面这颗树的访问如

2020-08-11 10:44:03 500

转载 IDEA中Maven依赖包下载不了的问题解决方案汇总(亲测有效)

这个依赖包下载不了的问题真的是很烦,之前一直把下载不上的依赖剪切再粘贴到pom.xml文件中,保存它就自动下载了,但是今天怎么剪切粘贴都没用,所以就花了点时间在网上各种搜解决方案,试了一些之后终于从根本上解决了问题,所以写个博客把解决这个问题的方案汇总一下!1.先是对图上的两个位置一番狂点进行刷新,然并卵…于是又按照博客上的指示去寻找 Settings -> Build,Execution,Deployment -> Build Tools -> Maven -> Ignored

2020-08-10 17:16:00 954

原创 Java实现剑指Offer27: 树的子结构以及遇到的坑

题目输入两颗二叉树A和B,判断B是不是A的子结构。例如,右边的树是左边的树的子结构。分析1.在大树中找到和小树根节点相同的节点。2.然后以此节点为根节点,在大树上往下搜索对比小书左右节点是否相同,不同则返回false3.如果2步中最后返回false 回到第一步,从大树的左子树找和小树根节点相同的节点。4.如果3步中最后返回false 回到第一步,从大树的右子树找和小树根节点相同的节点。代码思路两个递归解决该问题。首先创建一个名为HasSubtree的方法来判断大树中有没有和小树根节点相同的

2020-08-10 14:55:32 89

原创 剑指offer25:合并两个排序链表的两种解法(递归与非递归)Java

题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。非递归遍历两个链表,按大小顺序拼接public ListNode Merge(ListNode list1, ListNode list2) { ListNode head = new ListNode(0); ListNode movnode = head; while (list1 != null && list2 != null) { i

2020-08-10 10:23:04 118

原创 剑指offer:正则表达式匹配Java实现以及错误反思

题目描述请实现一个函数用来匹配包括’.‘和星号的正则表达式。模式中的字符’.'表示任意一个字符,而星号表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。代码思路当模式中的第二个字符是星号时:如果字符串第一个字符跟模式第一个字符不匹配,则模式后移2个字符,继续匹配(相当于星号前面的)。如果字符串第一个星号字符跟模式第一个字符匹配,可以有3种匹配方式:1.模

2020-08-08 15:04:52 121

原创 Java初学者对快速排序的总结以及错误反思

快排的基本思想1). 先从数列中取出一个数作为基准数。2). 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3). 再对左右区间重复第二步,直到各区间只有一个数。两种快排类型:左右填坑法与前后交换法第一种,挖坑填数:这种方法很经典,首先抽取枢纽元素,然后设置两个指针分别从左右两端开始,将小于枢纽元素的填补到数组左端空缺位置,大于枢纽元素的填补到数组右端空缺位置,每次填补之后换成另一端开始遍历。第二种,前后交换法:一种比较巧妙的实现方法,首先将枢纽元素放在最右

2020-08-04 20:06:41 365

原创 剑指offer面试题8:二叉树的下一个节点(两种递归解法)

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。由于作者的递归思想掌握的不好,故本题尝试用递归方法求解。第一种递归方法画一个二叉树,然后模拟一下,可知用递归来实现是比较方便的。并且还有两个特点:① 当前节点单独考虑,因为找的下一个节点必然是右子树的最左节点(右子树存在的条件下);② 右子树为空需要单独考虑,因为右子树可能是整棵树的最右节点,故而没有下一个节点,也有可能是较好条件下的节点,找到出现左路径

2020-08-04 14:48:49 134

原创 Java 中的 String的不可变性/Java中replace()深层理解/剑指offer替换空格理解

今天在做剑指offer第三题替换空格时,产生了这样的疑问,先看一段代码: public String replaceSpace(StringBuffer str) { String string = str.toString(); string.replace(" ","%20"); return string; }可是为什么执行string.replace之后,string的内容没有改变呢?这需要从String对象的本质讲起。什么是不可变对

2020-08-02 17:44:49 249

原创 IDEA如何一键导入GitHub优秀开源项目

最近在自学Java希望找到一份暑期实习,由于我没有什么项目经验,便在GitHub上找到了一些优秀的开源项目,这时便想到是否能够用idea强大的项目导入功能直接导入GitHub中的项目呢?下载git并配置这里不再赘述,具体可参考:https://blog.csdn.net/huangqqdy/article/details/83032408注册github账号不再赘述,具体地址:https://github.com/join在idea中配置git以及连接GitHub打开File下的Setting,

2020-07-30 22:13:28 3562 1

原创 Java初学者对抽象类及接口注意事项的理解

抽象类注意事项抽象类不能创建对象,我们只能创建其非抽象子类的对象抽象类可以有构造方法,是提供其子类创建对象时,初始化父类成员使用的抽象类不一定包含抽象方法,但包含抽象方法的一定是抽象类抽象类的子类必须重写其抽象父类的全部抽象方法,除非该子类也是一个抽象类接口注意事项接口是引用数据类型,是一个类的公共规范,和定义一个类基本一致,关键字class换interface接口可以定义抽象方法,但修饰符必须是public abstract,并且可以省略接口不能直接使用,需

2020-07-30 11:40:23 157

转载 深入浅出理解Java中static关键字

Java中的static关键字解析static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一。下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题。以下是本文的目录大纲:一.static关键字的用途 二.static关键字的误区 三.常见的笔试面试题若有不正之处,希望谅解并欢迎批评指正。一.static关键字的用途在《Java编程思想》P86页有这样一段话:

2020-07-29 10:54:44 108

原创 Java中方法的参数传递初学者常见的问题与堆栈理解

在C语言中,如果函数的形参是指针类型,那么在函数体中,修改该形参,实参也会产生相应变化在Java中,由于类的实例化在堆中完成,方法的形参在栈中创建,这时会产生一种新手常见的错误(可能理解的不透彻,欢迎讨论)先看下面一段代码import javafx.scene.shape.Circle;public class ClassTest { public static void main(String[] args) { ClassTest classTest = new Cla

2020-07-27 20:07:40 234 1

原创 Java中的基本数据类型和引用数据类型的联系与区别

Java提供了两类数据类型:一种是基本数据(原始类型),一种是引用类型。数据类型图:基本数据类型:注意:1.在基本数据类型中,除了boolean类型所占长度与平台有关外,其他数据类型长度都是与平台无关的。比如:int永远占4个字节(1 Byte=8 bit)2.基本数据类型的默认值仅在作为类中属性时生效在方法内部必须先对基本数据类型变量赋值后才能使用,否则编译不通过。eg:基本数据类型——类型转换 1):小类型的变量赋值给大类型,会自动转换 2):大类型的变量赋值给小类型,强制

2020-07-27 15:10:40 497

原创 程序员必备初级面试题:进程与线程的关系

进程与线程的关系是在操作系统中涉及到的知识点。1.进程是资源分配的最小单位,线程是CPU调度的最小单位。2.线程依赖于进程,一个线程只属于一个进程,一个进程可以有多个线程。3.进程在执行过程中有独立的内存单元,而多个线程共享进程的内存。4.进程编程简单可靠性高,但创建销毁内存开销大;线程开销小,切换速度快,但编程调试相对复杂。5.进程之间不会互相影响(有独立地址空间);而一个线程抹掉,将导致整个进程挂掉(因为共享地址空间)。...

2020-07-13 01:30:29 152

空空如也

空空如也

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

TA关注的人

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