一 编程的基础
编程的基础是什么?
把现实抽象成数学公式,加载到内存,使用cpu运算,结果输出到存储设备上。
java里面一切都是对象,包括基础类型。
java的基础类型:byte,short,int,long
小数类型 float/double
字符类型 char
真假类型 boolean
赋值操作,是把一个数赋值给一个变量,
- 整数,小数,布尔,字符
数组类型
基础运算 + - * / ++ --
比较运算 == != > <
逻辑运算: & | ! ^
条件执行if else 三元表达式,switch,for,while,do-while,foreach,break,continue
函数调用,定义一个标记,接收参数,返回参数
函数调用的原理
- 使用栈存放函数调用过程中需要的数据
内存
- 对象的内存在堆上分配
- 数据在栈上分配
二 理解数据背后的二进制
在数据库里面一切都是数字表示的,包括字符串
整数的表示:原码,负数的标识补码表示,取反+1
这么表示主要是因为计算机只做加法匀速
十六进制表示
位运算 左移 <<
无符号右移 >>>
有符合右移 >>
按位与&
按位或|
按位取反 ~
小数的二进制表示,是非精确的。Java的标准IEEE754标准
字符常用的编码
- unicode和非unicode,字符的编码标准不一样会导致乱码
常用的标准 - ASCII 128个字符
- ISO8859-1
- Windows-1252
- GB2312
- GBK
- GB18030
- Big5
unicode统一了全世界的编码
- UTF-32 4个字节表示一个符号
- UTF-16 变长字节,任何一个字符都需要2个字节
- UTF-8 编号小的就使用字节少, 1-4个字节
java的字符基础是char,本质是一个占用两个字节的无符号整数,对应于unicode,可以标识65536以内的字符
三 面向对象
java的基础结构是类,通过类的组合成包构建系统
java支持继承
- object是所有类的父类,支持静态绑定,重载和重写
- 防止继承final
- 静态初始化代码-->初始化代码-->构造方法
类的基本信息
- 类变量,类初始化代码,类方法,实例变量,实例初始化代码,实例方法,父类信息引用
类的初始化代码 - 定义静态变量时的赋值语句
- 静态初始化代码
实例初始化代码包括 - 定义实例变量时的赋值语句
- 实例初始化代码块
- 构造方法
类加载过程 - 分配内存保存类的信息
- 给类变量赋值默认值
- 加载父类
- 设置子类关系
- 执行类初始化代码
对象创建过程
- 分配内存
- 对所有实例变量赋默认值
- 执行实例初始化代码
java的父子关系的方法调用是通过续表实现的:虚方法表
类的扩展:接口(行为的抽象)
- 支持常量,支持继承,instance of 判断接口
- 8支持默认方法,9支持私有方法
抽象类:部分行为是抽象的
内部类: 对内部行为的封装 - 静态内部类
- 动态内部类
枚举
- 特殊的类,指定范围
异常 - java通过异常体系记录错误
- Throwable异常:Error和Exception
- RuntimeException 受检异常
- try catch finally throws
基础类
- 包装类:基础类型包装成对下
- String 不可变字符串
- StringBuilder可变字符
- Arrays
- 时间和日期:Date,TimeZone,Local,Calendar,SimpleDateFormat
- 随机数
四泛型和容器
泛型
- java的泛型实际上是擦除类型后的Object类
- 泛型的应用:容器类,泛型方法,泛型接口
- 泛型的限定: super下限 extends上限
- 递归类型限制<T extends Comparable<T>>
- 通配符 <?extends xxx> <?> 只读
- classs类型不能使用泛型,泛型不能用于静态方法
java的队列
- ArrayList
- LinkedList
- ArrayDeque双端队列
Map和Set
- HashMap
- HashSet
- 排序二叉树
- TreeMap
- TreeSet
- LinkedHashMap
- EnumMap
- EnumSet
堆和优先级队列
- PriorityQueue
通用容器和总结
- 抽象容器类
- Colllections
五文件
文件的特点
- 所有的数据都是二进制
- 文件类型
- 文件编码
- 文件系统
- 文件读写
java的流:输入流InputStream OutputStream 文件输入流 FileInputStream FileOutputStream
装饰器模式对流进行包装
- 各类缓存流 Buffered*
- DataInput*
- GZIP*
java的文本流:输入流Reader Writer
- File*
- Char*
- String
文件操作File对象
NIO对象
高级文件技术
- 常见的文件类型 CSV,Excel,HTML, 压缩文件
- RandomAccessFIle随机文件
- 内存映射文件
- 标准序列化机制
- jackson序列化:JSON, XML, MessagePack
6 并发
并发基础知识
- 线程Thread,Runnable接口,线程各类属性
- volatile和synchronized关键字
- wait和notify
- 线程中断
线程协作的五个场景
- 生产者和消费者
- 同时开始
- 等待结束
- 异步结果
- 集合点
并发的基石
- CAS
- atomicBoolean
- atomicInteger
- atomicReference
- atomicArray
- LongAdder, LongAccumulator, DoubleAddr
- Lock
- ReentrantLock ReadWriteLock Condition
并发容器
- CopyOnWriteArrayList, CopyOnWriteArraySet
- ConcurrentHashMap
- ConcurrentSkiListMap,ConcurrentSkiListSet
- 并发队列
- 无锁非阻塞并发队列 ConcurrentLinkedQueue ConcurrentLinkedDeque
- 普通阻塞队列 ArrayBlockingQueue LinkedBlockingQueue LinkedBlockingDeque
- 优先级阻塞队列 PriorityBlockingQueue
- 延时阻塞队列 DelayQueue
- 其他阻塞队列SynchronousQueue,LinkedTransferQueue
异步任务执行服务
- Executor线程池
- 核心线程数,队列,任务拒绝策略
- Runnable Callable
- Executor和ExecutorService,Future
- 定时任务
- TimeTask 单线程异常会影响整体任务
- ScheduleExcecutorService
同步和协作工具类
- ReentrantReadWriteLock
- Semaphore
- CountDownLatch
- CyclicBarrier
- ThreadLocal
六 动态编程
反射
- Class类,反射的类的信息
- Field字段信息
- Method方法信息
- 创建对象和构造方法
- 类型检查和转换
- Class类型信息
- 类的声明信息:类的类型
- 类的加载信息:类的修饰符和注解
- 反射和数组
- 反射和枚举
注解
- override, deprecated suppressWarning
- 创建注解
- Target METHOD,Type,field,paramter,constructor,local_variable,module
- Retention :source, class,runtime
- Document 文档
- Inherited注解可继承
动态代理
- jdk动态代理 InvocationHandler
- cglib动态代理
类加载机制
- 应用:热部署,模块隔离,灵活加载
- 启动加载:bootstrap,extention,application
正则表达式
- 正则是个庞大的语法,可以单找出一篇文章了
- 单个词,多词组,分组,边界符,
- java的类是Pattern的compile,spite,find,match
七 函数式编程
通过接口传递代码,函数式接口@FunctionalInterface
java抽象的四个函数式接口
- Predicate<T> boolean test(T)
- Function<T,R> R apply(T)
- Condumer<T> void accept(T)
- Supplier<T> T get()
函数式数据处理:基本用法
- stream创建:stream/parallelStream流
- empty, of,
- 中间操作 filter map distinct sorted,skip,limit,peek,mapToLong,flatMap
- 中断操作 max min count allMatch anyMatch noneMatch findFirst findAny forEach,toArray
- 收集 toSet,toCollection, toMap,join
- 分组 groupBy
异步编程CompletableFuture
- supplyAsync 有返回
- runAsync无返回
- whenComplete,handle,exceptionally
- 依赖thenRun,thenAccept,thenApply,thenCompose
日期
- Instant
- LocalDateTime
- ZoneId,ZoneOffset
- LocalDate
- LocalTime
- ZonedDateTime