java面试题集锦2


www.bjpowernode.com/ JAVA面试题集2 1.数据库,比如100用户同时来访,要采取什么技术解决;(JDBC) 答:可采用连接池。 2.String, StringBuffer StringBuilder的区别。(Core Java) 答:String是一组不可变的unicode编码的字符序列; StringBuffer的长度是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使 用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法;线程安全; StringBuilder是从 JDK 5 开始,为StringBuffer该类补充了一个单个线程使用的等价类;通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。 3.写一个函数要求输入一个字符串和一个字符长度,对该字符串进行分隔;(Core Java) 答:函数代码如下: public String[] split(String str, int chars){ int n = (str.length()+ chars - 1)/chars; String ret[] = new String[n]; for(int i=0; i ;多对多的标签为:; 2)sessionFactory的缓存为hibernate的二级缓存; 3)Hibernate的事务实际上是底层的JDBC Transaction的封装或者是JTA Transaction的封装;默认情况下使用JDBCTransaction。 18.JSP中两种 include方式的区别;(Web) 答:动态include用jsp:include动作实现,它总是会检查所含文件中的变化,适合用于包含动态页面,并 且可以带参数;静态include用<%@include %>指令实现,适用于包含静态页面 19.javascipt的优缺点和内置对象;(Web) 答:关于javascipt: 1)优点:简单易用,与Java有类似的语法,可以使用任何文本编辑工具编写,只需要浏览器就可执行程 序,并且事先不用编译,逐行执行,无需进行严格的变量声明,而且内置大量现成对象,编写少量程序 可以完成目标; 2)缺点:不适合开发大型应用程序 3)javascript有11种内置对象: Array,String,Date,Math,Boolean,Number,Function,Global,Error,RegExp,Object 20.get和post的区别?(Web) 答:form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET 和POST方法。二者主要区别如下: 1)Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据; 2)Get将表单中数据的按照variable=value的形式,添加到action所指向的URL 后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体 中,按照变量和值相对应的方式,传递到action所指向URL; 3)Get是不安全的,因为在传输过程,数据被放在请求的URL中, Post的所有操作对用户来说都是不可见的; 4)Get传输的数据量小,这主要是因为受URL长度限制,而Post可以传输大量 的数据,所以在上传文件只能使用Post; 5)Get限制form表单的数据集必须为ASCII字符,而Post支持整个ISO10646 字符集; 6)Get是form的默认方法。 22.写出你熟悉的开源框架以及各自的作用。 答:框价:hibernate,spring,struts. www.bjpowernode.com/ Hibernate主要用于数据持久化; Spring 的控制反转能起到解耦合的作用; Struts 主要用于流程控制; 服务器类:Apache Tomcat Jboss等 25.JSP标签的作用?如何定义;(Web) 答:作用:分离jsp页面的内容和逻辑; 业务逻辑开发者可以创建自定义标签; 封装业务逻辑; 可重用并且易维护; 易于手工修改、易于工具维护; 提供简洁的语法; 定义: 写标签处理器; 写tld文件; 讲标签处理器和tld文件放到同一个包里面; 把jsp页面和标签库配置部署在一起。 26.写一个自定义标签;(Web) 答:代码如下: import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class TimeTag extends SimpleTagSupport{ private boolean isServer = true; public void setServer(boolean isServer){ this.isServer = isServer; } public void doTag() throws JspException, IOException{ JspWriter out = getJspContext().getOut(); if(isServer) { out.println(new java.util.Date()); }else{ out.println(""); } } } 27.写出熟悉的JSTL标签;(Web) 答:如下: 28.说出struts中的标签;(Web) 答:如下: www.bjpowernode.com/ 29.如何从form表单中得取checkbox的值;(Web) 答:可在页面把checkbox的name属性取同一个,value属性取每个条目的id,后台用getParamter(“name”) 能取到checkbox的一组值。 30.简述HttpSession的作用、使用方法,可以用代码说明。(时间3分钟)(Web) 答:HttpSession中可以跟踪并储存用户信息,把值设置到属性中,有2个方法:setAttribute(),getAttrribute (); 例如:在一个方法中用session.setAttribute(“student”,student);在session中设置一个属性名为student,值为 一个名为student的对象。而后可在同一session范围内用getAttribute(“student”)取出该属性,得到student 对象。 31.找出程序中的问题,并写出理由(5分钟)(Web) import javax.servlet.*; import javax.servlet.http.*; import javax.sql.*; import javax.naming.*; import java.sql.*; import java.io.IOException; public class TestServlet extends HttpServlet{ private Connection conn; protected void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException,ServletException{ try{ Class.forName(“COM.ibm.db2.jdbc.app.DB2Driver”); conn = DriverManager.getConnection(“jdbc:db2:mydb”,”db2”,”db2”); PreparedStatement stmt = conn.prepareStatement("delete from mytb where id=?"); for (int i=0;i<5;i++) { stmt.setInt(1,i); stmt.executeUpdate(); } conn.close(); } catch (Exception ex) { ex.printStackTrace(); } } } 答:其中doGet方法的访问限制修饰符应该为public,因为protected修饰的方法只能被 同包中的类或其子类才可访问,这将导致web容器无法调用该方法。 34.UML分析设计中常用的几种图;(UML) www.bjpowernode.com/ 答:用例图,静态图(包括类图、对象图、和包图)、行为图、交互图(顺序图、合作图),实现图。 35.你对软件开发中迭代的含义的理解;(UML) 答:软件开发中,各个开发阶段不是顺序执行的,应该是并行执行,也就是跌代的意思。这样对于开发 中的需求变化,及人员变动都能得到更好的适应。 36.统计一篇文章中单词个数(c++); 答:代码如下: #include #include using namespace std; int main(){ ifstream fin("t.txt"); if(!fin){ cout<<"can't open file"<>buf; if(fin2.eof()) break; count++; } cout<<"The number of the words is : "< playerNum*step){ break; } for(int i=1;i playerNum)break; if(counter%step==0){ System.out.print(i + " "); p[counter/step-1]=i; } counter+=1; } } System.out.println(); } public static void main(String[] args) { play(10, 7); } } 3.抽象方法可以是native?可以是同步的吗?(Core Java) 答:都不能。 4.JDBC,Hibernate分页怎样实现?(JDBC) 答:方法分别为: 1) Hibernate的分页: Query query = session.createQuery("from Student"); query.setFirstResult(firstResult);//设置每页开始的记录号 query.setMaxResults(resultNumber);//设置每页显示的记录数 Collection students = query.list(); 2) JDBC的分页:根据不同的数据库采用不同的sql分页语句 例如: Oracle中的sql语句为: "SELECT * FROM (SELECT a.*, rownum r FROM TB_STUDENT) WHERE r between 2 and 10" 查询从记录号2到记录号10之间的所有记录 6.请写出spring中I0C的三种实现机制。(Spring) 答:三种机制为:通过setter方法注入、通过构造方法注入和接口注入。 7.EJB的事务是如何实现的?何时进行回滚;(EJB) 答:是通过使用容器或Bean自身管理事务的;当产生一个系统异常时容器就自动回滚事务。 8.写一个方法1000的阶乘。(C++) 答:C++的代码实现如下: www.bjpowernode.com/ #include #include #include using namespace std; class longint { private: vector iv; public: longint(void) { iv.push_back(1); } longint& multiply(const int &); friend ostream& operator<<(ostream &, const longint &); }; ostream& operator<<(ostream &os, const longint &v) { vector::const_reverse_iterator iv_iter = v.iv.rbegin(); os << *iv_iter++; for ( ; iv_iter < v.iv.rend(); ++iv_iter) { os << setfill('0') << setw(4) << *iv_iter; } return os; } longint& longint::multiply(const int &rv) { vector::iterator iv_iter = iv.begin(); int overflow = 0, product = 0; for ( ; iv_iter < iv.end(); ++iv_iter) { product = (*iv_iter) * rv; product += overflow; overflow = 0; if (product > 10000) { overflow = product / 10000; product -= overflow * 10000; } *iv_iter = product; } if (0 != overflow) { iv.push_back(overflow); } return *this; } int main(int argc, char **argv) { longint result; int l = 0; if(argc==1){ cout << "like: multiply 1000" << endl; exit(0); } sscanf(argv[1], "%d", &l); for (int i = 2; i <= l; ++i) { result.multiply(i); } cout << result << endl; www.bjpowernode.com/ return 0; } 9.怎么处理XML的中文问题;(XML) 答:示例代码如下: package xml; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; public class DOMTest { private String outFile = "c:\\test.xml"; public static void main(String args[]) { DOMTest test = new DOMTest(); try { DocumentBuilder builder = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); Document doc = builder.newDocument(); Element root = doc.createElement("Tarena"); Element zhang = doc.createElement("张"); zhang.appendChild(doc.createTextNode("我是张丽芳")); root.appendChild(zhang); doc.appendChild(root); Transformer transformer = TransformerFactory.newInstance() .newTransformer(); //设置xml的编码 transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312"); //设置缩近格式 transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.transform(new DOMSource(doc), new StreamResult(test.outFile)); } catch (Exception e) { System.out.println(e.getMessage()); } } } 在main(String[] args)方法内是否可以调用一个非静态方法? 答案:不能 1. 同一个文件里是否可以有两个public类? 答案:不能 2. 方法名是否可以与构造器的名字相同? 答案:可以。 public class Test { public Test(String iceboy) www.bjpowernode.com/ { System.out.println(iceboy); } public void Test(String iceboy) { System.out.println(iceboy); } public static void main(String[] args) { Test a = new Test("abc");//输出“abc” a.Test("iceboy");//输出“iceboy” } } 4. 初始化了一个没有run()方法的线程类,是否会出错? 答案:不会。 第一种方法:直接继承Thread类。 public class Test {public static void main(String[] args) { ThreadClass t = new ThreadClass(); t.start(); System.out.println("end");//输出“end” } } class ThreadClass extends Thread //Thread类已经实现了空的run()方法。 { } 第二种方法:实现Runnable接口 public class Test {public static void main(String[] args) {ThreadClass t = new ThreadClass(); Thread thread = new Thread(t); thread.start(); System.out.println("end"); } } class ThreadClass implements Runnable { ublic void run() //必须有此方法否则编译报错。它是Runnable接口中的抽象方法。 {System.out.println("Threads"); } } 3. 局部内部类是否可以访问非final变量? 答案:不能访问局部的,可以访问成员变量(全局的)。 class Out {private String name = "out.name"; void print() { final String work = "out.local.work";//若不是final的则不能被Animal 使用. int age=10; www.bjpowernode.com/ class Animal //定义一个局部内部类.只能在print()方法中使用. //局部类中不能使用外部的非final的局部变量.全局的可以. { public void eat() { System.out.println(work);//ok //age=20;error not final System.out.println(name);//ok. } } Animal local = new Animal(); local.eat(); } } 4. 选择语句case中,允许使用的值有哪些? 答案:int,short,char,byte(都在int范围之内,且是整数) 5. Math,String是不可继承的。(final类) Instanceof 后面跟的应该是OBJECT。 构造器可以是私有的。(private) =与==意义是完全不同的。一个是赋值,一个是等于。 全局变量可以不进行初始化,如果使用一个局部变量,则这个局部变量要被初始化。 6. 在try-catch-final块中的退出语句。 public class Test { public static void main(String[] args) { int a=1; try {a=a/0; }catch(Exception e) { System.out.println("catch"); return;//当return时,finally中的语句会执行。 //System.exit(0);//若用上这句,finally中的语句不会执行。直接返回,退出程序。 } finally //当没有System.exit(0);时,无论是否发生异常它都会执行。 {System.out.println("finally"); } } } 注: try-catch-final块的顺序不能调换。 7. 下面都是正确的main方法签名。 public static void main(String[] args) public static final void main(String[] args) static public void main(String[] args) static public synchronized void main(String[] args) static public abstract void main(String[] args)//错误 8. if(-0.0 == 0.0)是相等还是不等? 答案:相等。 www.bjpowernode.com/ 10.一个抽象类是否可以没有抽象方法? 答案:可以。 11.RandomAccessFile 类继承Object,并且实现了DataInput和DataOutput接口。 答案:正确 13.class Child extends Parents{} class Parents{} 是否可以这样声明类,在一个文件中? 答案:可以。无所谓的。 14. 数组,无论是当前的,还是类等级的,都会被初始化。 String 是被初始化为 null,不是空字符。 null,““,” “,都是不同的。 “continue”只能在一个循环里(如for,do,while),它不能在case语句中出现。 Primitive(int,char,long等)数组是不能互相赋值的,即使它们本身可以。 一个Constructor可以抛出任何异常。 初始化块是按照声明的顺序执行的。 所有关于 NaN(Not a Number) 和 non-NaN 的比较,都返回false. 这条很重要。 ==会产生编译错误,如果两边类型不匹配的话。 equals() 返回 false 如果对象类型不同,但不产生 编译错误。 15.Java成员变量默认初始化的值。 成员变量类型 取值 byte-0 short-0 int-0 long-0L char-'\u0000' float-0.0F double-0.0D boolean-false 所有引用类型 null 16. integer和long 操作 /和% 的话, 可能会抛出ArithmeticException,比如除0。但是 float与 double不会,即使是除以0。 double a=0;a=a/0;则a等于NaN。 17.普通内部类不可以拥有静态变量,但静态内部类可以。 File类没有 任何 处理文件内容的方法。 InputStream 和 OutputStream 是 抽象类, DataInput 和 DataOutput是 接口。DataInputStream实现了DataInput接口。 25.数组转换问题。 Object[] object = new Person[2]; Person [] person = new Person [3]; person = (Person [])object;//可以转换 int[] i = new int[2]; long[] l = new int[3]; i = (long[])l;//不可以转换 26.用socket通讯写出客户端和服务器端的通讯,要求客户发送数据后能够回显相同的数据。 Server.java:源代码 import java.net.*; import java.io.*; class Server { public Server() {BufferedReader br = null; PrintWriter pw = null; www.bjpowernode.com/ try { ServerSocket server = new ServerSocket(8888);//建立服务器端 Socket socket = server.accept();//监听客户端 //得到该连接的输入流 br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //得到该连接的输出流 pw = new PrintWriter(socket.getOutputStream(),true); //先读后写 String data = br.readLine(); System.out.println(data);//输出到控制台 pw.println(data);//转发给客户端 }catch(Exception e) {e.printStackTrace(); } finally {try{//关闭读写流 br.close(); pw.close(); }catch(Exception e) {} } } public static void main(String[] args) {Server server = new Server(); }} Client.java:源代码 import java.net.*; import java.io.*; class Client {public Client() {BufferedReader br = null; PrintWriter pw = null; try { Socket socket = new Socket("localhost",8888);//与服务器建立连接,服务器要先启 //得到Socket的输入与输出流 br = new BufferedReader(new InputStreamReader(socket.getInputStream())); pw = new PrintWriter(socket.getOutputStream(),true); //先写后读 pw.println("Client:你好!"); String data = null; while(true) { data = br.readLine(); if(data!=null) break; } System.out.println(data); }catch(Exception e) { e.printStackTrace(); www.bjpowernode.com/ } finally { try { br.close(); pw.close(); }catch(Exception e) {} } } public static void main(String[] args) { Client c = new Client(); } } 40.数组是不是基本类型? 答案:不是。 43.”==”与equal有何区别? 答案:“==”比较的是内存地址,equal比较的是内容本身。 53.文件读写的基本类有哪些? 答案:FileInputStream,FileOutputStread,File,IOException等。 题目1:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、41 2345等,要求:"4"不能在第三位,"3"与"5"不能相连. 解决思路:强化题目,用1、2、2、3、4、5这六个数字排列“递增”序列。其他要求不变。 算法思路:显然是递归,初始序列122345,先从末两位(45)变化(45,54),然后末三位(345) ... 直到最后六位.怎样解决重复问题?很简单,由于是递增序列,每生成新序列可与前一生成序列比较, 如<放弃当前序列。当然有更好效率,如预先预测。代码如下: class test { // 当前固定部分 private String CurFixPart; private String PreGenNum; public static void main(String[] args) { test t=new test(); t.GenControll("122345"); } // 调整字符串s位置pos字符到最前 private String shift(String s, int pos) { String newStr; if (s.length()>pos+1) newStr=s.substring(pos, pos+1) +s.substring(0, pos) +s.substring(pos+1); else newStr=s.substring(pos) +s.substring(0, pos); www.bjpowernode.com/ return newStr; } protected int Validate(String newNum) { String newGenNum=CurFixPart+newNum; if (Integer.valueOf(newGenNum)<=Integer.valueOf(PreGenNum)) return 0; if (newGenNum.substring(2,3).equals("4") || (newGenNum.indexOf("35")!=-1) || (newGenNum.indexOf("53")!=-1)) return 0; PreGenNum=newGenNum; System.out.println(newGenNum); return 0; } public void GenControll(String Base) { PreGenNum="0"; CurFixPart=""; GenNext(Base, 0); } void GenNext(String varPart, int curPos) { if (varPart.length()==2) { Validate(varPart); Validate(shift(varPart, 1)); return; } // Next Layer String newGen=shift(varPart, curPos); String SavedFixPart=CurFixPart; CurFixPart=CurFixPart+newGen.substring(0,1); GenNext(newGen.substring(1), 0); CurFixPart=SavedFixPart; // 同层递增 if (curPos==varPart.length()-1) return; GenNext(varPart, curPos+1); } } 1.编写一个四舍五入的函数,要求可以保留到小数后面的任意一位(如3.1415927保留到小数点后第3 位后得到3.142) 2.编写一个函数(不需要写出完整的类定义),计算两个日期(java.util.date)对象间相隔的天数,代码量 不的超过10行。 1. public String numberDeal(double num,int n){ NumberFormat nf=NumberFormat.getInstance(); nf.setMaximumFractionDigits(n); nf.setMinimumFractionDigits(n); return nf.format(num); www.bjpowernode.com/ } 2. public long dateDivide(Date begin,Date end){ long begintime=begin.getTime(); long endtime=end.getTime(); long value=endtime-begintime; if(value%(1000*60*60*24)==0) return value/(1000*60*60*24); else return (value/(1000*60*60*24))+1; }
还剩19页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

activemq

贡献于2017-03-22

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf