上班已经三年了,刚从上家公司离职(因为工资拖欠与员工福利问题),网上投了有30多封求职简历,只有4家公司打电话面试的,今天刚好是第一家。公司规模还挺大的有150多人吧,是一家私企,不过做的的时间挺久的,好像是有10年了吧。

    好了不啰嗦了说说今天的战果吧。刚到公司之后,发现前面有一个工作了六年的哥们也在等着面试,刚进去不到半个小时就出来了,据说面试效果不是很满意。接下来就是我了,没有笔试,直接来了一个技术经理进行面试,看着我的简历问了一下以前做过的项目,然后就闲聊了几句。不过总体感觉不是很好,主要是我面试前根本就没有做任何准备。

    以我以往面试的经历(老是被别人面,很悲催),先做一个笔试题之后,再根据笔试题来确定你是否合格,这家伙直接上来就面试,没有任何笔试题,搞得我有点不适应。不过话说回来,这次的面试确实暴漏了我的一些缺点,比如现在的思想观念还是以前的只注重功能的实现,还是抱着一新只要功能实现了就大功告成了的想法。这种思想是要不得的,刚毕业的话或许还可以,你工作好几年了,还不思进取,后果真的很可怕。

    就拿几道具体的面试题来举例吧!

    问题一:你做过的项目中认为最好的一个项目或者模块是什么,大概谈谈你的看法。

    问题二:现在给你一个模块你该如何进行设计呢?(主要是代码上的设计,例如高内聚低耦合)

    问题三:你的职业规划是什么呢?

    问题四:你在编写代码过程中是如何进行优化的

    ...


    具体的我就不再举例了,我自认为代码编写技术层面的东西,我还是有把握的(毕竟做了2年多的开发,还真学到了不少东西,在现在互联网这么发达,你能遇到的技术问题,在网上都可以找到),但是要说设计模块、代码优化等还真有点一头雾水。

   现在回想起来我第一个问题之所以没有回答好,是因为自己做过的东西以前只知道做技术知识点的总结,而没有往深的层面去考虑,例如这个模块为什么要这样设计、有啥好处、有没有其他更好的替代方式呢等等一系列问题,从而致使我在面试过程中会的大比较吞吞吐吐,好像各个模块根本不是自己做的。出了公司之后自己一边走一边在想,为什么自己认为做过的模块会让人觉得自己根本没有做过似的。主要原因是,面试之前没有好好回想自己做过的项目,只是别人问起的时候才回想,再加上自己当时有点小紧张。

    其实这个并不是一个说明问题,面试官就是想了解你是不是真的做过这个东西,冷静下来之后,才发现可以从3个方面来回答:

     第一,这个项目从头到尾我都在参与对于业务这一块我比较了解。

     第二这个项目功能点比较多,例如对xml、excel等文件的操作、加密解密、压缩解压缩、问价的上传下载、用户权限操作等等功能。

     第三使用到的技术比较多例如extjs、json、二级缓存、xml、ftp的操作等。


     我最不能理解的是我第二个问题也没有理解明白,应为在企业开发过程中,都是使用公司自己特定的开发平台,例如,公司自己会搭建一个自己的ssh进行封装之后,然后在该平台上进行二次开发。一般都是先创建action、service接口以及servic实现类、domain(pojo)、jsp页面、dao层的操作(一般都被平台封装好了)等,然后在spring的ioc容器中进行配置即可。

     以前老是这样按部就班的操作,也专门研究过,自己也搭建了一个差不多的平台然后就不了了之了。现在回想起来,很是后悔,为什么以前开发的时候就没有想过为什么要这样设计呢。所以现在赶紧记录一下,给自己提个醒,也算是总结吧。

    拿到一个模块之后首先考虑分层,一般分为:

        Domain Object(领域对象模型),一般有一系列的pojo组成。

        业务层,一般公司都叫做service层,主要包含一些业务的逻辑处理方法。

        DAO(data access object)实现对数据库的增上改查操作

        控制层,例如拦截用户登录action等

        表现层,负责用户请求并将显示处理结果

   至于分层的好处我就不多说了,网上一搜一大堆,比如什么多人协同开发、方便后期的维护等等

       其次考虑的是多使用封装、继承、多态,尽量使用配置文件通过接口来开发

       再次使用适当的设计模式(切莫为了使用设计模式而使用设计模式)

       最后利用spring 的ioc容器进行接口的依赖注入即可。


上面的只是我自己根据工作情况以及自己的理解进行总结,如果有说明不合适的地方还请各位看官多多拍砖,只有交流才能产生共鸣