Java的一些知识点对比参照?

= =与equals的区别

1.如果是基本类型比较,那么只能用==来比较,不能用 equals
2.
对象间的比较使用equals ==比较的是对象中的地址equals比较的时候一定要重写对象的equals方法,

3.如果对象没有覆写equals,那么调用这个对象equals时候就默认调用Objectequals方法,Objectequals默认实现的是用==比较,所以一定要覆写对象的equals方法

 

ArrayListLinkedList的区别和联系

 

 1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

 2. 对于随机访问getsetArrayList觉得优于LinkedList,因为LinkedList要移动指针。

 3. 对于新增和删除操作addremoveLinedList比较占优势,因为ArrayList要移动数据 

CookieSession的区别


getpost的区别

1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。
4. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

建议:
1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;

HashMapHashtable的区别


HibernateIBatis的区别

1 iBATIS非常简单易学,Hibernate相对较复杂,门槛较高。

2二者都是比较优秀的开源产品

3当系统属于二次开发,无法对数据库结构做到控制和修改,iBATIS的灵活性将比Hibernate更适合

4系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。在这种情况下iBATIS会有更好的可控性和表现。

5 iBATIS需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sqlmapping的地方一一修改。

6以数据库字段一一对应映射得到的POHibernte这种对象化映射得到的PO是截然不同的,本质区别在于这种PO是扁平化的,不像Hibernate映射的PO是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路。

7 Hibernate现在已经是主流O/RMapping框架,从文档的丰富性,产品的完善性,版本的开发速度都要强于iBATIS

8.   如果项目不复杂,那么开发速度上面Hibernate要远远高于IBatis

9.   调试方面IBatis要比Hibernate简单

 

 

 

 

Hibernate里面一级缓存,二级缓存,查询缓存的区别

IBatis和MyBatis的区别和联系


Java程序运行时候静态绑定和动态绑定区别

一个Java程序的执行要经过编译和执行(解释)这两个步骤,同时Java又是面向对象的编程语言。当子类和父类存在同一个方法,子类重写了父类的方法,程序在运行时调用方法是调用父类的方法还是子类的重写方法呢,这应该是我们在初学Java时遇到的问题。这里首先我们将确定这种调用何种方法实现或者变量的操作叫做绑定。

Java中存在两种绑定方式,一种为静态绑定,又称作早期绑定。另一种就是动态绑定,亦称为后期绑定。

区别对比

·        静态绑定发生在编译时期,动态绑定发生在运行时

·        使用privatestaticfinal修饰的变量或者方法,使用静态绑定。而虚方法(可以被子类重写的方法)则会根据运行时的对象进行动态绑定。

·        静态绑定使用类信息来完成,而动态绑定则需要使用对象信息来完成。

·        重载(Overload)的方法使用静态绑定完成,而重写(Override)的方法则使用动态绑定完成。

Java内存中栈(Stack)和堆(Heap)的区别

stack 和 heep 都是内存的一部分
stack 空间小,速度比较快, 用来放对象的引用
heep 大,一般所有创建的对象都放在这里。

栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量.
在java中,所有基本类型和引用类型都在栈中存储.栈中数据的生存空间一般在当前scopes内(就是由{...}括起来的区域).
堆(heap):是一个可动态申请的内存空间(其记录空闲内存空间的链表由操作系统维护),C中的malloc语句所产生的内存空间就在堆中.
在java中,所有使用new xxx()构造出来的对象都在堆中存储,当垃圾回收器检测到某对象未被引用,则自动销毁该对象.所以,理论上说java中对象的生存空间是没有限制的,只要有引用类型指向它,则它就可以在任意地方被使用.

        1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
        2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
        3. Java中的数据类型有两种。
        一种是基本类型(primitivetypes), 共有8种,即int,short, long, byte, float, double, boolean, char(注意,并没有string的基本类型)。这种类型的定义是通过诸如int a =3; long b = 255L;的形式来定义的,称为自动变量。值得注意的是,自动变量存的是字面值,不是类的实例,即不是类的引用,这里并没有类的存在。如inta = 3; 这里的a是一个指向int类型的引用,指向3这个字面值。这些字面值的数据,由于大小可知,生存期可知(这些字面值固定定义在某个程序块里面,程序块退出后,字段值就消失了),出于追求速度的原因,就存在于栈中。
另外,栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时定义:
            int a =3;
            int b = 3;
