课程目录:

第1章 课程导学

互联网招聘寒冬下,当前一线互联网大厂Java工程师岗位的面试更注重考察候选人的Java的核心类库用法和源码、JVM底层、GC,数据库、redis等技术

1-1 导学必看

第2章 计算机网络面试核心 本章节从一线互联网大厂收集了大量的笔试面试题,以此为基础,统计了常考的知识点:网络七层架构,TCP/IP协议,TCP连接,tcp/udp区别,http与https,socket原理,讲解上采用层层递进方式,有原理有实操演示,让大家更深刻的理解并掌握网络层相关的核心考点。2-1 网络基础知识讲解 2-2 TCP的三次握手_1 2-3 TCP的三次握手_2 2-4 TC P的四次挥手 2-5 TCP和UDP的区别 2-6 TCP的滑窗 2-7 HTTP相关 2-8 HTTP相关_2 2-9 HTTP和HTTPS的区别 2-10 socket相关 2-11 网络知识总结

第3章 数据库 本章节讲解关系型数据库,以主流的Mysql为例,特别的以LeeCode题库为基准,首先从数据库的架构出发,渐进式深入剖析了索引的优化,然后通过代码演示Sql的优化,最后深入去讲解数据库的锁这个高级面试中的加分和加薪点,紧接着在通过锁去进一步引申到数据库的ACID特性,并通过场景演示并发情况下存在问题及其解决方案。3-1 数据库架构 3-2 优化你的索引-运用二叉查找树 3-3 优化你的索引-运用B树 3-4 优化你的索引-运用B+树 3-5 优化你的索引-运用Hash以及BitMap 3-6 密集索引和稀疏索引的区别 3-7 索引额外的问题之如何调优Sql 3-8 索引额外问题之最左匹配原则的成因 3-9 索引额外问题之索引是建立越多越好吗 3-10 锁模块之MyISAM与InooDB关于锁方面的区别 3-11 锁模块之MyISAM与InooDB关于锁方面的区别2 3-12 锁模块之数据库事务的四大特性

3-13 锁模块之事务并发访问产生的问题以及事务隔离机制 3-14 锁模块之事务并发访问产生的问题以及事务隔离机制_2 3-15 锁模块之当前读和快照读3-16 锁模块之RR如何避免幻读 3-17 锁模块小结 3-18 关键语法讲解 3-19 本章总结 3-20 彩蛋之面试的三层架构

第4章 Redis 本章节以非关系型数据库/缓存数据库Redis为核心,首先介绍redis的常用数据类型及其使用,然后通过典型的面试场景,进一步去讲分布式锁、异步队列,并进行代码的演示,最后谈及redis的持久化技术,提升同学的内功修为。 4-1 Redis简介 4-2 Redis常用数据类型 4-3 从海量数据里查询某一固定前缀的key 4-4 如何实现分布式锁 4-5 如何实现异步队列 4-6 持久化方式之RDB 4-7 持久化方式之AOF以及混合模式 4-8 Pipeline及主从同步 4-9 Redis集群 4-10 本章总结

第5章 Linux Linux工作中用得最多的指令介绍,如find,grep,awk,sed等 5-1 Linux的体系结构 5-2 查找特定文件 5-3 检索文件内容 5-4 对日志内容做统计 5-5 批量替换文件内容及本章小结 5-6 彩蛋之容易忽略的细节

第6章 Java底层知识:JVM 本章节首先从Java的平台无关性出发,引出JVM这个面试高薪必考点,然后剖析JVM的类加载流程,以及类加载器,并深入到类加载的底层机制-双亲委派,最后进阶到JVM体系结构之内存模型,深度解析内存模型相关的考点。为同学的高薪Offer提供强有力保障。 … 6-1 谈谈你对Java的理解 6-2 平台无关性如何实现 6-3 JVM如何加载class文件 6-4 什么是反射 6-5 谈谈ClassLoader 6-6 ClassLoader的双亲委派机制 试看 6-7 loadClass和forName的区别 6-8 Java内存模型之线程独占部分-1 6-9 Java内存模型之线程独占部分-2 6-10 Java内存模型之线程共享部分 6-11 Java内存模型之 常考题解析-1 6-12 Java内存模型之常考题解析-2 6-13 彩蛋之找工作的最佳时期

第7章 Java底层知识:GC相关 本章节专注于Java的垃圾回收,干货满满。身为Java程序员,都知道Java语言的高性能其实有赖于可靠的GC机制。那么本章将从围绕GC相关的算法展开,让同学们懂得GC各类算法的原理,以及如何进行相关的配置。 7-1 垃圾回收之标记算法 7-2 Java垃圾回收之回收算法 7-3 Java垃圾回收之新生代垃圾收集器 7-4 Java垃圾回收之老年垃圾收集器 7-5 Java垃圾回收之常见面试题 7-6 Java垃圾回收之常见面试题_2 7-7 Java垃圾回收之总结 7-8 彩蛋之找工作的渠道分析

第8章 Java多线程与并发 本章节围绕工作中常用,面试中必考的线程和并发知识,原理和实操相辅相成。首先介绍进程和线程,然后讲解线程的状态,之后切入讲讲hapens-before之类的锁,最后讲讲线程类、线程池及其运行机制。让你在多线程和并发面试中有的放矢,如虎添翼。… 8-1 进程和线程的区别 8-2 线程的start和run方法的区别 8-3 Thread和Runnable的关系 8-4 如何实现处理线程的返回值 8-5 线程的状态 8-6 sleep和wait的区别 8-7 notify和notifyall的区别 8-8 yield函数 8-9 interrupt函数 8-10 前述方法及线程状态总结

