面试总结

       最近自己参加了深圳某公司的面试,将面试官提出的问题以及自己的理解贴出来,便于日后学习、巩固知识。

问题一:了解单例模式吗?讲讲它的实现方法?

回答:
单例模式是Java设计模式的一种,谈及设计模式,它是程序员在软件开发过程中,为了解决一些问题而提出的最佳解决方案,主要分为
1)创建型模式

单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式

2)结构型模式

代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式

3)行为型模式

模板方法模式、策略模式、命令模式、职责链模式、状态模式、观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式、解释器模式

其中单例模式可以分为五种实现方法

方式一:饿汉式
//饿汉式第一种:静态变量
class Singleton {

    //构造器私有化
    private Singleton() {

    }

    //类的内部创建静态常量对象实例
    private final static Singleton instance = new Singleton();

    //对外部提供获取对象实例的方法
    public static Singleton getInstance() {
        return instance;
    }
}

//饿汉式第二种:静态代码块
class Singleton1 {
    //创建一个私有变量
    private static Singleton1 instance;

    //构造器私有化
    private Singleton1() {

    }

	//在静态代码块中完成类的实例化
    static {
            instance = new Singleton1();
    }

    //对外部提供获取对象实例的方法
    public static Singleton1 getInstance() {
        return instance;
    }

}

优点:在类加载的过程中完成了对象实例化,避免了多线程的问题
缺点:没有达到懒加载(Lazy Loading)的效果,如果对于该类实例不使用,则造成了内存的浪费。

方式二:懒汉式
//懒汉式第一种:提供静态共有方法
//多个线程同时请求时,会创建多个对象实例,不推荐使用
class Singleton2 {

    private static Singleton2 instance;

    private Singleton2() {

    }

    //提供一个静态共有方法,只有当使用到该方法时,才会实例化对象
    public static Singleton2 getInstance() {
        if (instance == null) {
            instance = new Singleton2();
        }
        return instance;
    }
}

//懒汉式:同步处理代码
//效率太低
class Singleton3 {

    private static Singleton3 instance;

    private Singleton3() {

    }

    //提供一个静态共有方法,加入同步处理的代码,只有当使用到该方法时,才会实例化对象
    public static synchronized Singleton3 getInstance() {
        //增加synchronized,不会造成多个线程同时请求的问题
        if (instance == null) {
            instance = new Singleton3();
        }
        return instance;
    }
}

//懒汉式第三种:不推荐
class Singleton4 {
    private static Singleton4 instance;

    private Singleton4() {
    }

    public static Singleton4 getInstance() {
        if (instance == null) {
            synchronized (Singleton4.class) {
                instance = new Singleton4();
            }
        }
        return instance;
    }
}

优点:起到了懒加载的效果,只有需求请求获取对象实例时,才会创建对象实例。
缺点:线程不安全

方式三:双重检查法
//双重检查法
class Singleton5 {
    private static volatile Singleton5 instance;

    private Singleton5() {
    }

    public static Singleton5 getInstance() {
        if (instance == null) {
            synchronized (Singleton5.class) {
                if (instance == null) {
                    instance = new Singleton5();
                }
            }
        }
        return instance;
    }
}

优点:解决线程安全问题,也解决了懒加载问题,保证了效率,推荐使用

方法四:静态内部类
//静态内部类
//调用getInstance()方法时,加载静态内部类
class Singleton6 {
    private Singleton6() {

    }

    private static class SingletonINSTANCE {
        private static final Singleton6 INSTANCE = new Singleton6();
    }

    private static Singleton6 getInstance() {
        return SingletonInSTANCE.INSTANCE;
    }
}

方式五:枚举
//枚举
enum Singleton7 {

    INSTANCE;

}

这是单例模式的五种实现方式。

问题二:讲讲线程与进程的区别?

回答:
线程是操作系统任务调度与执行的基本单元,进程是操作系统资源分配的基本单元
操作系统不会给线程分配内存空间,只会给进程分配不同的内存空间,使进程内的多个线程同时运行,线程组之间只能共享资源。

问题三:线程之间的通信方式有哪些?

回答:
这道问题,我不太清楚,所以,这里学习一下
线程间通信

问题四:用过redis吗?

回答:
redis是用C语言编写的,key-value类型的数据结构服务器,它具有高速读写,数据类型丰富等特点,可以存储String、List、Set、Hash、Sorted Set等五种类型的数据,支持持久化,支持事务,消息队列、消息订阅。

问题五:使用过SpringCloud吗?

使用SpringCloud,首先必须清楚微服务:
微服务
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
spring cloud
自己在做项目的时候,也接触到了springcloud框架,由于springboot框架略去了一些繁琐的xml文件配置,spring cloud利用Spring Boot的开发便利性巧妙地简化了分布式系统的开发,如设置网关ApiZuul、服务发现与注册Eureka、通过Ribbon均衡负载之后,分发到具体实现实例,这些都是一些小的微服务,贴出来springcloud项目的框架结构:
在这里插入图片描述
面试结束!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值