成为合格的Java程序员需要具备的专业技能及面试准备

专业技能

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

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

3. 对Spring的IoC容器和AOP原理有深入了解,熟练的运用Spring框架管理各种Web组件及其依赖关系,熟练的使用Spring进行事务、日志、安全性等的管理,有使用Spring MVC作为表示层技术以及使用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。

面试问题和技巧

一、Java 基础

  1. JDK 和 JRE 有什么区别?
  2. == 和 equals 的区别是什么?
  3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
  4. final 在 java 中有什么作用?
  5. java 中的 Math.round(-1.5) 等于多少?
  6. String 属于基础的数据类型吗?
  7. java 中操作字符串都有哪些类?它们之间有什么区别?
  8. String str="i"与 String str=new String(“i”)一样吗?
  9. 如何将字符串反转?
  10. String 类的常用方法都有那些?
  11. 抽象类必须要有抽象方法吗?
  12. 普通类和抽象类有哪些区别?
  13. 抽象类能使用 final 修饰吗?
  14. 接口和抽象类有什么区别?
  15. java 中 IO 流分为几种?
  16. BIO、NIO、AIO 有什么区别?
  17. Files的常用方法都有哪些?

二、容器

  1. java 容器都有哪些?
  2. Collection 和 Collections 有什么区别?
  3. List、Set、Map 之间的区别是什么?
  4. HashMap 和 Hashtable 有什么区别?
  5. 如何决定使用 HashMap 还是 TreeMap?
  6. 说一下 HashMap 的实现原理?
  7. 说一下 HashSet 的实现原理?
  8. ArrayList 和 LinkedList 的区别是什么?
  9. 如何实现数组和 List 之间的转换?
  10. ArrayList 和 Vector 的区别是什么?
  11. Array 和 ArrayList 有何区别?
  12. 在 Queue 中 poll()和 remove()有什么区别?
  13. 哪些集合类是线程安全的?
  14. 迭代器 Iterator 是什么?
  15. Iterator 怎么使用?有什么特点?
  16. Iterator 和 ListIterator 有什么区别?
  17. 怎么确保一个集合不能被修改?

三、多线程

  1. 并行和并发有什么区别?
  2. 线程和进程的区别?
  3. 守护线程是什么?
  4. 创建线程有哪几种方式?
  5. 说一下 runnable 和 callable 有什么区别?
  6. 线程有哪些状态?
  7. sleep() 和 wait() 有什么区别?
  8. notify()和 notifyAll()有什么区别?
  9. 线程的 run()和 start()有什么区别?
  10. 创建线程池有哪几种方式?
  11. 线程池都有哪些状态?
  12. 线程池中 submit()和 execute()方法有什么区别?
  13. 在 java 程序中怎么保证多线程的运行安全?
  14. 多线程锁的升级原理是什么?
  15. 什么是死锁?
  16. 怎么防止死锁?
  17. ThreadLocal 是什么?有哪些使用场景?
  18. 说一下 synchronized 底层实现原理?
  19. synchronized 和 volatile 的区别是什么?
  20. synchronized 和 Lock 有什么区别?
  21. synchronized 和 ReentrantLock 区别是什么?
  22. 说一下 atomic 的原理?

四、反射

  1. 什么是反射?
  2. 什么是 java 序列化?什么情况下需要序列化?
  3. 动态代理是什么?有哪些应用?
  4. 怎么实现动态代理?

五、对象拷贝

  1. 为什么要使用克隆?
  2. 如何实现对象克隆?
  3. 深拷贝和浅拷贝区别是什么?

六、Java Web

  1. jsp 和 servlet 有什么区别?
  2. jsp 有哪些内置对象?作用分别是什么?
  3. 说一下 jsp 的 4 种作用域?
  4. session 和 cookie 有什么区别?
  5. 说一下 session 的工作原理?
  6. 如果客户端禁止 cookie 能实现 session 还能用吗?
  7. spring mvc 和 struts 的区别是什么?
  8. 如何避免 sql 注入?
  9. 什么是 XSS 攻击,如何避免?
  10. 什么是 CSRF 攻击,如何避免?

七、异常

  1. throw 和 throws 的区别?
  2. final、finally、finalize 有什么区别?
  3. try-catch-finally 中哪个部分可以省略?
  4. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
  5. 常见的异常类有哪些?

