Get Started. It's Free
or sign up with your email address
技能图谱 by Mind Map: 技能图谱

1. 集成技术&工具

1.1. 代码托管

1.1.1. cvs

1.1.2. svn

1.1.3. git

1.2. maven

1.2.1. site

1.2.2. plugins

1.2.3. reports

1.3. 持续集成

1.3.1. jenkins

1.3.2. github

1.3.3. gitlab

2. 开发应用组件

2.1. 数据库

2.1.1. 关系型

2.1.1.1. Oracle

2.1.1.1.1. 闪回(FlashBack)

2.1.1.1.2. 事务隔离级别(ACID)

2.1.1.1.3. rownum

2.1.1.1.4. rowid和for update的区别

2.1.1.1.5. 递归查询

2.1.1.2. MySQL

2.1.1.3. SQLServer

2.1.2. 非关系型

2.1.2.1. Mongodb, HBase, redis

2.1.2.2. redis

2.1.2.2.1. redis原理剖析

2.1.2.2.2. redis主从模式

2.1.2.2.3. redis常用命令

2.1.2.2.4. redis操作客户端

2.1.2.2.5. redis持久化

2.1.2.2.6. redis哨兵机制及其原理

2.1.3. 内存数据库

2.1.3.1. redis

2.2. 缓存

2.2.1. redis

2.2.1.1. 支持String、List、Set、Hash、有序Set 五种数据结构

2.2.2. memcache

2.2.2.1. key-value存储

2.2.2.2. 缓存击穿

2.3. 消息队列

2.3.1. Kafka

2.3.1.1. 四类API

2.3.1.1.1. consume 消费

2.3.1.1.2. produce 生产

2.3.1.1.3. stream 流处理

2.3.1.1.4. connector 连接管理

2.3.1.2. 定位:大数据量处理,高性能

2.3.2. RabbitMQ

2.3.3. RocketMQ

2.3.3.1. 定位:稳定、低延迟

2.3.3.2. 支持事务. 事务部分未开源

2.3.4. ActiveMQ

2.3.5. ZeroMQ

2.4. 分布式组件

2.4.1. 调度 job

2.4.1.1. elastic-job

2.4.2. dubbo

2.4.3. zookeeper

2.4.3.1. 开源client: Curator, ZkClient

2.4.4. 分布式中ACP如何控制

2.5. 数据库访问中间件

2.5.1. Mycat

2.6. 监控、埋点

2.7. 日志收集

3. 开发技术

3.1. 基础

3.1.1. Object

3.1.1.1. 有哪些常用方法

3.1.1.1.1. equals

3.1.1.1.2. toString

3.1.1.1.3. native getClass

3.1.1.2. 线程相关

3.1.1.2.1. wait (native)

3.1.1.2.2. nofity, nofityAll (native)

3.1.1.3. finalize (protected)

3.1.1.3.1. 资源释放, gc回收对象时会调用对象的该方法. 调用一次, 该方法中可以完成对象的自我救赎

3.1.1.4. hashCode (native)

3.1.1.4.1. 什么时候会使用该方法

3.1.1.4.2. 什么时候需要重写该方法

3.1.1.4.3. 重写原则

3.1.1.5. clone (protected navtive)

3.1.1.5.1. 浅拷贝

3.1.1.5.2. 深拷贝

3.1.1.5.3. 需要使用Object的clone方法,必须实现Clonable接口

3.1.1.6. registerNatives

3.1.1.6.1. 注册本地实现方法

3.1.1.7. 工具类Objects

3.1.1.7.1. JDK1.7引入, 封装了对Object操作的一些常用方法

3.1.1.7.2. 有哪些方法

3.1.2. 基础类型、包装类

3.1.2.1. 什么是基础类、包装类

3.1.2.2. 值传递、引用传递

3.1.2.2.1. 传递的都是引用所指向内存中的内容。基本类型是直接持有内容,包装类持有的是对象的地址

