编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。 答:代码如下: public static void split(String source,int num) throws Exception { int k=0; String temp=""; for (int i = 0; i <source.length(); i++) { byte[] b=(source.charAt(i)+"").getBytes(); k=k+b.length; if(k>num) { break; } temp=temp+source.charAt(i); } System.out.println(temp); }
15、Java编程,打印昨天的当前时刻 public class YesterdayCurrent{ public void main(String[] args){ Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -1); System.out.println(cal.getTime()); } } 16、文件读写,实现一个计数器 public int getNum(){ int i = -1; try{ String stri=""; BufferedReader in = new BufferedReader(new FileReader(f)); while((stri=in.readLine())!=null){ i = Integer.parseInt(stri.trim()); } in.close(); }catch(Exception e){ e.printStackTrace(); } return i; } public void setNum(){ int i = getNum(); i++; try{ PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(f,false))); out.write(String.valueOf(i)); //可能是编码的原因,如果直接写入int的话,将出现java编码和windows编码的混乱,因此此处写入的是String out.close() ; }catch(Exception e){ e.printStackTrace(); } }
17、指出下面程序的运行结果。 class A{ static{ System.out.print("1"); } public A(){ System.out.print("2"); } } class B extends A{ static{ System.out.print("a"); } public B(){ System.out.print("b"); } } public class Hello{ public static void main(String[] ars){ A ab = new B(); //执行到此处,结果: 1a2b ab = new B(); //执行到此处,结果: 1a2b2b } } 注:类的static 代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对于类的加载,首先要执行其基类的构造,再执行其本身的构造 18、抽象类和接口的区别? (1)接口可以被多重implements,抽象类只能被单一extends (2)接口只有定义,抽象类可以有定义和实现 (3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见) 当功能需要累积时用抽象类,不需要累积时用接口。 19、什么是类的返射机制? 通过类(Class对象),可以得出当前类的fields、method、construtor、interface、superClass、modified等,同是可以通过类实例化一个实例、设置属性、唤醒方法。Spring中一切都是返射、struts、hibernate都是通过类的返射进行开发的。 20、类的返射机制中的包及核心类? java.lang.Class java.lang.refrection.Method java.lang.refrection.Field java.lang.refrection.Constructor java.lang.refrection.Modifier java.lang.refrection.Interface 21、得到Class的三个过程是什么? 对象.getClass() 类.class或Integer.type(int) Integer.class(java.lang.Integer) Class.forName(); 22、如何唤起类中的一个方法? 产生一个Class数组,说明方法的参数 通过Class对象及方法参数得到Method 通过method.invoke(实例,参数值数组)唤醒方法 23、如何将数值型字符转换为数字(Integer,Double)? Integer.parseInt(“1234”) Double.parseDouble(“123.2”) 24、如何将数字转换为字符? 1+”” 1.0+”” 25、如何去小数点前两位,并四舍五入。 double d=1256.22d; d=d/100; System.out.println(Math.round(d)*100); 26、如何取得年月日,小时分秒? Calendar c=Calendar.getInstance(); c.set(Calendar.YEAR,2004); c.set(Calendar.MONTH,0); c.set(Calendar.DAY_OF_MONTH,31); System.out.println(c.get(Calendar.YEAR)+" "+(c.get(Calendar.MONTH)+1)+" "+c.get(Calendar.DAY_OF_MONTH)); 27、如何取得从1970年到现在的毫秒数 Java.util.Date dat=new Date(); long now=dat.getTime(); 28、如何获取某个日期是当月的最后一天? 当前日期加一天,若当前日期与结果的月份不相同,就是最后一天。
public class Untitled1 { public static void writeFileChar() throws Exception { FileWriter f = new FileWriter("c:\\aa.txt"); InputStream is = System.in; int c = is.read(); while (((char) c) != 'x') { f.write(c); c = is.read(); } f.close(); is.close(); }
public static void writeFileString() throws Exception { FileWriter f = new FileWriter("c:\\aa.txt"); BufferedWriter bwr=new BufferedWriter(f); BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String c = bf.readLine(); while (!c.equals("stop")) { bwr.write(c+"\r\n"); c = bf.readLine(); } bwr.close(); f.close(); bf.close(); }
public static void readFileChar() throws Exception { FileReader f = new FileReader("c:\\aa.txt"); int c = f.read(); while (c!=-1) { System.out.print((char)c); c=f.read(); } f.close(); }
public static void readFileString() throws Exception { BufferedReader bf = new BufferedReader(new FileReader("c:\\aa.txt")); String c = bf.readLine(); while (c!=null) { System.out.println(c); c=bf.readLine(); } bf.close(); }
} executeUpdate() dml ddl 6、执行存储过程用那一个类,如何操作输出参数?(操作) CallableStatement c=con. prepareCall ("{call getCustomerName(?,?)}"); c.setString(1,"1"); c.registerOutParameter(2,java.sql.Types.VARCHAR); c.execute(); c.getString(2); 8、可能会让你写一段Jdbc连Oracle的程序. Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:accp","system","system"); 9、Class.forName的作用?为什么要用? 注册一个数据库驱动,将驱动加载到当前的JVM中。 10、Jdo是什么? JDO是Java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API的使用)。这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,JDO很灵活,因为它可以在任何数据底层上运行。JDBC只是面向关系数据库(RDBMS)JDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强。(o/rMapping工具 集合处理) 11、在ORACLE大数据量下的分页解决方法。一般用截取ID方法,还有是三层嵌套方法 create or replace package myPack is type c_type is ref cursor; procedure getPage(v_sql varchar2,pageSize number,pageIndex number,c out c_type); end;
create or replace package body myPack is procedure getPage(v_sql varchar2,pageSize number,pageIndex number,c out c_type) is pageTotal int:=0; pageFirstRow int:=0; pageLastRow int:=0; rowTotal int:=0; begin execute immediate 'select count(*) from ('||v_sql||')' into rowTotal; pageTotal:=ceil(rowTotal/pageSize); if(pageIndex<1) then raise_application_error(-20001,'页数不能小于1'); end if; if(pageIndex>pageTotal) then raise_application_error(-20001,'页数太大,不能读取'); end if; pageFirstRow:=(pageIndex-1)*pageIndex+1; pageLastRow:=pageFirstRow+pageSize; open c for ' select * from '||v_sql||' where rownum<'|| pageLastRow||'minus select * from '||v_sql ||' where rownum<'||pageFirstRow; end; end; Web编程Jsp&Servlet技术 1、简单说说tomcat的配置? JAVA_HOME=JDK的根目录 CATALINA_HOME=tomcat的根目录
4 学习Java有哪些好的参考书? 答:作者首先推荐Thinking in Java,中文名《Java编程思想》,有中文版。该书第一章介绍了很多面向对象的编程思想,作为新手应当认真阅读。除此以外,O´relly出版社和Wrox出版社的书也不错。作者本人不喜欢大陆作者的书。也许你觉得英文太难,但是网上大多数资料都是英文的。另外,你需要经常查阅API,而那也是英文的。
19 我怎么从键盘输入一个int/double/字符串? 答:java的I/O操作比C++要复杂一点。如果要从键盘输入,样例代码如下: BufferedReader cin = new BufferedReader( new InputStreamReader( System.in ) ) ; String s = cin.readLine(); 这样你就获得了一个字符串,如果你需要数字的话再加上: int n = Integer.parseInt( s ); 或者 double d = Double.parseDouble( s );
45 我想将一个父类对象转换成一个子类对象该怎么做? 答:强制类型转换。如 public void meth(A a) { B b = (B)a; } 如果a实际上并不是B的实例,会抛出ClassCastException。所以请确保a确实是B的实例 .
46 其实我不确定a是不是B的实例,能不能分情况处理? 答:可以使用instanceof操作符。例如 if( a instanceof B ) { B b = (B)a; } else { ... }
47 我在方法里修改了一个对象的值,但是退出方法后我发现这个对象的值没变! 答:很可能你把传入参数重赋了一个新对象,例如下列代码就会造成这种错误: public void fun1(A a) //a是局部参数,指向了一个外在对象。 { a = new A(); //a指向了一个新对象,和外在对象脱钩了。如果你要让a作为传 出变 量,不要写这一句。 a.setAttr(attr);//修改了新对象的值,外在对象没有被修改。 } 基本类型也会出现这种情况。例如: public void fun2(int a) { a = 10;//只作用于本方法,外面的变量不会变化。 } 48 java能动态分配数组吗? 答:可以。例如int n = 3; Language[] myLanguages = new Language[n];
50 我还想让数组的长度能自动改变,能够增加/删除元素。 答:用顺序表--java.util.List接口。 你可以选择用ArrayList或是LinkedList,前者是数组实现,后者是链表实现。 例如: List list = new ArrayList(); 或是 List list = new LinkedList(); 。
51 什么是链表?为什么要有两种实现? 答:请补习数据结构。
52 我想用队列/栈。 答:用java.util.LinkedList。
53 我希望不要有重复的元素。 答:用集合--java.util.Set接口。例如:Set set = new HashSet()。
54 我想遍历集合/Map。 答:用java.util.Iterator。参见API。
55 我还要能够排序。 答:用java.util.TreeSet。例如:Set set = new TreeSet()。放进去的元素会自动排序。 你需要为元素实现Comparable接口,还可能需要提供equals()方法,compareTo()方法,hashCode()方法。
1.Components(组件) 2.Render Kits 3.Renderers 4.Value Binding Expressions(值绑定表达式) 5.Event Model(事件模型) 6.Extensibility(可扩展性) 7.Managed Beans(Dependency Injection 依赖注入) 8.POJO Action Methods 9.JSF is the standard Java-based web app framework (JSF是java web应用程序的标准框架) 10.There's only one Struts(只有一个Struts)
10.There's only one Struts(只有一个Struts) Struts 是一个开源产品,然而JSF是一个标准。这个细节常常被新的JSF学习者忽略,其实这是显而易见的,因为我们有多个JSF的实现。虽然JSF还很不成熟,但是我们已经有了2个优秀的JSF实现可以选择:Sun的参考实现和Apache的MyFaces。另一方面,我们只有一个Struts。
9.JSF is the standard(JSF是标准) J2EE 5.0要提供一个JSF的实现,这表明JSF不久将会无处不在。这可能与你无关,但是和工具供应商密切相关。现在大概有50个java web应用程序框架,工具供应商不会情愿去支持一个特别的框架,但是他们会毫不犹豫的去支持一个标准。而且不止供应商,开源项目也会迅速的聚集在JSF的四周,争先恐后的去实现相同的功能。比如说,直到我们去实现本质上和Shale的Tapestry差不多的视图的时候,我才知道Facalets。(从长远来看,我相信这种冗余是件好事,会给我们带来好处)
8.POJO Action Methods Struts的行为是和 Struts的API绑定在一起的,但是JSF的行为方法可以在POJPO中实现。这意味着你不用在表单和模型对象之间实现一个多余的行为层。顺便说一下,在JSF里面没有行为对象,行为在模型对象中实现。但是也请注意一点:如果你愿意你也可以生成与JSF独立的行为对象。在Struts里面,你有 Form Bean和Action Bean。Form Bean包含数据而Action Bean包含逻辑。OO狂会想去合并前2者,在Struts你办不到。但是在JSF中,你可以分开数据和逻辑,也可以合并到一个对象中,一切由你决定。
Select SN,SD FROM S Where [S#] IN( Select [S#] FROM SC RIGHT JOIN C ON SC.[C#]=C.[C#] GROUP BY [S#] HAVING COUNT(*)=COUNT([S#]))
5. 查询选修了课程的学员人数
--实现代码:
Select 学员人数=COUNT(DISTINCT [S#]) FROM SC
6. 查询选修课程超过5门的学员学号和所属单位
--实现代码: Select SN,SD FROM S Where [S#] IN( Select [S#] FROM SC GROUP BY [S#] HAVING COUNT(DISTINCT [C#])>5) 题目2
问题描述: 已知关系模式: S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名 C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师 SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩
1. 找出没有选修过“李明”老师讲授课程的所有学生姓名
--实现代码:
Select SNAME FROM S Where NOT EXISTS( Select * FROM SC,C Where SC.CNO=C.CNO AND CNAME='李明' AND SC.SNO=S.SNO)
2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
--实现代码:
Select S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE) FROM S,SC,( Select SNO FROM SC Where SCGRADE<60 GROUP BY SNO HAVING COUNT(DISTINCT CNO)>=2 )A Where S.SNO=A.SNO AND SC.SNO=A.SNO GROUP BY S.SNO,S.SNAME
3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
--实现代码:
Select S.SNO,S.SNAME FROM S,( Select SC.SNO FROM SC,C Where SC.CNO=C.CNO AND C.CNAME IN('1','2') GROUP BY SNO HAVING COUNT(DISTINCT CNO)=2 )SC Where S.SNO=SC.SNO
4. 列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号
--实现代码: Select S.SNO,S.SNAME FROM S,( Select SC1.SNO FROM SC SC1,C C1,SC SC2,C C2 Where SC1.CNO=C1.CNO AND C1.NAME='1' AND SC2.CNO=C2.CNO AND C2.NAME='2' AND SC1.SCGRADE>SC2.SCGRADE )SC Where S.SNO=SC.SNO
5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩
--实现代码:
Select S.SNO,S.SNAME,SC.[1号课成绩],SC.[2号课成绩] FROM S,( Select SC1.SNO,[1号课成绩]=SC1.SCGRADE,[2号课成绩]=SC2.SCGRADE FROM SC SC1,C C1,SC SC2,C C2 Where SC1.CNO=C1.CNO AND C1.NAME='1' AND SC2.CNO=C2.CNO AND C2.NAME='2' AND SC1.SCGRADE>SC2.SCGRADE )SC Where S.SNO=SC.SNO