八、网络

  1. http 响应码 301 和 302 代表的是什么?有什么区别?
  2. forward 和 redirect 的区别?
  3. 简述 tcp 和 udp的区别?
  4. tcp 为什么要三次握手,两次不行吗?为什么?
  5. 说一下 tcp 粘包是怎么产生的?
  6. OSI 的七层模型都有哪些?
  7. get 和 post 请求有哪些区别?
  8. 如何实现跨域?
  9. 说一下 JSONP 实现原理?

九、设计模式

  1. 说一下你熟悉的设计模式?
  2. 简单工厂和抽象工厂有什么区别?

十、Spring/Spring MVC

  1. 为什么要使用 spring?
  2. 解释一下什么是 aop?
  3. 解释一下什么是 ioc?
  4. spring 有哪些主要模块?
  5. spring 常用的注入方式有哪些?
  6. spring 中的 bean 是线程安全的吗?
  7. spring 支持几种 bean 的作用域?
  8. spring 自动装配 bean 有哪些方式?
  9. spring 事务实现方式有哪些?
  10. 说一下 spring 的事务隔离?
  11. 说一下 spring mvc 运行流程?
  12. spring mvc 有哪些组件?
  13. @RequestMapping 的作用是什么?
  14. @Autowired 的作用是什么?

十一、Spring Boot/Spring Cloud

  1. 什么是 spring boot?
  2. 为什么要用 spring boot?
  3. spring boot 核心配置文件是什么?
  4. spring boot 配置文件有哪几种类型?它们有什么区别?
  5. spring boot 有哪些方式可以实现热部署?
  6. jpa 和 hibernate 有什么区别?
  7. 什么是 spring cloud?
  8. spring cloud 断路器的作用是什么?
  9. spring cloud 的核心组件有哪些?

十二、Hibernate

  1. 为什么要使用 hibernate?
  2. 什么是 ORM 框架?
  3. hibernate 中如何在控制台查看打印的 sql 语句?
  4. hibernate 有几种查询方式?
  5. hibernate 实体类可以被定义为 final 吗?
  6. 在 hibernate 中使用 Integer 和 int 做映射有什么区别?
  7. hibernate 是如何工作的?
  8. get()和 load()的区别?
  9. 说一下 hibernate 的缓存机制?
  10. hibernate 对象有哪些状态?
  11. 在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?
  12. hibernate 实体类必须要有无参构造函数吗?为什么?

十三、Mybatis

  1. mybatis 中 #{}和 ${}的区别是什么?
  2. mybatis 有几种分页方式?
  3. RowBounds 是一次性查询全部结果吗?为什么?
  4. mybatis 逻辑分页和物理分页的区别是什么?
  5. mybatis 是否支持延迟加载?延迟加载的原理是什么?
  6. 说一下 mybatis 的一级缓存和二级缓存?
  7. mybatis 和 hibernate 的区别有哪些?
  8. mybatis 有哪些执行器(Executor)?
  9. mybatis 分页插件的实现原理是什么?
  10. mybatis 如何编写一个自定义插件?

十四、RabbitMQ

  1. rabbitmq 的使用场景有哪些?
  2. rabbitmq 有哪些重要的角色?
  3. rabbitmq 有哪些重要的组件?
  4. rabbitmq 中 vhost 的作用是什么?
  5. rabbitmq 的消息是怎么发送的?
  6. rabbitmq 怎么保证消息的稳定性?
  7. rabbitmq 怎么避免消息丢失?
  8. 要保证消息持久化成功的条件有哪些?
  9. rabbitmq 持久化有什么缺点?
  10. rabbitmq 有几种广播类型?
  11. rabbitmq 怎么实现延迟消息队列?
  12. rabbitmq 集群有什么用?
  13. rabbitmq 节点的类型有哪些?
  14. rabbitmq 集群搭建需要注意哪些问题?
  15. rabbitmq 每个节点是其他节点的完整拷贝吗?为什么?
  16. rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况?
  17. rabbitmq 对集群节点停止顺序有要求吗?

十五、Kafka

  1. kafka 可以脱离 zookeeper 单独使用吗?为什么?
  2. kafka 有几种数据保留的策略?
  3. kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?
  4. 什么情况会导致 kafka 运行变慢?
  5. 使用 kafka 集群需要注意什么?

