当前位置: 首页>后端>正文

java编码的逻辑的读书笔记(一)

一 编程的基础

编程的基础是什么?
把现实抽象成数学公式,加载到内存,使用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
  • Print

文件操作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

https://www.xamrdz.com/backend/3n41936073.html

相关文章: