用友笔试面试题.doc_第1页
用友笔试面试题.doc_第2页
用友笔试面试题.doc_第3页
用友笔试面试题.doc_第4页
用友笔试面试题.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用友在清华的笔试题(java)HiAll求职社区,大学生求职第一社区,是广大应届生毕业生或在校生求职、交流、互动的论坛。 1. 选择题:String s1 = new String(test1);String s2 = new String(test2); 判断if(s1 = s2);if(s1.equals(s2);2.智力题:一逻辑学家误入某部落,被囚于牢狱,酋长欲意放行,他对逻辑学家说:“今有两门,一为自由,一为死亡,你可任意开启一门。现从两个战士中选择一人负责解答你所提的任何一个问题(Y/N),其中一个天性诚实,一人说谎成性,今后生死任你选择。”逻辑学家沉思片刻,即向一战士发问,然后开门从容离去。逻辑学家应如何发问?他可以向其中任何一个助手问到:如果我去问另一个助手这个是不是自由之门,他会怎么回答?假如他问的这个助手是说真话的,那么另一个助手就是说假话的了,假话助手会说死亡之门才是自由之门,真话助手会如实反映这一情况假如他问的这个助手是说假话的,那么另一个助手就是说真话的,真话助手尽管会说出真的自由之门,假话助手也会把他的话反过来说因此,不管怎么着,逻辑学家所得到的答案,肯定是死亡之门,于是他走另外那一扇就对了 3.一个农场,27头牛6天就把草吃尽,23头牛9天就吃完,那么如果是21头牛要几天吃完?(草每天是会生长的)摘录条件: 27头 6天 原有草+6天生长草 23头 9天 原有草+9天生长草 21头 ?天 原有草+?天生长草 小学解答:解答这类问题关键是要抓住牧场青草总量的变化。设1头牛1天吃的草为1,由条件可知,前后两次青草的问题相差为239-276=45。为什么会多出这45呢?这是第二次比第一次多的那(9-6)3天生长出来的,所以每天生长的青草为453=15 现从另一个角度去理解,这个牧场每天生长的青草正好可以满足15头牛吃。由此,我们可以把每次来吃草的牛分为两组,一组是抽出的15头牛来吃当天长出的青草,另一组来吃是原来牧场上的青草,那么在这批牛开始吃草之前,牧场上有多少青草呢? (27-15)6=72 那么:第一次吃草量276=162第二次吃草量239=207 每天生长草量453=15 原有草量(27-15)6=72或162-156=72 21头牛分两组,15头去吃生长的草,其余6头去吃原有的草那么726=12(天)初中解答:假设原来有的草为x份,每天长出来的草为y份,每头牛每天吃草1份。 那么可以列方程: x+6y=276 x+9y=239 解得x=72,y=15 若放21头牛,设n天可以吃完,则: 72+15n=21n n=124.如果一个对象的一个方法用了synchronize关键字,那么其他的线程可以访问该对象的其它方法吗? HiAll求职社区5.一个方法把一个对象作为参数,在这个方法里改变了这个对象的属性,那么该方法是传引用还是传值?6.说说单例的作用,并画出类图;7.说说你对foreign key的理解;8.写sql语句,具体不记得了,主要就是条件查询和子查询;9.算法题:写出求二叉树的深度的算法实现; int depth(bitree *t) /*求二叉树深度的算法*/ int dep1, dep2;if (t = NULL) return 0;/*空树*/else dep1 = depth(t-lchild); /*遍历左子树*/ dep2 = depth(t-rchild); /*遍历右子树*/ if (dep1 dep2) /*取深度大者*/ return (dep1 + 1); else return (dep2 + 1); -(不一定正确)10.算法题:一个装有1-10000并且被打乱的数组,从中任意抽出一个数,写一个算法求出这个数,要求用最有效率的算法;11.算法题:写出快速排序的算法实现。Void QuickSort(DataType a,int left,int right) /对元素aleft.aright进行排序,使个元素按排序码非递减有序, If( leftright) /元素序列长度大于1时 Int pivotpos=Partition( a,left,right); /划分 QuickSort( a, left,pivotpos-1); /对左侧子序列施行同样处理 QuickSort( a,pivotpos+1, right); /对右侧子序列施行同样处理;用友笔经1.策略模式的介绍,类图2.归并排序的实现 Void merge( DataType L 1, DataType L 2, int left, int mid ,int right) /L 1left .mid与L 1 mid+1.right是两个有序表,将它们归并成一个有序表 L 1 left. .right For ( int k=left; k=right ;k+) L2k=L1k; Int s1=left ,s2=mid +1, t=left; /s1,s2是检测指针,t是存放指针 While ( s1 =mid & s2=right) /两个表都未检测完,两两比较 If ( L2s1=L2s2) L1 t+=L2 s1+; Else L1 t+ =L2 s2+; While ( s1=mid ) L1 t+=L2 s1+; /若第一个表未检测完,复制 While( s2= right) L1 t+=L2 S2+; /若第二个表未检测完,复制 3.深度树的实现4.一个班级里有左撇子,也有右撇子,也有既不是左撇子又不是右撇子,我们把他们记做既是左撇子又是又撇子,一个班级有七分之一的人是左撇子,有九分之一的人是右撇子,推理这个班里有二分之一以上的人是右撇子5.知道的排序和复杂度,应用场景6.数据库表DEPT_CGH (部门)ID DEPTCODE(部门编号) EFFECTIVEDATE(生效时间) REASON(原因)1 101 2006/6/30 成立2 102 2009/10/21 成立3 103 2008/10/20 成立4 101 2006/10/21 变更5 101 2008/11/24 变更6 101 2007/5/24 变更(1) 查询生效时间是2008/9/9日的部门信息注:deptcode 具有唯一性以最后的变更为准大学生求职招聘论坛 (2)查询变更次数大于2次的部门 排序的程序是我在书上抄的用友公司Java面试题(含答案)1.Hashtable和HashMap有什么区别? a.Hashtable是继承自陈旧的Dictionary类的,HashMap继承自AbstractMap类同时是Java 1.2引进的Map接口的一个实现。 b.也许最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。这就意味着, 虽然你可以不用采取任何特殊的行为就可以在一个 多线程的应用程序中用一个Hashtable, 但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法, 它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。 这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中), 而且同步增加了很多处理费用。 c.第三点不同是,只有HashMap可以让你将空值作为一个表的条目的key或value。 HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。 这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。 如果有必要,用containKey()方法来区别这两种情况。 d.HashMap去掉了Hashtable的contains方法,保留了containsValue和containsKey方法 e.Hashtable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数 2.你怎么理解MVC模式? MVC是SUN早期提出的model2开发模式,强制的把视图控制和模型层分开 不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性 3.SQLServer中左联接查询用left join,Oracle中用什么? 左连接:select(nvl(a.c,0)-nvl(b.c,0) from a,b where a.id(+)=b.id 右连接:select(nvl(a.c,0)-nvl(b.c,0) from a,b where a.id=b.id(+) 自连接:select(nvl(a.c,0)-nvl(b.c,0) from a,b where a.id(+)=b.id(+) 说明:加号写在左就是左连接,写在右就是右连接,看加号的方法来定 4.SQLServer中的数据库,在Oracle中对应的是什么? 表空间 5.如果SQLServer中有两个数据库,那么让你把这两个数据库对应到Oracle中,你应该怎么做? 在Oracle中建一个用户,对应两个表空间 6.有两个页面a.jsp和b.jsp,要从a.jsp传值到b.jsp有几种方法?分别是什么? a:最常用的方法是用form中的text,,然后在b.jsp页面中这样获取 String username=request.getParameter(username); b:直接在Url地址栏里面输入第一个页面的地址,在后加问号,然后把要传的参数及值写在后面,如有多个用&隔开,然后在下一页面用 request.getParameter(参数名)来获取,例如:http:/localhost:8080/a.jsp?username=admin&password=111 在b.jsp中可用这样获取:String username=request.getParameter(username);String username=request.getParameter(password); c:在form中放hidden,如:,获取方法同上 说明:传值的方法有很多种,以上是最常用最简单的几种方式,当然,如果传的值有中文的话,需另做处理 6.有三个页面,a.jsp,b.jsp和c.jsp,流程是:a.jsp-b.jsp-c.jsp,其中a.jsp中提交的数据要在c.jsp中访问,用最简单的方法 怎么做?注意不能放在session里 用隐藏表单域,即在b.jsp页面中用N个hidden把上一页面提交过来的信息保存下来,然后和当前一起提交,再到c.jsp里面获取 说明:尽量不要用session和少用session 7.jsp和servlet有什么区别? a:servlet是在java代码里面放html,jsp是在html里面放java代码(最后运行的时候服务器会把JSP解析成servlet) b:servlet是一个java类,有自己的映射,而jsp不是 说明:区别太多,请参考http:/00000000./200606/200606097/97681.htm 8.映射是什么?你怎么理解映射? 映射即别名,通过别名可以访问 9.Hibernate中:不看数据库,不看XML文件,不看查询语句,怎么样能知道表结构? 看表结构对应的类文件,比如UserInfo表对应的UserInfo.java文件 10.SQLServer支持集群吗? 支持,但是是属于热备份类型,不能做负载平衡。不过符合你的条件。 首先系统做集群,数据库文件放到磁盘阵列里,双机或多机共同访问磁盘阵列,就可以了 IIS可以做集群后负载平衡。 11.为什么要用MVC?我从JSP页面直接访问数据库不是更简单吗,为什么非要先提交到控制再做处理? MVC各施其职,互不干涉 在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化, 就只需要更改相应的层中的代码而不会影响到其它层中的代码。 有利于开发中的分工 在MVC模式中,由于按层把系统开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP, 对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。 有利于组件的重用 分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面 说明:这个好处就太多了! 12.在struts中,假设有一个对数据库中一张表的增删改查的操作,你是写一个action还是写多个action?为什么? 写一个action,让这个action继承自DispatchAction,然后在struts-config.xml中给这个action映射加一参数,parameter=method 这个在提交到这个action中时,会根据传来的参数中method的值来执行相应的action的方法,比如,http:/localhost:8080/login.do?method=doLogin 这个提交到action的时会自动找方法名叫doLogin的方法,参数返回值原来一样ActionForward 13.struts中的actionform有什么好处? struts的actionform其实不好,里面有一堆属性,虽然可以自动填充,但是你会发现,在很多情况下(比如你用到Hibernate) 你还要需要自动写一个数据库表的映射类,通常是domain.UserInfo.java,这样就和strutsform中的属性重复,所以他很多余, struts1.1版本,保留了actionform,struts1.2中已经有了新的LazyValidatorForm,但仍然保留了原有的actionform, 而在struts 2.0中已经把actionform去掉了 下面是解决方法 a: 把actionform换成DynaActionForm ,和原来不同的是在dynaActionForm可以domain.UserInfo.java的一个实例做为他的一个属性 这样你就不需要在里面写一堆的get,set方法,只是在页面上绑定稍有不同 b: 把actionform换成org.apache.struts.validator.LazyValidatorForm,这样你完全不用写你的actionform这个类,直接在xml里面做 相应配置,当然也可以加上验证框架 警告:这个问题是陷阱,实际上struts的actionform很不好,非常麻烦,用久了你会发现他其实是多余的,所以这个问题你应该说他的坏处, 和怎么把actonform去掉,请参考/2911285_d.html 14.用过Hibernate吗,用它有什么好处? Hibernate的最大的好处就是简化数据库的操作,允许你的代码以对象模式来访问数据库内容, 比如通常我们找一个User的资料需要select出所需要的资料,而通过hibnate我们可以把这个User的资料作为一个对象来看待 ,通过User.getName()或者User.getId()等操作来获得,这样就完全统一了上层JAVA或者C#等OO语言中对于数据库的非OO操作的不和谐了. 另外对于复杂的表和表之间的关联我们也不用去使用复杂的Select等SQL来操作,而使用对象可以方便获得, 比如多对多关系某用户属于的部门的名称,虽然底层数据库使用了3个表的主键关联操作, 但是我们可以通过User.getDep().getName()来简单的获得,这个就是持久化对象的好处了 说明:好处太多,只能在用的过程中慢慢体会 只能说一个字:爽 15.通常所说的web应用程序分3层,即MVC,如果我想分四层,应该怎么分? 加一个Hibernate数据持久层一. Jsp500强名企官方答疑专区 1. Jsp中type的类型有哪些?大学生求职招聘论坛 2. 写一个jsp的下拉列表,选项分别为 a b c;2011校园招聘官方交流区 3. Jsp中的传值方式。4. 动态引用jsp的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论