1 应用技术
1.1 计算机基础知识
- cpu
中央处理器 (英语:Central Processing Unit,缩写:CPU)是计算机的主要设备之一,功能主要是解释计算机指令以及处理计算机软件中的数据。计算机的可编程性主要是指对中央处理器的编程。 - mem
随机存取存储器(英语:Random Access Memory,缩写:RAM)是与 CPU 直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时资料存储介质。 - disk
硬盘(英语:Hard Disk Drive,缩写:HDD,有时为了与固态硬盘相区分称“机械硬盘”或“传统硬盘”)是电脑上使用坚硬的旋转盘片为基础的非易失性存储器,它在平整的磁性表面存储和检索数字数据,数据通过离磁性表面很近的磁头由电磁流来改变极性的方式被写入到磁盘上,数据可以通过盘片被读取,原理是磁头经过盘片的上方时盘片本身的磁场导致读取线圈中电气信号改变。 - net
计算机网络(英语:computer network),通常也简称网络,是指容许节点分享资源的数字电信网络。在电脑网络,电脑设备会透过节点之间的连接(数据链路)互相交换数据。 - 线程,进程
线程(英语:thread)是操作系统能够进行运算调度的最小单位。大部分情况下,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。
进程(英语:process),是指计算机中已执行的程序。进程曾经是分时系统的基本运作单位。在面向进程设计的系统(如早期的UNIX,Linux 2.4及更早的版本)中,进程是程序的基本执行实体;在面向线程设计的系统(如当代多数操作系统、Linux 2.6及更新的版本)中,进程本身不是基本执行单位,而是线程的容器。
1.2 第三方库
- poi
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office(Excel、WORD、PowerPoint、Visio等)格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“可怜的模糊实现”。 - Jsoup
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,
可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 - zxing
ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。 - Gson
Gson是目前功能最强的JSON解析器,并且不需要依赖额外jar包,能够直接运行在java平台。与另一款优秀的JSON解析器FastJson相比Gson的优势是可以准确顺利的转换复杂Bean,而FastJson对一些复杂Bean的转换就会出现一些问题。所以让我们一起来学学这款神器吧!
1.3 数据结构
-
树
在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
-
栈
栈是重要的数据结构,从数据结构角度看,栈也是线性表,其特殊性在栈的基本操作是线性表的子集。Stack作为最基本的数据结构,在JDK代码中,也有它的实现,java.util.Stack类是继承了Vector类,来实现了栈的基本功能。
-
链表
链表(Linked List)是线性表的一种(线性表包含顺序表与链表),通过指针将一系列位于不连续的内存空间中的元素连接起来,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理,但也失去了快速随机存取的优点,同时增大了内存开销(存储指针域)。
-
队列
队列同样是一种特殊的线性表,其插入和删除的操作分别在表的两端进行,队列的特点就是先进先出(First In First Out)。我们把向队列中插入元素的过程称为入队(Enqueue),删除元素的过程称为出队(Dequeue)并把允许入队的一端称为队尾,允许出的的一端称为队头,没有任何元素的队列则称为空队。其一般结构如下:
-
图
图是一种重要的数据结构,基本概念包括:顶点,边,有向,无向,权,路径回路,连通域,邻接点,度,入边,出边,入度,出度等等。
操作系统
- linux
Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。
2 代码控制
2.1 自动化代码检查
- sonar
sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量。通过插件形式,可以支持包括Java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测
2.2 代码规范
3 网络
3.1 协议
- TCP/IP
互联网协议套件(英语:Internet Protocol Suite,缩写IPS)是网络通信模型,以及整个网络传输协议家族,为网际网络的基础通信架构。它常通称为TCP/IP协议族(英语:TCP/IP Protocol Suite,或TCP/IP Protocols),简称TCP/IP。因为该协议家族的两个核心协议:TCP(传输控制协议)和IP(网际协议),为该家族中最早通过的标准。 - HTTP
超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 - hession
Hessian是一个用于连接网络服务的二进制协议,是Resin的开源产品。Hessian是一个非常简单的协议,使用了J2ME的设备如移动电话都可以使用它连接到Resin服务,因为它的协议简单、使用方便性及功能的强大,它也可以使用到EJB服务中。
3.2 容器
- JBOSS
JBoss是一个基于J2EE的开放源代码的应用服务器。 JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。 - tomcat
Tomcat 是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发制作。由于有 Sun 的参与和支持,最新的 Servlet 和 JSP Tomcat 5 支持的 2.0.0 技术先进性、性能稳定、免费获得了 Java 和 Tomcat 的广泛认可,并得到了广泛的认可。成为比较流行的Web应用服务器。 - resin
Resin是CAUCHO公司的产品,是一个application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言开发。 - jetty
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
4 日志框架
4.1 开源框架
- slf4j
SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
4.2 框架实现
- log4j
Apache Log4j是一个基于Java的日志记录工具。它是由瑞士程序员Ceki Gülcü于2001年开发的,现在则是Apache软件基金会的一个项目。 Log4j是几种Java日志框架之一。 - logback
Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。 - commong logging
5 测试框架
5.1 测试框架
- junit
JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。 - easymock
- testng
- mockito
5.2 bug管理
6 开发工具
6.1 编程工具
- eclipse
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。 - myeclipse
MyEclipse,是在Eclipse 基础上加上自己的插件开发而成的功能强大的企业级集成开发环境,主要用于Java、Java EE以及移动应用的开发。在最新版本的MyEclipse中,配合CodeMix使用支持也十分广泛,尤其是对各种开源产品和主流开发框架的支持相当不错。已支持PHP、Python、Vue、Angular、React、Java、Java EE等语言和框架开发。 - idea
IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Java,Kotlin等少数语言。 - vi
vi是一款由加州大学伯克利分校,Bill Joy研究开发的文本编辑器。 - VS
Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。 - sublime text
Sublime Text 是一个文本编辑器(收费软件,可以无限期试用),同时也是一个先进的代码编辑器。Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能的Vim。
6.2 版本控制
- svn
SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。 - git
Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 [1] 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
7 大数据与nosql
- zookeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。 - hadoop
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统( Distributed File System),其中一个组件是HDFS(Hadoop Distributed File System)。 - hbase
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。 - mongodb
MongoDB是一个基于分布式文件存储 [1] 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 - strom
Storm 是一个分布式的,可靠的,容错的数据流处理系统。 - spark
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
8 java语言
8.1 语言语法基础
-
异常
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。
- 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
- 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
- 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
-
泛型
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了。这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法
-
内部类
类内部可定义成员变量和方法,且在类内部也可以定义另一个类。如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类(或称为嵌套类),而类 Outer 则称为外部类(或称为宿主类)。内部类可以很好地实现隐藏,一般的非内部类是不允许有 private 与 protected 权限的,但内部类可以。内部类拥有外部类的所有元素的访问权限。
内部类可以分为:实例内部类、静态内部类和成员内部类
-
反射
通过java语言中的反射机制可以操作字节码文件(可以读和修改字节码文件。)
通过反射机制可以操作代码片段。(class文件。)java.lang.reflect.*;
-
序列化
Java提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中的数据的类型。将化对象写入之后,可以从中读取出来,它进行反序列化,并且对对象的文件,对象的文件的类型数据,还有中的数据类型可以使用在内存中的数据类型,然后中的数据类型可以使用中新建对象。
-
NIO
Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。 -
匿名类
匿名类是不能有名字的类,它们不能被引用,只能在创建时用New语句来声明它们。匿名类的声明是在编译时进行的,实例化在运行时进行,这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。 -
包装类
Java有八种基本数据类型:byte、short、int、long、float、double、boolean、char
Java为其提供了8种对应的包装类:Byte、Short、Integer、Long、Float、Double、Boolean、Character -
运算符优先级
所有的数学运算都认为是从左向右运算的,Java 语言中大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符和三目运算符例外,其中,单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。 -
引用
在JDK 1.2版之后,Java对引用的概念进行了扩充,将引用分为强引用(Strongly Re-ference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)4种,这4种引用强 度依次逐渐减弱。
8.2 语言工具类库
-
容器类
-
集合
集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。Java 所有的集合类都位于 java.util 包下,提供了一个表示和操作对象集合的统一构架,包含大量集合接口,以及这些接口的实现类和操作它们的算法。 -
链表
同上 -
map
-
-
工具类
import java.util.*;
-
系统类
-
日期类
-
数字类
-
字符串+正则
-
-
流
- 字符流
- 字节流
8.3 语言特性
-
继承
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为
-
封装
封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。 -
多态
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。
9 JVM
9.1 多线程与并发
所谓多线程,就是说一个应用程序有多条执行路径,每当我们打开一个应用程序的时候,就像当与打开了一个进程,而进程中执行的操作,就是线程。
并发(concurrent)是同一时间应对(dealing with)多件事情的能力
9.2 GC机制
-
GC收集器类型
- 串行
- CMS
- 并行
- G1
-
算法
- 复制
- 标记清理
- 标记整理
-
分区
-
新生代
- eden
- survivor
-
老年代(old区)
-
永久代(perm区)
-
9.3 IO/NIO
-
IO类型
- 同步阻塞
- 同步非阻塞
- 基于信号
- 多路复用
- 异步IO
9.4 类加载机制
- 双亲委派
- OSGI
10 算法
10.1 搜索
- 二分
10.2 排序
- 选择
- 冒泡
- 插入
- 快速
- 归并
- 堆
- 桶
- 基数
10.3 常用算法
- 贪婪
- 回溯
- 剪枝
- 动态规划
10.4 数据挖掘算法
- KMP算法
- GZZ算法
- HASH分桶
- 关联规则算法
- APRORIVE算法
11 分布式
-
负载均衡
-
水平伸缩
-
集群
-
分片
-
Key-hash
-
异步
-
一致性hash
-
消峰
-
分库分表
-
锁
-
悲观锁
-
乐观锁
-
行级锁
-
分布式锁
-
分区排队
= 一致性
-
一致性算法
- paxos
- zab
- nwr
- raft
- gossip
- 柔性事务(TCC)
-
一致性原理
- CAP
- BASE
12 中间件
12.1 数据库
-
mysql
- 存储引擎
- 索引
- 锁
-
oracle
-
db2
12.2 缓存
-
redis
- 数据结构
- 持久
- 复制
- cas
- 单线程
-
memcache
-
eacache
-
Tair
12.3 消息队列
-
jms
- Queue
- Topic
-
kafka
- 持久
- 复制
- Stream
- Partition
-
rocketMQ
-
RabbitMQ
-
ActiveMQ
13 常用开源框架
-
Spring
-
Spring MVC
-
Spring WebFlow
-
spring tx
-
aop
-
ioc
-
Struts
-
ibatis
-
Mybatis
= CAS
- Dubbo
14 设计
-
设计原则
-
单一职责原则
-
开闭原则
-
里氏替换原则
-
依赖倒转原则
-
接口隔离原则
-
迪米特原则
-
设计模式
-
结构模式
- 适配器模式
- 桥接模式
- 组合模式
- 装饰模式
- 外观模式
- 享元模式
- 代理模式
-
创建模式
- 抽象工厂模式
- 工厂方法模式
- 建造这模式
- 原型模式
- 单例模式
-
行为模式
- 责任链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 策略模式
- 模板方法模式
- 访问者模式
-
-
设计案例
-
UML
15 架构
-
系统架构能力
-
基本理论
- 扩展性设计
- 可用性设计
- 可靠性设计
- 一致性设计
- 负载均衡设计
- 过载保护设计
-
协议设计
- 二进制协议
- 文本协议
-
接入层架构设计
- DNS轮询
- 动静态分离
- 静态化
- 反向代理
- LVS
- F5
- CDN
-
逻辑层架构设计
- 连接池
- 串行化技术
- 影子Master架构
- 批量写入
- 配置中心
- 去中心化
-
通讯机制
-
同步
- RPC
- RMI
-
异步
- MQ
- Cron
-
-
数据层架构设计
- 缓存优化
- DAO&ORM
- 双主架构
- 主从同步
- 读写分离
-
-
性能优化架构能力
-
代码级别
- 关联代码优化
- cache对其
- 分支预测
- copy on write
- 内联优化
-
系统优化
- cache
- 延迟计算
- 数据预读
- 异步
- 轮询与通知
- 内存池
- 模块化
-
-
工程架构能力
-
开发语言
-
运维与监控
-
监控
- 系统监控
- 日志监控
- 流量监控
- 接口监控
- 数据库监控
- 业务监控
- 性能监控
-
告警
-
日志
-
-
设计模式
-
数据结构与算法
-
各种工具
-