展开全部

主编推荐语

本书详细介绍了Java架构师在BAT和移动互联网公司面试中常被问及的核心知识。

内容简介

本书和市场上类似的书最大的区别在与不拖泥带水,力求精简。对Java基础概念笔者认为作为高级Java研发工程师或者架构师均已了解,因此不做过多的解释,以免分散读者对难点的理解。因为在一般高级职位的面试中要求面试管在2个小时内对面试人员做全面的知识结构的了解,如果面试者回答问题拖泥带水不能直击问题本质,很难在短暂时间内完成作答,最后影响面试结果。本书主要包括JVM原理、Java集合、Java多并发编程、Java基础知识、Spring原理、微服务原理和应用、Netty和RPC、网络架构、日志框架、负载均衡、数据库理论和应用、常用一致性算法、Java常用数据结构、Java常用算法、常用加解密算法、分布式缓存常见问题及解决方案、ZooKeepr、Kafka、Rebbitmq、Storm、HBase、Cassandra、Hadoop、Spark、云计算概念。

对于Java基础知识本书以介绍核心知识为主,常用概念不做过多赘述。对于应用部分,如Spring,ZooKeeper、Kafka等本书以讲解原理为主,因为大部分工程师在项目中都用过,但是对其原理不是很了解,导致面试中被来应该知道的问题不能做到系统的回答。

