1:Arraylist和Linkedlist的区别?
ArrayList、LinkedList、Vector和Stack是List的四个实现类,其中Vector是基于JDK1.0,虽然实现了同步,但是效率低,已经不用了,Stack继承Vector
区别:
- ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构
- 对于随机访问get和set,ArrayList要优于LinkedList,LinkedList不支持高效的随机访问
- ArrayList适合查找,LinkedList适合增删
2:重载与重写有什么区别?
override(重写)
1.方法名、参数、返回值相同。
2.子类方法不能缩小父类方法的访问权限。
3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4.存在于父类和子类之间。
5.方法被定义为final不能被重写。
overload(重载)
1.参数类型、个数、顺序至少有一个不相同。
2.不能重载只有返回值不同的方法名。
3.存在于父类和子类、同类中。
3:&和&&有什么区别?
&按位与----a&b是把a和b都转换成二进制数然后再进行与的运算
不管前面的条件是否正确,后面都执行
&&逻辑与---a&&b就是当且仅当两个操作数均为 true时,其结果才为 true;(短路功能)
前面条件正确时,才执行后面,不正确时,就不执行,效率高
4:接口和抽象类有什么区别?
抽象类(abstract class):
1:abstract 关键字修饰,并且没有方法体
2:抽象类不能直接创建实例
3:抽象类只能被继承,一个具体类继承一个抽象类,必须实现所有抽象方法
接口(interface):
1:实现接口的一定要实现接口里定义的所有方法
2:接口可以实现多重继承
区别:
1:抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用
2:一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类
3:接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法
4:抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的
5:抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法
5:写出JDBC操作数据库的步骤?
1:加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
2:创建连接
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "1111", "1111");
3:创建语句
PreparedStatement ps = con.prepareStatement("select * from user");
4:执行语句
ResultSet rs = ps.executeQuery();
5:处理结果
while(rs.next()) {
rs.get.....(“”);
}
6:关闭资源
finally {
if(con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
1:HashTable和HashMap有什么区别?
- HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口
- 主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高Hashtable
- HashMap允许将null作为一个entry的key或者value,而Hashtable不允许
- 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是
2:创建多线程的方式有几种?分别是什么?线程死锁是如何产生的?如何防止线程死锁现象?
方式:
继承Thread、实现 Runnable 接口
产生:
- 一个资源每次只能被一个进程使用
- 一个进程因请求发生阻塞时,依然对已获得的资源保持不放
- 进程已经获得资源使用权,但是一直未使用
- 同一个进程,频繁的获取资源的优先使用权,一直未释放
防止:
加锁顺序(线程按照一定的顺序加锁)
加锁时限(线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁)
死锁检测(一般是将所有的锁存放于map对象中,检测map中的锁)
3:String, StringBuffer, StringBuilder 的区别?
- 运行速度快慢为:StringBuilder > StringBuffer > String
- (String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的)
- StringBuilder是线程不安全的,而String、StringBuffer是线程安全的
4:TCP和UDP的区别?哪个是三次握手协议?
TCP稳定性较高,但效率低
UDP通讯相反,效率较高,但稳定性较差
5:JSP的常用指令有哪些?
三个编译指令为:page、include、taglib
七个动作指令为:jsp:forward、jsp:param、jsp:include、jsp:plugin、jsp:useBean、jsp:setProperty、jsp:getProperty
1:DI有几种方式、分别是什么,你常用的是哪种方式?
1:Setter方法
2:构造器
3:接口注入
注解实现注入(常用)
2:Mybatis中$和#在xml中取值有什么不同?
mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}
#方式能够很大程度防止sql注入,$方式无法防止Sql注入
$方式一般用于传入数据库对象,例如传入表名
#{}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号
一般能用#的就别用$
3:Session和Cookie有什么区别?
Cookie存在客户端、session数据放在服务器上
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行修改
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能大于3K
4:GET和POST请求的区别?
GET:
1:从服务器上获取数据,一般不能使用在写操作接口
2:由URL所限制,GET方式传输的数据大小有所限制,传送的数据量不超过2KB
3:请求的数据会附加在URL之后,以?分隔URL和传输数据,多个参数用&连接
4:安全性差
POST:
1:向服务器提交数据,一般处理写业务
2:POST方式传送的数据量比较大,一般被默认为没有限制
3:安全性高
4:请的求的数据内容放置在HTML HEADER中
5:转发(forward)和重定向(redirect)的区别?
1:效率上
转发(forward) > 重定向(redirect)
2:显示上
重定向(redirect):显示新的URL
转发(forward):地址栏不变
3:数据上
转发(forward):可以共享request里面的数据
重定向(redirect):不能
4:请求次数
重定向(redirect)是两次
转发(forward)是一次