![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
------------JAVA基础
丑八怪28
我的三心二意:信心、恒心、决心;创意、乐意
展开
-
快速排序
快速排序的思想:对于快速排序,首先要解决的就是轴值的问题,最简单的方法就是选择第一个元素作为轴值,这样可以保证不出现正序或反序的问题。核心思想是:以轴值为基准,将带排序的记录分割成独立的两部分,左边都是小于等于轴值的记录,右边都是大于等于轴值的记录,然后在对两部分分别重复上述过程,直到整个序列有序!public class Parti { public void partit原创 2017-03-28 10:43:45 · 232 阅读 · 0 评论 -
sleep()和wait()的区别
调用了sleep(),那么就会使正在执行的线程主动让出CPU,CPU去执行其他的线程,当sleep中规定了时间到了,CPU才会回到之前的线程继续执行。但是,如果当前线程进入了同步锁,那么sleep方法并不会释放锁,即使调用了sleep方法让出了CPU,但其他被同步锁挡住了的线程也得不到执行。wait()指在一个进入了同步锁的线程内,让自己暂时让出同步锁,让其他正在等待此锁的线程可以得到该锁并运原创 2017-05-15 14:08:53 · 320 阅读 · 0 评论 -
heap和stack的区别
java内存分为两种,即堆内存(heap)和栈内存(stack):栈内存是指程序进入一个方式时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量。当这个方法执行结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。并且,栈内存空间有限堆内存是与栈作用不同的内存,一般用于存放那些不放在当前方法栈中的数据,所以它不会随着方法的结束而消失,空间是一个很大的自由区。例如原创 2017-05-15 13:50:28 · 378 阅读 · 0 评论 -
重定向输出实现日志
public class RedirctOutputStream { public static void main(String[] args){ try { //保存原输出流 PrintStream out=System.out; //创建文件输出流 PrintStream原创 2017-03-27 10:02:27 · 2145 阅读 · 0 评论 -
水仙花
水仙花数是一个三位数,其各位的立方之和等于数值本身public class Flower { public static void main(String[] args){ int a,b,c; System.out.println("水仙花数:"); for (int i=100;i1000;i++){ a=原创 2017-03-28 15:29:30 · 287 阅读 · 0 评论 -
汉诺塔算法
汉诺塔算法:古代有一个梵塔,塔内有ABC三个座,开始时,A座上有16个盘子,盘子的大小不一,大的在下,小的在上。有一个老和尚想把A座上的盘子移动到C座上,每次只允许移动一个盘子,且移动过程中始终是大的在下,小的在上,如何实现?核心思想:1.递归2.只要盘子数不是1,那么总是先把A上的盘子借助C移动到B上,然后再借助A将B上的移动到C上public class Hanoi {原创 2017-03-28 15:49:56 · 536 阅读 · 0 评论 -
JVM
JVM即Java虚拟机。Java有一个突出的特点就是平台无关性,而这一点正是由jvm实现的。一般高级语言在不同的平台运行的时候都需要至少编译成对应的目标文件,而java虚拟机的引入使java语言能够在各种平台上执行,只需要生成java虚拟机能运行的目标文件(字节码文件)即可,jvm会将字节码解释成具体平台的机器指令执行。jvm是操作系统中的一个进程,是java运行的容器,因此也有自己的生命原创 2017-04-01 15:56:54 · 276 阅读 · 0 评论 -
Collections,sort()实现原理
查看源码可以发现Collections.sort的实现是Arrays.sort,而Arrays.sort的实现是ComparableTimSort.sort,然后才到sort方法和它的定义,查看排序的主体部分也可以发现一个binarySort的方法,这是排序方法的实现,是通过调用Object的CompareTo进行比较的。每一步代码如下:public class ListSort {原创 2017-04-01 15:58:05 · 12895 阅读 · 1 评论 -
Http和Https
清明小长假结束了,菜鸟君趁着大家休息的时候仍旧没有放松哦,整理了一下关于Http协议的相关知识,^_^一.为什么要用http协议?http协议是浏览器与服务器进行数据传输的格式规范,底层走的是TCP/IP协议。属于应用层协议。简单的说一下要用http的原因,可能会更深刻:比如说我们现在有很多的浏览器:谷歌、IE、搜狐等等,那么显然服务器不可能针对每一款浏览器的请求都有一个对应的解析原创 2017-04-05 08:44:31 · 334 阅读 · 0 评论 -
String、StringBuffer和StringBuilder
在学习各种面经的时候,看到不可避免的都会遇见同一个问题:String、StringBuilder、StringBuffer三者的区别,所以我这简单的整理一下:String:字符串常量,使用String定义了字符串之后就不可改变了StringBuilder:字符串变量,可变(线程不安全)StringBuffer:字符串变量,可变(线程安全)所以,如果在程序中只有少量的字符数据需要操作原创 2017-04-05 09:34:00 · 204 阅读 · 0 评论 -
在配置环境变量时,为什么使用用户变量而不是系统变量?
在配置环境变量的时候,大家都会经历过一步,那就是现在用户变量里定义一个PATH,然后再修改系统变量Path,那么为什么呢?不能够直接在Path里配置吗?答案是可以再Path里配置,但是这样会造成一些问题,因为Path是系统变量,是针对系统中所有用户的,如果随意的修改Path,可能会对其他用户造成意想不到的影响,而PATH用户变量只是针对当前用户的,这样就不会对其他用户产生影响了。另外,Pa原创 2017-04-05 11:55:27 · 16491 阅读 · 0 评论 -
Properties配置文件
记得面试阿里的时候,提到配置文件,当时只是觉得配置文件很好用,至于为什么,小笨鸟表示不知道。今天单位要搞一个技术联谊,我们这些倒霉的小笨鸟肯定都是炮灰,所以还是多看一点是一点,话不多说,把学到的共享是一贯的准则,开始喽~一、Properties类既然有配置文件,那么就对应的拥有读取配置文件的类和方法,各种语言都不例外。java中有一个很重要的类,就是读取配置文件的类Properties类,原创 2017-05-16 09:34:34 · 491 阅读 · 0 评论 -
软件设计原则
昨天我们单位的答辩过去了,同事们针对各组提问的问题,归根到底,都围绕着设计原则,所以小笨鸟下来就查了,什么是设计原则撒,要怎么运用到我们的实际项目开发中呢?下面是我总结的前辈的经验,结合自己的理解,同样与君共勉~一、开闭原则昨天答辩的时候这个原则是我们小组提出来的,导师给我简单的说了一句:对扩展开放,对修改关闭!小笨鸟觉得不懂啊,后来仔细查查才知道,开闭原则说的也就是:在不修改原(原创 2017-05-17 10:12:52 · 688 阅读 · 0 评论 -
java的数据类型
java的数据类型分为4类8种,分别为1.整型:byte(1字节)、short(2字节)、int(4字节)和long(8字节);2.字符型:char(2字节);3.浮点型:float(4字节)、double(8字节),java中的浮点数默认为double类型的,如果想要定义为float类型的,要在数字后面加F或f,例如1.2f;4.布尔型:boolean,只允许值为true或者fa原创 2017-05-17 13:54:29 · 270 阅读 · 0 评论 -
对象相等之equals与==的区别
# 对象相等怎么样才算是对象相等?其实判断对象相等有两种:1.对象相等性:即堆中的两个不同对象在意义上相等,其实也就是两个对象在堆中的内容相等。2.引用相等性:即两个对象的引用指向堆中同一个对象,也就是两个对象在栈中的内容相等。知道了对象相等的两种判断标准,就来说一个equals与==的区别吧~# equals()方法假设有两个对象x,y,判断x.equals(y)有结果f原创 2017-08-09 10:27:53 · 1158 阅读 · 0 评论 -
String、StringBuffer
这个话题貌似是面试必问的问题了,我也认认真真的学习了一下,下面是我的一些愚见~1.String类代表了字符串,是常量,因此是不可变的。String来的源码中有这样一段代码:/** The value is used for character storage. */private final char value[];这是一个final修饰的不可变的数组,注释说明它是原创 2017-08-08 18:04:13 · 2719 阅读 · 0 评论 -
接口与内部类
接口与抽象类经常会做比较,但是要明白二者是不同的,接口是对动作的抽象,而抽象类是对根源的抽象,比如男人、女人可以定义一个抽象类人,而针对吃东西,人会吃东西,动物也会吃东西,那么可以将吃东西这个动作定义为接口。两者的区别和联系如下:1.接口和抽象类都不能实例化2.接口的实现是关键字implements,抽象类的继承用关键字extend3.接口中只能声明方法,不能有方法实现;抽象类中可以只声明方法,也...原创 2017-11-01 15:41:05 · 483 阅读 · 0 评论 -
java垃圾回收
java内存一般认为有堆内存和栈内存,而堆内存中的对象实例是JVM回收的主要对象。1.什么样的对象需要回收?对于堆内存中已经没有任何用处(没有任何引用指向的对象)的对象就是可以被回收的对象。2.怎么判断对象是“无用”的?2.1 引用计数算法基本思想:给对象添加一个引用计数器,每当有一个地方引用它,计数器就+1,当引用失效时,计数器值-1,任何时刻计数器值为0的对象就是不可能再被使用的。问题:循环引...原创 2017-10-30 14:26:54 · 373 阅读 · 0 评论 -
集合之Set
Set集合就像是一个罐子,它记不住添加元素的顺序,所以Set集合不允许元素重复。即Set集合的特性是*无序,不重复的*。# HashSetHashSet是采用hash算法来存储元素的集合,所以查找与存取的速度都比较快。HashSet底层是通过HashMap实现的:private transient HashMap map; // Dummy value to associ原创 2017-08-09 17:09:08 · 314 阅读 · 0 评论 -
for、for-each、迭代器
在jdk1.5之前,迭代集合的时候通常使用迭代器,而迭代数组的时候通常选择for循环,但是1.5之后,可以使用for-each循环,它摒弃了传统for循环的索引,或者在使用iterator时不用调用hasNext()就可以进行遍历。事实上,for-each内部还是用iterator,能够使用for-each循环的对象必须实现了Iterable接口,该接口中就包含了一个iterator方法,该方原创 2017-08-09 11:32:01 · 548 阅读 · 1 评论 -
集合之List
集合java的集合主要分类Collection接口和Map接口,Collection接口作为集合的根接口,实现了Iterable接口,表示集合可以进行for-each循环。继承树如下:注:Iterable与Iterator的比较:Iterable接口中有个名字叫做iterator的方法需要实现,而Iterator接口中有next()、hashNext()、remove()三个方法需原创 2017-08-09 11:18:11 · 261 阅读 · 0 评论 -
synchronized
上一篇中在提到StringBuffer类中操作字符串的方法都是用synchronized修饰的,所以是线程安全的,那么在这篇就介绍一个synchronized是什么,为什么它修饰了就是线程安全的。造成线程安全的诱因1.存在共享数据2.存在多条线程共同操作共享数据解决方案当存在多条线程操作共享数据时,只要保证在同一时刻有且只有一条线程能够操作该共享数据,其他线程之一必须等原创 2017-08-08 18:51:18 · 252 阅读 · 0 评论 -
java-重载与重写
重载与重写都是java多态性的一种表现,但是又有不同,从重写是父类与子类之间多态的一种表现,重载是一个类多态的表现。多说无益,直接上实例:原创 2017-07-31 19:07:44 · 223 阅读 · 0 评论 -
jar包和war的区别
不知道我是不是和很多初学者一样想弄明白这个问题,但是我是真的不知道它们是什么个区别,好在前辈们都愿意分享,所以我也分享一下前辈的分享以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.class文件,每个文件中的功能与作用,同样可以得到他们希望的结果。除jar以外对于J2EE来说还有war和ear。区别见下表:JARWA转载 2017-05-19 11:28:10 · 494 阅读 · 0 评论 -
请求参数获取
用户通过浏览器向服务器发送请求,有get和post两种方式,那么我们怎么获得提交的参数呢?方式一 getQueryStringh()和getInputStream():1.get方式提交System.out.println("get方式提交");String value=req.getQueryString();System.out.println(value);这种原创 2017-04-06 14:42:54 · 4639 阅读 · 0 评论 -
文档注释
自从面试了阿里之后,发现基础真的很重要,以前觉得很多基础不用记,知道个大概,用到的时候查一下就好了,但是有谁在计算“1+1=?”的时候会说:等等,我百度一下~所以立志从基础走起,打牢基础,才能以不变应万变。最近在看疯狂的java讲义,看到注释一节,发现了一个新的知识点——文档注释(原谅我之前只知道单行注释和多行注释的粗鄙浅薄^_^!)。所以我在这里简单的总结一下文档注释的作用和用法一、什么原创 2017-04-10 11:41:36 · 645 阅读 · 0 评论 -
直接插入排序
核心思想:每次将待排序的记录按其关键码的大小插入到一个已经排好序的有序序列中,直到全部记录排好序。public class Insert { public static void main(String[] args){ int a[]={49,27,65,97,76,13,35,5,12,58,65}; int i,j,temp;原创 2017-03-28 11:33:11 · 238 阅读 · 0 评论 -
经典算法--百钱买百鸡
百钱买百鸡:公鸡5元一只,母鸡3元一只,小鸡1元三只,现有100元钱怎么买100只鸡?思路:1.100元最多能买公鸡20只,母鸡33只2.在买的公鸡数不超过20,母鸡数不超过33的情况下,剩下的买小鸡3.当公鸡*5+母鸡*3+小鸡/3=100元且小鸡%3==0时,满足条件4.输出满足条件的各鸡数public class Hmhc { public static原创 2017-03-28 14:02:20 · 5028 阅读 · 0 评论 -
经典算法--韩信点兵
韩信点兵是一道古代的数学题,题意:韩信点兵不足百人,三人一排多1人,七人一排少2人,五人一排正好。问韩信带兵多少?/** * 韩信点兵: * 韩信带兵不足百人,3人一排多1人,7人一排少2人,5人一排刚好,问韩信总共带兵多少? * 思路: * 1.假设带兵总数为total,由条件知total<100 * 2.从0-100遍历符合条件的total值 * 3.条件:用total分别原创 2017-03-28 14:20:42 · 5863 阅读 · 0 评论 -
经典算法--斐波那契数列
斐波那契数列的特点:前两个数为1,从第三个数开始,每个数都是其前面两数之和算法实现:public class Fbo { public static void main(String[] args){ Scanner s=new Scanner(System.in); System.out.println("请输入你想查看的斐波那契数列:");原创 2017-03-28 14:58:54 · 562 阅读 · 0 评论 -
JAVA—继承
JAVA的继承比较好理解,但是用起来就不那么容易了,希望我的个人理解能够给大家些许帮助原创 2017-03-13 17:05:21 · 194 阅读 · 0 评论 -
JAVA—Super和this关键字
关于Super和this关键字,我不做很多的描述,直接看例子:运行结果:看到这里,代码君是不是若有所感。其实,说白了,我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。而使用this关键字指向自己的引用。原创 2017-03-13 17:34:34 · 262 阅读 · 0 评论 -
final关键字
final关键字final,顾名思义,是最后的意思,也就是说用final关键字修饰的类表示为最终的类,即该类不能被继承。如果final修饰方法,即表示该方法不能被重写,如果final修饰变量,那么该变量的值不能被修改。final修饰的类中的方法自动默认为final方法,但是实例变量不是final变量。格式:1.修饰类final class 类名{ 类体}2.原创 2017-03-14 08:47:26 · 173 阅读 · 0 评论 -
java—构造函数
构造函数(构造器、构造方法):不能被其子类继承,父类的无参构造函数在子类中可以用super,也可以不用,如果没有super,那么默认调用父类无参构造函数,而父类的有参构造函数则必须通过super调用。执行描述:在main函数中首先执行第一条语句,进入子类的无参SubClass()中,然后遇见super(100),进入父类的有参构造函数,将100赋值给n,输出“我是父类有参构造函原创 2017-03-14 09:59:17 · 276 阅读 · 0 评论 -
java-重载与重写
重载与重写都是java多态性的一种表现,但是又有不同,从重写是父类与子类之间多态的一种表现,重载是一个类多态的表现。多说无益,直接上实例:重写:class RewriteClass{ public void test(){ System.out.println("我是父类中的方法"); }}class Rewrite extends Rewrite原创 2017-03-14 10:42:03 · 247 阅读 · 0 评论 -
java-多态
多态,就是多种形态,也就是说变现的形式可以有“多”个,即父类中定义的属性或操作被子类继承之后,能够表现出不同的行为或者具有不同的数据类型,举个例子来说,父类定义了一个“几何图形”的方法时,再为其定义一个绘图操作,而子类“椭圆”和“矩形”都继承了父类并且实现其绘图的操作,那么子类“椭圆”可以绘画出椭圆,而子类“矩形”能够绘画矩形,如果再有其他的子类,可能会绘制其他图形,实现不同的操作。cla原创 2017-03-14 11:10:10 · 277 阅读 · 0 评论 -
选择排序
选择排序的核心思想:每趟排序在当前待排序的序列中选出关键码最小的记录,添加到有序序列中(设置一个标记最小记录的index标识,始终指向最小记录)。优势:记录的移动次数少/** * 选择排序: * index:关键码标识,总是指向数值最小的元素所在位置下标 */public class Select { public static void main(String[]原创 2017-03-28 10:51:21 · 159 阅读 · 0 评论 -
冒泡排序
冒泡排序属于交换排序中最简单的排序方法,基本思想是:相邻的数两两比较,如果反序,则交换位置算法实现:public class Bubble { public static void main(String[] args){ int a[]={10,23,11,56,45,25,58,28,84,79}; System.out.println("初原创 2017-03-27 14:38:56 · 270 阅读 · 0 评论 -
foreach和for的区别
foreach是java5的新特性之一,是for语句的特殊简化版本,能够方便的遍历集合、数组或者迭代器,但是并不能完全取代for语句。在java5之前,如果需要遍历数组、集合或迭代器,需要建立索引、条件表达式,这些会增加出错的几率,而且容易使代码混乱,如果采用foreach就能够方便的进行遍历。但是,foreach只能进行遍历,并不能对其中元素进行修改,虽然foreach内部原理和Iter原创 2017-03-27 14:11:00 · 465 阅读 · 0 评论 -
(一)深入数组--内存中的数组
数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存里是分开存放的。实际的数组对象被存储在堆(heap)内存中,如果引用该数组对象的数组引用变量是一个局部变量,那么它被存储在栈中。数组在内存中的存储示意图:通过一个例子来说明一下:有这样一段代码,首先定义了两个数组a和b,分别初始化两个数组,输出数组的长度和元素,然后将a数组赋值给b数组,再输出数组b的原创 2017-04-10 15:24:31 · 1618 阅读 · 0 评论