3.1.2.3. 有什么区别,使用场景是什么

3.1.3. String, StringBuilder, StringBuffer

3.1.3.1. String

3.1.3.1.1. 定长, 不可变

3.1.3.1.2. StringBuilder一样,都是采用char[]存储数据

3.1.3.1.3. String进行+操作, 会转换成StringBuilder进行append操作

3.1.3.1.4. == 和 equals有什么区别

3.1.3.2. StringBuilder

3.1.3.2.1. 采用char[]存储数据, char[] value 没有final修饰,所以长度可变

3.1.3.2.2. 内容可变, 进行append操作时,将内容添加到char[], 长度不够时扩充char[]

3.1.3.2.3. 非线程安全

3.1.3.3. StringBuffer

3.1.3.3.1. 线程安全, 其他与StringBuilder相同

3.1.3.3.2. 和StringBuilder继承相同父类:AbstractStringBuilder

3.1.4. 集合

3.1.4.1. 有哪些集合类型

3.1.4.2. 如何存储的, 了解底层数据结构

3.1.5. 序列化、反序列化

3.1.6. IO

3.1.6.1. 字符流、字节流

3.1.6.2. 输入流、输出流

3.1.6.3. 职能流、包装流

3.1.6.4. 内存流、管道流、文件流、对象流

3.1.6.5. 特殊:RandomAccessFile

3.1.7. 接口、抽象类

3.1.7.1. 有什么区别

3.1.7.2. 使用场景是什么

3.1.8. comparator. comparable

3.1.9. 作用域

3.1.9.1. private, 类内部可见

3.1.9.2. 默认, 包内可见

3.1.9.3. protected, 包、子类可见

3.1.9.4. public, 均可见

3.1.9.5. 如何实现作用域控制的

3.1.10. 常见关键字

3.1.10.1. try, catch, finally

3.1.10.1.1. finally和return的执行顺序

3.1.10.1.2. finally中有return如何执行

3.1.10.2. finalize

3.1.10.3. final

3.1.10.4. static

3.1.11. Thread

3.1.11.1. yield

3.1.11.1.1. 让出cpu执行时间片, 所有线程重新竞争

3.1.11.1.2. 非必须持有锁, 持有锁时调用yield没有意义

3.1.11.2. sleep

3.1.11.2.1. 持有锁等待

3.1.11.2.2. 必须持有锁

3.1.11.3. 和Object.wait有什么区别

3.1.12. 面向对象的特性

3.1.12.1. 封装

3.1.12.2. 继承

3.1.12.3. 多态

3.1.13. jdbc

3.2. 进阶

3.2.1. 并发

3.2.1.1. 推荐书籍:《java并发编程实战》

3.2.1.2. 线程安全, 同步

3.2.1.2.1. synchronized

3.2.1.2.2. Lock

3.2.1.2.3. volatile

3.2.1.2.4. ThreadLocal

3.2.1.2.5. 以上各自的使用场景是什么,解决什么问题

3.2.1.3. 并发

3.2.1.3.1. CyclicBarrier(栅栏)、CountDownLatch(闭锁)

3.2.1.3.2. Semaphore(信号量),管程

3.2.1.3.3. Future

3.2.1.3.4. 线程池

3.2.1.3.5. atomic包

3.2.1.3.6. fork / join

3.2.1.4. 生产者和消费者

3.2.1.5. 同步原语

3.2.2. 类加载机制

3.2.3. 反射

3.2.4. 代理

3.2.4.1. 静态代理

3.2.4.2. 动态代理

3.2.4.3. Java的代理和Cglib的区别

3.2.5. IO

3.2.5.1. 常见的框架

3.2.5.1.1. netty

3.2.5.1.2. mina

3.2.5.2. aio, bio, nio

3.2.6. 算法

3.2.6.1. 常见排序算法

3.2.6.1.1. 堆内排序

3.2.6.1.2. 堆外排序

3.2.6.2. 二分查找

3.2.7. 数据结构

