我的面试经历


最近一直忙于找工作,面了几家公司,有些问题临场答的不好,但也对面试和笔试
中的问题和自己的回答如实的进行下记录,希望对自己未来再跳槽以及现在正在找
工作的朋友们有用。


公司一:网上清算平台/嵌入式公司

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优化的问题。
但不能掉以轻心,还要认真复习!愿每个人都能去上自己心仪的公司!

原文地址:https://www.cnblogs.com/xiaomaohai/p/6157815.html