我的面试经历
最近一直忙于找工作,面了几家公司,有些问题临场答的不好,但也对面试和笔试
中的问题和自己的回答如实的进行下记录,希望对自己未来再跳槽以及现在正在找
工作的朋友们有用。
公司一:网上清算平台/嵌入式公司
1.谈谈你对IoC的理解
答:IoC即控制反转,反转的类之间的依赖关系。通过反转,让依赖方被动地
等待外层注入被依赖的类,而不是自己去主动寻找。这样就可以为依赖方注入
不同的实现,从而使程序更加灵活,易于改动和测试。
2.SSH的适用范围?有什么缺点?
答:在原来公司业务十分复杂的大项目中,可能通过存储过程和直接用POJO开发
更加灵活。(答的不太好,应该从Struts、Spring、Hibernate逐个说,各个击破)
3.UML中的用例图和时序图都是用来做什么的?
答:一个用例图一般代表对应用户需求的一个功能描述,(有些像敏捷开发中的
用户故事,在心里想的,记不清了没有说),而时序图可以用来表示类或者组件间
的调用关系,可以清楚地看出程序是如何运行的。
4.在以前公司做过什么软件设计?写文档吗?
答:做过一些详细设计,但是原来公司比较缺乏文档。
5.接口和抽象类的区别
答:语法上接口只能有方法声明和常量,而抽象类可以有变量以及实现了的方法。
从用法上来说,接口就像契约,是一种对应用程序应该提供的功能的约定。而抽象
类是对接口的部分实现,未实现部分实际上是延迟到了子类去实现。(同时还谈了
谈以前用过的适配器模式)
6.用过的比较复杂的设计模式
答:最复杂的用过模板模式和桥接模式组合,实现了两套继承层次间的功能自由
组合,解决了原来公司碰到的多个功能模块对应多种数据库的支持问题。
7.听过里氏代换和开闭原则吗?
答:在《Java与模式》中看到过,但现在记不住定义了。
开闭原则就是程序应该对修改开放,易于修改。
8.OOD有哪些特性?
答:封装、继承、多态。
9.谈谈你对多态的理解
答:多态是在运行时对方法的动态调用,使类可以在其各个子类间自由切换。
(答得也不太理想,如果能从方法表的角度深入说说应该会更好,能加分)
10.一个字符串末尾可能有N个空格,如何去掉它们?
答:用正则表达式直接匹配出除去某位空格后前面的字符(当时以为这道题是考正则
表达式的就这么说了,结果正则表达式的语法差一点忘记了)。用程序实现,从字符串
的末尾向前逐个字符遍历,直到第一个不是空格的字符。
公司二:互联网/游戏/移动开发公司
1.Java常见的集合类有哪些?说出几个已经同步的集合类?其他的怎样进行同步?
答:Collection接口下常用的有List接口下的ArrayList和LinkedList,以及Set接口下的
HashSet和TreeSet。Map接口下有HashMap和TreeMap,分别用数据结构中的散列表
和红黑树来实现。
同步的集合类有Vector和Hashtable,由于性能问题它们不太常用。我们一般可以用
Collections中的synchronize方法对一般集合类进行包装,使其变成线程安全的。也可以
使用concurrent包中的ConcurrentHashMap和CopyWriteArrayList等实现。
2.Struts1和Struts2的主要区别
答:从前端Servlet改成了前端Filter,有很多很有用的内置Filter;没有ActionForm了,
加入了OGNL包,像个粘合剂,将前台数据复制到POJO对象中;对J2EE的API耦合更小
了等等。
3.除了SSH,使用过哪些开源框架?
答:(答得不太好,随口说了几个apache的常用的包)。
3.JSP有哪些内置对象?
答:page、session、application。(request还有其他的out什么的都忘记说了)
4.Ajax的执行流程
答:首先在JS中通过特定浏览器的Ajax对象异步地发出请求,发出请求后立即返回,
服务器通过调用回调函数来返回结果。
5.怎样从一张表中取出前20条数据?
答:select top 20 from ... (数据库方面竟然就考了这么一道题)
6.用过MySQL没?
答:项目中没有用过,但是自己平时自学过,还在新浪的SAE上用PHP和MySQL建了
个自己的小网站。(没有项目经验只能这么说了)
公司三:外包项目公司
1.private、default、protected、public的区别
2.String和StringBuffer的区别
3.类的初始化顺序
4.wait()和sleep()的区别
5.一个线程正在执行一个对象的synchronized方法,其他线程还可以调用这个对象的
方法吗?
6.说说工厂模式和单例模式的用法和作用
7.如果两个字符串的每个字符的个数相同就认为相等,比如"aba"和"baa"是相等的。
写出伪代码实现这个方法。
总结:面试的一些感想
虽然有的公司没有要求自己带简历,面试时HR会帮着打印一份。但为了显示对面试
的重视,还是应该自己随身带着一份,以备不时之需。另外带上一本记事本、一根笔,
对方介绍公司情况、福利待遇时记一记,相信也会留下不错的印象。
大公司喜欢先笔试考基础,然后再复试面人,而小些的公司直接面试。外包的公司
不分大小都比较重视软件设计、UML以及文档编写方面的经验。所以复习时除了基础
知识,也要对这些周边的知识全面复习(时间允许的话)。
比较详细的Java复习计划:
(1)Core Java: Collection, IO, Thread, Socket
(2)J2EE: Servlet/JSP, Struts, Spring, Hibernate, MyBatis
(3)Web: Ajax, jQuery
(4)SQL: SQLServer, Oracle (order, group, join)
(5)JVM: classloader, gc, optimized
(6)Linux: shell, perl
(7)Design pattern/UML
(8)Algorithm: string, sort, tree
一直也没碰到对技术要求比较高的公司,几乎没有碰到任何算法实现、JVM优化的问题。
但不能掉以轻心,还要认真复习!愿每个人都能去上自己心仪的公司!