1.依赖注入和控制反转的区别:
控制反转:解决对象创建的问题(对象创建交给别人)
依赖注入:在创建完对象后,对象的关系的处理就是依赖注入(通过set方法依赖注入)
2.ArrayList和LinkList的区别:
a.ArrayList是实现了基于动态数组的数据结构,LinkList基于链表的数据结构
b.对于随机访问get和set ArrayList要优于LinkList 因为LinkList要移动指针
c.对于新增和删除操作add和remove, LinkList要占优势,因为ArrayList要移动数据
3.union和union all的区别:union表示两个集合中相同的只能取一个,而union all表示两个集合中相同的,都能取出来
4.delete,truncate和drop的区别:
a.delete是DML,可回滚,可带where,相对慢,内容无,结构有
b.truncate是DDL,不可回滚,不可带where,相对中,内容无,结构有
c.drop是DDL,不可回滚,不带where,相对快,内容无,结构无,可以带purge关键字,闪回 二回滚
5.rownum和rowId的区别:
a.Rownum在表结构的中是看不见的,只能在select中明确写在rownum方可显示,与不同的表绑定在一起,每张表都配有的rownum,每张表的rownum可以相同,表亡,rownum亡可用于Oracle分页中,是从1开始的连续,不断的数值型
b.rowId在每张表都不一样 表亡,rowId亡,它是沟通表与DBF文件的桥梁,用于索引中
6.springMVC和struts2的区别:
a.springMVC入口是servlet struts2入口是filter
b.springMVC可以是单例或多例,而struts2只能是多例的
c.springMVC以方法参数形式收集值,而struts2以类形式收集值
d.springMVC的结果是先绑定与modelAndView,再放入request域对象中,struts2的结果集先绑定到valuetrack中,再放入request域对象中
e.springMVC开发运行速度相对快 struts2运行速度相对较慢
7.JDBC的开发步骤:
a.注册驱动,加载数据库的驱动
b.通过DriverManger获取数据库的连接
c.通过Connection获取statement/preparedment
d.将sql绑定到statement/preparedment中去,准备向sql发送sql语句
e.执行sql,返回对象的结果集
f.如果以查询的话,迭代结果进行处理
g.依次关闭连接对象
8.HashTable和HashMap的区别:HashTable线程是安全的,可以做成实例变量,而HashMap线程不安全,可以作为局部变量
9.Hibernate何时不适用:
a.操作超大批量数据时不适合
b、不想占用太多的内存空间
c、不想速度慢
10、Get和Post区别:
a、get传输数据有限,不安全,会显示URL地址
b.post传输数据无限,安全,适合注册
11、TCP和UDP的区别:Tcp是安全性可靠的协议,而UDP是非安全可靠地协议
12、Hibernate和mybatis的相同点:
a、都是通过sessionFactoryBuilder由XML配置文件生成的sessionFactory,然后由sessionFactory生成session,最后由session开启事务和执行sql语句,其中sessionFactoryBuilder,sessionFactory,session的生命周期都是差不多的
b、Hibernate和Mybatis都是支持JDBC和JTA事务处理
mybatis的优点:a、可以进行更为细致的SQL优化,减少查询字段
b、mybatis容易掌握,hibernate门槛较高
hibernate的优势:a、有更好的二级缓存机制,可以使用第三方缓存 ,而mybatis本身提供的缓存机制不佳
b、hibernate的dao层开发比
mybatis简单,mybatis需要维护SQL和结果的映射
c、维护和缓存比mybatis好,对增删改查的对象的维护更加方便
d.数据库移植性很好,不同的数据库需要写不同的SQL
13、抽象类和接口:
抽象类:
1)抽象方法,只有行为的概念,没有具体的行为实现。使用abstract关键字修饰,没有方法体。子类必须重写这些抽象方法。
2)包含抽象方法的类,一定是抽象类。
3)抽象类只能被继承,一个类只能继承一个抽象类。
接口:
1)全部的方法都是抽象方法,属型都是常量
2)不能实例化,可以定义变量。
3)接口变量可以引用具体实现类的实例
4)接口只能被实现,一个具体类实现接口,必须实现全部的抽象
5)接口之间可以多实现
6)一个具体类可以实现多个接口,实现多继承现象
14、SET LIST MAP:
一、
1.Set:,无序,元素不可重复(但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)
2.List:有序,列表存储,元素可重复
3.Map:无序,元素可重复
二、
1.Set接口:有两个实现类(HashSet(底层由HashMap实现),LinkedHashSet)
2.List接口:有三个实现类(
LinkedList:基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢;
ArrayList:非线程安全的,效率高;基于数组;便于索引,但不便于插入删除
Vector:基于线程安全的,效率低;基于数组; )
3.Map接口:有三个实现类(HashMap,HashTable,LinkedHashMap)
HashMap:非线程安全,高效,支持null;
HashTable:线程安全,低效,不支持null;
LinkedHashMap:是HashMap的一个子类,保存了记录的插入顺序
SortMap接口:TreeMap,能够把它保存的记录根据键排序,默认是键值的升序排序
15、java中线程的接口是:Runnable接口,实现类是:Thread类
线程的状态:
1.新状态(线程已被创建但尚未执行;start( )尚未被调用)
2.可执行状态(线程可以执行,虽然不一定正在执行,CPU时间随时可能被分配给该线程,从而使得它执行)
3.死亡状态(正常情况下run( )返回使得线程死亡,调用stop( )或destroy( ))
4.阻塞状态(线程不会被分配CPU时间,无法执行)
与线程同步相关的方法:
1.wait( ):使一个线程处于等待(阻塞)状态,并且释放所持有的对象的锁;
2.sleep( ):使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException 异常;
3.notify( ):唤醒一个处于等待状态的线程,当然在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且与优先级无关;
4.notifyAll( ):唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争;
16、单例设计模式:
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
17、如何优化SQL语句:
- 对操作符的优化 尽量不采用不利用索引的操作符,如:in ,not in , is nul, is not null,<>等
- 对条件字段的一些优化,采用函数处理的字段不能利用索引,进行了显式或隐式的运算的字段不能进行索引,条件内包括了多个本表的字段运算时不能进行索引
- 在业务密集的SQL当中WHERE后面的条件顺序影响
- 应用ORACLE的HINT(提示)处理
- 查询表顺序的影响
18、Overload和Override的区别:
Override是重写:方法名称、参数个数,类型,顺序,返回值类型都是必须和父类方法一致的。它的关系是父子关系
Overload是重载:方法名称不变,其余的都是可以变更的。它的关系是同一个类,同一个方法名,不同的方法参数或返回值
19.&和&&区别:
&表示位运算符,表示按位与运算,而&&表示逻辑运算符,表示逻辑与and
20、collection和collections的区别:
Collection是集合类的上级接口,继承与他的接口主要是set和list
Collections是针对集合类的一个帮助类,他提供了一系列静态方法实现对各种集合的搜索,排序,线程安全化操作
21:、Strig s=new String(“xyz”);创建了几个String Object
两个 一个字符对象 一个字符对象引用对象
22、Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
Math.round(11.5)==12;Math.round(-11.5)==11
23、java中有没有goto?
Java中的保留字 现在没有在java中使用
24、数组中有没有length()这个方法?String有没有length()这个方法?
数组中没有这个方法 有length的属性,String中有length()这个方法
25:、Set里的元素是不能重复的 那么是用什么方法来区分重复是否?是用==还是equals()?他们有何区别?
是用iterator()方法来区分重复是否?equals()是判断两个set是否相等,==和equals()方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的 对象的内容和类型相配的话,返回真值
26、error和exception有什么区别?
Error表示恢复不是不可能但很困难的情况下的一种严重问题,比如说内存溢出 不可能指望程序能处理这样的情况
Exception表示一种设计或实现问题,也就是说 他表示如果程序运行正常 从不会发生的情况
27、List Set ,map是否继承collection接口?
List Set是 而map不是
28、接口是否可继承接口?抽象类是否实现接口?抽象类是否可继承实体类?
接口可以继承接口 抽象类可以实现接口,抽象类是否继承实体,但前提是实体类必须有明确的构造函数
29、构造器(constructor)是否可被重写(override)?
构造器(constructor)不能被继承 因此不能被重写,但可以被重载 overload
30、是否可以继承String类?
String类是final类 故不可以继承
31、try{}里面有一个return语句 那么紧跟在这个try后的finnally{}里的code会不会被执行 是么时候执行 在return前还是后
会执行 在return前
32、用最有效的效率的方法算出2乘以8等于几?
2<<3
33、两个对象值相同(x.eqauals(y)==true),但却有不同的hash code 这句话对吗?
不对 有相同的 hash code
不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于eqauls方法和hashCode方法是这样规定的:(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;(2)如果两个对象的hashCode相同,它们并不一定相同。当然,你未必要按照要求去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在Set集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)
34、当一个对象被当做参数传递到一个方法后 此方法可改变这个对象的属性 并返回变化后的结果 那么这里到底是值传递还是引用传递?
是值传递 java编程只有值传递参数 当一个对象实例做为一个参数被传递到方法中时,参数的值就是该对象的引用 对象的内容可以在被调用的方法中改变 但对象的引用是永远不会改变的
35、switch是否能作用在byte上 是否能作用在long上 是否能作用在String上?
Switch(expr1)中 expr1是整数表达式 因此传递给switch和case语句的参数应该是在int short char 或者byte long string都不能作用于switch
Arraylist和vector的区别?
1、Vector线程是安全的 也就是说是同步的 而ArrayList线程不安全 不是同步的
2、当需要增长时 vector默认增长为原来的一倍 而ArrayList却是原来的一半
36、String和StringBuffer的区别:
String的长度是不可变的 StringBuffer的长度是可变的 如果你对字符串中的内容操作 特别是内容要修改时 那么使用StringBuffer 如果最后需要String 那么使用StringBuffer的toString()方法
37、int和integer有什么区别?
Java提供两种不同的类型 引用类型和原始类型 int是java的原始数据类型,integer是java为int提供的封装类型 java为每个原始类型提供封装类型
38、转发和重定向的区别:
1、转发在服务器端完成的;重定向是在客户端完成的
2、转发的速度快;重定向速度慢
3、转发的是同一次请求;重定向是两次不同请求
4、转发不会执行转发后的代码;重定向会执行重定向之后的代码
5、转发地址栏没有变化;重定向地址栏有变化
6、转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成
39、报406错误两种原因:1、Jackson包没有导入 2.、后缀不能是.html 必须是.action
40、一个类中只有一个实例并且自行化向整个系统提供这个实例叫单例
41、super()和this()的区别:
super()指父类的无参构造方法,this()是指当前类的无参构造方法,两者必须写在构造方法的第一句
42、final ,finally , finalize 的区别:
Final 有最终的不可改变的意思,可以用来修饰基本数据使之成为常量,该常量只能在编译期进行修改 。
当修饰对象时,则该对象引用不能改变,但该对象本身可以做修改。
当修饰方法时,表示该方法在被继承时不能被修改,或覆盖
当修饰类时,表示该类不会别别的类继承
Finally 用于在Try-catch-finally语句中 finally 中的代码块时必须执行的
该方法用于检查对象不被运行状态的对象引用或间接地引用 finalize 当某个对象要被当做垃圾回收时,会调用finalize()方法,
43、sleep() 和wait()有什么区别?
Sleep()是线程中的一个方法,该方法用于控制自身线程的流程,当执行sleep()方法睡眠时保持对象锁
Wait()方法是object类中的一个方法,该方法用于让一个线程处于等待状态并释放对象锁,当该线程想要再次执行时需要调用notity方法唤醒此线程
44、如何获取一个目录下有多少个文件?
File f=new File(“D://”); Int count=f.list().length;
45、面向对象的三大特性:继承 封装 多态
46、JQuery九大选择器:
1、基本选择器
2、层次选择器
3、基本过滤选择器
4、内容过滤选择器
5、可见性过滤选择器
6、属性型选择器
7、子元素过滤选择器
8、表单对象属性过滤选择器
9、表单选择器
47、servlet的生命周期:
1、构造方法,2.init方法 3、service方法 4、destory方法
48、JSP的9大内置对象:request response config application session exception out page pagecontext
49、cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie
50、mysql删除重复:
Delete from test where ID not in(select ID from(select min(ID)ID from test group by aa)t)
51、MySQL分页查询:
Select * from table limit 0,2
起始行从0开始的 起始行=(当前页-1)*显示每页显示的条数
52、事物分为声明试事物和编程试事物
声明试事物表示在配置文件中配置声明 编程试事物表示在代码中直接写事物处理 提交
53、MySQL索引的概念
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。上述SQL语句,在没有索引的情况下,数据库会遍历全部200条数据后选择符合条件的;而有了相应的索引之后,数据库会直接在索引中查找符合条件的选项。如果我们把SQL语句换成“SELECT * FROM article WHERE id=2000000”,那么你是希望数据库按照顺序读取完200万行数据以后给你结果还是直接在索引中定位呢?上面的两个图片鲜明的用时对比已经给出了答案
常见的几种索引:1.普通索引
2.唯一索引
3.全文索引(FULLTEXT)
4单列索引、多列索引
5. 组合索引(最左前缀)
54、常见的MySQL锁定机制:1.行级锁定 2.页级锁定 3.表级锁定