java 基础笔试题

来源:互联网 发布:黑石集团知乎 编辑:程序博客网 时间:2024/04/27 15:58

Java基础

1、java与C 的区别?

JAVA和C++都是面向对象的语言,C是面向过程的。

java里没有指针,C++里有指针。

java是单继承,但允许一个类实现多个接口,弥补了java的单继承,而C++是支持多继承的。

java有自动回收内存的垃圾回收机制,不需要程序员手动释放内存,而C++是需要程序员手动释放内存的。

2、java面向对象的基本特征?

抽象:便于一个普遍的事物演化出同类的其他事物,而设计的一种特殊类型,方便对象上传、接口调用。

封装:将数据和一些复杂的处理过程封装起来,不希望别人直接访问,而是通过你提供的方法等来访问。

继承:所谓的继承是使子类拥有父类所有的属性和方法,但是父类对象中的私有属性和方法,子类是无法访问到的

多态:所谓多态就是指方法的重载或者重写。当父类的引用指向子类的实例的时候,该引用只能调用父类的属性和方法,如果子类重写了父类的方法,那么将会调用子类的重写后的方法,如果子类扩展了一些父类没有的方法,想要调用这些方法,不能用父类的引用去调用,只能new一个子类的对象,来访问自己扩展的方法。

3、方法的重载和重写?

重写:必须是子类继承父类,才可以重写父类的方法,方法名和参数必须和父类一样,方法体里的内容不一样,返回类型权限要比父类更宽松。

重载:不需要有继承的关系,方法名必须相同,参数必须不同,返回类型可以相同,也可以不同。

4、java 访问权限?

public:公有的,所有的类都可以访问。

private:私有的,只有当前类能够访问。

protect:受保护的,只有同一个包内,或者他的子类能够访问。

默认的:包内友好的,只有同一包内才能够访问。

5、java基本类型和引用类型?

int  4字节   Integer

char  2字节  Character

byte 1字节  Byte

short  2字节  Short

float  4字节   Float

double  8字节   Dobule

long  8字节 Long

boolean   Boolean

6、String是基本数据类型吗?

string是引用类型。

7、String和StringBuffer的区别?

StringBuffer在定义字符串的时候,在字符串池里只定义了一个同名的字符串,如果要改变字符串,则在这个基础上改变。而String,要改变的时候,会在定义一个新的串,这样原来的串就成了垃圾。所以,能用StringBuffer尽量不用String。

8、说出常用的类、包、接口?

类:String、ArrayList、StringBuffer、FileInputStream、HashMap

包:java.util 、 java.lang、java.sql、java.io 、java.swt

接口:List、Set、Map、Runnable、comparable

9、运行时异常和一般异常区别?

运行时异常没法捕获,一般异常可以写try。。catch来捕获。

java.lang.Throwable

java.lang.Exception

java.lang.RunntimeException

java.lang.Error

java.lang.ThreadDeath

Throwable 是java中所有异常或错误的超类

Exception 表示本身可以通过程序处理的类

Error 靠程序本身无法恢复的严重错误

RunntimeException 这种异常可以通过改进代码来避免

ThreadDeath 调用Thread 类中带有零参数的 stop 方法时,受害线程将抛出一个 ThreadDeath 实例。

10、Jsp内置对象及其方法?

request、response、session、application、out、exception、page、pagecontext、config

request.setAttribute()  request.getAttribute()  out.print() response.sendRedirect()等

11、jsp和servlet的区别和联系?

jsp和servlet本质没有区别,因为jsp运行前会被编译成servlet

jsp主要用于表现层,servlet主要用于业务逻辑的处理。

12、Jsp包含三个编译指令和七个动作指令。

三个编译指令为:pageincludetaglib

七个动作指令为:jsp:forwardjsp:paramjsp:includejsp:pluginjsp:useBeanjsp:setPropertyjsp:getProperty

13、include和jsp:include的区别?

include:是把引入的文件和当前的文件共同合并成一个servlet文件进行解析。

jsp:include:是把当前文件和引入文件生成两个不同的servlet文件,在当前文件中在进行动态的调用引入的servlet文件。

14、servlet生命周期?

