Java 进阶面试问题列表

翻译自Java developer interview questions: The hard part


面向对象编程的基本理念与核心设计思想

  • 解释下多态性(polymorphism),封装性(encapsulation),内聚(cohesion)以及耦合(coupling)。
  • 继承(Inheritance)与聚合(Aggregation)的区别在哪里。
  • 你是如何理解干净的代码(Clean Code)与技术负载(Technical Debt)的。
  • 描述下常用的重构技巧。
  • 阐述下SOLID原则。
  • 其他的譬如 KISS,DRY,YAGNI 等原则又是什么含义。
  • 什么是设计模式(Design Patterns)?你知道哪些设计模式?
  • 你有了解过存在哪些反模式(Anti-Patterns)吗?
  • 你会如何设计登陆舰/数学表达式计算程序/一条龙?
  • 你知道哪些基本的排序算法,它们的计算复杂度如何?在给定数据的情况下你会倾向于使用哪种算法呢?
  • 尝试编写如下代码:
    • 计算指定数字的阶乘
    • 开发 Fizz Buzz 小游戏
    • 倒转句子中的单词
    • 回文字符串检测
    • 枚举给定字符串的所有排列组合

Java 核心概念

  • equals 与 hashCode 的异同点在哪里?Java 的集合中又是如何使用它们的。
  • 描述下 Java 中集合(Collections),接口(Interfaces),实现(Implementations)的概念。LinkedList 与 ArrayList 的区别是什么?
  • 基础类型(Primitives)与封装类型(Wrappers)的区别在哪里?
  • final 与 static 关键字可以用于哪里?它们的作用是什么?
  • 阐述下 Java 中的访问描述符(Access Modifiers)。
  • 描述下 String,StringBuilder 以及 StringBuffer 区别。
  • 接口(Interface)与抽象类(Abstract Class)的区别在哪里。
  • 覆盖(Overriding)与重载(OverLoading)的区别在哪里。
  • 异常分为哪几种类型?以及所谓的handle or declare原则应该如何理解?
  • 简述垃圾回收器的工作原理。
  • 你是如何处理内存泄露或者栈溢出问题的?
  • 如何构建不可变的类结构?关键点在哪里?
  • 什么是 JIT 编译?
  • Java 8 / Java 7 为我们提供了什么新功能?即将到来的 Java 9 又带来了怎样的新功能?

Hibernate / 数据库

  • 请解释下 ORM。
  • 简述下 Hibernate 的优劣特性。
  • Hibernate 与 JPA 区别在哪?
  • Hibernate 最新版提供了哪些特性?
  • 什么是懒加载(Lazy Loading)?
  • 什么是 N+1 难题?
  • 介绍一些熟悉的 Hibernate 注释。
  • 简介下 Hibernate Session 与 SessionFactory。
  • Entity Beans 的状态有哪些。
  • Hibernate 中的缓存分为几层。

Hibernate 中事务的支持分为几级?

  • 什么是乐观锁(Optimistic Locking)?
  • 简述下 ACID 原则。
  • 简述下数据库正则化(Normalizations)。
  • 请介绍下你日常工作中优化慢查询(Slow Query)的策略。

Spring

  • 新版的 Spring 中有哪些新特性?
  • 介绍下 Spring 的优势与缺陷。
  • 什么是控制反转(Inversion of Control)与依赖注入(Dependency Injection)?
  • 你用过哪些 Spring 的模块?
  • Spring 中是如何使用依赖注入的?
  • Spring 中提供了几种自动注入的机制?
  • 介绍下 Spring MVC。
  • Spring 中 Scopes 有哪些?
  • Spring 中 Bean 的生命周期包含哪些步骤?
  • Spring Bean 与 EJB Bean 的区别在哪里?

其他主题

  • 介绍下切面编程(Aspect Oriented Programming)。
  • 概述下 GET 与 POST 的区别。
  • Web Server、Web Container 与 Application Server 的区别是什么?
  • 简要介绍下从浏览器输入 URL 开始到获取到请求界面之后 Java Web 应用中发生了什么。
  • 什么是 N 层架构?
  • 微服务(MicroServices)与巨石型应用(Monolithic Applications)之间的区别在哪里?
  • 你知道哪些商业级设计模式?
  • 你是如何测试一个应用的?知道哪些测试框架?
  • 你是如何测试单个方法的?
  • 在你的职业生涯中,算得上最困难的技术挑战是什么?
  • 什么是领域驱动开发(Domain Driven Development)?
  • 介绍下一些你最爱的 IDE 的常用插件。
  • 除了 IDE 之外,你的日常工作中还会用到哪些工具?
  • 你使用什么版本管理工具?
  • 分支(Branch)与标签(Tag)之间的区别在哪里?
  • 你常用的持续集成(Continuous Integration)、静态代码分析(Static Code Analysis)工具有哪些?

