1、Integer a=new Integer(3);Integer b=new Integer(3);System.out.println(a==b);输出结果是?
答:false
2、String比较
/**
* 多个String引用指向同一个字面量时,在堆内存当中只有一个Java对象
* 如果调用String的构造函数给String类型的引用赋值,那么每调用一次构造函数,在堆内存当中就会生成一个String对象
* 所以如果s1和s2都是同一个字面量赋值,那么无论是用==比较,还是用equals函数比较,都会返回true
* 如果s1和s2都是使用构造函数生成的对象,并且传入构造函数参数的字面量相等,那么用==比较会返回false,用equals 比较就会返回true
*/
String s1 = new String("bdqn");
String s2 = s1;
String s3 = "bdqn";
System.out.println(s1 == s2);//true s1和s2
System.out.println(s1 == s3);//false
System.out.println(s1.equals(s2));//true
System.out.println(s1.equals(s3));//true
4、用synchronized和ThreadLocal的区别?
相同点
都是为了解决多线程中同一变量的访问冲突问题。
不同点
- ThreadLocal是一个java类,synchronized是Java的一个保留字;
- 在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量。这时该变量是多个线程共享的,使用同步机制要求程序慎密地分析什么时候需要锁定某个对象,什么时候释放对象锁等繁杂的问题,程序设计和编写难度相对较大。
而ThreadLocal则从另一个角度来解决多线程的并发访问。ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。
概括起来说,对于多线程资源共享的问题,同步机制仅提供一份变量,让不同的线程排队访问,而ThreadLocal为每一个线程都提供了一份变量,因此可以同时访问而互不影响。
5、假设有一个池塘,里面有无穷多的水。现有2个空水壶,容积分别为5升和6升。问题是如何只用这2个水壶从池塘里取得3升的水。
答:
将6升壶装满倒入5升壶,6升壶剩1升水,将5升壶倒空,将这1升水倒入5升壶;
将6升壶装满倒入5升壶,6升壶剩2升水,将5升壶倒空,将这2升水倒入5升壶;
将6升壶装满倒入5升壶,6升壶剩3升水,将5升壶倒空,此时即得到6升壶中的3升水。
6、用最高效的方法,输出计算:1+2+…100的结果。
答:for循环。
7、下一个数字是什么?5、6、7、8、10、11、14、?
答:15
分成两组看
5、7(5+2)、10(7+3)、14(10+4)
6、8(6+2)、11(8+3)
所以,下一个是11+4=15
8、在oracle数据库中需要查询出前8条记录的sql语句怎么写?
select * from emp where rownum<=8;
9、Hql分页查询10-20条数据的代码?
Session session = HibernateSessionFactory.getSession();
Query q=session.createQuery("from table");
q.setFirstResult(10);
q.setMaxResults(11); //取出11条数据
List list=q.list();
10、什么是UUID?
通用唯一识别码,它是在一定的范围内唯一的机器生成的标识符,只能由计算机生成,非人工指定,非人工识别。
UUID uuid = UUID.randomUUID();
11、sql:查询出成绩全部合格的学生信息
答:
12、上中下左中右九个点,一笔画出四条直线连接9个点。
答:伞形。
13、JDBC的步骤
Connection connection = null;
Statement stmt = null;
ResultSet rs = null;
try {
//(1)Class.forName()加载驱动
Class.forName("com.mysql.jdbc.Driver");
//(2)DriverManager.getConnection(URL,用户名,密码)获得数据库连接 (Connection)
connection = DriverManager.getConnection("jdbc:mysql://10.0.0.194:3306/news","root","bdqn");
//(3)获得Statement对象,执行SQL语句
String sql = "select * from news_detail";
stmt = connection.createStatement();
rs = stmt.executeQuery(sql);
//(4)处理执行结果(ResultSet),
while(rs.next()){
int id = rs.getInt("id");
String title = rs.getString("title");
String summary = rs.getString("summary");
String content = rs.getString("content");
String author = rs.getString("author");
Timestamp createDate = rs.getTimestamp("createDate");
System.out.println(id + "\t" + title + "\t" + summary + "\t"+ content + "\t" + author + "\t" + createDate);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//释放资源
try {
rs.close();
stmt.close();
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
14、MyBatis的定义?
MyBatis 是支持普通sql查询、存储过程和高级映射的优秀持久层框架。
15、MyBatis 与 JDBC 相比,有哪些优点?
- 减少了代码量;
- SQL代码从程序代码中彻底分离,可重用;
- 增强了项目中的分工;
- 增强了移植性;
- 最简单的持久化框架;
- 架构级性能增强
16、MyBatis 与 Hibernate 比较
MyBatis | Hibernate |
---|---|
POJO与sql语句进行映射 | POJO与数据库表进行映射 |
运行期间不自动生成sql | 自动生成sql |
自动化程度低,需手动映射 | 自动化程度高,映射配置 |
灵活程度高 | API复杂,灵活性低 |
开发人员需熟练掌握sql语句 | 开发人员不必关注sql语句 |