想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,在面试之前到底需要准备哪些东西呢?面试时面试官想了解你的什么专业技能,以下都是一个合格Java软件工程师所要具备的。

一、专业技能

  1. 熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的JavaAPI,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。

  2. 熟悉基于JSP和Servlet的JavaWeb开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行JavaWeb项目开发经验。

  3. 对Spring的IoC容器和AOP原理有深入了解,熟练的运用Spring框架管理各种Web组件及其依赖关系,熟练的使用Spring进行事务、日志、安全性等的管理,有使用SpringMVC作为表示层技术以及使用Spring提供的持久化支持进行Web项目开发的经验,熟悉Spring对其他框架的整合。

  4. 熟练的使用Hibernate、MyBatis等ORM框架,熟悉Hibernate和MyBatis的核心API,对Hibernate的关联映射、继承映射、组件映射、缓存机制、事务管理以及性能调优等有深入的理解。

  5. 熟练的使用HTML、CSS和JavaScript进行Web前端开发,熟悉jQuery和Bootstrap,对Ajax技术在Web项目中的应用有深入理解,有使用前端MVC框架(AngularJS)和JavaScript模板引擎(HandleBars)进行项目开发的经验。

  6. 熟悉常用的关系型数据库产品(MySQL、Oracle),熟练的使用SQL和PL/SQL进行数据库编程。

  7. 熟悉面向对象的设计原则,对GoF设计模式和企业应用架构模式有深入的了解和实际开发的相关经验,熟练的使用UML进行面向对象的分析和设计,有TDD(测试驱动开发)和DDD(领域驱动设计)的经验。

  8. 熟悉Apache、NginX、Tomcat、WildFly、Weblogic等Web服务器和应用服务器的使用,熟悉多种服务器整合、集群和负载均衡的配置。

  9. 熟练的使用产品原型工具Axure,熟练的使用设计建模工具PowerDesigner和Enterprise Architect,熟练的使用Java开发环境Eclipse和IntelliJ,熟练的使用前端开发环境WebStorm,熟练的使用软件版本控制工具SVN和Git,熟练的使用项目构建和管理工具Maven和Gradle。

    说明: 
    上面罗列的这些东西并不是每一项你都要烂熟于心,根据企业招聘的具体要求可以做相应的有针对性的准备。但是前6项应该是最低要求,是作为一个Java软件工程师必须要具备的专业技能。

二、项目经验

  1. 项目介绍 
    本系统是X委托Y开发的用于Z的系统,系统包括A、B、C、D等模块。系统使用了Java企业级开发的开源框架E以及前端技术F。表示层运用了G架构,使用H作为视图I作为控制器并实现了REST风格的请求;业务逻辑层运用了J模式,并通过K实现事务、日志和安全性等功能,通过L实现缓存服务;持久层使用了M封装CRUD操作,底层使用N实现数据存取。整个项目采用了P开发模型。 
    说明: 
    E通常指spring(Java企业级开发的一站式选择); 
    F最有可能是jQuery库及其插件或者是Bootstrap框架,当然如果要构建单页应用(SPA)最佳的方案是前端MVC框架(如AngularJS)和JavaScript模板引擎(如HandleBars);G显然是MVC(模型-视图-控制),最有可能的实现框架是spring MVC,除此之外还有Struts 2、JSF以及Apache为JSF提供的MyFaces实现; 
    H是JSP,JSP作为MVC中的V,也可使用模板引擎(如Freemarker和Velocity)来生成视图还可以是各种文档或报表(如Excel和PDF等); 
    I是Servlet或者自定义的控制器,他们是MVC中的C,当然Spring MVC中提供了作为前端控制器的DispatcherServlet; 
    J通常是事务脚本; 
    K应该是AOP(面向切面编程)技术; 
    L目前广泛使用的有memcached和Redis; 
    M的选择方案很多,最有可能的是hibernate和MyBatis,也可以两种技术同时运用,但通常是将增删改交给hibernate来处理,而复杂的查询则由MyBatis完成,此外TopLink、jOOQ也是优秀的持久层解决方案; 
    N底层的数据存取传统上是使用关系型数据库,可以是MySQL、Oracle、SQLServer、DB2等,随着大数据时代的来临,也可以采用NoSQL(如MongoDB、MemBase、BigTable等)和其他大数据存取方案(如GFS、HDFS等); 
    P是项目的开发模型,可以是瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、RAD模型等。

  2. 项目开发流程 
    1、可行性分析:可行性分析报告、项目开发计划书; 
    2、需求分析:需求规格说明书OOAD(用例图、时序图、活动图); 
    界面原型:帮助理解需求、业务层设计时推导事务脚本; 
    3、设计:概要设计说明书、详细设计说明书; 
    *抽取业务实体(领域对象):类图、E-R图(概念设计阶段); 
    分层架构:确定各层的技术实现方案(具体到使用的框架、数据库服务器、应用服务器等); 
    *业务层设计:事务脚本模式(事务:用户发送一次请求就是一个事务; 
    脚本:一个方法或一个函数; 
    *事务脚本:把一次请求封装为一个方法或一个函数;事务脚本模式:一个事务开始于脚本的打开,终止于脚本的关闭); 
    *业务层涉及的对象有三种类型:事务脚本类(封装了业务的流程)、数据访问对象(DAO,封装了持久化操作)、数据传输对象(DTO,封装了失血/贫血领域对象),三者之间的关系是事务脚本类组合(聚合)数据访问对象,这二者都依赖了数据传输对象正向工程(UML类图生成Java代码)和逆向工程(Java代码生成UML类图)数据库物理设计(ER图转换成表间关系图、建库和建表、使用工具插入测试数据); 
    3、编码; 
    4、测试:测试报告、缺陷报告; 
    *单元测试:对软件中的最小可测试单元进行检查和验证,在Java中是对类中的方法进行测试,可以使用JUnit工具来实施; 
    *集成测试:集成测试也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求组装成为子系统进行测试; 
    *系统测试:将已经确认的软件、硬件、外设、网络等元素结合在一起,进行信息系统的各种组装测试和确认测试,系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不符或与之矛盾的地方,从而提出更加完善的方案; 
    *验收测试:在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务; 
    5、交付和维护:用户手册、操作手册;