3.2.7.1. 可以结合Java集合类的源码一起学习

3.2.7.2. 链表、数组

3.2.7.3. 树

3.2.8. 六大设计原则

3.2.8.1. 单一职责

3.2.8.1.1. 一个类/一个方法只做一件事

3.2.8.2. 依赖倒置原则

3.2.8.2.1. 依赖抽象,不依赖于具体。面向接口编程

3.2.8.3. 里氏替代原则

3.2.8.3.1. 父类出现的地方,都可以用子类替代

3.2.8.4. 迪米特法则

3.2.8.4.1. 一个类只和自己的朋友打交道,尽量封装。 不和无关类打交道

3.2.8.5. 接口隔离原则

3.2.8.5.1. 类/接口功能单一 ,不要承担过多的职责

3.2.8.6. 开闭原则

3.2.8.6.1. 对扩展开发,对修改关闭

3.2.9. 二十三种设计模式

3.2.9.1. 推荐书籍: 《GOF设计模式》 、《Head First设计模式》、《大话设计模式》

3.2.9.2. 创建型模式

3.2.9.3. 结构型模式

3.2.9.3.1. 适配器模式

3.2.9.3.2. 装饰器模式(包装模式)

3.2.9.4. 行为型模式

3.3. 专题

3.3.1. JVM

3.3.1.1. 运行时数据区域

3.3.1.1.1. 1.7及以下

3.3.1.1.2. 1.8

3.3.1.2. 类加载

3.3.1.2.1. 加载器

3.3.1.2.2. 双亲委派加载。加载class时先让父加载器加载,直至启动类加载器,加载成功返回,未找到时则往下一层一层加载,如果全部未找到,返回异常(ClassNotFoundException)

3.3.1.3. Class结构

3.3.1.3.1. 魔数

3.3.1.3.2. 版本(minor version + major version)

3.3.1.3.3. 常量池

3.3.1.3.4. 访问标识

3.3.1.3.5. this class

3.3.1.3.6. super class

3.3.1.3.7. 接口信息

3.3.1.3.8. 字段

3.3.1.3.9. 方法

3.3.1.3.10. 属性

3.3.1.4. 指令

3.3.1.4.1. 常量指令

3.3.1.4.2. 加载指令

3.3.1.4.3. 存储指令

3.3.1.4.4. 栈指令

3.3.1.4.5. 数学指令

3.3.1.4.6. 类型转换指令

3.3.1.4.7. 比较指令

3.3.1.4.8. 控制指令

3.3.1.4.9. 扩展指令

3.3.1.5. 垃圾回收(gc)

3.3.1.5.1. 算法(理论)

3.3.1.5.2. 实现

3.3.2. JDK1.8的新特性

3.3.2.1. 语言

3.3.2.1.1. Lambda, 函数式编程

3.3.2.1.2. 接口的默认方法和静态方法

3.3.2.1.3. 方法引用

3.3.2.1.4. 重复注解

3.3.2.1.5. 更好的类型推断

3.3.2.2. 编译器

3.3.2.2.1. 参数名. 运行时可以获取

3.3.2.3. 官方库

3.3.2.3.1. Optional

3.3.2.3.2. Streams

3.3.2.3.3. 时间处理工具类

3.3.2.3.4. Nashorn JavaScript引擎

3.3.2.3.5. 引入了Base64

3.3.2.3.6. 并行数组

3.3.2.3.7. 并发

3.3.2.4. 工具

3.3.2.4.1. Nashorn引擎

3.3.2.4.2. 类依赖分析器 jdeps

3.3.2.5. JVM

3.3.2.5.1. 元空间 代替 永久代

3.3.3. 性能

3.3.3.1. 性能测试

3.3.3.1.1. LoadRunner 商业化软件

3.3.3.1.2. JMeter 轻量,Java实现

3.3.3.1.3. ApacheBeach 很轻量,适合自测,简单

3.3.3.2. 性能监控

3.3.3.2.1. 数据库监控

