31:
讲一个项目的亮点?应该答小论文
多线程如何实现? 3种方法
线程池中最大线程数和核心线程数的区别?
死锁是怎么产生的?如何在代码上避免死锁产生。
lt:
字符串批量删除的算法题(就是笔试题)
int indexOf(String str, int fromIndex)
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
public static int countStr(String str1,String str2){ int index=0; int count=0; while((index=str1.indexOf(str2,index))!=-1){ index = index+str2.length(); count++; } return count; }
indexOf底层是什么?让你写你怎么实现?
不用框架,JDBC时得到结果集后,ORM操作是怎么把取到的数据放到javaBean里面的。
其实很简单,就是用rs.getObject方法得到的行元素直接当做new javaBean对象构造方法的参数就是了。
ORM(Object Relationship Mapping)的基本思想
– 表结构跟类对应;表中字段和类的属性对应;表中记录和对象对应;
– 让javabean的属性名和类型尽量和数据库保持一致!
– 一条记录对应一个对象。将这些查询到的对象放到容器中(List,Set,Map)
• 将表中的一条记录封装到Object数组中
• 将表中的一条记录封装到map中
• 将表中一条记录封装到javabean对象中
DEMO1
* 使用Object[]来封装一条记录
* 使用List<Object[]>存储多条记录
ResultSet rs ; rs = ps.executeQuery();//执行查询 while(rs.next()){ System.out.println(rs.getString(1)+"--"+rs.getDouble(2)+"--"+rs.getInt(3)); //一个Object数组封装了一条记录的信息!这样即使连接中断也能从object数组获得信息 Object[] objs= new Object[3];//一维数组长度为3个元素
//是3个元素分别放的是姓名,薪水和年龄 objs[0]= rs.getString(1); objs[1] = rs.getObject(2); objs[2] = rs.getObject(3); list.add(objs);//这样一个循环插入一个一维obj数组 }
刚才是用Objiect数组封装一条记录,由于一条记录装了3个元素,所以是Object[3]
接下来我们用Map封装一条记录 那是id为键,其他为值吗?那是有很多值了??
呃。。。他这一条是map自己put了3个元素不一样的key和用rs.getObject方法取3个元素各自取得的值。。。
* 使用Map来封装一条记录
* 使用List<Map>,Map<Map>存储多条记录
lt的问题题解在这儿。。。
接下来采用将表中一条记录封装到javabean对象中(工作中用的比较多,但是会有ORM的框架帮着去做,比如hebnate,mybatis帮着去做
首先要针对表名去建立相应的对象、字段对应属性
然后就和前面一样,用rs.getOblect得到了一行中的每个元素数据,直接当成参数传入构造方法参数
Emp.java 和 Dept.java 写上setget和构造器(javabean实体类先建好)
新建demo03.java
import java.sql.*; import java.util.*; /*** * 使用Javabean对象来封装一条记录 * 使用List<Javabean>存储多条记录 * @author Administrator * */ public class Demo03 { public static void test01(){ Connection conn = JDBCUtil.getMysqlConnection(); PreparedStatement ps = null; ResultSet rs = null; Emp emp = null; try { ps = conn.prepareStatement("select empname,salary,age from emp where id=?"); ps.setObject(1, 1); rs = ps.executeQuery(); while(rs.next()){ // System.out.println(rs.getString(1)+"--"+rs.getDouble(2)+"--"+rs.getInt(3)); emp = new Emp(rs.getString(1),rs.getDouble(2),rs.getInt(3));//构造器 new对象 前面是new obj数组 和new map } } catch (SQLException e) { e.printStackTrace(); }finally{ JDBCUtil.close(rs, ps, conn); } System.out.println(emp.getEmpname()+"-"+emp.getSalary()+"-"+emp.getAge()); } public static void test02(){ Connection conn = JDBCUtil.getMysqlConnection(); PreparedStatement ps = null; ResultSet rs = null; List<Emp> list= new ArrayList<Emp>(); try { ps = conn.prepareStatement("select empname,salary,age from emp where id>?"); ps.setObject(1, 1); rs = ps.executeQuery(); while(rs.next()){ Emp emp = new Emp(rs.getString(1),rs.getDouble(2),rs.getInt(3)); list.add(emp);//把前面的存住了不会被循环覆盖掉 } } catch (SQLException e) { e.printStackTrace(); }finally{ JDBCUtil.close(rs, ps, conn); } //遍历List,就是遍历这一行的多列的信息 for(Emp emp:list){ System.out.println(emp.getEmpname()+"-"+emp.getSalary()+"-"+emp.getAge()); } } public static void main(String[] args) { test02(); } } 运行结果: 马士兵-40000.0-13 万欣-20000.0-14 裴新-30000.0-15