本文共 5555 字,大约阅读时间需要 18 分钟。
Java就业指导
想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试前到底需要准备哪些事情呢?本文详细列举了这些内容,可以用作个人简历的内容,也可以作为面试时向面试官展示的专业技能特点。相信此文会对正在寻觅Java程序员(Java工程师)职位的freshman以及希望成为中高级Java开发者的junior都会有所帮助。 专业技能 初级一点(基本上就是大学生水平,页面写过一点,后台也能使用框架) - 熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。 - 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。 - 对Spring的IoC容器和AOP原理有深入了解,熟练的运用Spring框架管理各种Web组件及其依赖关系,熟练的使用Spring进行事务、日志、安全性等的管理,有使用Spring MVC作为表示层技术以及使用Spring提供的持久化支持进行Web项目开发的经验,熟悉Spring对其他框架的整合。 - 熟练的使用Hibernate、MyBatis等ORM框架,熟悉Hibernate和MyBatis的核心API,对Hibernate的关联映射、继承映射、组件映射、缓存机制、事务管理以及性能调优等有深入的理解。 - 熟练的使用HTML、CSS和JavaScript进行Web前端开发,熟悉jQuery和Bootstrap,对Ajax技术在Web项目中的应用有深入理解,有使用前端MVC框架(AngularJS)和JavaScript模板引擎(HandleBars)进行项目开发的经验。 - 熟悉常用的关系型数据库产品(MySQL、Oracle),熟练的使用SQL和PL/SQL进行数据库编程。 - 熟悉面向对象的设计原则,对GoF设计模式和企业应用架构模式有深入的了解和实际开发的相关经验,熟练的使用UML进行面向对象的分析和设计,有TDD(测试驱动开发)和DDD(领域驱动设计)的经验。 - 熟悉Apache、NginX、Tomcat、WildFly、Weblogic等Web服务器和应用服务器的使用,熟悉多种服务器整合、集群和负载均衡的配置。 - 熟练的使用产品原型工具Axure,熟练的使用设计建模工具PowerDesigner和Enterprise Architect,熟练的使用Java开发环境Eclipse和IntelliJ,熟练的使用前端开发环境WebStorm,熟练的使用软件版本控制工具SVN和Git,熟练的使用项目构建和管理工具Maven和Gradle。 中级 - Java基础扎实,熟悉多线程,线程池原理,对线程安全有深刻理解。阅读过部分JDK源码。 - 深入了解JVM虚拟机:内存模型、GC、垃圾回收算法、以及垃圾回收器,具有线上调优经验。 - 熟练使用Spring Boot、Spring、Spring MVC、MyBatis框架,并且对框架源码有学习了解。 - 对Elasticsearch、Logstash、Filebeat、Kibana 熟悉。了解es读写原理,底层存储原理。 - 深入了解Elasticsearch集群规划,具有es调优经验,阅读过部分源码,例如es中线程池。 - 深入了解网关技术,独立构建业务网关。使用Gateway、Nacos、Sentinel。 - 改造过阿里限流组件Sentinel源码,具备一定的源码阅读能力和改造能力。 - 熟悉MySQL存储引擎,索引,有SQL调优经验,熟悉分库分表,熟悉 - 对Redis 哨兵模式以及Cluster集群模式有了解,熟练搭建集群和使用。 - 熟悉MQ使用场景,熟练使用Kafka,用作内外网穿透,作为数据中转。 - 熟练使用Docker容器化技术、了解k8s。了解微服务,SpringCloud体系。 针对开发过程中的实践经验: - 合理使用开发规约,写出简洁的代码。重构相关知识有所掌握,有过项目重构的经验。 - 在开发工作中大量使用设计模式,来提高程序可扩展性和可维护性。 - 熟悉Linux环境,熟悉Linux常用命令,熟悉shell脚本。 项目经验 项目介绍 本系统是X公司委托Y团队开发的用于Z行业的系统,系统包括A、B、C、D等模块。系统使用了Java企业级开发的开源框架Spring(Java企业级开发的一站式选择),以及前端技术jQuery库及其插件或Bootstrap框架。如果需要构建单页应用(SPA),最佳的方案是使用前端MVC框架(如AngularJS)和JavaScript模板引擎(如HandleBars)。在表示层中使用Spring MVC(MVC架构模式)的实现框架,通过Spring框架实现事务管理、日志、安全性等功能,通过Redis实现缓存服务。持久层使用MyBatis封装CRUD操作,底层使用MySQL关系型数据库。整个项目采用瀑布模型进行开发。 项目开发流程 需求分析 - 采用用例图、时序图、活动图等OOAD方法进行分析,设计界面原型以帮助理解需求和业务层设计时推导事务脚本。 - 制定需求规格说明书和项目计划书。 设计 - 从业务实体(领域对象)开始设计,产生类图和E-R图(概念设计阶段)。 - 确定分层架构:确定各层的技术实现方案,具体到使用的框架、数据库服务器、应用服务器等。设计事务脚本模式:将一次请求封装为一个方法或函数,结合数据访问对象(DAO)和数据传输对象(DTO)的使用。 - 进行正向工程(Java代码生成)和逆向工程(UML类图生成),设计数据库物理模型(ER图转换成表间关系图、建库和建表)。 编码 - 使用Java编写对应的业务逻辑、Service层、Controller层、DAO层、持久化层等代码。 测试 - 编写单元测试(JUnit工具)和集成测试,确保各模块的组装和测试。 - 进行系统测试和验收测试,确保整个系统符合需求规格说明书并通过验收。 交付和维护 - 编写用户手册、操作手册等文档。 项目管理 - 使用CVS/SVN/Git进行版本控制。 - 使用Maven或Gradle进行自动构建。 - 使用Hudson或Jenkins进行持续集成。 系统架构 - 负载均衡:使用F5、A10等设备。 - 应用服务器:Apache、NginX(作为HTTP服务器和反向代理)、Tomcat(Servlet容器)、WildFly(EJB容器)。 - 数据库服务器:MySQL、Oracle。 第三方工具(插件)应用 - 图表工具:基于jQuery的图表插件(如jQchart)、Chart.js、Highcharts等。 - 报表工具:Pentaho Reporting、iReport、DynamicReports等。 - 文档处理:POI、iText等。 - 工作流引擎:jBPM、OpenWFE、Snaker、SWAMP等。 - 作业调度:Quartz、JobServer、Oddjob等。 - 缓存服务:EhCache、Memcached、SwarmCache等。 - 消息队列:Open-MQ、ZeroMQ等。 - 安全框架:Shiro、PicketBox等。 - 搜索引擎:IndexTank、Lucene、ElasticSearch等。 - Ajax框架:jQuery、ExtJS、DWR等。 - UI插件:EasyUI、MiniUI等。 - 富文本框:UEditor、CKEditor等。 面试提问 项目背景问: - 项目是为哪家公司开发的?项目的投入是多少? - 有多少人参与了项目开发?团队中测试人员、开发人员、项目经理的比例是多少? - 项目开发了多长时间?项目总的代码量有多少?你的代码量有多少? 项目问: - 项目采用了什么样的开发模型或开发流程?技术选型是怎样的? 责任和收获问: - 你在项目中承担了怎样的职责?是否经常开会或加班? - 项目完成后有哪些收获或是经验教训? 难点问: - 项目中最困难的部分是什么?如何解决团队开发中遇到的各种冲突? 常见错误 - 只在计算机上练习,而不注重行为面试准备。 - 不进行模拟面试训练,缺乏自信。 - 试图死记硬背答案。 - 代码不够严谨,如果不写测试代码。 - 轻言放弃。 面试反问 - 乐于挑战面试官的技术选择并提出改进建议。 - 具体了解公司的技术栈,针对性的提出方案。 - 提出解决实际项目问题的具体思路。 S.A.R.法则 输出结果 算法题解法 算法题可以通过以下五种方式解决: 1. 举例法:通过举一些典型案例发现其中的一般规律。 2. 模式匹配法:通过发现问题的本质模式,找到解决问题的关键。 3. 简化推广法:简化问题规模和数据类型,找到通用的解决方法。 4. 简单构造法:通过构造一些简单的步骤,逐渐扩展成最优方案。 5. 数据结构头脑风暴法:结合自己熟悉的数据结构,寻找最优解法。 录用谈判 1. 具体说明你想要的待遇内容。 2. 如果在薪资方面有要求,可以适当降低,提出比预期稍高的条件。 3. 重视工作环境、科室发展机会等,避免只关注薪资待遇。 4. 采用最适合各方的谈判方式,通常可以通过电话或邮件沟通。 自我评价 1. 学习能力:技术发展日新月异,持续学习是必须的。 2. 团队意识:注重与团队成员的协作,充分发挥团队力量。 3. 抗压能力:面对高强度的工作环境,保持稳定的心态。 ps:作为面试官,我在筛选简历时会重视以下几个加分项: 1. 参加过省级比赛、算法比赛获奖等。 2. 熟悉多线程、深入了解JVM虚拟机,有调优经验更佳。 3. 熟悉设计模式和设计原则。 4. 熟悉至少一个消息队列和Linux环境。 5. 毕业于Top-tier学校更佳。 减分项: 1. 技术Stack描述与项目经验有较大出入。 2. 工作频繁跳槽情况。 3. 简历内容稀疏、缺乏重点。 4. 重复性项目经验过多,点餐系统、商城系统、外卖系统等过于常见。 建议每段工作历程覆盖不同的技术和项目,以体现专业能力的提升。同时,面试官更关注候选人解决问题的能力和项目经验,而不是繁杂的技术描述。
转载地址:http://gyfgz.baihongyu.com/