第9章 Java多线程与并发-原理 本章节在前一章的基础上,更注重底层原理剖析和实操,属于面试中较为难回答的,体现个人能力和知识面的一章。同学如果掌握理解之后,能够在简历中体现,在面试中凸显这部分内容,将会给你增色不少。

第10章 Java常用类库与技巧 本章节综合讲解一些JAVA相关的面试考点,从异常处理到类库,再到技巧等讲解,如:HashMap、HashTable及ConcurrentHashMap、Hash冲突之红黑树、Queue、IO/NIO等

第11章 Java框架-Spring 本章节聚焦框架面试,以主流框架spring为例,讲解IOC思想,解耦、AOP用途,事物5个事务隔离级别 、 七个事务传播行为,最后通过代码会手把手实现一个简易的spring。将原理和实现结合,对笔试和面试进行加持,提升编程能力。

第12章 课程总结与展望 回顾课程核心内容。

image-20190619190102981

image-20190619190123616

1 网络

image-20190619190009682


image-20190619190023828


image-20190619190205422


image-20190619190221780


2 TCP的三次握手连接

image-20190619190717208


image-20190619190737966


image-20190619191153349


image-20190619191511210


image-20190619191835651


image-20190619191928954


image-20190619202208158


image-20190619202236135


image-20190619202248206


image-20190619202312271

image-20190619202329521

3 TCP的四次握手

image-20190619202406317


image-20190619202659434


image-20190619202810830

  • 小结

    image-20190619203314765


image-20190619203506060

image-20190619203521220


image-20190619203550629

4 TCP的滑动窗口

image-20190619204011402


image-20190619204107069


image-20190619204149305


image-20190619204401441


image-20190619204437229


image-20190619204459763




image-20190619211351903

image-20190619211456566


5 Http

image-20190627153416967


image-20190627153536674


image-20190627153938361


image-20190627154003504


image-20190731084315274


image-20190731091826978


image-20190731092654729


image-20190731092848275

image-20190731092925794


image-20190731093031917

image-20190731093041470

image-20190731093432092

image-20190731093638877


image-20190731093809360


image-20190731094015777

image-20190731094112239


6 Socket

image-20190731094543570

image-20190731094642573

image-20190731094829641

image-20190731094845344

image-20190731094928434

image-20190731095019489

image-20190731095107139


7数据库架构

image-20190731103047772


8 数据库索引

![image-20190801071608707](../../../../Users/apple/Library/Application Support/typora-user-images/image-20190801071608707.png)

image-20190801071541183

image-20190801104140600

image-20190801104237445

image-20190801104446008


image-20190801104648662

image-20190801104747375

image-20190801111540454

image-20190801114004025

image-20190801114011296

image-20190801114044338

image-20190801114102934

image-20190801114146558

image-20190801114303567

image-20190801114344970

image-20190801114459396


image-20190801114723703


image-20190801114909873

image-20190801115539522

image-20190801120004571

8-0 MySQL慢日志监控

1
2
3
4
show variables like "%query%";
slow_query_log_file 慢日志地址
slow_query_log 慢日志监控是否开启
long_query_time 超过多少为慢日志 默认10秒,可以改为0.1秒
1
2
set long_query_time = 0.1 修改慢日志时间
set GLOBAL slow_query_log = NO 开启慢日志监控
1
2
3
MySQL的变量分为以下两种:
1)系统变量:配置MySQL服务器的运行环境,可以用show variables查看
2)状态变量:监控MySQL服务器的运行状态,可以用show status查看
1
EXPLAIN SELECT * FROM TEST

8-1 索引额外问题之最左匹配原则的成因

image-20190801122654377

image-20190801123345328

1
mysql创建复合索引的规则是首先会对复合索引的最左边,也就是索引中的第一个字段进行排序,在第一个字段排序的基础上,在对索引上第二个字段进行排序,其实就像是实现类似order by 字段1,字段2这样的排序规则,那么第一个字段是绝对有序的,而第二个字段就是无序的了,因此一般情况下直接只用第二个字段判断是用不到索引的,这就是为什么mysql要强调联合索引最左匹配原则的原因。

8-2 索引额外问题之索引是建立越多越好吗

答案是否定的

  • 数据量小的表不需要建立索引,建立会增加额外的索引开销
  • 数据变更需要维护索引,意味着更多的索引意味着更多的维护成本
  • 更多的索引也需要跟多的存储空间

8-3 锁模块之MyISAM与InooDB关于锁方面的区别

image-20190801204407680


image-20190801204425343

image-20190801204516221


image-20190801204542057


image-20190801211912688



8-4 锁模块之数据库事务的四大特性

image-20190802064813008

8-5 锁模块之事务并发访问产生的问题以及事务隔离机制_2

image-20190802065142778

查看事务隔离级别

image-20190802065233168


image-20190802065354592


image-20190802065631035


image-20190802065830661


image-20190802070928882


image-20190802071719830

image-20190802071851060


![image-20190802181601632](../../../../../Users/apple/Library/Application Support/typora-user-images/image-20190802181601632.png)

image-20190802181651598

image-20190802181722062

![image-20190802181821688](../../../../../Users/apple/Library/Application Support/typora-user-images/image-20190802181821688.png)