2019-6-9牛客网刷题易错知识点

发布时间:2022-09-14 19:00

1. 一个子类只能继承一个抽象类,但能实现多个接口

2. 抽象类可以有构造方法,接口没有构造方法

3. 抽象类可以有普通成员变量,接口没有普通成员变量

4. 抽象类和接口都可有静态成员变量,抽象类中静态成员变量访问类型任意,接口只能public static final(默认)

5. 抽象类可以没有抽象方法,抽象类可以有普通方法,接口中都是抽象方法

6. 抽象类可以有静态方法,接口不能有静态方法

7. 抽象类中的方法可以是public、protected;接口方法只有public

 

Object类的方法:

2019-6-9牛客网刷题易错知识点_第1张图片

LinkedBlockingQueue是一个基于节点链接的可选是否有界的阻塞队列,不允许null值。

LinkedBlockingQueue是一个线程安全的阻塞队列,实现了先进先出等特性。

PriorityQueue是一个无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))。

PriorityQueue是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,该队列的元素遵循FIFO原则。

 

setDaemon()可以把线程设置为守护线程(也叫精灵线程,后台线程),它必须在线程启动前调用。

 

ThreadLocal存放的值是线程封闭,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递。

线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收

在Thread类中有一个Map,用于存储每一个线程的变量的副本。

对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。

 

局部内部类定义在一个方法或者一个作用域里,它类似方法中局部变量,不能有public、protected、private以及static修饰符,可以用abstract、final修饰。

 

栈(操作系统):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈 栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放 堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。 堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些

 

数组的引用存在栈内存中,而数组对象保存在堆里面。

2019-6-9牛客网刷题易错知识点_第2张图片

静态方法中不能调用对象的变量,因为静态方法在类加载时就初始化,对象变量需要在新建对象后才能使用。

子类继承父类所有的成员;但是对private这样的,不能直接调用,可以通过反射来实现调用。

 

常考保留字:true, false,null;

既是保留字又是关键字:goto,const;

 

成员变量有初始值,而局部变量没有初始值的。本题中的s定义在方法中所以为局部变量-没有初始值。变量没有初始值就使用了,编译通不过。

 

String对象不可变、StringBuffer对象可变的含义

 

 

orword : 浏览器跳转或响应   对于当前网页来说   --“一切交给我 , 我帮你弄 ,细节你不用知道  ,我都帮你办好了 ,诺   显示结果还在当前地址”

redirect : “懒得搭理你,你不是跳转么? 从哪来 ,回哪去 ,自己 重新进行访问,我才不给你做中转呢 ”  

 

转发是服务器行为,重定向是客户端行为;

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.

redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL;

forward:转发页面和转发到的页面可以共享request里面的数据,redirect:不能共享数据;

forward:效率高,redirect:效率低.

 

多态问题中,无论向上或向下转型,都记住一句话就可以了。

编译看左边,运行看右边。意思编译时候,看左边有没有该方法,运行的时候结果看 new 的对象是谁,就调用的谁。

2019-6-9牛客网刷题易错知识点_第3张图片

 

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

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号