目录

  • 版权信息
  • 前言
  • 章节架构
  • 阅读建议
  • 致谢
  • 第1章 JVM
  • 1.1 JVM的运行机制
  • 1.2 多线程
  • 1.3 JVM的内存区域
  • 1.3.1 程序计数器:线程私有,无内存溢出问题
  • 1.3.2 虚拟机栈:线程私有,描述Java方法的执行过程
  • 1.3.3 本地方法区:线程私有
  • 1.3.4 堆:也叫作运行时数据区,线程共享
  • 1.3.5 方法区:线程共享
  • 1.4 JVM的运行时内存
  • 1.4.1 新生代:Eden区、ServivorTo区和ServivorFrom区
  • 1.4.2 老年代
  • 1.4.3 永久代
  • 1.5 垃圾回收与算法
  • 1.5.1 如何确定垃圾
  • 1.引用计数法
  • 2.可达性分析
  • 1.5.2 Java中常用的垃圾回收算法
  • 1.标记清除算法
  • 2.复制算法
  • 3.标记整理算法
  • 4.分代收集算法
  • 1.6 Java中的4种引用类型
  • 1.7 分代收集算法和分区收集算法
  • 1.7.1 分代收集算法
  • 1.新生代与复制算法
  • 2.老年代与标记整理算法
  • 1.7.2 分区收集算法
  • 1.8 垃圾收集器
  • 1.8.1 Serial垃圾收集器:单线程,复制算法
  • 1.8.2 ParNew垃圾收集器:多线程,复制算法
  • 1.8.3 Parallel Scavenge垃圾收集器:多线程,复制算法
  • 1.8.4 Serial Old垃圾收集器:单线程,标记整理算法
  • 1.8.5 Parallel Old垃圾收集器:多线程,标记整理算法
  • 1.8.6 CMS垃圾收集器
  • 1.8.7 G1垃圾收集器
  • 1.9 Java网络编程模型
  • 1.9.1 阻塞I/O模型
  • 1.9.2 非阻塞I/O模型
  • 1.9.3 多路复用I/O模型
  • 1.9.4 信号驱动I/O模型
  • 1.9.5 异步I/O模型
  • 1.9.6 Java I/O
  • 1.9.7 Java NIO
  • 1. Channel
  • 2. Buffer
  • 3. Selector
  • 4. Java NIO使用
  • 1.10 JVM的类加载机制
  • 1.10.1 JVM的类加载阶段
  • 1.加载
  • 2.验证
  • 3.准备
  • 4.解析
  • 5.初始化
  • 1.10.2 类加载器
  • 1.10.3 双亲委派机制
  • 1.10.4 OSGI
  • 第2章 Java基础
  • 2.1 集合
  • 2.1.1 List:可重复
  • 1.ArrayList:基于数组实现,增删慢,查询快,线程不安全
  • 2.Vector:基于数组实现,增删慢,查询快,线程安全
  • 3.LinkedList:基于双向链表实现,增删快,查询慢,线程不安全
  • 2.1.2 Queue
  • 2.1.3 Set:不可重复
  • 1.HashSet:HashTable实现,无序
  • 2.TreeSet:二叉树实现
  • 3.LinkHashSet:HashTable实现数据存储,双向链表记录顺序
  • 2.1.4 Map
  • 1.HashMap:数组+链表存储数据,线程不安全
  • 2.ConcurrentHashMap:分段锁实现,线程安全
  • 3.HashTable:线程安全
  • 4.TreeMap:基于二叉树数据结构
  • 5.LinkedHashMap:基于HashTable数据结构,使用链表保存插入顺序
  • 2.2 异常分类及处理
  • 2.2.1 异常的概念
  • 2.2.2 异常分类
  • 2.2.3 异常处理方式:抛出异常、使用try catch捕获并处理异常
  • 2.3 反射机制
  • 2.3.1 动态语言的概念
  • 2.3.2 反射机制的概念
  • 2.3.3 反射的应用
  • 2.3.4 Java的反射API
  • 2.3.5 反射的步骤
  • 2.3.6 创建对象的两种方式
  • 2.3.7 Method的invoke方法
  • 2.4 注解
  • 2.4.1 注解的概念
  • 2.4.2 标准元注解:@Target、@Retention、@Documented、@Inherited
  • 2.4.3 注解处理器
  • 1.定义注解接口
  • 2.使用注解接口
  • 3.定义注解处理器
  • 2.5 内部类
  • 2.5.1 静态内部类
  • 2.5.2 成员内部类
  • 2.5.3 局部内部类
  • 2.5.4 匿名内部类
  • 2.6 泛型
  • 2.6.1 泛型标记和泛型限定:E、T、K、V、N、?
  • 1.对泛型上限的限定:<? extends T>
  • 2.对泛型下限的限定:<? super T>
  • 2.6.2 泛型方法
  • 2.6.3 泛型类
  • 2.6.4 泛型接口
  • 2.6.5 类型擦除
  • 2.7 序列化
  • 2.7.1 Java序列化API的使用
  • 2.7.2 序列化和反序列化
  • 第3章 Java并发编程
  • 3.1 Java线程的创建方式
  • 3.1.1 继承Thread类
  • 3.1.2 实现Runnable接口
  • 3.1.3 通过ExecutorService和Callable<Class>实现有返回值的线程
  • 3.1.4 基于线程池
  • 3.2 线程池的工作原理
  • 3.2.1 线程复用
  • 3.2.2 线程池的核心组件和核心类
  • 3.2.3 Java线程池的工作流程
  • 3.2.4 线程池的拒绝策略
  • 1. AbortPolicy
  • 2. CallerRunsPolicy
  • 3. DiscardOldestPolicy
  • 4. DiscardPolicy
  • 5.自定义拒绝策略
  • 3.3 5种常用的线程池
  • 3.3.1 newCachedThreadPool
  • 3.3.2 newFixedThreadPool
  • 3.3.3 newScheduledThreadPool
  • 3.3.4 newSingleThreadExecutor
  • 3.3.5 newWorkStealingPool
  • 3.4 线程的生命周期
  • 3.4.1 新建状态:New
  • 3.4.2 就绪状态:Runnable
  • 3.4.3 运行状态:Running
  • 3.4.4 阻塞状态:Blocked
  • 3.4.5 线程死亡:Dead
  • 3.5 线程的基本方法
  • 3.5.1 线程等待:wait方法
  • 3.5.2 线程睡眠:sleep方法
  • 3.5.3 线程让步:yield方法
  • 3.5.4 线程中断:interrupt方法
  • 3.5.5 线程加入:join方法
  • 3.5.6 线程唤醒:notify方法
  • 3.5.7 后台守护线程:setDaemon方法
  • 3.5.8 sleep方法与wait方法的区别
  • 3.5.9 start方法与run方法的区别
  • 3.5.10 终止线程的4种方式
  • 1.正常运行结束
  • 2.使用退出标志退出线程
  • 3.使用Interrupt方法终止线程
  • 4.使用stop方法终止线程:不安全
  • 3.6 Java中的锁
  • 3.6.1 乐观锁
  • 3.6.2 悲观锁
  • 3.6.3 自旋锁
  • 1.自旋锁的优缺点
  • 2.自旋锁的时间阈值
  • 3.6.4 synchronized
  • 1.synchronized的作用范围
  • 2.synchronized的用法简介
  • 3.synchronized的实现原理
  • 3.6.5 ReentrantLock
  • 1.ReentrantLock的用法
  • 2.ReentrantLock如何避免死锁:响应中断、可轮询锁、定时锁
  • 3.Lock接口的主要方法
  • 4.公平锁与非公平锁
  • 5.tryLock、lock和lockInterruptibly的区别
  • 3.6.6 synchronized和ReentrantLock的比较
  • 3.6.7 Semaphore
  • 3.6.8 AtomicInteger
  • 3.6.9 可重入锁
  • 3.6.10 公平锁与非公平锁
  • 3.6.11 读写锁:ReadWriteLock
  • 3.6.12 共享锁和独占锁
  • 3.6.13 重量级锁和轻量级锁
  • 3.6.14 偏向锁
  • 3.6.15 分段锁
  • 3.6.16 同步锁与死锁
  • 3.6.17 如何进行锁优化
  • 1.减少锁持有的时间
  • 2.减小锁粒度
  • 3.锁分离
  • 4.锁粗化
  • 5.锁消除
  • 3.7 线程上下文切换
  • 3.7.1 上下文切换
  • 3.7.2 引起线程上下文切换的原因
  • 3.8 Java阻塞队列
  • 3.8.1 阻塞队列的主要操作
  • 1.插入操作
  • 2.获取数据操作
  • 3.8.2 Java中的阻塞队列实现
  • 1.ArrayBlockingQueue
  • 2.LinkedBlockingQueue
  • 3.PriorityBlockingQueue
  • 4.DelayQueue
  • 5.SynchronousQueue
  • 6.LinkedTransferQueue
  • 7.LinkedBlockingDeque
  • 3.9 Java并发关键字
  • 3.9.1 CountDownLatch
  • 3.9.2 CyclicBarrier
  • 3.9.3 Semaphore
  • 3.9.4 volatile关键字的作用
  • 3.10 多线程如何共享数据
  • 3.10.1 将数据抽象成一个类,并将对这个数据的操作封装在类的方法中
  • 3.10.2 将Runnable对象作为一个类的内部类,将共享数据作为这个类的成员变量
  • 3.11 ConcurrentHashMap并发
  • 3.11.1 减小锁粒度
  • 3.11.2 ConcurrentHashMap的实现
  • 3.12 Java中的线程调度
  • 3.12.1 抢占式调度
  • 3.12.2 协同式调度
  • 3.12.3 Java线程调度的实现:抢占式
  • 3.12.4 线程让出CPU的情况
  • 3.13 进程调度算法
  • 3.13.1 优先调度算法
  • 1.先来先服务调度算法
  • 2.短作业优先调度算法
  • 3.13.2 高优先权优先调度算法
  • 1.非抢占式优先调度算法
  • 2.抢占式优先调度算法
  • 3.高响应比优先调度算法
  • 3.13.3 时间片的轮转调度算法
  • 1.时间片轮转法
  • 2.多级反馈队列调度算法
  • 3.14 什么是CAS
  • 3.14.1 CAS的概念:比较并交换
  • 3.14.2 CAS的特性:乐观锁
  • 3.14.3 CAS自旋等待
  • 3.15 ABA问题
  • 3.16 什么是AQS
  • 3.16.1 AQS的原理
  • 3.16.2 state:状态
  • 3.16.3 AQS共享资源的方式:独占式和共享式
  • 第4章 数据结构
  • 4.1 栈及其Java实现
  • 4.2 队列及其Java实现
  • 4.3 链表
  • 4.3.1 链表的特点
  • 4.3.2 单向链表的操作及其Java实现
  • 1.单向链表的操作
  • 2.单向链表的Java实现
  • 4.3.3 双向链表及其Java实现
  • 4.3.4 循环链表
  • 4.4 散列表
  • 4.4.1 常用的构造散列函数
  • 4.4.2 Hash的应用
  • 4.5 二叉排序树
  • 4.5.1 插入操作
  • 4.5.2 删除操作
  • 4.5.3 查找操作
  • 4.5.4 用Java实现二叉排序树
  • 4.6 红黑树
  • 4.6.1 红黑树的特性
  • 4.6.2 红黑树的左旋
  • 4.6.3 红黑树的右旋
  • 4.6.4 红黑树的添加
  • 4.6.5 红黑树的删除
  • 4.7 图
  • 4.7.1 无向图和有向图
  • 4.7.2 图的存储结构:邻接矩阵
  • 1.无向图的邻接矩阵
  • 2.有向图的邻接矩阵
  • 3.带权重图的邻接矩阵
  • 4.7.3 图的存储结构:邻接表
  • 1.无向图的邻接表结构
  • 2.带权值的网图连接表结构
  • 4.7.4 图的遍历
  • 1.广度优先遍历
  • 2.深度优先遍历
  • 4.8 位图
  • 4.8.1 位图的数据结构
  • 4.8.2 位图的Java实现
  • 1.数据结构的定义
  • 2.查询方法的实现
  • 3.修改方法的实现
  • 第5章 Java中的常用算法
  • 5.1 二分查找算法
  • 5.1.1 二分查找算法的原理
  • 5.1.2 二分查找算法的Java实现
  • 5.2 冒泡排序算法
  • 5.2.1 冒泡排序算法的原理
  • 5.2.2 冒泡排序算法的Java实现
  • 5.3 插入排序算法
  • 5.3.1 插入排序算法的原理
  • 5.3.2 插入排序算法的Java实现
  • 5.4 快速排序算法
  • 5.4.1 快速排序算法的原理
  • 5.4.2 快速排序算法的Java实现
  • 5.5 希尔排序算法
  • 5.5.1 希尔排序算法的原理
  • 5.5.2 希尔排序算法的Java实现
  • 5.6 归并排序算法
  • 5.6.1 归并排序算法的原理
  • 5.6.2 归并排序算法的Java实现
  • 5.7 桶排序算法
  • 5.7.1 桶排序算法的原理
  • 5.7.2 桶排序算法的Java实现
  • 5.8 基数排序算法
  • 5.8.1 基数排序算法的原理
  • 5.8.2 基数排序算法的Java实现
  • 5.9 其他算法
  • 5.9.1 剪枝算法
  • 5.9.2 回溯算法
  • 5.9.3 最短路径算法
  • 第6章 网络与负载均衡
  • 6.1 网络
  • 6.1.1 OSI七层网络模型
  • 6.1.2 TCP/IP四层网络模型
  • 6.1.3 TCP三次握手/四次挥手
  • 1.TCP的数据包结构
  • 2.TCP中的三次握手
  • 3.TCP中的四次挥手
  • 6.1.4 HTTP的原理
  • 1.HTTP的传输流程
  • 2.HTTP中的常见状态码
  • 3.HTTPS
  • 6.1.5 CDN的原理
  • 1.CDN的关键技术
  • 2.CDN的主要特点
  • 3.内容分发系统
  • 4.负载均衡系统
  • 5.管理系统
  • 6.2 负载均衡
  • 6.2.1 四层负载均衡与七层负载均衡的对比
  • 1.四层负载均衡
  • 2.七层负载均衡
  • 6.2.2 负载均衡算法
  • 1.轮询均衡(Round Robin)
  • 2.权重轮询均衡(Weighted Round Robin)
  • 3.随机均衡(Random)
  • 4.权重随机均衡(Weighted Random)
  • 5.响应速度均衡(Response Time)
  • 6.最少连接数均衡(Least Connection)
  • 7.处理能力均衡
  • 8. DNS响应均衡(Flash DNS)
  • 9.散列算法均衡
  • 10. IP地址散列
  • 11. URL散列
  • 6.2.3 LVS的原理及应用
  • 1.LVS的原理
  • 2.LVS数据转发
  • 3.LVS NAT模式
  • 4.LVS DR模式
  • 5.LVS TUN模式
  • 6.LVS FULLNAT模式
  • 6.2.4 Nginx反向代理与负载均衡
  • 1.upstream_module
  • 2.proxy_pass
  • 第7章 数据库及分布式事务
  • 7.1 数据库的基本概念及原则
  • 7.1.1 存储引擎
  • 1. MyIASM
  • 2. InnoDB
  • 3. TokuDB
  • 4. Memory
  • 7.1.2 创建索引的原则
  • 7.1.3 数据库三范式
  • 1.第一范式
  • 2.第二范式
  • 3.第三范式
  • 7.1.4 数据库事务
  • 7.1.5 存储过程
  • 7.1.6 触发器
  • 7.2 数据库的并发操作和锁
  • 7.2.1 数据库的并发策略
  • 1.乐观锁
  • 2.悲观锁
  • 3.时间戳
  • 7.2.2 数据库锁
  • 1.行级锁
  • 2.表级锁
  • 3.页级锁
  • 4.基于Redis的分布式锁
  • 7.2.3 数据库分表
  • 7.3 数据库分布式事务
  • 7.3.1 CAP
  • 7.3.2 两阶段提交协议
  • 1.Prepare(准备阶段)
  • 2.Commit(提交阶段)
  • 3.两阶段提交的缺点
  • 7.3.3 三阶段提交协议
  • 1.CanCommit阶段
  • 2.PreCommit阶段
  • 3.DoCommit阶段
  • 7.3.4 分布式事务
  • 1.传统事务
  • 2.柔性事务
  • 第8章 分布式缓存的原理及应用
  • 8.1 分布式缓存介绍
  • 8.2 Ehcache的原理及应用
  • 8.2.1 Ehcache的原理
  • 1.Ehcache的特点
  • 2.Ehcache的架构
  • 3.Ehcache的存储方式
  • 4.Ehcache的扩展模块
  • 8.2.2 Ehcache的应用
  • 8.3 Redis的原理及应用
  • 8.3.1 Redis的原理
  • 1.Redis的数据类型
  • 2.Redis管道
  • 3.Redis的事务
  • 4.Redis发布、订阅
  • 5.Redis集群数据复制的原理
  • 6.Redis的持久化
  • 7.Redis的集群模式及工作原理
  • 8.3.2 Redis的应用
  • 1.安装Redis
  • 2.应用Redis SpringBoot
  • 8.4 分布式缓存设计的核心问题
  • 8.4.1 缓存预热
  • 8.4.2 缓存更新
  • 8.4.3 缓存淘汰策略
  • 8.4.4 缓存雪崩
  • 8.4.5 缓存穿透
  • 8.4.6 缓存降级
  • 第9章 设计模式
  • 9.1 设计模式简介
  • 1.单一职责原则
  • 2.开闭原则
  • 3.里氏代换原则
  • 4.依赖倒转原则
  • 5.接口隔离原则
  • 6.合成/聚合复用原则
  • 7.迪米特法则
  • 9.2 工厂模式的概念及Java实现
  • 9.3 抽象工厂模式的概念及Java实现
  • 9.4 单例模式的概念及Java实现
  • 1.懒汉模式(线程安全)
  • 2.饿汉模式
  • 3.静态内部类
  • 4.双重校验锁
  • 9.5 建造者模式的概念及Java实现
  • 9.6 原型模式的概念及Java实现
  • 9.7 适配器模式的概念及Java实现
  • 1.类适配器模式
  • 2.对象适配器模式
  • 3.接口适配器模式
  • 9.8 装饰者模式的概念及Java实现
  • 9.9 代理模式的概念及Java实现
  • 9.10 外观模式的概念及Java实现
  • 9.11 桥接模式的概念及Java实现
  • 9.12 组合模式的概念及Java实现
  • 9.13 享元模式的概念及Java实现
  • 9.14 策略模式的概念及Java实现
  • 9.15 模板方法模式的概念及Java实现
  • 9.16 观察者模式的概念及Java实现
  • 9.17 迭代器模式的概念及Java实现
  • 9.18 责任链模式的概念及Java实现
  • 9.19 命令模式的概念及Java实现
  • 9.20 备忘录模式的概念及Java实现
  • 9.21 状态模式的概念及Java实现
  • 9.22 访问者模式的概念及Java实现
  • 9.23 中介者模式的概念及Java实现
  • 9.24 解释器模式的概念及Java实现
展开全部

评分及书评

3.9
8个评分
  • 用户头像
    给这本书评了
    4.0

    基本上涵盖了 Java 工程师所要掌握的知识点,对于面试前进行复习或总览知识点还是比较有帮助的,对于具体细节,还需对照补充资料或其他书籍。

      转发
      评论
      用户头像
      给这本书评了
      5.0
      666

      666

        转发
        评论

      出版方

      电子工业出版社

      电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。