`

Java高级工程师面试的惨痛教训

 
阅读更多

 转载: http://www.iteye.com/topic/254230

 

1 考:看你的项目经历用过很多Java技术,开源框架,说说在项目中都用过什么? 
      我:Struts,Spring,Hibernate,JBPM,ActiveMQ,RCP,OpenLdap... 
    2 考:你能说一下Spring最大的特点和好处是什么吗? 
      我:我觉得它最大的特点和好处就是无侵入性 
      考:(一愣)嗯? 
      我:比如我在编写业务逻辑的时候,我就可以只是编写POJO,然后用JUnit测试,这时我不去考虑持久化,不去考虑事务,只要我符合面向接口编程和IoC原则就OK 
      考:(打断我)IoC是什么 
      我:控制反转 
      考:具体的呢? 
      我:如果从实现的角度来说,正如Martin Flower所讲,DI依赖注入是个更具体的IoC的实现方式,Spring支持三种依赖注入形式,比如构造子注入,setter,getter注入... 
      考 :(打断我)切面是什么 
      我:(转换话题太快,愣了12帧的时间)就是指的应用系统中关注的某个方面 
      考:说具体点 
      我:比如日志啊,安全啊,事务啊 
      考:说的通俗一些呢 
      我:(有点蒙)我不知道举例说明是不是是您所指的通俗 
      考:就是更概括一些,应用中的什么方面 
      我:是那些贯穿于系统多处的可复用的功能吧。(我的意思是比如在系统中很多的地方都会用的日志,用到消息服务,那么我就可以把它看成一个Aspect) 
      3 考:Hibernate有几级缓存 
        我:(这个问题答的巨屎,不知道我在哪看了一眼,记得Hibernate有三级缓存,虽然在我们的项目中我们指配置了二级缓存)三级 
        考:分别是什么 
        我:(我拼命的搜索自己的记忆,因为我是一年半前研究Hibernate的,之后我们将Hibernate的细节都封装在我们自制的JPort框架之下了,当时也没太深入研究缓存,只记得二级缓存可以替换不同的实现,于是我就只答了这些。后来回来查了下网上,是有二级缓存,一级是指Session缓存,二级是SessionFactory的外置缓存,可以替换不同的实现) 
        考:你再想想是二级还是三级 
        我:(很坚定,错就错了,有的时候自己的自信会让对方对他自己产生怀疑)三级,我记得Hibernate in Action那本书上写的 
        考:如果缓存池中的对象超过了容量,怎么处理,是放回到数据库还是怎么办? 
        我:(这个真没想过,因为我们项目中没遇到过这个问题)放回数据库?好像不应该是这个概念吧,数据库和缓存的对象应该是同步的,不应该存在放回吧,就是会将那些过期的数据或者是命中率低的对象释放掉就可以了吧。我想Hibernate应该有不同的策略来控制这件事。(看来回去得好好研究一下这个问题了,我们过去更关注的是如何进行ORM,因为我个人也比较关注OO,选择Hibernate的一个原因也是因为它可以最小影响我的OOD) 
      4 考:jBPM的核心是面向图编程,请说明一下什么是面向图编程 
        我:我记得jBPM开发手册上写的是,冯诺伊曼体系中不支持程序的中断,而在面向图的编程中是需要的,因此jBPM采用了一个方法就是将状态持久化。(我当时想到的是ProcessInstance代表了一个图,当执行到某一个Task的时候,需要实例化一个TaskInstance,执行完后可以将流程状态持久化到数据库里。后来回来看到jBPM的参考手册上写着:面向图的程序设计是解决执行暂停和持久化问题的一种技术。可是我觉得他是不是想听我说流程图,Node和Transition,状态机等内容呢?不太清楚) 
      5 考:你们用的什么消息中间件? 
        我:ActiveMQ,Apache的一个开源产品 
        考:消息服务有两种模式,一种是点到点的,一种是广播的,能说说两者的情况吗? 
        我:一种就是类似于Socket那种机制,一个消息Provider,一个消息Consumer,另一种就是订阅发布模式,在一个消息服务器上有某个Topic,然后我可以订阅它,当消息发布者更新Topic,我就可以接收到消息了。 

      感受:很多基础的知识由于长久不用都说不出官方答案了,有些确实是项目中没涉及,因此当初就是泛泛而看,没做深入的研究,后来也就忘记了。题目都很基础,不像我去别的地方面试,谈及工作流他们会问我如果流程是由于一些规则的不同而不同时,怎么办?因为一般而言流程是写成XML然后发布到数据库里的,这些问题都比较实际了。 

 

Spring的优点与好处:

简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 

 

■ 轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 

 

■ 控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。 

 

■ 面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。 

 

■ 容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。 

 

■ 框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。 

 

 

所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。 

分享到:
评论

相关推荐

    乔戈里 java面经

    然后他问我的项目亮点是啥,我当时一下愣住了,扯了一些有的没的,都是失败的惨痛的教训,大家参考参考就好,不一定就一定要照着我学,非要知耻而后勇,咋提前准备好也是不错的。经过这次惨痛的教训以后,我就开始有...

    node_惨痛教训

    记录初次实践的两个bug点 1) Error: Cannot find module ‘XXX’ 2) Access denied for user ‘’@‘localhost’ (using password: YES) 本着学习的兴趣, 使用IDEA 下了node插件 , 搭建了node项目, 可是项目在启动...

    我是谁?我在干嘛?回想被MySQL UTF8编码坑的惨痛教训总结

    最近遇到几个项目被MySQL的utf8编码坑,想起之前编码问题被坑的惨痛教训,记录一下,警示自己。 曾几何时,每次建库都选utf8,觉得自己比那些用乱七八糟编码的人不知道酷到哪里去了。直到好多年前的某次课程设计做...

    angluar_记惨痛的教训

    1) 模块没有任何异常,也没有错误,但是内容显示不出来 2) 统一引入css 3) 引入第三方模块 4) 注入服务 ...1) 模块没有任何异常,也没有错误,但是内容显示不出来 第一此创建项目之后 , 模仿着项目中已有的 app.xxxxxx 系列...

    惨痛=道理作文.doc

    惨痛=道理作文.doc

    USB2.0布线关键---经验教训

    最近做了一个PCB,走线宽度为3.5mil,间距为8mil,板厚1.6,TOP到GND 之间为0.3mm,因此USB阻抗超大...一个惨痛的教训,让我载抄了信号完整性分析的一段:深刻体会,钱的教训的深刻的!!下面吧自己的经验教训总结下。

    Java微信网页端,公众号支付Demo

    微信支付处处是坑,真的是惨痛的经历,所以赶紧分享给大家,让大家顺利过坑,有问题欢迎留言。谢谢(缺少部分包,请根据其他人评论酌情下载)

    曙光服务器打造湖南数字地震观测平台

    地震破坏的惨痛教训让人们越来越清醒地认识到防震减灾工作的重要性,利用科学的手段,通过对地震进行及时的监测预报,以及对建设工程进行抗震设防和地震危险性评估,为建筑工程提供科学、合理的抗震设防依据,就能够...

    初中语文文摘历史“杯酒释兵权”背后的惨痛代价

    初中语文文摘历史“杯酒释兵权”背后的惨痛代价

    Delphi源码备份

    经常写程序的朋友一定都知道备份的重要性吧,一次忘记备份可能会让你欲哭无泪,在这方面,在这方面我也曾经有过惨痛教训,于是就写了 这个小工具。 它是专门为了备份Delphi的源代码而设计的,可以定时自动备份,...

    WIN7下最好用的无损分区工具

    WIN7下分区有四种方法: 1.用WIN7自带的磁盘管理工具,比较安全,缺点是不能调节主分区和逻辑分区的大小,最...这点我已经有惨痛教训. 4.这也是我推荐的,最好的一款软件,WIN7下完成.中文.棒极了.支持国产.

    360C盘搬家.zip

    可以把C盘系统盘上的内容搬到其他盘上,免得系统崩溃导致个人数据丢失,有过这种惨痛教训的我十年前就不再C盘存任何个人资料了。建议还是搬一下好

    PCB技术中的PCB的惨痛经历,值得工程师借鉴

    一些新的工程师往往低估PCB设计的重要性,将这一即烦琐又费事的工作完全交由技术员去完成。在这里我先讲一个关于PCB设计的故事,由于涉及企业的隐私,故此隐去了真实的地点和企业名称。故事所涉及的企业是生产电话机...

    中国城市商业银行经营风险的评价研究

    中国城市商业银行经营风险的评价研究,王丹丹,,城市商业银行是我国经济发展的阶段性产物,为经济作出了突出贡献。金融危机的惨痛教训敦促我们不得不增强银行业风险控制能力,但

    JPA学习资料 JPA学习资料

    JPA(Java Persistence API)作为 Java EE 5.0 平台标准的 ORM 规范,将得到所有 Java EE 服务器的支持。Sun 这次吸取了之前 EJB 规范惨痛失败的经历,在充分吸收现 有 ORM 框架的基础上,得到了一个易于使用、伸缩性...

    区块链安全Top 10 2019.pdf

    近几年,区块链技术的发展非常迅猛,安全形势也越来越严峻,仅安全事件导致的直接经济损失就高达 35 亿美元,很多公司甚至因此倒闭,给行业带来了巨额的经济损失和惨痛的教训。基于此,OWASP 中国成立专门研究小组,...

    ejb3.0 jpa

    Sun这次吸取了之前EJB规范惨痛失败的经历,在充分吸收现有ORM框架的基础上,得到了一个易于使用、伸缩性强的ORM规范。从目 前的开发社区的反应上看,JPA受到了极大的支持和赞扬,JPA作为ORM领域标准化整合者的目标...

    java版五子棋源码-TFT2:基于图搜索构建云顶之弈S2最强阵容

    java版五子棋源码 本文希望读者玩过云顶之弈,不懂编程的可以直接拉到最下面去看结论,懂编程的希望你了解递归、分治、图、堆这些基本概念,并掌握Python或者Go语言。 代码已公开在github上: ,转载请注明来源。 ...

    微软团队:成功秘诀 Dynamics of Software Development 中文版 (共3卷)part1

    书名:微软团队:成功秘诀 英文原书名:Dynamics of ...他将自己思考的结晶和种种惨痛的教训归纳出54条言简意赅的法则,从产品设计、程序开发到成功的营销,无所不包,在微软,本书是每一位项目经理的必读圣经。

Global site tag (gtag.js) - Google Analytics