最近公司来了个新同事,学历并不高,而且大学也不是计算机专业的,今年刚满30岁。

本以为也是来干点基础的活混混日子的,结果没想到这个人上来就把现有项目的性能优化了一遍,直接给公司节省了不少成本,这种“王炸”打法,直接给所有人整懵了。

img

一问才知道这位老哥也是一路被虐过来的。去年年底被裁,本以为自己技术还行,看了一段时间面经,复习了基础知识,就开始投大厂简历。阿里最先给他面试机会,结果没能扛过三面,然后是各种大大小小的公司,在实际面试中被碾压得翻不了身。整整一个半月,一个offer都没拿到。

面试时觉得自己吃透两套架构,够面试用了,没想到各大厂的面试官直接甩了一堆JVM、Mysql优化、并发底层相关的面试题:

  • 京东:说下JVM内存模型与Java线程内存模型的区别?
  • 腾讯:VM的GC执行时机是任何时候都可以吗?安全点知道吗?
  • 美团:CMS垃圾收集器的并发更新失败是怎么回事?如何优化?
  • 阿里:高并发系统为何建议选择G1垃圾收集器?
  • 拼多多:线上系统GC问题如何快速定位与分析?
  • 阿里:阿里巴巴Arthas实现原理能大概说下吗?
  • 百度:单机几一万并发的系统IVM如何优化?
  • 阿里:解释下IVM垃圾收集底层的三色标记算法?
  • 美团:Volatile底层的内存屏障是如何实现的?
  • 滴滴:能说说Mysql索引底层B+树结构与算法吗?
  • 滴滴:聚集索引与覆盖索引与索引下推到底是什么?
  • 阿里:能说说Mysql并发支撑底层BufferPool机制吗?
  • 拼多多:能说下Mysql事务底层实现原理吗?
  • 唯品会:MVCC机制是如何保证事务的隔离性的?
  • 京东:超高并发下使用事务时如何避免死锁?
  • 京东:对线上千万级大表加字段时,性能极慢问题如何处理?

大多数人碰到这些性能问题总是一脸蒙圈,很多同学试着网上翻博客或看书,但是发现几乎很难找到合适的解决方案。

当然有的同学做的系统规模不大,并没有碰到过类似问题,但是在跳槽面试时又被问到类似实战型的问题,只能双手一摊了。

其实Java性能调优不是一门编程语言,无法通过直线式的思维来掌握和应用。不是学不会,而是你没有摸透底层原理,缺乏实战与经验!

分享一个Java学习路线,原以为两三天搞定,结果整理下来差不多弄了七天了,Java常用工具包学习思维导图+Java核心进阶知识整理。目前已经收到了七八个网友的反馈,说是面试问到了很多这里面的知识点。

内容涉及:Java开发介绍、Java数组、Java面向对象、常用基础类、集合、IO流、多线程、异常、反射等。

一:Java开发介绍

  • DOS常用命令

  • JVM、JRE、JDK之间的关系

  • Java开发环境的搭建:安装JDK,配置环境变量

  • Java入门程序(Java的开发流程)

  • Java的注释,标识符、标识符的命名规范

  • Java基本数据类型

  • 变量和常量的定义及初始化

  • Java的运算符

  • 运算符的优先级

  • Java分支语句之if...else

  • 循环的嵌套

  • 方法的定义

  • 方法的形参和实参

  • 方法的递归调用

image-20220114150700200

二、Java数组

  • Java 数组的定义

  • Java 数组的声明

  • 数组的优势与局限

  • 数组的遍历访问(普通循环,增强for循环)

  • 数组元素的顺序查找

  • 数组元素的冒泡法排序

  • Arrays工具类的使用

  • 二维数组

image-20220114151749983

三、Java面向对象

  • 面向对象设计思想

  • 面向对象的分析与设计

  • Java与面向对象

  • 类中成员变量的定义与意义

  • 构造方法的定义和调用

  • 面向对象的封装特性

  • 局部变量和成员变量的作用域问题

  • 静态属性、静态方法、静态代码块

  • 面向对象的继承特性

  • 继承中构造方法的细节

  • 面向对象的多态特性

  • 抽象方法与抽象类

  • 接口

image-20220114151135824

四、异常

  • 异常的概念

  • 异常的分类

  • 异常的理解

  • 常见异常介绍

  • 运行时异常

  • 编译时异常

  • 运行和编译异常区别

  • 异常的处理方式之捕获异常

  • 异常的处理方式之抛出异常

  • 异常的处理方式之断点调试

  • 断点调试之引导运行步骤

  • 自定义异常

  • 异常关键字处理

  • 关键字执行流程

  • 异常总结

image-20220114151211151

五、集合

  • 集合的概念和作用

  • 集合和数组的区别

  • 集合框架体系介绍

  • 集合框架之Collection接口

  • ArrayList和LinkedList的方法使用

  • ArrayList和LinkedList各自的工作原理分析原理分析

  • 使用多种方式遍历集合

  • HashSet和LinkedHashSet各自的工作原理分析

  • 集合框架之Map接口

  • 泛型的使用

  • Collections工具类的使用

image-20220114151313399

六、IO流

  • File类的作用

  • File类中常用方法的使用介绍

  • 使用File类操作文件和文件夹

  • 相对路径和绝对路径的介绍

  • IO流的概念和工作原理

  • IO流的分类

  • 文件流的使用

  • 转换流的使用

  • 缓冲流的使用

  • 对象流的使用

  • 内存流的使用

  • 使用不同的流实现文件内容的拷贝

image-20220114151336759

七、多线程

  • 进程和线程的介绍

  • 进程和线程之间的区别与联系

  • 线程实现方式之继承自Thread类

  • 线程实现方式之实现Runnable接口

  • 线程实现方式之线程池

  • 线程的生命周期

  • 线程中常用方法的使用

image-20220114151649366

我把一些常用Java工具包的思维导图做了汇总,持续更新中,方便读者查阅。

img

从这份文档截图中就可以看到这份资料总结得非常全面,有需要的话【戳这里】获取,如果觉得本文对你有帮助,可以转发关注支持一下。