十六、Zookeeper

  1. zookeeper 是什么?
  2. zookeeper 都有哪些功能?
  3. zookeeper 有几种部署模式?
  4. zookeeper 怎么保证主从节点的状态同步?
  5. 集群中为什么要有主节点?
  6. 集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?
  7. 说一下 zookeeper 的通知机制?

十七、MySql

  1. 数据库的三范式是什么?
  2. 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?
  3. 如何获取当前数据库版本?
  4. 说一下 ACID 是什么?
  5. char 和 varchar 的区别是什么?
  6. float 和 double 的区别是什么?
  7. mysql 的内连接、左连接、右连接有什么区别?
  8. mysql 索引是怎么实现的?
  9. 怎么验证 mysql 的索引是否满足需求?
  10. 说一下数据库的事务隔离?
  11. 说一下 mysql 常用的引擎?
  12. 说一下 mysql 的行锁和表锁?
  13. 说一下乐观锁和悲观锁?
  14. mysql 问题排查都有哪些手段?
  15. 如何做 mysql 的性能优化?

十八、Redis

  1. redis 是什么?都有哪些使用场景?
  2. redis 有哪些功能?
  3. redis 和 memecache 有什么区别?
  4. redis 为什么是单线程的?
  5. 什么是缓存穿透?怎么解决?
  6. redis 支持的数据类型有哪些?
  7. redis 支持的 java 客户端都有哪些?
  8. jedis 和 redisson 有哪些区别?
  9. 怎么保证缓存和数据库数据的一致性?
  10. redis 持久化有几种方式?
  11. redis 怎么实现分布式锁?
  12. redis 分布式锁有什么缺陷?
  13. redis 如何做内存优化?
  14. redis 淘汰策略有哪些?
  15. redis 常见的性能问题有哪些?该如何解决?

十九、JVM

  1. 说一下 jvm 的主要组成部分?及其作用?
  2. 说一下 jvm 运行时数据区?
  3. 说一下堆栈的区别?
  4. 队列和栈是什么?有什么区别?
  5. 什么是双亲委派模型?
  6. 说一下类加载的执行过程?
  7. 怎么判断对象是否可以被回收?
  8. java 中都有哪些引用类型?
  9. 说一下 jvm 有哪些垃圾回收算法?
  10. 说一下 jvm 有哪些垃圾回收器?
  11. 详细介绍一下 CMS 垃圾回收器?
  12. 新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?
  13. 简述分代垃圾回收器是怎么工作的?
  14. 说一下 jvm 调优的工具?
  15. 常用的 jvm 调优的参数都有哪些?

项目经验的问题

考官通过看你的简历或者你的介绍来了解你所做的项目,那么考官肯定想更详细的了解您的项目,看是不是与你的简历写的项目经验一致。也就是考核你是否具有真实的项目经验。一般来说,在你的简历至少有一个重点项目,放在简历项目经验栏的第一位。把项目的业务功能描述清楚。在这里你就是重点谈一个项目就可以了。从下面几个方面来进行陈述

1. 用一句话简述项目

2. 详细的列出项目实现的功能

3. 说出项目实现的技术和架构,能说出项目的不寻常之处,比如采用了某项新技术,采用了良好的架框等

4. 能让别人感觉出项目的规模

5. 说出你在项目中的责任

通过这些来证明你是的确开发过了这个项目,并且这个项目是一个真实的。还有就是你是真正具有项目经验的。乎合企业的用人需要。

特别注意要把项目所实现的功能描述得越详细越好。当然用词要简洁,表达要流利。其次要尽可能采用专业术语,显得你的专业。不要犯低级错误。

请记住,你要描述的是整个项目而不仅仅是你做的那一个模块。有些项目你只参与了其中一个模块,但是你要把整个项目描述出来,不要仅仅描述你参与的那一个模块。

说出你项目采用的技术及架构,还要能说明你在项目中的责任。

你在项目中的职责,是否能够胜任之前的任务安排

在项目中遇到的问题,你是怎么解决的(一般这样的问题,可以说是自己解决,但是要讲明解决过程,一定要突出解决思路的灵活。也可以回答与同事讨论解决,这样可

以让面试官觉察到自己善于利用团队资源,会给自己的团队意识加分)

