基本信息
- 出版社 : 电子工业出版社; 第1版 (2019年11月27日)
- 出版日期 : 2019年11月1日
- 品牌 : 电子工业出版社
- 语言 : 简体中文
- 文件大小 : 112296 KB
- 纸书页数 : 372页
- 王磊 (作者)
- 下载格式:azw3、epub、mobi
编辑推荐
精讲Java面试必需的JVM原理、Java基础、并发编程、数据结构和算法、网络与负载均衡、数据库与分布式事务、分布式缓存原理及应用、设计模式原理及实现
内容简介
本书详细介绍了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等本书以讲解原理为主,因为大部分工程师在项目中都用过,但是对其原理不是很了解,导致面试中被来应该知道的问题不能做到系统的回答。
作者简介
本书详细介绍了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等本书以讲解原理为主,因为大部分工程师在项目中都用过,但是对其原理不是很了解,导致面试中被来应该知道的问题不能做到系统的回答。
前言
本书是对Java程序员面试必备知识点的总结,详细讲解了JVM原理、多线程、数据结构和算法、分布式缓存、设计模式等内容,希望读者能通过阅读本书对Java的基础原理有更深入、全面的理解。
面试官通常会在短短两小时内对面试者的知识结构进行全面了解,面试者在回答问题时如果拖泥带水且不能直击问题的本质,则很难充分表现自己,最终影响面试结果。针对这种情况,本书在讲解知识点时不拖泥带水,力求精简,详细介绍了Java程序员面试时常被问及的核心知识点。
章节架构
本书共9章,各章所讲内容如下。
第1章讲解JVM原理,涉及JVM运行机制、JVM内存模型、常用垃圾回收算法和JVM类加载机制等内容。
第2章讲解Java基础知识,涉及集合、异常分类及处理、反射、注解、内部类、泛型和序列化等内容。
第3章讲解Java并发编程知识,涉及Java多线程的工作原理及应用、Java线程池的工作原理及应用,以及锁、进程调度算法等内容。
第4章讲解数据结构知识,涉及栈、队列、链表、散列表、二叉树、红黑树、图和位图等内容。
第5章讲解Java中的常用算法,涉及二分查找、冒泡排序、插入排序、快速排序、希尔排序、归并排序、桶排序、基数排序等算法。
第6章讲解网络与负载均衡原理,涉及TCP/IP、HTTP、常用负载均衡算法和LVS原理等内容。
第7章讲解数据库及分布式事务原理,涉及数据库存储引擎、数据库并发操作和锁、数据库分布式事务等内容。
第8章讲解分布式缓存的原理及应用,涉及分布式缓存介绍、Ehcache原理及应用、Redis原理及应用、分布式缓存设计的核心问题等内容。
第9章讲解设计模式,涉及常见的23种经典设计模式。
阅读建议
本书目录细致,建议读者在阅读本书之后以目录作为参考温故而知新,达到融会贯通的目的。建议读者花3周进行细读,详细理解书中的知识点、代码和架构图;再花两天进行复习,对着目录回忆知识点,对想不起来的部分及时查漏补缺;在面试前再花3小时进行复习,以充分掌握本书知识点。这样,读者就能对书中每个知识点的广度和深度理解更充分,在面试时胸有成竹、百战不殆。
致谢
感谢电子工业出版社博文视点的张国霞编辑,她的鼓励和引导对本书的写作和出版有很大的帮助;感谢王晓栋,是他关注并向编辑提出了本书的出版价值。
写技术书籍是很耗费精力的,笔者常常因为一行代码或者一张图能否准确表达含义而思考再三。出于工作的原因,笔者只能在晚上和周末写作,写作难度很大,所以十分感谢妻子张艳娇女士,没有她的鼓励和支持,本书很难顺利出版;也十分感谢家人和朋友在工作和生活中对笔者的关心和帮助。
精彩书摘
1.1 JVM的运行机制
JVM(Java Virtual Machine)是用于运行Java字节码的虚拟机,包括一套字节码指令集、一组程序寄存器、一个虚拟机栈、一个虚拟机堆、一个方法区和一个垃圾回收器。JVM运行在操作系统之上,不与硬件设备直接交互。
Java源文件在通过编译器之后被编译成相应的.Class文件(字节码文件),.Class文件又被JVM中的解释器编译成机器码在不同的操作系统(Windows、Linux、Mac)上运行。每种操作系统的解释器都是不同的,但基于解释器实现的虚拟机是相同的,这也是Java能够跨平台的原因。在一个Java进程开始运行后,虚拟机就开始实例化了,有多个进程启动就会实例化多个虚拟机实例。进程退出或者关闭,则虚拟机实例消亡,在多个虚拟机实例之间不能共享数据。
Java程序的具体运行过程如下。
(1)Java源文件被编译器编译成字节码文件。
(2)JVM将字节码文件编译成相应操作系统的机器码。
(3)机器码调用相应操作系统的本地方法库执行相应的方法。
Java虚拟机包括一个类加载器子系统(Class Loader SubSystem)、运行时数据区(Runtime Data Area)、执行引擎和本地接口库(Native Interface Library)。本地接口库通过调用本地方法库(Native Method Library)与操作系统交互,如图1-1所示。
其中:
◎ 类加载器子系统用于将编译好的.Class文件加载到JVM中;
◎ 运行时数据区用于存储在JVM运行过程中产生的数据,包括程序计数器、方法区、本地方法区、虚拟机栈和虚拟机堆;
◎ 执行引擎包括即时编译器和垃圾回收器,即时编译器用于将Java字节码编译成具体的机器码,垃圾回收器用于回收在运行过程中不再使用的对象;
◎ 本地接口库用于调用操作系统的本地方法库完成具体的指令操作。
1.2 多线程
在多核操作系统上,JVM允许在一个进程内同时并发执行多个线程。JVM中的线程与操作系统中的线程是相互对应的,在JVM线程的本地存储、缓冲区分配、同步对象、栈、程序计数器等准备工作都完成时,JVM会调用操作系统的接口创建一个与之对应的原生线程;在JVM线程运行结束时,原生线程随之被回收。操作系统负责调度所有线程,并为其分配CPU时间片,在原生线程初始化完毕时,就会调用Java线程的run()执行该线程;在线程结束时,会释放原生线程和Java线程所对应的资源。
在JVM后台运行的线程主要有以下几个。
◎ 虚拟机线程(JVMThread):虚拟机线程在JVM到达安全点(SafePoint)时出现。
◎ 周期性任务线程:通过定时器调度线程来实现周期性操作的执行。
◎ GC线程:GC线程支持JVM中不同的垃圾回收活动。
◎ 编译器线程:编译器线程在运行时将字节码动态编译成本地平台机器码,是JVM跨平台的具体实现。
◎ 信号分发线程:接收发送到JVM的信号并调用JVM方法。