三、项目管理

  1. 版本控制:CVS/SVN/Git

  2. 自动构建:Ant/Maven/Ivy/Gradle

  3. 持续集成:Hudson/Jenkins

四、系统架构

  1. 负载均衡服务器:F5、A10;

  2. 应用服务器: HTTP服务器:Apache、NginX(HTTP、反向代理、邮件代理服务器); 
    Servlet容器:Tomcat、Resin

  3. EJB容器:WildFly(JBoss Application Server)、GlassFish、Weblogic、Websphere;

  4. 数据库服务器:MySQL、Eclipse、Oracle;

  5. 想要了解更多架构知识可以加群:650385180,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源;

五、第三方工具(插件)应用

  1. 图表工具:基于jQuery的图表插件(如jQchart、Flot、Charted等)、Chart.js、Highcharts等。

  2. 报表工具:Pentaho Reporting、iReport、DynamicReports等。

  3. 文档处理:POI、iText等。

  4. 工作流引擎:jBPM、OpenWFE、Snaker、SWAMP等。

  5. 作业调度:Quartz、JobServer、Oddjob等。

  6. 缓存服务:EhCache、memcached、SwarmCache等。

  7. 消息队列:Open-MQ、ZeroMQ、ActiveMQ等。

  8. 安全框架:Shiro、PicketBox等。

  9. 搜索引擎:IndexTank、Lucene、ElasticSearch等。

  10. Ajax框架:jQuery、ExtJS、DWR等。

  11. UI插件:EasyUI、MiniUI等。

  12. 富文本框:UEditor、CKEditor等。

六、面试提问

  1. 项目是为哪个公司开发的?项目的投入是多少?

  2. 有多少人参与了项目开发?整个团队中,测试人员、开发人员、项目经理比例是多少?

  3. 项目开发了多长时间?项目总的代码量有多少?你的代码量有多少?

  4. 项目采用了怎样的开发模型或开发流程?项目的架构是怎样的?项目的技术选型是怎样的?

  5. 你在项目中担了怎样的职责?是否经常开会或加班?项目完成后有哪些收获或是经验教训?

  6. 项目中最困难的部分是什么?如何解决团队开发时遇到的各种冲突?

七、面试时可以反问面试官的问题

  1. 我注意到你们使用了X技术,请问你们是如何解决Y问题的?

  2. 为什么你们的产品使用了X技术而不是Y技术?据我所知,X技术虽然有A、B、C等好处,但也存在D和E问题,而Y技术可以解决D和E问题。

  3. 我对您说的X技术不是太熟悉,但我感觉它是一个不错的解决方案,您能多讲讲它的工作原理吗?

  4. 你们团队是如何进行项目规划的?一周会有几次例会?每周的代码量大概是多少?

  5. 就X问题我能想到的解决方案目前就只有Y了,请问您会怎么解决这个问题?

八、S.A.R.法则

S.A.R法则是指先描述问题的场景,然后解释你采取的行动,最后陈述结果。

九、面谈原则

  1. 声音适中、口齿清楚、面带微笑、个人形象精神,讲礼貌。

  2. 主动跟面试官聊他感兴趣的话题,让面试官满意。

  3. 主动的大胆的跟面试官聊自己熟悉有经验的内容:项目、技术点等,做到扬长避短。

  4. 一定要表达自己非常想得到这个岗位,自己很愿意学习不懂的技术。

  5. 根据自己的实际水平提出合理的待遇要求。

