基础概念

  • 操作系统里堆和栈有啥不同
  • 基于注解的切面实现是什么
  • 对象/关系映射集成模块指的是什么
  • Java的反射机制是什么意思
  • ACID指的是什么
  • BS和CS之间有什么联系与差异
  • Cookie和Session的不同点
  • fail-fast和fail-safe机制的区别是什么
  • get和post请求有哪些不一样
  • 接口(Interface)和抽象类(abstract class)的区别
  • IOC有什么优点
  • IO和NIO的不同,NIO的优势在哪
  • Java 8/Java 7给我们带来了哪些新功能
  • 什么是竞态条件?举个例子说明一下。
  • JRE、JDK、JVM和JIT之间有什么区别
  • MVC的各个部分可以用哪些技术来实现?如何实现?
  • RPC通信和RMI有什么不同
  • Web Service(Web服务)是什么
  • 介绍一下JSWDL开发包。解释JAXP、JAXM。说明SOAP、UDDI、WSDL。
  • WEB容器主要有哪些功能?请列举一些常见的WEB容器名称。
  • 一个”.java”源文件里能包含多个类(不是内部类)吗?有什么限制
  • 简单说说你了解的类加载器。有没有实现过类加载器
  • 解释一下什么是AOP(面向切面编程)
  • 请简要说明Servlet的生命周期及相关方法
  • 请简要描述一下Ajax的原理和实现步骤
  • 简单说说Struts的主要功能
  • 什么是N层架构
  • CORBA是什么?用途是什么
  • 什么是Java虚拟机?为什么Java被称为“平台无关的编程语言”
  • 什么是正则表达式?用途是什么?哪个包用正则表达式来实现模式匹配
  • 什么是懒加载(Lazy Loading)
  • 什么是尾递归,为什么需要尾递归
  • 什么是控制反转(Inversion of Control)和依赖注入(Dependency Injection)

GC

  • 概念
    • GC是什么?为什么需要GC
    • 哪些情况会导致垃圾回收
    • GC是如何运行的
    • 新生代、老年代和永久区是什么
    • GC有几种方式?怎么配置
    • 一个对象什么时候会被GC?如何判断一个对象是否存活
    • System.gc()和Runtime.gc()会做什么?能保证GC执行吗
    • 垃圾回收器能马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
    • Minor GC、Major GC、Young GC和Full GC分别在什么情况下发生
    • 垃圾回收算法的实现原理
    • 如果把对象的引用设为null,垃圾收集器会立即释放对象占用的内存吗?
    • 垃圾回收的最佳实践是什么
  • GC收集器有哪些
    • 垃圾回收器的基本原理是什么?
    • 串行(serial)收集器和吞吐量(throughput)收集器的区别是什么
    • Serial和Parallel GC之间的不同之处
    • CMS收集器和G1收集器的特点与区别
    • CMS垃圾回收器的工作过程
    • JVM中一次完整的GC流程是怎样的?对象如何晋升到老年代
    • 吞吐量优先和响应优先的垃圾收集器选择
  • GC策略
    • 举一个实际场景,选择一种GC策略
    • JVM的永久代中会发生垃圾回收吗
  • 收集方法
    • 标记清除、标记整理、复制算法的原理与特点?分别用在什么地方
    • 如果让你优化收集方法,有什么思路

