《上汽集团Java开发笔试题目.docx》由会员分享,可在线阅读,更多相关《上汽集团Java开发笔试题目.docx(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 上汽集团Java开发笔试题目 简述String和StringBuffer的区分。 String 对一串字符进展操作。不行变。一旦被创立,就不能修改它的值。 StringBuffer 也是对一串字符进展操作,但是可变类。 运行时特别(RuntimeException)与一般特别有何不同? 一般特别是可捕获到的。运行时特别是不行预知的特别。 Sleep()和wait()有什么区分? sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,把执行时机给其他线程,但是监控状态依旧保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait().会释放锁 实现多线程有几种方法? 三种
2、, 1.继承Thread类,重写run函数 2.实现Runnable接口,重写run函数 3.实现Callable接口,重写call函数 简述线程的根本状态及状态之间的关系。 Thread.ThreadState 属性供应一个位掩码,用它指示线程的当前状态。一个线程至少总是处于 ThreadState 枚举中一个可能状态,并且可以同时处于多个状态。 一旦线程由于调用 Thread.Start 而离开 Unstarted 状态,则它将永久无法返回到 Unstarted 状态。同样,线程也永久无法离开 Stopped 状态。 什么是线程同步,何照实现线程的同步? 当两个或多个线程需要访问同一资源时
3、,它们需要以某种挨次来确保该资源某一时刻只能被一个线程使用的方式称为同步。要想实现同步操作,必需要获得每一个线程对象的锁。获得它可以保证在同一时刻只有一个线程访问对象中的共享关键代码,并且在这个锁被释放之前,其他线程就不能再进入这个共享代码。此时,假如还有其他线程想要获得该对象的锁,只得进入等待队列等待。只有当拥有该对象锁的线程退出共享代码时,锁被释放,等待队列中第一个线程才能获得该锁,从而进入共享代码区。 JSP或Servlet中的forward和redirect有什么区分? forward是效劳器内部重定向,程序收到恳求后重新定向到另一个程序,客户机并不知道;redirect则是效劳器收到
4、恳求后发送一个状态头给客户,客户将再恳求一次,这里多了两次网络通信的来往。redirect 是送到客户端后再一次 request , 所以资料不被保存. 简述JDBC调用数据库的根本步骤。 1,加载驱动 2,创立连接 3,猎取语句对象 4,执行sql语句 5,假如是查询,还可以使用结果集 6,关闭连接 7,捕获和处理特别 简述Servlet的生命周期。 Servlet被效劳器实例化后,容器运行其init方法,恳求到达时运行其service方法,service方法自动派遣运行与恳求对应的do方法(doGet,doPost)等,当效劳器打算将实例销毁的时候调用其destroy方法。 二、算法(总共
5、20分) 请列举几种排序算法,并用JAVA实现快速排序算法。(6分) 冒泡排序,快速排序,shaker排序,堆排序。 public void quick(Integer str) if (str.length 0) /查看数组是否为空 _quickSort(str, 0, str.length 1); public void _quickSort(Integer list, int low, int high) if (low high) int middle = getMiddle(list, low, high); /将list数组进展一分为二 _quickSort(list, low,
6、middle 1); /对低字表进展递归排序 _quickSort(list, middle + 1, high); /对高字表进展递归排序 public int getMiddle(Integer list, int low, int high) int tmp = listlow; /数组的第一个作为中轴 while (low high) while (low high listhigh tmp) high; listlow = listhigh; /比中轴小的记录移到低端 while (low high listlow tmp) low+; listhigh = listlow; /比中
7、轴大的记录移到高端 listlow = tmp; /中轴记录到尾 return low; /返回中轴的位置 用Java实现二叉树前序遍历、中序遍历和后序遍历。(8分) public class Tree private int data;/ 数据节点 private Tree left;/ 左子树 private Tree right;/ 右子树 public Tree(int data) this.data = data; this.left = null; this.right = null; /* * 创立二叉树,返回根结点 */ public static Tree createTre
8、e(int input) Tree root = null; Tree temp = null; for (int i = 0; i input.length; i+) / 创立根节点 if (root = null) root = temp = new Tree(inputi); else / 回到根结点 temp = root; / 添加节点 while (temp.data != inputi) if (inputi = temp.data) if (temp.left != null) temp = temp.left; else temp.left = new Tree(inputi
9、); else if (temp.right != null) temp = temp.right; else temp.right = new Tree(inputi); return root; /* * 前序遍历 */ public static void preOrder(Tree tree) if (tree != null) System.out.print(tree.data + “”); preOrder(tree.left); preOrder(tree.right); /* * 中序遍历 */ public static void midOrder(Tree tree) i
10、f (tree != null) midOrder(tree.left); System.out.print(tree.data + “”); midOrder(tree.right); /* * 后序遍历 */ public static void posOrder(Tree tree) if (tree != null) posOrder(tree.left); posOrder(tree.right); System.out.print(tree.data + “”); /* * 求二叉树的深度 */ public static int length(Tree tree) int dep
11、th1; int depth2; if(tree = null) return 0; /左子树的深度 depth1 = length(tree.left); /右子树的深度 depth2 = length(tree.right); if(depth1depth2) return depth1+1; else return depth2+1; public static void main(String args) int input = 4, 2, 6, 1, 3, 5, 7,8,10 ; Tree tree = createTree(input); System.out.print(“前序遍
12、历:“); preOrder(tree); System.out.print(“n中序遍历:“); midOrder(tree); System.out.print(“n后序遍历:“); posOrder(tree); 三、阅读代码,并回答下列问题(6分) Public String listToString( Vector strList) String str = new String(); SortedSet set = new TreeSet(); set.addAll(strList); for(Iterator iter=set.iterator(); iter.hasNext()
13、; String currStr = (String) iter.next(); Str += currStr + “;”; return str; 问题1: 这段代码完成什么功能?假如输入列表“To” , “SAIC” , “Welcome”,输入结果是什么? 数组元素拼接。TreeSet是按字母挨次存储的,结果是:SAIC;To;Welcome; 问题2这段代码中有什么地方有错误或者可以改善的地方吗? 错误:for(Iterator iter=set.iterator(); iter.hasNext();后面缺少“)” 改善:拼接到最终时,最终一个分号应去掉。 四、设计模式(总分10分,每
14、题5分) 编程实现设计模式:Singleton(单例模式)。 class Singleton private static Singleton s; private Singleton() public static Singleton getSigleton() if(s=null)s=new Singleton(); return s; 画出抽象工厂(Abstract Factory)的UML类图。 五、数据库(总分20分) SOL查询语句的左外连接、右外连接、全外连接、内联接之间的区分。 左外连接的结果集包括LEFT OUTER子句中指定的左表的全部行,而不仅仅是连接列所匹配的行 右外连
15、接是左向外连接的”反向连接。将返回右表的全部行。 全外连接返回左表和右表中的全部行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。假如表之间有匹配行,则整个结果集行包含基表的数据值。 内连接使用比拟运算符依据每个表共有的列的值匹配两个表中的行。 举例说明GROUP BY 和HAVING 子句的意义和使用方法。 每个部门有多少人 就要用到GROUP BY select DepartmentID as 部门名称, COUNT(*) as 个数 from BasicDepartment group by DepartmentID 显示每个地区的总面积.仅显示那些面积超过100000
16、0的地区。 SELECT region, SUM(area) FROM bbc GROUP BY region HAVING SUM(area)1000000 IN和 EXISTS的区分(4分) 比方in(1,2) 就是 = 1 or = 2的一种简洁写法,所以一般在元素少的时候使用IN,假如多的话就用exists指定一个子查询。 编写SQL语句 为治理岗位业务培训信息,建立3个表。 S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号、 学员姓名、所属单位、学员年龄 C(C#,CN)C#,CN分别代表课程编号,课程名称。 SC(S#,C#,G)S#,C#,G 分别代表学号,课程编号
17、、学习成绩 问题1:使用标准嵌套SQL语句查询选修课程名称为“税收根底“的学员学号和姓名。 Select ssc s#, ssc.sn from c left join ( select s.*,sc.c# From sc Left join s on s.s#=sc.s# ) as ssc on ssc.c#=c.c# where =税收根底 问题2:查询选修课程为“C2的全部学员的学号、姓名、所属单位、成绩,并根据所属单位升序、成绩降序排列。 select sc.c#,s.sn,s.sd,sc.g From sc Left join s on s.s#=sc.s# where c. c#=
18、 C2 order by s.sd asc,sc.g.desc 问题3:查询全部学员选修课程的数量,列出学号、姓名、所选课程数,并根据课程数降序排列。 Select sc.s#,s.sn, sc.count ( select count(s#) as count,s# from sc group by sc.s# ) sc Left join s on s.s#=sc.s# order by sc.count desc 问题4:查询选修课程数超过5次学员的学号、姓名、所属单位、所选课程数,并根据学号升序排列。 SELECT S#, SN, SD, (SELECTCOUNT(DISTINCT C
19、#)FROM SC Where S#=s. S# ) as count FROM S WHERE S# IN( SELECT S# FROM SC GROUP BY S# HAVING COUNT(DISTINCT C#)5) 六、框架(总分30分) JSF 以JSF为例简述MVC设计模式。 简述JSF恳求处理三命周期 1. 恢复视图 2. 应用恳求的值;处理验证 3. 更新模型值;处理大事 4. 调用程序;处理大事 5. 进展响应;处理大事 JSF中的Backing Bea是干什么用的? Backing bean定义了页面上的UI组件的属性和处理规律。每一个backing bean的属性对应
20、一个组件或者组件的值。Backing bean同时定义了一组执行组件功能的方法,比方验证组件的数据,处理组件触发的大事,当组件activate时处理与导航相关的操作。 JSF中的Converter是干什么用的? 输入变换:在用户提交时对用户输入值进展变换 输出变换:在画面显示前对显示值进展变换 JSF中的Validator是干什么用的? 对用户输入的数据进展验证。 简述Value-change Events、Action Events、Data Mooel Events、Phase Events。 值转变大事,动作大事,数据模型大事,阶段大事 JSF Request Processing Li
21、fecycle 的六个阶段。 回复画面(Restore View) 套用申请值(Apply Request Values) 执行验证(Process Validations) 更新模型值(Update Model Values) 唤起应用程序(Invoke Application) 绘制回应(Render Response) CommandButton 的immediate属性起什么作用? JSF视图组件在取得恳求中该取得的值之后,即马上处理指定的大事,而不再进展后续的转换器处理、验证器处理、更新模型值等流程。 的用途 将封装在内的元件作为一个元件来对待 的用途 想要放入非JSF元件,例如简洁
22、的模板(template)文字,那么就需要使用 标签来处理。 Spring 简述依靠注入(Dependency Injeciton,DI)和掌握反转(Inversion ofControl,IOC )的根本概念。 依靠注入DI是一个程序设计模式和架构模型, 一些时候也称作掌握反转,尽管在技术上来讲,依靠注入是一个IOC的特别实现,依靠注入是指一个对象应用另外一个对象来供应一个特别的力量,例如:把一个数据库连接已参数的形式传到一个对象的构造方法里面而不是在那个对象内部自行创立一个连接。掌握反转和依靠注入的根本思想就是把类的依靠从类内部转化到外部以削减依靠 应用掌握反转,对象在被创立的时候,由一个
23、调控系统内全部对象的外界实体,将其所依靠的对象的引用,传递给它。也可以说,依靠被注入到对象中。所以,掌握反转是,关于一个对象如何猎取他所依靠的对象的引用,这个责任的反转。 简述AOP根本概念(Advice、Joinpoint、Polntcut、Aspect)以及在Spring AOP实现的特点和局限。 Advice:用于定义拦截行为 JoinPoint:供应访问当前被通知方法的目标对象、代理对象、方法参数等数据 Polntcut:捕获全部的连接点在指定的方法执行中,包括执行方法本身 Aspect:切入点指示符用来指示切入点表达式目的。 Spring Autorwiring by name 和Autowiring by type是什么意思? byType是通过类型在“MyIdProviderManager”类里找属性名字为“myIdProviderManager”的对象,然后为其注入 byName是通过名称找的。 【上汽集团Java开发笔试题目】