发布时间:2022-09-14 19:00
1. 一个子类只能继承一个抽象类,但能实现多个接口
2. 抽象类可以有构造方法,接口没有构造方法
3. 抽象类可以有普通成员变量,接口没有普通成员变量
4. 抽象类和接口都可有静态成员变量,抽象类中静态成员变量访问类型任意,接口只能public static final(默认)
5. 抽象类可以没有抽象方法,抽象类可以有普通方法,接口中都是抽象方法
6. 抽象类可以有静态方法,接口不能有静态方法
7. 抽象类中的方法可以是public、protected;接口方法只有public
Object类的方法:
LinkedBlockingQueue是一个基于节点链接的可选是否有界的阻塞队列,不允许null值。
LinkedBlockingQueue是一个线程安全的阻塞队列,实现了先进先出等特性。
PriorityQueue是一个无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))。
PriorityQueue是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,该队列的元素遵循FIFO原则。
setDaemon()可以把线程设置为守护线程(也叫精灵线程,后台线程),它必须在线程启动前调用。
ThreadLocal存放的值是线程封闭,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递。
线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收
在Thread类中有一个Map,用于存储每一个线程的变量的副本。
对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。
局部内部类定义在一个方法或者一个作用域里,它类似方法中局部变量,不能有public、protected、private以及static修饰符,可以用abstract、final修饰。
栈(操作系统):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈 栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放 堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。 堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些
数组的引用存在栈内存中,而数组对象保存在堆里面。
静态方法中不能调用对象的变量,因为静态方法在类加载时就初始化,对象变量需要在新建对象后才能使用。
子类继承父类所有的成员;但是对private这样的,不能直接调用,可以通过反射来实现调用。
常考保留字:true, false,null;
既是保留字又是关键字:goto,const;
成员变量有初始值,而局部变量没有初始值的。本题中的s定义在方法中所以为局部变量-没有初始值。变量没有初始值就使用了,编译通不过。
String对象不可变、StringBuffer对象可变的含义
orword : 浏览器跳转或响应 对于当前网页来说 --“一切交给我 , 我帮你弄 ,细节你不用知道 ,我都帮你办好了 ,诺 显示结果还在当前地址”
redirect : “懒得搭理你,你不是跳转么? 从哪来 ,回哪去 ,自己 重新进行访问,我才不给你做中转呢 ”
转发是服务器行为,重定向是客户端行为;
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL;
forward:转发页面和转发到的页面可以共享request里面的数据,redirect:不能共享数据;
forward:效率高,redirect:效率低.
多态问题中,无论向上或向下转型,都记住一句话就可以了。
编译看左边,运行看右边。意思编译时候,看左边有没有该方法,运行的时候结果看 new 的对象是谁,就调用的谁。
1.类与类之间的关系为继承,只能单继承,但可以多层继承。
2.类与接口之间的关系为实现,既可以单实现,也可以多实现。
3.接口与接口之间的关系为继承,既可以单继承,也可以多继承。
一个进程是一个独立的运行环境,可以被看做一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源。
volatile与synchronized的区别:
volatile本质是在告诉jvm当前变量在寄存器中的值是不确定的,需要从主存中读取,synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住.
volatile仅能使用在变量级别,synchronized则可以使用在变量,方法.
volatile仅能实现变量的修改可见性,但不具备原子特性,而synchronized则可以保证变量的修改可见性和原子性.
volatile不会造成线程的阻塞,而synchronized可能会造成线程的阻塞.
volatile标记的变量不会被编译器优化,而synchronized标记的变量可以被编译器优化.
ThreadLocal类为每一个线程都维护了自己独有的变量拷贝。每个线程都拥有了自己独立的一个变量。
所以ThreadLocal重要作用并不在于多线程间的数据共享,而是数据的独立。
ThreadLocal是采用哈希表的方式来为每个线程都提供一个变量的副本。
ThreadLocal保证各个线程间数据安全,每个线程的数据不会被另外线程访问和破坏。
TheadLocal类不继承Thread类,也不实现Runable接口。
ThreadLocal采用了“以空间换时间”的方式:访问并行化,对象独享化。前者仅提供一份变量,让不同的线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。
接口 只能用 public 和 abstract 修饰。only public & abstract are permitted 。
内部接口 only public, protected, private, abstract & static are permitted
【光剑藏书轩2021】《表象与本质:类比,思考之源和思维之火》
人工智能专业术语:物体识别、卷积神经网络、YOLO分别都是什么?
【二、玩转vim(vi)编辑器】三大模式及命令介绍、如何通过配置文件.vimrc配置vim编辑器
vim 出现 Another program may be editing the same file. If this is the case 的解决方法
中国企业出海墨西哥红利客观,ADVANCE.AI为其保驾护航
使用SpringBoot一小时快速搭建一个简单后台管理(增删改查)(超详细教程)
2022年想进鹅厂必须“啃透”的Spring面试题(附答案)
2022最新综述 | 面向大规模场景的小目标检测:综述和 benchmark
视频教程-Vue全家桶从基础入门到进阶项目实战第三篇中级进阶实战篇-Vue
matlab 李氏指数,利用小波局部模极大值的衰减求解李氏指数