多线程

  • 基本概念
    • 什么是线程
    • 多线程的好处
    • 多线程的几种实现方式
      • 用Runnable还是Thread
    • 什么是线程安全
      • Vector、SimpleDateFormat是线程安全类吗
      • 哪些Java类不是线程安全的
      • 哪些集合类是线程安全的
    • 多线程中的忙循环是什么
    • 如何创建一个线程
    • 编写多线程程序有几种实现方式
    • 什么是线程局部变量
    • 线程和进程有什么区别?进程间如何通信,线程间如何通信
    • 什么是多线程环境下的伪共享(false sharing)
    • 同步和异步有什么相同和不同之处,在什么情况下分别使用它们?举例说明
  • Current
    • ConcurrentHashMap和Hashtable的区别
    • ArrayBlockingQueue、CountDownLatch的用法
    • ConcurrentHashMap的并发度是什么
  • CyclicBarrier和CountDownLatch有什么不同?各自的内部原理和用法是什么
  • Semaphore的用法
  • Thread
    • 启动一个线程是调用run()还是start()方法?start()和run()方法有什么区别
    • 调用start()方法时会执行run()方法,为什么不能直接调用run()方法
    • sleep()方法和对象的wait()方法都能让线程暂停执行,它们有什么区别
    • yield方法有什么作用?sleep()方法和yield()方法有什么区别
    • Java中如何停止一个线程
    • stop()和suspend()方法为什么不推荐使用
    • 如何在两个线程间共享数据
    • 如何强制启动一个线程
    • 如何让正在运行的线程暂停一段时间
    • 什么是线程组,为什么在Java中不推荐使用
    • 你是如何调用wait方法的?使用if块还是循环?为什么
  • 生命周期
    • 有哪些不同的线程生命周期
    • 线程状态中,BLOCKED和WAITING有什么区别
    • 画一个线程的生命周期状态图

数据结构

* 为什么在重写equals方法的时候需要重写hashCode方法?equals与hashCode的异同点在哪里
* a.hashCode()有什么用?与a.equals(b)有什么关系
* hashCode()和equals()方法的重要性体现在什么地方
* Object:Object有哪些公共方法?Object类hashcode、equals的设计原则?Sun公司为什么这么设计?Object类的概述
* 如何在父类中为子类自动完成所有的hashcode和equals实现?这么做有什么优缺点。
* 可以在hashcode()中使用随机数字吗?
  • LinkedHashMap
    • LinkedHashMap和PriorityQueue的区别是什么
  • List
    • List、Set、Map三个接口,存取元素时各有什么特点
    • List、Set、Map是否继承自Collection接口
    • 遍历一个List有哪些不同的方式
    • LinkedList
      • LinkedList是单向链表还是双向链表
      • LinkedList与ArrayList有什么区别
      • 描述下Java中集合(Collections)、接口(Interfaces)、实现(Implementations)的概念。LinkedList与ArrayList的区别是什么?
      • 插入数据时,ArrayList、LinkedList、Vector谁速度较快?
    • ArrayList
      • ArrayList和HashMap的默认大小是多少
      • ArrayList和LinkedList的区别,什么时候用ArrayList?
      • ArrayList和Set的区别?
      • ArrayList、LinkedList、Vector的区别
      • ArrayList是如何实现的,ArrayList和LinkedList的区别
      • ArrayList如何实现扩容

反射

字符串

  • 写一个方法,输入一个文件名和一个字符串,统计这个字符串在该文件中出现的次数。
  • 写一个程序找出所有字符串的组合,并检查它们是否是回文串
  • 写一个字符串反转函数,输入abcde转换成edcba的代码
  • 小游戏,倒转句子中的单词
  • 将GB2312编码的字符串转换为ISO-8859-1编码的字符串
  • 请写一段代码来计算给定文本内字符“A”的个数。分别用迭代和递归两种方式
  • 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”6,应该输出为“我ABC”而不是“我ABC+汉的半个”
  • 给定2个包含单词列表(每行一个)的文件,编程列出交集
  • 打印出一个字符串的所有排列
  • 将一个键盘输入的数字转化成中文输出(例如:输入1234567,输出:一百二十三万四千五百六十七)
  • 在Web应用开发过程中经常遇到输出某种编码的字符,如从GBK到ISO8859-1等,如何输出一个某种编码的字符串

知识面

  • KISS、DRY、YAGNI等原则是什么含义
  • 分布式事务的原理、优缺点,如何使用分布式事务?
  • 分布式集群下如何实现唯一序列号
  • 网络
    • HTTPS的加密方式是什么,讲讲整个加密解密流程
    • HTTPS和HTTP的区别
    • HTTP连接池实现原理
    • HTTP集群方案
    • Nginx、lighttpd、Apache三大主流Web服务器的区别
  • 是否看过框架的一些代码
  • 持久层设计要考虑的问题有哪些?你用过的持久层框架有哪些
  • 数值提升是什么
  • 你能解释一下里氏替换原则吗
  • 你是如何测试一个应用的?知道哪些测试框架
  • 传输层常见编程协议有哪些?并说出各自的特点

