• java基础知识


    一、JAVA异常

    1、runtime exception(一般不需要捕获,除数是0)

    2、checked exception(空指针),throws与throw

    二、泛型(public static <T extend Comparable & Serializable> T min(T t))

    1、虚拟机没有泛型类型对象-所有对象都是普通类。当程序调用泛型方法时,如果擦除返回类型,编译器插入强制类型转换。

     1 import java.util.*; 
     2 public class ErasedTypeEquivalence { 
     3     public static void main(String[] args) { 
     4         Class c1 = new ArrayList<String>().getClass(); 
     5         Class c2 = new ArrayList<Integer>().getClass(); 
     6         System.out.println(c1 == c2); //泛型擦除
     7     } 
     8 }/* Output: 
     9 true 
    10 *///:~

    2、解决泛型擦除

    1)通配符

       <? super T>逆变指明泛型类持有T的基类,则T肯定可以放入

       <? extends T>指明泛型类持有T的导出类,则返回值一定可作为T的协变类型返回

    2)定义接口实现

    三、反射

    在运行状态中,对于任意一个类,都能得到其所有属性和方法,对于任何一个对象都能调用其方法(动态调用对象方法的功能)

    1、person.getClass();

    2、Person.class;

    3、Class.forName();

    四、类加载

    1、类加载机制

    (1) 装载:查找和导入Class文件;

    (2) 链接:把类的二进制数据合并到JRE中;

         (a)校验:检查载入Class文件数据的正确性;

         (b)准备:给类的静态变量分配存储空间;

         (c)解析:将符号引用转成直接引用;

    (3) 初始化:对类的静态变量,静态代码块执行初始化操作

    2、类加载的三种方式

    1)new Date()

    2)Class.forName("")-->Class.forName(className, true, this.getClass().getClassLoader())。第二个参数,是指Class被loading后是不是必须被初始化。Class.forName(com.mysql.cj.jdbc.Driver);

    3)ClassLoader.loadClass(className)实际上调用的是ClassLoader.loadClass(name, false),第二个参数指Class是否被link。

    3、类加载器和双亲委派模型

    1)Bootstrap ClassLoader : 将存放于<JAVA_HOME>lib目录中的,只有符合类库的才会被加载。

    2)Extension ClassLoader : 将<JAVA_HOME>libext目录下的,或者被java.ext.dirs系统变量所指定的路径中的所有类库加载。开发者可以直接使用扩展类加载器。

    3)Application ClassLoader : 负责加载用户类路径(ClassPath)上所指定的类库,开发者可直接使用。它负责将系统类路径java -classpath或-Djava.class.path变量所指的目录下的类库加载到内存中。

    五、集合

    1、Collection(实现了Iterable接口)

    2、链表 将每个对象存放在独立的节点,每个节点还存放序列中下一个节点的引用,添加删除快,数组添加删除慢,需要数组复制。

    3、数组列表 ArrayList,底层数组,随机查找快。

    4、散列集 HashSet底层HashMap

    5、树集 TreeSet 红黑树

    6、对象比较 Comparable 接口,得实现这个接口才能比较,compareTo(T);Comparator Compare(T1, T2)

    7、队列与双端队列 ArrayDeque(非线程安全,访问快)、Stack(extend Vector)

    8、映射表 HashMap 初始16 大小为2^n,JDK7底层数组,数组每一项都是Entry,Hash碰撞解决是拉链法->位桶+链表;JDK8底层数组,数组每一项都是Node,Hash碰撞解决->位桶+链表/红黑树

    六、多线程

    1、继承Thread、实现Runnable

    2、中断线程

    3、线程的状态

    1)NEW

    2)RUNNABLE  start()之后

    3)BLOCKED locked之后

    4)WAITING wait()、join()

    5)TIMED WAITING wait(time)

    6)TERMINAL 

    4、线程优先级以及守护线程(当没有其他线程执行时结束)

    5、Volatile(禁止指令重排;作为一个轻量级的读安全锁,但是并非写入安全,i=i+1)

    6、ThreadLocal

    7、线程间通信

    1)利用最基本的synchronizednotifywait

    2)利用LockCondition

    3)信号量a、CyclicBarrier(预定线程数达到后)b、CountDownLatch(计数器减为0)c、Semaphore(允许访问限制资源的线程数)

    8、执行器

    1)newSingleThreadExecutor:

    2)newFixedThreadPool:

    3)newCachedThreadPool:

    4)newScheduledThreadPool:

    5)ThreadPoolExecutor:

    五、数据库

    1、事务

    1)事务特性(ACID)atomacity、consistency、isolation、durability

    2)事务隔离级别 (脏读、非重复读、幻想读、丢失修改)--> 未提交读、已提交读、可重复读、串行读

    3)锁 共享锁、更新锁、独占锁

    4)索引:直接创建(建表时创建)和间接创建(建表后创建)

  • 相关阅读:
    流畅的python--函数
    流暢的python---函數闭包
    IDEA2019与Maven3.6以上版本不兼容
    java面试知识点汇总---第一章 重视基础
    《动手学深度学习》task10 文本分类;数据增强;模型微调 课后作业
    《动手学深度学习》task09 优化算法进阶;word2vec;词嵌入进阶 课后作业
    《动手学深度学习》task08 图像分类案例2;GAN;DCGAN 课后作业
    《动手学深度学习》task08GAN;DCGAN 笔记
    《动手学深度学习》task07 目标检测基础;图像风格迁移;图像分类案例1 课后作业
    《动手学深度学习》task07目标检测基础;图像风格迁移 笔记
  • 原文地址:https://www.cnblogs.com/beaconSky/p/8045767.html
Copyright © 2020-2023  润新知