Servlet在第一次访问服务器的时候加载,创建对象,即init,只初始化一次,然后根据请求,重写service方法,当关闭服务器或退出虚拟机的时候,对象销毁,即destroy。

15、两种跳转方式是什么,有什么区别?

一种是转发,一种是重定向

转发是服务器内部跳转,请求一次服务器,URL地址不变,request作用域里的只还存在

重定向是在向浏览器请求一次,相当于请求2此服务器,URL地址会改变,request里的值没有了

16、final、finally、finalize的区别

final:final修饰的属性不能改变、修饰的方法不能重写、修饰的类不能继承

finally:是异常处理时用的,try..catch..finally,finally一定会执行,如果有return,那么执行完finally再执行return

finalize:是垃圾回收前一定会执行的方法,用来释放一些资源。

17、hashmap和hashtable的区别

hashmap是非线程安全的,允许key和value为空

hashtable是线程安全的,不允许key和value为空

所以在不考虑线程安全下,hashmap效率更高一些。

18、sleep()和wait()区别?

sleep:是Thread的静态方法,可以放在任何地方,sleep期间不释放系统资源,不释放锁,其他线程无法访问。sleep一段时间后,自动恢复运行。

wait:是Object的方法,只能放在同步代码块里,wait期间会释放锁,其他线程可以访问。wait后,必须由notify来唤醒。

19、Set和List的区别?

set和list都是接口,都继承子collection

set是无序的,list是有序的

set里相同元素只能存储一个,list可以存储多个

20、怎样判断set里的元素是否重复?

先判断hashcode,如果hashcode不同,那么两个元素一定不同,如果hashcode相同,用equals比较。

21、equals和==区别?

==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
22、启动一个线程是用run()还是start()?

run(),start()只是让他进入就绪状态。

23、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

swtich只能作用在整型上或者可以强转成int的,如byte  int char short,long和string是不可以的。

24、数组和集合类的区别?

数组能够存储任何类型包括基本类型,但集合类只能存储引用类型.

数组创建时必须指定长度且长度不可改变,但集合类的长度是可以改变的.

数组的效率相对较高,在元素数量确定的情况下应首选使用数组.

25、jsp和servlet里的请求转发如何实现?

一种是response.sendRedirct("转发地址")

一种是request.getRequestDispatcher("转发地址").forward(request,response)

26、描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理?

session和cookie都是保存客户信息的

cookie记录在客户端,session保存在服务器端

sessionid保存在客户端,所以session更安全

cookie有长度限制,session没有。

27、ArrayList、Vector和LinkedList的区别?

ArrayList和Vector的存储结构是线性表,物理结构是相邻的,所有查询的速度较快,但新增和删除的速度相对较慢.

LinkedList的存储结构是双向链表,物流结构不相邻,查询较慢,但新增、删除的速度较快.

Vector是线程安全的,而ArrayList是非线程安全的.在不需要考虑多线程的情况下、ArrayList效率相对较高.

28、preparedstatement和statement的区别?

preparedstatement是预编译的,对于批量处理可以大大提高效率. 

使用 statement对象。在对数据库只执行一次性存取的时侯,用 statement对象进行处理。preparedstatement对象的开销比statement大,对于一次性操作并不会带来额外的好处。

statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得,  编译一次后,只需往里面传参数即可,不需要在编译。

preparedstatement比statement要安全

如果有一条SQL语句: "select * from 表 where 用户名 = '用户名'"
Statement的SQL语句是这样写的: "select * from 表 where 用户名 = '"+ 变量值 +"'"
PreparedStatement的SQL语句是这样写的: "select * from 表 where 用户名 = ?" 然后对应?赋值
这样我们就发现输入 "aa' or '1' = '1"
Statement是将这个和SQL语句做字符串连接到一起执行
PreparedStatement是将 "aa' or '1' = '1" 作为一个字符串赋值给?,做为"用户名"字段的对应值,显然这样SQL注入无从谈起了.

实现机制不同,注入只对SQL语句的准备(编译)过程有破坏作用,而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,不再需要对SQL语句进行解析,准备,因此也就避免了SQL注入问题.











原创粉丝点击