开放问题

  • 用一句话概括Web编程的特点
  • Google是如何在一秒内把搜索结果返回给用户的
  • 哪种依赖注入方式你建议使用,构造器注入,还是Setter方法注入
  • 树(二叉或其他)是许多普通数据结构的基础。请描述一些这样的数据结构以及何时可以使用它们
  • 某一项功能如何设计
  • 线上系统突然变得异常缓慢,你如何查找问题
  • 什么样的项目不适合用框架
  • 新浪微博是如何实现把微博推给订阅者的
  • 简要介绍下从浏览器输入URL开始到获取到请求界面之后Java Web应用中发生了什么
  • 请你谈谈SSH整合
  • 高并发下,如何做到安全地修改同一行数据
  • 12306网站的订票系统如何实现,如何保证不会超售票
  • 网站性能优化是如何进行的
  • 聊了下曾经参与设计的服务器架构
  • 请思考一个方案,实现分布式环境下的countDownLatch
  • 请思考一个方案,设计一个可以控制缓存总体大小的自动适应的本地缓存
  • 在你的职业生涯中,算得上最困难的技术挑战是什么
  • 如何写一篇设计文档,目录是什么
  • 大写的O是什么?举几个例子
  • 编程中自己都怎么考虑一些设计原则的,比如开闭原则,以及在工作中的应用
  • 解释一下网络应用的模式及其特点
  • 设计一个在线文档系统,文档可以被编辑,如何防止多人同时对同一份文档进行编辑更新
  • 说出数据连接池的工作机制是什么
  • 怎么获取一个文件中单词出现的最高频率
  • 描述一下你最常用的编程风格
  • 如果有机会重新设计你们的产品,你会怎么做
  • 如何搭建一个高可用系统
  • 如何启动时不需输入用户名与密码
  • 如何在基于Java的Web项目中实现文件上传和下载
  • 如何实现一个秒杀系统,保证只有几位用户能买到某件商品。
  • 如何实现负载均衡,有哪些算法可以实现
  • 如何设计一个购物车?想想淘宝的购物车如何实现的
  • 如何设计一套高并发支付方案,架构如何设计
  • 如何设计建立和保持100w的长连接
  • 如何避免浏览器缓存。
  • 如何防止缓存雪崩
  • 如果AB两个系统互相依赖,如何解除依赖
  • 如果有人恶意创建非法连接,怎么解决
  • 如果有几十亿的白名单,每天白天需要高并发查询,晚上需要更新一次,如何设计这个功能
  • 如果系统要使用超大整数(超过long长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算)
  • 如果要设计一个图形系统,请你设计基本的图形元件(Point,Line,Rectangle,Triangle)的简单实现
  • 如果让你实现一个并发安全的链表,你会怎么做
  • 应用服务器与WEB服务器的区别?应用服务器怎么监控性能,各种方式的区别?你使用过的应用服务器优化技术有哪些
  • 大型网站在架构上应当考虑哪些问题
  • 有没有处理过线上问题?出现内存泄露,CPU利用率标高,应用无响应时如何处理的
  • 最近看什么书,印象最深刻的是什么
  • 描述下常用的重构技巧
  • 你使用什么版本管理工具?分支(Branch)与标签(Tag)之间的区别在哪里
  • 你有了解过存在哪些反模式(Anti-Patterns)吗
  • 你用过的网站前端优化的技术有哪些
  • 如何分析Thread dump
  • 你如何理解AOP中的连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)这些概念
  • 你是如何处理内存泄露或者栈溢出问题的
  • 你们线上应用的JVM参数有哪些
  • 怎么提升系统的QPS和吞吐量