07 2021 档案
摘要:一、什么是注解 了解什么是注解? Annotation Annotation是从JDK5.0 开始引入的技术 注解的作用: 可以对程序做出解释 (类似于平时写的注释) 可以被其他程序读取(如:编译器等) 注解的格式: 以 @[注释名] 的形式在代码中存在,并且还可以添加一些参数 e.g. @Supp
阅读全文
摘要:对于各种锁的理解 公平锁、非公平锁 公平锁 : 不允许插队,必须先来后到 非公平锁: 允许插队(默认都是非公平锁) 可重入锁 synchronized 这里是同一把锁 package com.liu.lock8.reentrantLock; public class Demo01 { public
阅读全文
摘要:二十、原子引用 解决ABA问题 ⇒ 引入原子引用 对应思想:乐观锁 原子引用类 AtomicStampedReference<>(initialRef , initialStamp) 带版本号的原子操作! AtomicStampedReference<Integer> atomicStampedRe
阅读全文
摘要:十九、深入理解CAS 什么是CAS ? 想进大厂 ⇒ 必须深入研究底层 理解计算机网络 操作系统 compareAndSet(int expect , int update) : 比较并交换 expect ⇒ 期望值 update ⇒ 更新值 如果期望值达到了,就更新为update的值,否则就不更新
阅读全文
摘要:十八、单例模式 程序员必会!!! 1、饿汉式 // 饿汉式单例 public class Hungry { // 在饿汉式单例下 这些资源一起全部加载进来 // 会造成空间浪费 private byte[] data1 = new byte[1024]; private byte[] data2 =
阅读全文
摘要:十七、Volatile 的可见行 和非原子性验证 什么是volatile ? volatile 是一种轻量级的同步机制,相对于synchronized来说 保证可见性 ⇒ JMM 主内存中的共享变量修改之后,会通知所有线程备份到各自的工作内存中 不保证原子性 禁止指令重排 保证可见性 package
阅读全文
摘要:一、什么是JMM? JMM指的是Java内存模型,即 Java Memory Model Java内存模型并不是一种实际存在的东西,而是一种人为形成的约定,是一种概念。 关于JMM,我们需要了解一些相关的同步约定 : 线程在解锁前,必须将线程中的工作内存中存储的值即时刷新到主内存中的共享变量! 线程
阅读全文
摘要:十五、异步回调 异步调用 类似于Ajax ⇒ 调用的结果不需要等待 Future 设计的初衷: 对将来的某个事件的结果进行建模 一般使用Future的增强类: CompletableFuture 常用的方法: runAsync(Runnable run) 没有返回值的异步回调 runAsync(Ru
阅读全文
摘要:十四、ForkJoin 什么是fork join JDK1.7开始 并行执行任务!提高效率 ⇒ 针对大数据量 大数据 ⇒ MapReduce (把把任务拆分成小任务) ForkJoin 特点 : 工作窃取 已经执行完任务的线程会将尚未执行完的线程中的任务窃取过来,避免线程等待造成资源浪费 ⇒ 提高效
阅读全文
摘要:十三、Stream流式计算 程序员必备技能: lambda表达式 链式编程 函数式接口 (有且只有一个方法) Stream流式计算 什么是Stream流式计算 大数据 : 存储 + 计算 存储: 集合 数据库(MySQL) 计算都应该交给 Stream流来操作! package com.liu.st
阅读全文
摘要:十二、四大函数式接口(必须掌握) 程序员必备技能: lambda表达式 链式编程 函数式接口 (有且只有一个方法) Stream流式计算 函数式接口 Functional Interface : 只有一个方法的接口 @FunctionalInterface public interface Runn
阅读全文
摘要:十一、线程池(重点) 线程池 : 三大方法、7大参数、4种拒绝策略 池化技术 程序运行 ⇒ 本质:占用系统的资源! 如何优化资源的使用? ⇒ 池化技术 常用的池: 线程池 连接池 内存池 对象池 ... 注意: 经常创建、销毁 会造成资源浪费 池化技术: 事先准备好一些资源,如果有人要用,就从这里拿
阅读全文
摘要:十、阻塞队列BlockingQueue 队列 : FIFO 遵循先进先出原则 写入: 如果队列满了,就必须阻塞等待消费 取出: 如果队列是空的,必须阻塞等待生产 阻塞队列 BlockingQueue : 不是新的东西 具体的家族关系: JDK文档说明 重点使用的实现类: ArrayBlockingQ
阅读全文
摘要:九、读写锁 ReadWriteLock Read Lock 读锁 (共享锁)=> 允许多个线程一起读 读的时候不允许写操作 Write Lock 写锁 (独占锁)=> 只允许一个线程(独家)写的时候不允许读操作 读写锁的目的: 保证线程安全 读写分离 package com.liu.rw; impo
阅读全文
摘要:八、常用的辅助类(必会) 8.1、 CountDownLatch JDK1.8 文档说明: 本质: 减法 计数器 package com.liu.add; import java.util.concurrent.CountDownLatch; // 计数器 public class CountDow
阅读全文
摘要:七、 Callable 相较于Runnable来说,Callable ⇒ : 可以有返回值 可以抛出异常 方法不同, run() ⇒ Runnable、 call() ⇒ Callable 代码测试 package com.liu.callable; import java.util.concurr
阅读全文
摘要:六、集合类不安全 List 不安全 package com.liu.unsafeListOrSet; import com.liu.pc.A; import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; // java.
阅读全文
摘要:五、8 锁问题 如何判断锁的是谁? 对象 、Class 深入理解 锁 package com.liu.lock8; import java.util.concurrent.TimeUnit; /** * 8锁 : 关于锁的八个问题 * 1. 标准情况下,两个线程先打印 发短信 还是 打电话 ? 1
阅读全文
摘要:四、synchronized 和 Lock的区别 重点! Synchronized 内置的Java关键字 Lock是一个Java类 Synchronized 无法判断获取锁的状态 Lock 可以判断是否获取到了锁 Synchronized 会自动释放锁,Lock必须手动释放锁!如果不释放则会导致死锁
阅读全文
摘要:三、Lock锁 (重点) 传统 Synchronized 相当于排队,队列 耦合性: 判断代码模块构成质量的属性,不影响已有功能,但影响未来拓展 耦合性越强,模块之间的联系越紧密,但独立性越差 Java编程追求的一条原则:高内聚 低耦合! Lock 接口 实现类: ReentrantLock 可
阅读全文
摘要:一、什么是JUC? 学习方法: 源码 + 官方文档 面试高频问!! JUC: java.util.concurrent 并发包 包含三个子包 java.util 工具包 屏蔽同名 业务 : 普通的线程代码 Thread Runnable 没有返回值、效率相比 Callable 较低! Callabl
阅读全文
摘要:共享变量的内存不可见性 多线程的内存模型 线程独有的工作内存(线程缓存 = > 提高工作效率)——所有线程共享的主内存 线程读取在主内存的成员变量,即共享变量的过程: 线程的工作内存会去读取主内存的成员变量并保存副本 线程在工作内存中修改副本 将修改后的副本的值推送给主内存并改写主内存中该变量的值
阅读全文
摘要:为什么要使用线程池? 背景:经常创建和销毁、使用量特别大的资源,e.g,并发情况下的线程,对性能影响很大 思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中 好处: 提高响应速度(减少用于创建新线程的的时间开销) 降低资源消耗(可重复利用线程池中的线程,不需要每次都创建) 便于线
阅读全文
摘要:一、什么是线程同步? 多个线程操作同一个资源,即并发问题: 同一个对象被多个线程同时操作 多个线程访问同一个对象,某些线程还想修改对象的值,这时候会出现线程不安全的问题 线程同步是一种等待机制,即 多个需要同时访问此对象的线程进入对象的等待池 形成队列,等待前面线程使用完毕,下一个线程再使用 形成条
阅读全文
摘要:一、区分多任务与多线程 多任务 : 同一时间处理多个任务 多线程 : 相当于开设了 多条通道,提高了CPU使用的效率 例子: 多个人同时登陆游戏 主线程-main方法 和 其他方法-子线程 同时运行 普通方法调用: 特点:只有主线程一条执行路径 多线程: 特点:多条执行路径,主线程和子线程并行交
阅读全文
摘要:一、异常 Exception 简单分类 检查性异常 测试 程序员无法预见 运行时异常 编译时被忽略 错误 ERROR e.g.栈溢出 ⇒ JVM 有关 异常体系结构 Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类 在Java API中已经定义了许
阅读全文
摘要:一、初识面向对象 面向过程思想 步骤简单 处理简单的问题 面向对象思想 物以类聚、分类的思维方式 适合处理复杂的问题 适合处理需要多人协作的问题 对于描述复杂的事物,需要从宏观上把握、从整体上合理分析——使用面向对象的思路来分析整个系统 具体到微观操作,仍然需要面向过程的思路去处理 二、什么是面向对
阅读全文
摘要:一、Scanner 对象 通过Scanner类来获取用户的输入 语法: Scanner s = new Scanner(System.in); Scanner类的next() 、nextLine()方法获取输入的字符串 在读取之前一般需要使用hasNext() 与 hasNextLine()判断是否
阅读全文
摘要:一、什么是数组? 定义 : 数组是相同类型数据的有序集合 描述的是相同类型的若干数据,按照一定的先后次序排列组合而成 每一个数据都可以通过一个下标来访问 每一个数据称作一个数组元素 二、数组的声明创建 首先必须声明数组变量,才能在程序中使用数组 dataType[] arrayRefVar; //
阅读全文
摘要:一、什么是方法? System.out.println() System > 系统的类文件 out > 该类的对象 println() 系统类中定义的方法 Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 方法包含于类中或对象中 方法在程序中被创建,在其他地方被引
阅读全文
摘要:类型转换 由于java是强类型语言,所以要进行有些运算时,需要用到类型转换! 按优先级排列: 低 高 byte, short, char → int → long → float → double 小数类型的优先级要高于整数类型数据 不同类型的数据先转化为同一类型数据,然后进行计算。 强制类型转
阅读全文
摘要:变量 变量是什么:可以变化的量 指的是内存空间中的一个确定的位置,存储尚不确定的值 Java是一种强类型语言,每个变量都必须声明其类型 Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域 type var Name [= value] [ { , var Name [ = va
阅读全文
摘要:Java 特性及优势 简单性 (相对于C++来说 java的语言更加简单) 面向对象 Object oriented 可移植性 即跨平台 Write once Run anywhere JVM 高性能 分布式 动态性 通过 反射 来实现 多线程 安全性 健壮性 Java 为什么能成功? 使用java
阅读全文
摘要:卸载JDK 删除java的安装目录(可通过 右键 我的电脑 点击属性 进入系统面板 点击高级系统设置 -环境变量 来查找) 删除JAVA_HOME——清理环境变量 删除path下关于Java的目录 Win R + cmd 打开命令行窗口 输入 java -version 查看系统中是否安装了java
阅读全文
摘要:标识符 关键字 关键字 ——Java中已给出相关定义的名字 且不能用于为自己编写的类、定义的变量或方法命名。 public void main default abstract boolean byte static 标识符 —— Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识
阅读全文
摘要:Java 程序运行机制 编译型 将源程序(.java文件)一次性翻译成机器可执行的程序(字节码) e.g. C/C++ >>> 典型的编译型语言 解释型 即把源程序中的语句每翻译一句,就执行一句,不产生完整的可执行程序 优点:节省成本 缺点:占用较多性能 e.g. 网页、脚本->速度要求不高 区别
阅读全文
摘要:第一个JAVA程序 HelloWorld 新建一个文件夹,用于存放代码 新建一个java文件 文件后缀名为.java Hello.java 【注意点】系统可能没有显示文件后缀名 需手动关闭隐藏文件后缀名的选项 编写代码 public class Hello { public static void
阅读全文
摘要:Java包机制 为了更好地组织类,JAVA提供了包机制,用于区别类的命名空间 包语句的语法格式为: package pkg1[.pkg2[.pkg3...]]; 一般利用公司域名倒置作为包名 e.g. com.liu.xxx 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包,完成此功
阅读全文
摘要:数据类型拓展 整数拓展 //进制 //二进制 : 0b 八进制 :0 十进制 十六进制: 0x int i = 10; int i2 = 010;//八进制数 int i3 = 0x10;//十六进制数 0-9 A-Z System.out.println(i); System.out.printl
阅读全文
摘要:数据类型 强类型语言 Java 要求变量的使用要严格符合规定,所有的变量都必须先定义后才能使用 优点: 安全性高 弊端: 运行速度慢【相较于弱类型语言来说】 弱类型语言 VB 、J S C T R L + B / C T R L + 点击类名 可查看该类的底层源码 Java的数据类型分为两大类 基本
阅读全文
摘要:Java 基础语法 注释 书写注释是一个非常好的习惯 平时写代码一定要注意规范! Java中的注释有三种: 单行注释 // 多行注释 /* ....... */ 文档注释 JavaDoc /** *@Author ... *@Description .... */
阅读全文