原文出处:Java 进阶面试问题列表

时间: 2024-10-26 12:07:46

Java 进阶面试问题列表的相关文章

java 面向对象面试集锦_java

java  面向对象:这里整理了面向对象的基础知识,帮助大家学习理解,希望能帮助到大家,这里是 根据公司面试资料整理的相关知识: Overload和Override的区别.Overloaded的方法是否可以改变返回值的类型? Overload是重载的意思,Override是覆盖的意思,也就是重写.重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同). 重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子

Java进阶学习(一) String类

之前的Java基础系列中讨论了Java最核心的概念,特别是面向对象的基础.在Java进阶中,我将对Java基础进行补充,并转向应用层面. 大部分编程语言都能够处理字符串(String).字符串是有序的字符集合,比如"Hello World!".在Java中,字符串被存储为String类对象.调用字符串对象的方法,可以实现字符串相关的操作. String类包含在java.lang包中.这个包会在Java启动的时候自动import,所以可以当做一个内置类(built-in class).我

javase-关于java进阶的问题。

问题描述 关于java进阶的问题. 已经学完了javase,想写些桌面级的应用程序,但发现只能写些像计算器等这样的小程序,想做些音乐播放器,截屏软件类似这样的程序该看些什么?求大神们指导下,该看什么书呢? 解决方案 java进阶 ------ 基于Socket低层次网络编程Java进阶之欧拉工程 第十五篇[网格路径问题] 解决方案二: 不建议写桌面程序,主流是安卓以及web 解决方案三: java 重点应用是java web,用java做c/s,不如其他的工具 解决方案四: Java目前有两个大

java中一个商品列表集合简单问题

问题描述 java中一个商品列表集合简单问题 java中一个商品列表集合简单问题 java中一个商品列表集合简单问题 肯德可以理解为对象,java一切都是对象 那么可以理解为一个类吗可以理解为一个数组吗,可以理解为一种数据泪腺吗 解决方案 对象集合类是类,但不能说对象集合的对象是一个类,对象就是类的实例,和类是不等的.数组是指基本数据类型集合.比如int [] arrs = new int[]{},而List 等类创建的对象集只能称为集合.不能理解为数据类型.数据类型只有基本类型和引用类型.

Java中利用散列表实现股票行情的查询(转)

Java中利用散列表实现股票行情的查询 建设银行云南省保山地区分行 杨绍方 ---- 在java中,提供了一个散列表类Hashtable,利用该类,我们可以按照特定的方式来存储数据,从而达到快速检索的目的.本文以查询股票的收盘数据为例,详细地说明java中散列表的使用方法.一.散列表的原理 ---- 散列表,又称为哈希表,是线性表中一种重要的存储方式和检索方法.在散列表中,可以对节点进行快速检索.散列表算法的基本思想是:由结点的关键码值决定结点的存储地址,即以关键码值k为自变量,通过一定的函数关

java实现递归文件列表的方法_java

本文实例讲述了java实现递归文件列表的方法.分享给大家供大家参考.具体如下: FileListing.java如下: import java.util.*; import java.io.*; /** * Recursive file listing under a specified directory. * * @author javapractices.com * @author Alex Wong * @author anonymous user */ public final cla

★★★最新,最全的java就业面试资料★★★

问题描述 推荐一个很好的资源java就业面试宝典给大家,我已经全部分类了,命中率高达80%哦!下载地址如下:

关于java网络爬虫提取列表链接的问题

问题描述 关于java网络爬虫提取列表链接的问题 相关链接:http://weixin.sogou.com/weixin?query=AECOM&fr=sgsearch&type=2&ie=utf8&w=01019900&sut=2818&sst0=1441676689870&lkt=5%2C1441676687340%2C1441676688517 请指导一下,谢谢 解决方案 获取页面的源码,然后使用正则表达式提取出来连接 解决方案二: 这两张图片

Java进阶教程之异常处理_java

程序很难做到完美,不免有各种各样的异常.比如程序本身有bug,比如程序打印时打印机没有纸了,比如内存不足.为了解决这些异常,我们需要知道异常发生的原因.对于一些常见的异常,我们还可以提供一定的应对预案.C语言中的异常处理是简单的通过函数返回值来实现的,但返回值代表的含义往往是由惯例决定的.程序员需要查询大量的资料,才可能找到一个模糊的原因.面向对象语言,比如C++, Java, Python往往有更加复杂的异常处理机制.这里讨论Java中的异常处理机制. Java异常处理 异常处理 Java的异