十、自我评价

  1. 学习能力(搞IT行业的人需要不断的了解新的技术、工具和方法)

  2. 团队意识(相比个人英雄主义,IT行业更倡导团队合作)

  3. 抗压能力(很多IT企业的工作强度相对来说还是比较大的)

大厂面试官:Java工程师的“十项全能”的更多相关文章

  1. Java架构师-十项全能学习笔记(1)

    Java架构师-十项全能学习笔记(1) @Configuration @EnableStateMachine public class OrderStateMachineConfig extends ...

  2. 大厂面试官最常问的@Configuration+@Bean(JDKConfig编程方式)

    大厂面试官最常问的@Configuration+@Bean(JDKConfig编程方式)   现在大部分的Spring项目都采用了基于注解的配置,采用了@Configuration 替换标签的做法.一 ...

  3. 大厂面试官问你META-INF/spring.factories要怎么实现自动扫描、自动装配?

    大厂面试官问你META-INF/spring.factories要怎么实现自动扫描.自动装配?   很多程序员想面试进互联网大厂,但是也有很多人不知道进入大厂需要具备哪些条件,以及面试官会问哪些问题, ...

  4. 一线大厂面试官最喜欢问的15道Java多线程面试题

    前言 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得更多职位,那么你应该准备很多关于多线程的问题. 他们会问面试者很多令人混淆的Java线程问题.面试官只是想确信面试者 ...

  5. iOS开发,这样写简历才能让大厂面试官看重你!

    前言: 对于职场来说,简历就如同门面.若是没想好,出了差错,耽误些时日倒不打紧,便是这简历入不了HR的眼,费力伤神还不能觅得好去处,这数年来勤学苦练的大好光阴,岂不辜负? 简历,简而有力.是对一个人工 ...

  6. 大厂面试官竟然这么爱问Kafka,一连八个Kafka问题把我问蒙了?

    本文首发于公众号:五分钟学大数据 在面试的时候,发现很多面试官特别爱问Kafka相关的问题,这也不难理解,谁让Kafka是大数据领域中消息队列的唯一王者,单机十万级别的吞吐量,毫秒级别的延迟,这种天生 ...

  7. 这些Servlet知识你一定要知道,金九银十大厂面试官都爱问

    前言 Servlet是服务器端的Java应用程序,可以生产动态Web页面.透过JSP执行过程可以知道JSP最终被编译成一个.class文件,查看该文件对应的Java类,发现该Java类继承自org.a ...

  8. 面试之Java持久层(十)

    91,什么是ORM?         对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术: 简单的说,O ...

  9. 赢在面试之Java泛型篇(十二)

    139. Java中的泛型是什么 ? 使用泛型的好处是什么? 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数. 好处: 1.类型安全,提供编译期 ...

随机推荐

  1. Year 2038 problem (2038年问题)

    From Wikipedia, the free encyclopedia       Animation showing how the date would reset, represented ...

  2. tikv性能参数调优

    tiKV 最底层使用的是 RocksDB(tidb3.0版本中将使用tian存储引擎) 做为持久化存储,所以 TiKV 的很多性能相关的参数都是与 RocksDB 相关的.TiKV 使用了两个 Roc ...

  3. UltraEdit 换行替换

    需求:想在每行结尾添加   '), 方案:在查找栏填写(^r^n)  替换栏('),^r^n) 效果:

  4. October 12th 2017 Week 41st Thursday

    Be happy for this moment. This moment is your life. 为这一刻感到高兴,这一刻是你的人生. Yesterday Tencent became Asia ...

  5. 【Alpha 冲刺】 7/12

    今日任务总结 人员 今日原定任务 完成情况 遇到问题 贡献值 胡武成 建立数据库 已完成 孙浩楷 完成作业列表界面 已完成 胡冰 完成作业展示页面 已完成 练斐弘 完成课件列表页面 未完成 时间不够 ...

  6. XSS详解

    什么是XSS(跨站脚本攻击) XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入恶意html代码或者javascript代码,当用户浏览该页 ...

  7. 8、JVM--虚拟机字节码执行引擎

    8.1.概述 执行引擎是Java虚拟机最核心的组成部分之一.“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器.硬件.指令集和操作系统层面上 ...

  8. ORA-27125: unable to create shared memory segment的解决方法(转)

    ORA-27125: unable to create shared memory segment的解决方法(转) # Kernel sysctl configuration file for Red ...

  9. 【转】mysql增量备份恢复实战企业案例

    来源地址:http://seanlook.com/2014/12/05/mysql_incremental_backup_example/ 小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但 ...

  10. WorldWind源码剖析系列:四叉树瓦片类QuadTile

    四叉树瓦片类QuadTile提供了对影像和地形数据的四叉树访问模型.该类的类图如下. 四叉树瓦片类QuadTile提供的主要字段.属性和方法简要描述如下: public QuadTileSet Qua ...