3.3.3.2.2. JVM监控

3.3.3.2.3. 操作系统监控

3.3.3.3. 性能调优

3.3.3.3.1. 调优技巧

3.3.4. 代码质量

3.3.4.1. code reviewer

3.3.4.1.1. 意义

3.3.4.1.2. 和设计思路对比,是否符合设计思路

3.3.4.1.3. 避免做的事情. 工具能做的事情,不建议人来做

3.3.4.1.4. 建议点

3.3.4.2. 代码重构、优化

3.3.4.2.1. 推荐书籍:《重构-改善代码的既有设计》 、《clean code》

3.3.4.2.2. 必要条件

3.3.4.3. 静态代码走查

3.3.4.3.1. 方式

3.3.4.3.2. 理论/技术

3.3.4.4. 代码质量管理

3.3.4.4.1. sonar

3.3.4.4.2. gerrit

3.3.4.4.3. phabricator

3.3.5. 操作系统

3.3.5.1. linux

3.3.5.1.1. 常用操作命令

3.3.5.1.2. shell脚本

3.3.5.2. windows

3.3.5.3. 概念

3.3.5.3.1. 用户空间 内核空间

3.3.5.3.2. zero copy

3.3.5.4. 《深入理解计算机系统》, 《从哲学层次看操作系统》,《鸟哥的linux私房菜》

3.3.6. 网络

3.3.6.1. 《tcp/ip详解,卷一、二、三》

3.3.6.2. 通讯协议. socket, http, tcp, udp等

3.3.6.2.1. tcp握手过程

3.3.6.3. OSI七层模型

3.3.6.4. TCP/IP四层模型

3.3.7. MQ

3.3.8. 分布式

3.3.8.1. 分布式调用

3.3.8.1.1. rpc

3.3.8.1.2. http

3.3.8.1.3. rmi

3.3.9. 框架

3.3.9.1. SpringMVC

3.3.9.1.1. Bean管理(IOC)

3.3.9.1.2. AOP

3.3.9.1.3. 事务的控制

3.3.9.1.4. 启动加载流程

3.3.9.1.5. servlet处理 dispatch分发流程

3.3.9.2. Mybatis

3.3.9.2.1. SQL Maps

3.3.9.2.2. 数据关联、动态映射

3.3.9.2.3. 事务关联

3.3.9.3. Spring boot

3.3.9.4. Struts1, 2

3.3.9.5. Hiberate

3.3.9.6. SpringCloud

3.3.9.6.1. 分布式基础服务搭建平台。本身整合封装了分布式应用的基础功能、服务。如服务注册、发现,消息通信,负载等

3.3.10. 字符集

3.3.10.1. utf-8中汉字占几个字节

3.3.11. SQL (Oracle)

3.3.11.1. DDL

3.3.11.1.1. CREATE

3.3.11.1.2. ALTER

3.3.11.1.3. MODIFY

3.3.11.1.4. DROP, TRUNCATE

3.3.11.2. DML

3.3.11.2.1. 增删改查

3.3.11.2.2. 表关联查询

3.3.11.2.3. group, order by, having等

3.3.11.3. SQL优化

3.3.11.3.1. 隐士函数转换

3.3.11.3.2. exists, in

3.3.11.3.3. 索引

3.3.11.3.4. 预编译 执行计划

3.3.12. UML建模

3.4. wc3h用到的一些技术

3.4.1. DB: MySQL, MongoDB

3.4.2. 缓存: redis

3.4.3. 应用框架:Spring、mybatis(数据源:druid)、 job(dangdang elastic-job)、长连接

3.4.4. 服务分发调度(RPC):dubbo

3.4.5. (分布式)任务调度:elastic-job

3.4.6. 消息中间件:kafka (Zookeeper)

3.4.7. 日志抽取:ELK

3.4.8. 监控:pinpoint

3.4.9. 部署容器:tomcat

3.4.10. 长连接推送 (百度、极光)