Java知识点

垃圾回收

  • 垃圾回收在jvm中优先级相当相当低。
  • 垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制。
  • 垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出。
  • 进入DEAD的线程,它还可以恢复,GC不会回收
  • 真正宣布一个对象死亡,至少需要经历2次标记过程。当第一次标记时会同时进行一次筛选(判断此对象是否有必要执行finalize方法)。如果对象没有覆盖该方法,就面临死亡,所以说这个方法是对象逃脱死亡命运的最后一次机会

桥接模式

桥接模式:
定义 :将抽象部分与它的实现部分分离,使它们都可以独立地变化。
意图 :将抽象与实现解耦。
桥接模式所涉及的角色

  1. Abstraction :定义抽象接口,拥有一个Implementor类型的对象引用
  2. RefinedAbstraction :扩展Abstraction中的接口定义
  3. Implementor :是具体实现的接口,Implementor和RefinedAbstraction接口并不一定完全一致,实际上这两个接口可以完全不一样Implementor提供具体操作方法,而Abstraction提供更高层次的调用
  4. ConcreteImplementor :实现Implementor接口,给出具体实现
    Jdk中的桥接模式:JDBC
    JDBC连接 数据库 的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不动,原因就是JDBC提供了统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了

异常

Java异常

线程

  • 线程的启动方式只能通过start这种启动实现多线程的效果,如果是手动调用run方法和普通方法调用没有区别

构造函数私有

Java允许构造函数的私有化,被private修饰的构造函数无法在其他类中调用,也就是该类无法在其他类中实例化。

单例模式

public class Singleton {
    private static Singleton instance;
    private Singleton() {
        // .......//
    }
    public Singleton getInstance() {

        if (instance == null)
            instance = new Singleton();
        return instance;
    }
}
  1. 类的内部包括一个类的实力,并且为static类型
  2. 构造函数为私有
  3. 通过提供一个获取实例的方法,比如getInstance,该方法也为static类型。

调用方式

Singleton instance = Singleton.getInstance();

堆外内存off-heap

  • 堆外内存意味着把内存对象分配在Java虚拟机的堆以外的内存,这些内存直接受操作系统管理(而不是虚拟机)
  • 将你的对象从堆中脱离出来序列化,然后存储在一大块内存中,这就像它存储到磁盘上一样,但它仍然在RAM中。对象在这种状态下不能直接使用,它们必须首先反序列化,也不受垃圾收集。序列化和反序列化将会影响部分性能(所以可以考虑使用FST-serialization)使用堆外内存能够降低GC导致的暂停。堆外内存不受垃圾收集器管理,也不属于老年代,新生代。

Collection & Map

在这里插入图片描述

Java常用工具

1、jps:查看本机java进程信息。
2、jstack:打印线程的栈信息,制作线程dump文件。
3、jmap:打印内存映射,制作堆dump文件
4、jstat:性能监控工具
5、jhat:内存分析工具
6、jconsole:简易的可视化控制台
7、jvisualvm:功能强大的控制台

零散点

  • 中间件并不能提高内核的效率,一般只是负责网络信息的分发处理
  • &&是逻辑与 即判断&&两侧的表达式是否都为真,都为真则此&&表达式值为真;& 是按位与 即将&两侧的数用二进制展开,每一位都求与运算,最后得到的二进制数即为结果;逻辑与结果只讲真和假,而按位与得出的却是实实在在的一个数

ACID

  • 原子性:事务是一组不可分割的操作单元,这组单元要么同时成功要么同时失败(由DBMS的事务管理子系统来实现);
  • 一致性:事务前后的数据完整性要保持一致(由DBMS的完整性子系统执行测试任务);
  • 隔离性:多个用户的事务之间不要相互影响,要相互隔离(由DBMS的并发控制子系统实现);
  • 持久性:一个事务一旦提交,那么它对数据库产生的影响就是永久的不可逆的,如果后面再回滚或者出异常,都不会影响已提交的事务(由DBMS的恢复管理子系统实现的)

Java创建对象

Java有5种方式来创建对象:

  • 使用 new 关键字(最常用)
 ObjectName obj = new ObjectName();
  • 使用反射的Class类的newInstance()方法
 ObjectName obj = ObjectName.class.newInstance(); 
  • 使用反射的Constructor类的newInstance()方法
ObjectName obj = ObjectName.class.getConstructor.newInstance();
  • 使用对象克隆clone()方法: ObjectName obj = obj.clone();
  • 使用反序列化(ObjectInputStream)的readObject()方法
    try(
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME)));
    {
        ObjectName obj = ois.readObject();
    }

释放锁

1.sleep会使当前线程睡眠指定时间,不释放锁
2.yield会使当前线程重回到可执行状态,等待cpu的调度,不释放锁
3.wait会使当前线程回到线程池中等待,释放锁,当被其他线程使用notify,notifyAll唤醒时进入可执行状态
4.当前线程调用 某线程.join()时会使当前线程等待某线程执行完毕再结束,底层调用了wait,释放锁

面向对象

多态 [可重用性],继承[可扩展性] ,封装[易于管理维护]

TCP

TCP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值