文档章节

面试题

笙1
 笙1
发布于 2017/02/15 00:24
字数 1124
阅读 37
收藏 2

1.synchronized 和java.util.concurrent.locks.Lock的异同 

    Lock 能实现synchronized的所有功能,synchronized能自动释放锁,Lock需要手动在finally中释放

2.线程的基本状态以及状态之间的关系

   1.新建状态(New)

      new操作符创建一个线程后,调用start()前,处于新建状态

   2.就绪状态(Runnable)

     1>调用线程start()方法,线程位于线程池中,变得可运行,等待cpu的使用权

     2>当前线程sleep()方法结束,其他线程join()结束,等待用户输入完毕,某个线程拿到对象锁,这些线程也将进入可运行状态。

     3>当前线程时间片用完了,调用当前线程的yield()方法,当前线程进入可运行状态。

     4>锁池里的线程拿到对象锁后,进入可运行状态

   3.运行状态(Running)

当线程获得cpu时间后,进入运行状态,执行run()方法

   4.阻塞状态(Blocked)

       1> 线程通过调用sleep方法进入睡眠

       2> 线程试图得到锁,而该锁正被其他线程持有、

       3>线程等待某个触发条件

       4>线程调用一个在I/O上被阻塞的操作

       5>运行在当前线程里的其它线程t2调用join()方法,当前线程进入阻塞状态。

    其他线程可以获得CPU

   5.死亡状态(Dead)

        线程执行完成,或者run()方法因异常退出

3.实现对象clone的接口

      Cloneable接口,

            1>.实现接口 2>.重写Object类的clone()方法

      serializable接口

浅克隆,克隆他自身以及他包含的所有对象的引用地址

深克隆,就是非浅克隆。克隆除自身以外所有的对象,包括自身所包含的所有对象实例

4.事务是什么?

    作为一个逻辑单元执行的一系列操作

    ACID属性

   原子性:原子工作单元,要么全部执行,要么全部补执行

   一致性:事务完成时,数据处于一致性

   隔离性:对数据修改的并发事务是彼此隔离的

   持久性:事务完成后对系统的影响是永久的

5.集合方面面试题

   collection 是最基本的集合接口,代表一组Object,Java sdk 提供的类都是继承List,Set

集合类通过工厂方法生成,、

   List 有序的collection,能精确控制每个元素插入位置,能够使用索引访问List中位置,类似数组,允许相同的元素,

常用类LinkedList ,ArrayList Vector,Stack

LinkedList 允许为空,提供额外的get,remove,insert方法在首部或者尾部,可以被用作stack,queue,deque

ArrayList 实现了可变大小的数组,允许所有元素包括null,ArrayList没有同步

Vector类似ArrayList 但是是同步的

Stack 继承Vector 实现后近先出的堆栈push() pop() peek() empty() search()

Set 一种不包含重复元素的Collection,最多又一个空元素

Map 提供key value的映射,不能包含相同的key,每个key映射一个value

Hashtable 继承Map接口,不能将空值作为key或者value,get(),put()

Hashtable是同步的

Hashmap 是非同步的,允许空 key和value

6.工厂模式

    1>简单工厂模式:静态工厂模式,定义一个用于创建对象的接口或者抽象类

    由一个具体的类去创建其他类的实例,父类是相同的,父类是具体的。 

    2>工厂方法模式:

有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成。 

    3>抽象工厂模式:

   提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。它针对的是有多个产品的等   级结构。而工厂方法模式针对的是一个产品的等级结构。

7.volatile作用

  1>.防止指令重排

      实例化对象步骤:<1>分配内存空间<2>初始化对象<3>将内存空间地址赋值给对应的引用

  2>.实现可见性

  3> 保证原子性

8.单例

public class Singleton {
 4     public static volatile Singleton singleton;
 5 
 6     /**
 7      * 构造函数私有,禁止外部实例化
 8      */
 9     private Singleton() {};
10 
11     public static Singleton getInstance() {
12         if (singleton == null) {
13             synchronized (singleton) {
14                 if (singleton == null) {
15                     singleton = new Singleton();
16                 }
17             }
18         }
19         return singleton;
20     }
21 }

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
笙1
粉丝 2
博文 39
码字总数 4058
作品 0
深圳
后端工程师

暂无文章

学习设计模式——中介者模式

1. 认识中介者模式 1. 定义:用一个中介对象来封装一系列的对象交互行为,中介者使得各对象不需要显式的互相引用,从而使其松散耦合,独立的改变他们之间的交互。 2. 结构: Mediator:中介者...

江左煤郎
25分钟前
0
0
深入理解Plasma(1):Plasma 框架

这一系列文章将围绕以太坊的二层扩容框架,介绍其基本运行原理,具体操作细节,安全性讨论以及未来研究方向等。本篇文章作为开篇,主要目的是理解 Plasma 框架。 Plasma 作为以太坊的二层扩容...

HiBlock
32分钟前
0
0
Java 8 日期 示例

Java 8 推出了全新的日期时间API。Java处理日期、日历和时间的方式一直为社区所诟病,将 java.util.Date设定为可变类型,以及SimpleDateFormat的非线程安全使其应用非常受限。Java也意识到需...

阿刚ABC
58分钟前
1
0
RxJava操作符lift 笔记

在内部,每个Rx operator都做3件事: 它订阅源并观察值。 它根据操作员的目的转换观察到的序列。 它通过调用onNext,onError和onCompleted将修改后的序列推送到自己的订阅者。 compose运算符...

woshixin
59分钟前
1
0
lnmp+coreseek实现站内全文检索(安装篇)

软件安装包 安装环境 系统环境 centos7.2 1核2G 软件环境 coreseek-3.2.14 lnmp1.5 安装mmseg 更新依赖包和安装编译环境 yum -y install m4 autoconf automake libtoolyum -y install gcc g...

毛毛雨rain
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部