是怎么对这个项目进行开发的?
这个问题是考核你是否熟悉软件开发的流程,同时也是考核你的项目经验,你的专业素养,从这里可以判断出你参与过多少项目,可以判断你对软件工程的理解和熟悉程度。这个问题是十分关键的,你需要准备的知识点有:软件项目的生命周期、软件项目的开发模型、面向对象的分析和设计、软件质量保证等。

软件项目的生命周期:

  1. 项目计划
  2. 需求分析
  3. 设计(概要设计和详细设计)
  4. 编码
  5. 测试
  6. 发布
  7. 维护

项目计划阶段:走访客户,进行交流沟通,获得客户原始需求。

对客户的需求和市场等进行调研,分析,编写可行性分析报告。

通过不断的与客户沟通,找客户不同环节的用户进行交流来获取需求。召开评审会议,报告可行性分析,报告用户原始需求,报告项目远景规化。

需求分析阶段:

在客户原始需求的基础上不断与客户沟通,充分的熟悉和深入客户业务,获得充分的业务需求,完善用户需求和功能性需求,了解客户的相关约束而获得非功能性需求。最终编写《需求规格说明书》;召开需求评审会议,客户确定需求,并签定合同;编写项目计划说明书;编写测试计划;召开项目启动会议,项目正式启动。

概要设计阶段:根据《需求分析说明书》,进行用例分析,获得充分而有效的用例。编写界面原型,编写编码规范和界面风格规范,数据库设计规范。用uml工具画用例图,编写有效的用例规约文档。划分项目功能模块.评审用例及用例规约文档。

详细设计阶段:根据完整的用例及需求进行分析,获得数据库所需的相关信息,画数据库E-R图,编写数据设计说明书.进行数据库建模。进行详细的分析,用uml工具画类图,确定每个功能模块的子功能,抽取项目的公共部分成为一个公共模块。确定项目的架构基础。确定需要用到的类及类成员和方法。确定一些辅助类及方法。对每一个用例都用uml工具画出顺序图。编写详细设计说明书,评审详细设计说明书, 进行基础框架搭建。列出任务清单,进行任务分配。

编码阶段:以小组的形式进行代码编写,编写单元测试用例,每完成一个类都要进行单元测试。每完成一个功能点和模块都要进行集成测试。确保每一个功能点和模块完成后都是一个可以看得见、摸得着的产品。而不是等到最后才进行统一的调试和搭配。每天都要对代码进行检查和优化,也就是所谓的重构。

测试阶段:根据测试计划对项目进行系统测试,以及用户的验收测试

产品发布:交付完整的产品和设计文档。把产品布署到客户的计算机上,确保产品的正常运行。客户签收。

维护阶段:为客户提供技术保障,对产品进行相应的维护和升级工作

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为一个Java程序员,你需要具备以下技能和熟悉以下框架: 技能: 1. Java编程语言:熟练掌握Java的语法、特性和面向对象编程的概念。 2. 数据结构和算法:了解常见数据结构(如数组、链表、栈、队列、树等)和算法(如排序、查找、图算法等)。 3. 多线程编程:熟悉并发编程的基本原理,掌握Java多线程编程的相关知识,如线程同步、锁、线程池等。 4. 数据库:了解关系型数据库(如MySQL、Oracle)和非关系型数据库(如MongoDB、Redis)的基本概念和操作。 5. 网络编程:了解TCP/IP协议、HTTP协议等网络相关知识,熟悉Socket编程和HTTP请求处理。 框架: 1. Spring框架:熟悉Spring框架的核心概念,包括IoC容器、AOP、MVC等,能够使用Spring进行企业级应用的开发。 2. Spring Boot框架:熟悉Spring Boot框架的快速开发特性,能够使用Spring Boot构建独立可运行的Java应用程序。 3. Hibernate框架:熟悉Hibernate框架的对象关系映射(ORM)技术,能够进行数据库操作和持久化。 4. MyBatis框架:熟悉MyBatis框架的SQL映射配置和数据库访问,能够进行灵活的SQL操作。 5. Spring Cloud框架:了解微服务架构和Spring Cloud框架的基本概念,能够使用Spring Cloud构建分布式系统。 除了以上技能和框架,还应该具备良好的编程习惯、团队协作能力和问题解决能力。随着技术的不断发展,还需要不断学习和更新自己的知识,跟进新的技术趋势和框架。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值