总结

相比秦老师这个称呼,我更喜欢 秦大哥 这个称呼;
因为大哥真的做到了大哥的意思,不仅从技术方面传授,也传授了一些这些年来,老师职场的感悟,以及一些做人的道理;
秦大哥的口头禅是,“兄弟们 …” 其实就是指秦大哥带过的团队的成员,想想在秦大哥手下当差应该是挺舒服的,因为有一个好的 带头大哥;
**
说说这四个月吧,从20年10月初开营到现在2月初,扎扎实实的4个月,学到了很多技术方面的知识,老师传授了一份学习Java的图谱,让我在以后的技术发展道路上,按照图谱润色就好;有时间一直是看秦老师的直播的,喜欢直播的互动,但是有时候因为加班的原因,赶不上直播,也会在第一时间看完录播,整体的需要往返巩固N遍(重复学习老师的视频,处理工作当中的具体业务。),才能把这个Java图谱巩固踏实。一件事情的结束,是另外一个事情的开始吧,在这个训练营找到了一帮志同道合的人,在秦大哥的带领下,希望大家伙技术上都上升一个台阶。而我就不一样了,只希望年后找一份Java相关(当前是PHP开发)的开发工作,然后在岗位上学习巩固,预祝自己和大家伙在新的开始能够找到一份满意的工作。
感恩遇见,遇见秦大哥,遇见负责人的“催催”教研老师 ..

连边
2021.02.06

JVM

不积硅步,无以至千里 不积细流,不已成江河 山不辞土,故能成其高 海不辞水,故能成其深 博观而约取,厚积而薄发

用这一段来形容Java体系的JVM、GC这一类底层原理性质的东西,再合适不过了,其实现在很多技术人,挺浮躁的(包括我),任何事情只需要达到效果,不太关注背后的原理。
这种方式看似产出上去了,但是有一个致命的问题,就是但凡系统出现问题,不知道从何下手,不知道从哪里开始分析问题。如常见的OOM,可能只是我们一个启动参数弄错了,而排查问题,却花费了时间,但是找不到发生问题的根本原因,在具体的生产环境当中,可以就是直接损失真金白银。

面试题:

  1. 什么是JVM?
    1. 请问JDK和JVM有什么区别?
    2. 你认识哪些JVM厂商?
    3. OracleJDK与OpenJDK有什么区别?
    4. 开发中使用哪个版本的JDK?生产环境呢?为什么这么选?
  2. 什么是Java字节码?
    1. 字节码文件中包含哪些内容?
    2. 什么是常量?
    3. 你怎么理解常量池?
  3. JVM的运行时数据区有哪些?
    1. 什么是堆内存?
    2. 堆内存包括哪些部分?
    3. 什么是非堆内存?
  4. 什么是内存溢出?
    1. 什么是内存泄漏?
    2. 两者有什么关系?
  5. 给定一个具体的类,清分析对象的内存占用
    1. 怎么计算出来的?
    2. 对象头中包含哪些部分?
  6. 常用的JVM启动参数有哪些?
    1. 设置堆内存XMX应该考虑哪些因素?
    2. 假设物理内存是8G,设置多大堆内存比较合适?
    3. -Xmx设置的值与JVM进程所占用的内存有什么关系?
    4. 怎样开启GC日志?
    5. 请指定使用G1垃圾收集器来启动Hello程序
  7. Java8默认使用的垃圾收集是什么?
    1. Java11的默认垃圾收集器是什么?
    2. 常见的垃圾收集器是什么?
    3. 什么是串行垃圾收集?
    4. 什么是并行垃圾收集?
    5. 什么是并发垃圾收集?
    6. 什么是增量垃圾收集?
    7. 什么是年轻代?
    8. 什么是GC停顿(GC pause)?
    9. GC停顿和STW停顿有什么区别?
  8. 如果CPU使用率飙升,你会怎么排查?

    1. 如果系统响应变慢,你会怎么排查?
    2. 系统性能一般怎么衡量?

      NIO

      从网络编程开始讲起,讲解了如果基于Socket实现Server,从IO模型和相关概念出发,来理解引入NIO,最后拿出利器框架 - Netty,如何使用Netty实现NIO

      Netty 概览:

  9. 异步

  10. 事件驱动
  11. 基于 NIO

适用于:

  1. 服务端
  2. 客户端
  3. TCP/UDP

API网关

  1. 请求接入:作为所有的API接口服务请求的接入点
  2. 业务聚合:作为所有后端业务服务的聚合点
  3. 中介策略:实现安全、验证、路由、过滤、流控等策略
  4. 统一管理:对所有API服务和策略进行统一管理

并发编程

为什么会有多线程?本质原因是摩尔定律失效,多核+分布式时代的来临
线程池的原理与应用

面试题:

  1. 线程和进程的区别是什么?
  2. 为什么会有池化的思想出现?
  3. synchronized 方式的问题?

Spring和ORM等框架

Java能有今日的生态成就,有统一的框架Spring(脚手架Spring boot也算在其中)功不可没,而在操作ORM(实体关系映射,代码与数据库的结合点)也有趋于统一的MyBatis,让开发人员能在统一的标准语法之下进行开发,从代码风格到对代码的理解,都有一套不成为的体系;

面试题:

  1. 什么是框架
  2. 你理解的Spring框架是什么呢?
  3. 为什么要约定大于配置?优势在于,开箱即用
  4. 你熟悉的数据库连接池有哪一些?

    MySQL数据库和SQL

    通过性能作为连接点来深入讲解数据库。
    通常我们说的性能,一方面性能是业务编程语言方面(业务逻辑,编码bug,设计不合理)和数据库方面(慢查询,数据库表设计不合理)排查。
    MySQL是我们常用的关系型数据库,而sql语言是为了方便我们查询储存在关系型数据库里边查询语言。

    面试题:

  5. 什么是关系数据库?

  6. 关系型数据库的设计范式
  7. MySQL数据库什么时候单独使用一个字段储存值,为什么不能都序列化储存到数据库字段里边
  8. 了解NoSQL吗?
  9. 一条SQL的执行顺序是什么样子的?
  10. MySQL索引原理
  11. 你是怎么样优化数据库查询速度的?

    分库分表

    随着业务量的变大,分库分表是常见的解决问题的方式。但是我们平常怎么样来分库和分表呢,拆分之后,又怎么样来查询数据呢?

    面试题

  12. 在工作中,用过分库分表吗?

  13. 为什么要分库分表?
  14. 为什么要读写分离?
  15. 分库分表之后,事物应该怎么样控制?
  16. 搭建过主从复制吗?主从复制的原理是什么?
  17. 主从复制有什么局限性?
  18. 高可用,高可用的定义是什么?你觉得数据库的高可用需要考虑哪些方面?

    RPC和微服务

    rpc的简单粗暴的概念是:是为了实现像调用本地方法一样的调用远程服务的一种技术;基于这个概念出发,讲解了为什么我们需要rpc,常用的rpc框架有一些什么,rpc的基本原理与框架

  19. 设计接口规范

  20. 代理
  21. 序列化
  22. 网络传输
  23. 查找实现的对象或者类

分布式服务就不得不提我们的Dobbo

面试题

  1. 什么是rpc
  2. 为什么我们需要rpc
  3. rpc和分布式的服务化有什么关系吗?

  4. 分布式缓存

    分布式消息队列