java小白基础(五)

41、java内置的注解
Java定义了一套注解,共有七个,3个在java.lang中,剩下的4个在java.lang.annotation中。
作用在代码的注解有:
@override—检查该方法是否是重载方法。如果发现其父类或者是引用的接口中并没有发现该方法,会报编译错误。
@Deprecated—标记过时方法。如果使用该方法,会报编译警告。
@SuppressWarnings—指示编译器去忽略注解中声明的警告。
作用在其他注解的注解(或者说元注解):
@Retention—标识这个注解怎么保存,只在代码中,还是编入class文件中,或者只是在运行时可以通过反射访问。
@Documented—标识这些注解是否包含在用户文档中。
@Target—标记这个注解应该是哪种java成员。
@Inherited—标记这个注解是继承于哪个注解类

42、为什么要重写hashCode方法
一般的地方不需要重写hashCode方法,只有当类需要放在HashTable、HashMap、HashSet等哈希结构的集合时才会重载hashCode。
如果重写了equals方法,而保留hashCode的实现不变,那么很有可能某两个对象明明相等,而hashCode却不一样。此时,当用其中一个键保存到hash结构中时,再以相等的找另外一个作为键值去找,则根本找不到。

43、java中用到的线程调度算法
时间片轮转方式。可以设置线程的优先级,会映射到下层的系统的优先级上。

44、线程状态
在这里插入图片描述
45、如何避免死锁
死锁的发生必须满足以下四个条件:
(1)互斥条件:一个资源每次只能被一个进程使用。
(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3)不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。
(4)循环等待条件:若干进程之间形成一种头尾相连的循环等待资源关系。
三种用于避免死锁的技术:
(1)加锁顺序:线程按照一定的顺序加锁
(2)加锁时限:线程尝试获取锁的时候加上一定的时限,超过时限则放弃多锁的请求,并释放自己占有的锁。
(3)死锁检测

46、java 悲观锁与乐观锁
**悲观锁:**总是假设最坏的情况,每次去取数据的时候总会认为别人会对数据进行修改。所以在每次取数据的时候会上锁,这样别人取数据的时候会阻塞直到拿到锁。传统的关系型数据库用到了很多这种锁机制,如:表锁、行锁、读锁、写锁等。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。
**乐观锁:**总是假设最好的情况,每次取取数据的时候认为别人不会对数据进行修改。所以不会上锁。但是在数据更新期间会判断在该期间别人有没有去更新该数据。可以使用版本号机制和CAS算法实现。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。

47、线程池有哪几种工作队列
(1)ArrayBlockingQueue
是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。
(2)LinkedBlockingQueue
一个基于链表结构的阻塞队列,此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue。静态工厂方法Executors.newFixedThreadPool()使用了这个队列
(3)SynchronousQueue
一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue,静态工厂方法Executors.newCachedThreadPool使用了这个队列。
(4)PriorityBlockingQueue
一个具有优先级的无限阻塞队列。

48、JVM内存划分
(1)栈(Stack):里面存放的是方法中的局部变量。(方法的运行一定要在栈中)局部变量:方法的参数,或者是方法{}内部的变量。作用域:一旦超出作用域(大括号),立刻从栈内存中消失。
(2)堆(Heap):凡是new出来的东西,都在堆内存当中,比如,数组。堆内存当中都有一个地址值:16进制,堆里面的数据都有默认值。
(3)方法区(Method Area):存储.class相关信息,包含方法信息。
(4)本地方法栈(Native Method Stack):与操作系统相关。
(5)寄存器(pc Register):与cpu相关。

49、线程池的优点
(1)降低资源消耗。通过重复利用已经创建的线程降低创建线程、销毁线程带来的消耗。
(2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能执行。
(3)提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配、调优和监控。

50、线程池运行流程、参数、策略
线程池主要指定线程池的线程数大小、最大线程数、存储的队列、拒绝策略、空闲线程存活时长。
当需要的任务大于核心线程数的时候,就开始把任务存入到存储队列中;如果存储队列满了的话,就开始增加线程数量,如果线程数量也达到了最大,就开始执行拒绝策略。比如直接丢弃或者丢弃最老的任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值