编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找有没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将a指向3的地址。接着处理int b = 3;在创建完b的引用变量后,由于在栈中已经有3这个字面值,便将b直接指向3的地址。
这样,就出现了a与b同时均指向3的情况。特别注意的是,这种字面值的引用与类对象的引用不同。
假定两个类对象的引用同时指向一个对象,如果一个对象引用变量修改了这个对象的内部状态,那么另一个对象引用变量也即刻反映出这个变化。
相反,通过字面值的引用来修改其值,不会导致另一个指向此字面值的引用的值也跟着改变的情况。
如上例,我们定义完a与b的值后,再令a=4;那么,b不会等于4,还是等于3。在编译器内部,遇到a=4;时,它就会重新搜索栈中是否有4的字面值,如果没有,重新开辟地址存放4的值;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。
        另一种是包装类数据,如Integer,String, Double等将相应的基本数据类型包装起来的类。这些类数据全部存在于堆中,Java用new()语句来显示地告诉编译器,在运行时才根据需要动态创建,因此比较灵活,但缺点是要占用更多的时间。

 jsp中动态包含和静态包含的区别

1. 语法格式

          1)静态包含:<%@include file="被包含文件"%>

          2)动态包含:<jsp:includepage="被包含文件"/>

2. 包含时间

          1)静态包含:JSP程序被翻译成Servlet之前包含;

          2)动态包含:JSP程序运行时包含。

3.  逻辑性

          1)静态包含:包含文件和被包含文件在逻辑上是统一的;

          2)动态包含:包含文件和被包含文件在逻辑上是独立的。

4. 性能

          (1) 静态包含:因为提前已经预编译好了,性能较高

          (2)动态包含:是后面把两个文件合并在一起的,性能较低

JVM,JRE,JDK的区别和联系

 

Java开发工具包 (JDK)

Java开发工具包是Java环境的核心组件,并提供编译、调试和运行一个Java程序所需的所有工具,可执行文件和二进制文件。JDK是一个平台特定的软件,有针对WindowsMacUnix系统的不同的安装包。可以说JDKJRE的超集,它包含了JREJava编译器,调试器和核心类。目前JDK的版本号是1.7,也被称为Java 7

Java虚拟机(JVM)

JVMJava编程语言的核心。当我们运行一个程序时,JVM负责将字节码转换为特定机器代码。JVM也是平台特定的,并提供核心的Java方法,例如内存管理、垃圾回收和安全机制等。JVM是可定制化的,我们可以通过Java选项(javaoptions)定制它,比如配置JVM内存的上下界。JVM之所以被称为虚拟的是因为它提供了一个不依赖于底层操作系统和机器硬件的接口。这种独立于硬件和操作系统的特性正是Java程序可以一次编写多处执行的原因。

Java运行时环境(JRE)

JREJVM的实施实现,它提供了运行Java程序的平台。JRE包含了JVMJava二进制文件和其它成功执行程序的类文件。JRE不包含任何像Java编译器、调试器之类的开发工具。如果你只是想要执行Java程序,你只需安装JRE即可,没有安装JDK的必要。

JDK,JRE JVM的区别

JDK是用于开发的而JRE是用于运行Java程序的。
JDK
JRE都包含了JVM,从而使得我们可以运行Java程序。
JVM
Java编程语言的核心并且具有平台独立性。
即时编译器(JIT)

有时我们会听到JIT这个概念,并说它是JVM的一部分,这让我们很困惑。JITJVM的一部分,它可以在同一时间编译类似的字节码来优化将字节码转换为机器特定语言的过程相似的字节码,从而将优化字节码转换为机器特定语言的过程,这样减少转换过程所需要花费的时间。

 

 

StringStringBuffer的区别

String 是不可变的可以直接使用它的方法用来创建字符串
Stringbuffer无论怎么修改都是一个对象
Stringbuffer
String运行快

Struts1Struts2的区别

 

 

存储过程和函数的区别

不同点:
1、标识符不同。函数的标识符为FUNCTION,过程为:PROCEDURE。
2、函数中有返回值,且必须返回,而过程没有返回值。
3、过程无返回值类型,不能将结果直接赋值给变量;函数有返回值类型,调用时,除在select中,必须将返回值赋给变量。
4、函数可以在select语句中直接使用,而过程不能,例如:假设已有函数fun_getAVG() 返回number类型绝对值。那么select fun_getAVG(col_a) from table 这样是可以的。
 
相同点:
二者都可以有出参

接口和抽象类的区别

接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。

接口表示行为,或者定义规范。一般是动词

抽象类表示对象,一般是名词

抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。

人可以吃东西,狗也可以吃东西,你可以把吃东西定义成一个接口,然后让这些类去实现它.

所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)

第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
第二点. 接口可以多继承,抽象类不行
第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。
第四点. 接口中基本数据类型为static而抽类象不是的。

当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

 

抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的

所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。

数组和集合的区别

重载(overloading)与重写(override)的区别

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

转发和重定向的区别

 

 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值