最好要会英文口语
面试时会问到:
(1)Threadlocal的了解
http://blog.csdn.net/qjyong/archive/2008/03/08/2158097.aspx
笔试中考的比较多的
(2)基础(线程,静态变量的使用)
(3)单例模式
public class Singleton{
private Singleton(){}
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}
(4)两个list,放的都是Integer,里面的数据从小到大排列。现放把两个合并到一个list中,按照从小到大排列。写出你认为的最快的方法。
1、
package test;
import java.util.ArrayList;import java.util.List;
public class Test { public List MergeList(List list1,List list2){ List mList = new ArrayList(); int j = 0; for(int i = 0;i < list1.size(); i++){ for (; j < list2.size(); j++) { if ((Integer)list1.get(i) < (Integer)list2.get(j)) { mList.add(list1.get(i)); break; } else { mList.add(list2.get(j)); } } } if(j != (list2.size()-1)){ for(; j < list2.size(); j++){ mList.add(list2.get(j)); } } return mList; } public static void main(String[] args) { Test test = new Test(); List list1 = new ArrayList(); List list2 = new ArrayList(); list1.add(0, 12); list1.add(1, 23); list1.add(2, 45); list1.add(3, 56); list2.add(0, 11); list2.add(1, 24); list2.add(2, 67); list2.add(3, 78); long a=System.currentTimeMillis(); System.out.println(test.MergeList(list1,list2).toString()); System.out.println("/r<br>执行耗时 : "+(System.currentTimeMillis()-a)); }}
2、
package test;
import java.util.ArrayList;import java.util.List;
public class Test1 {
public List MergeList(List list1, List list2) {
List mList = new ArrayList(); int j = 0; if((Integer) list1.get(list1.size()) > (Integer) list2.get(list2.size())){ for (int i = 0; i < list1.size(); i++) { for (; j < list2.size(); j++) { if ((Integer) list1.get(i) < (Integer) list2.get(j)) { mList.add(list1.get(i)); break; } else { mList.add(list2.get(j)); } } } }else{ for (int i = 0; i < list2.size(); i++) { for (; j < list1.size(); j++) { if ((Integer) list2.get(i) < (Integer) list1.get(j)) { mList.add(list2.get(i)); break; } else { mList.add(list1.get(j)); } } } } return mList; }
/** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Test test = new Test(); List list1 = new ArrayList(); List list2 = new ArrayList(); list1.add(0, 12); list1.add(1, 23); list1.add(2, 45); list1.add(3, 56); list2.add(0, 11); list2.add(1, 24); list2.add(2, 67); list2.add(3, 78); long a=System.currentTimeMillis(); System.out.println(test.MergeList(list1, list2).toString()); System.out.println("/r<br>执行耗时 : "+(System.currentTimeMillis()-a)); }
}
这两个我想到的,如果有更好的,希望哪位大侠可以提供下,小弟在这里先谢谢了。
(5)HashMap和Hashtable的区别
二者都实现了Map接口,是将惟一键映射到特定的值上;
主要区别:
(1)HashMap没有排序,允许一个null键和多个null值,而Hashtable不允许;
(2)HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因为contains方法容易让人引起误解;
(3)Hashtable继承自Dictionary类,HashMap是Java1.2引进的Map接口的实现;
(4)Hashtable是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法大致一样,所以性能不会又很大差异。
(6)JDBC连接
1、
public void add() throws Exception(){
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123456";
Connection con = null;
Statement stmt = null;
try{
Class.forName("com.myslq.jdbc.Driver");
con = DriverManager.getConnection(url,user,password);
stmt = con.createStatement();
String sql = "insert into user values(1111,'123',12)";
stmt.execute(sql);
}finally{
stmt.close();
con.close();
}
}
2、
public class JDBC(){
public static Connection getConnection(){
String url = "jdbc:mysql://127.0.0.1:3306/test";
String user = "root";
String password = "123456";
try{
Class.forName("com.mysql.jdbc.Driver");
return DriverManager.getConnection(url,user,password);
}catch(ClassNotFoundException e){
//TODO 找不到驱动
}catch(SQLException e){
//TODO 创建连接异常
}
return null;
}
public void get() throws SQLException(){
String sql = "SELECT id,name FROM user WHERE id=?";
PreparedStatement pstmt = null;
Connection con = getConnection();
try{
pstmt = con.prepareStatement(sql);
pstmt.setInt(1,1212);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
System.out.print(rs.getString("id"));
System.out.print(":");
System.out.print(rs.getString("name") + "/r/n");
}
rs.close();
pstmt.close();
}finally{
try{
con.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
}
(7)什么时候用抽象类和接口类
接口就跟U盘的USB接口一样,可以插拔。。当你要完成一个功能的时候,两个事物联系不大,可以用接口。抽象类着重继承关系。如果两个东西可以看成继承关系,用抽象类。你要弄一个有警报器的门。你可以定义一个抽象door类,门有close和open的方法。也定义到这个抽象类里。但这个警报器,跟门一般关系不大。。所以,你可以用接口.然后这个带警报器的门就可以是继承door这个类并实现警报器接口。--摘自百度问答
(8)事务是什么或你怎么理解事务
事务是由相关操作构成的一个完整的操作单元。两次连续成功的COMMIT或ROLLBACK之间的操作,称为一个事务。在一个事务内,数据的修改一起提交或撤销,如果发生故障或系统错误,整个事务也会自动撤销。
附加:hibernate延迟加载什么时候用到
比如部门ENTITY和员工ENTITY,部门与员工1对多,如果lazy设置为 false,那么只要加载了一个部门的po,就会根据一对多配置的关系把所有员工的po也加载出来。但是实际上有时候只是需要用到部门的信息,不需要用到员工的信息,这时员工po的加载就等于浪费资源。如果lazy设置为true,那么只有当你访问部门po的员工信息时候才回去加载员工的po的信息。
