面试
林夕风暴
常在江边站,必有望海心
展开
-
谈谈equals和==&谈谈HashSet
谈谈equals和==首先“等等”既能比较基本类型,也能比较引用类型基本类型比较值,引用类型比较地址凡是new 出来的对象,都是引用类型,用“等等”比较都是比较地址,永远为falseequals比较的是什么?它只能比较引用类型首先要明确equals并不是String类的方法,而是Object类的方法如果该equals方法没有被重写过,那么默认使用object类的equals方法,方法内...原创 2020-05-07 13:57:32 · 189 阅读 · 0 评论 -
线程池七大参数和拒绝策略
由Executors源码中常用的三个获得线程池的方法可见他们都是通过ThreadPoolExecutor线程操作类来实现的再看ThreadPoolExecutor的源码实现该线程操作类的实现是有七大参数的这七大参数的含义:用一个银行处理业务的场景来模拟解释七大参数的含义关于KeepAliveTime就是当来办理银行业务的人越来越少,即请求线程越来越少,加班窗口(扩容的线程)慢慢的不再...原创 2020-03-04 20:21:18 · 432 阅读 · 0 评论 -
线程池的使用(实际中的应用)
线程池的使用(实际中的应用)我们前边说过3中比较重要的线程池的获得方式但是在实际的工作中获得线程池并不使用这三种方式,阿里巴巴开发手册中有关线程资源的获取和线程池的使用规定如下:意思即这几种自带的创建线程池的方法中:FixedThreadPool和SingleThreadPool中定义的阻塞队列为LinkedBlockingQueue类型,它的默认阻塞边界值为Integer.MAX_...原创 2020-03-04 20:20:16 · 4771 阅读 · 0 评论 -
获得多线程的方式之线程池
获得多线程的方式之线程池谈谈你对线程池的理解什么是线程池?优势?线程池的主要作用控制运行的线程的数量,简单来说,存放多个线程的池子,用到的时候从池中取线程去执行队列任务,执行完任务线程的释放主要特点:线程复用(避免重复方法创建和销毁线程,降低资源消耗,提高了响应速度)控制并发线程数(可以设置线程的数量)管理线程(对多个线程进行统一的分配,调优和监控)优势:降低资源消耗,提高了响应...原创 2020-02-29 17:23:11 · 203 阅读 · 0 评论 -
Callable获得多线程
获得多线程的方式之通过Callable接口先看一下Callable的接口源码与Runnable接口的区别1)Runnable接口没有返回值,该接口有返回值(带返回值的线程工作内容)2)Runnable接口方法不会抛异常,该接口方法会抛异常3)Runnable接口方法是run()方法,该接口的接口方法是call()方法怎么使用Callable接口Thread有Thread(Ru...原创 2020-02-29 17:22:01 · 360 阅读 · 0 评论 -
线程通讯之生产者消费者(生产一个,消费一个)传统版和阻塞队列版
线程通讯之生产者消费者线程 操作(方法) 资源类判断 执行 通知防止虚假唤醒(await()的判断逻辑必须放到一个循环while里面,不能放在if里面)实例:一个初始值为0的变量,两个线程对其进行交替操作,一个加1一个减1(生产一个,消费一个),来5轮实现方式传统版 1): Synchronized锁、aw...原创 2020-02-29 17:20:09 · 231 阅读 · 0 评论 -
阻塞队列BlockingQueue
阻塞队列BlockingQueue队列:一种数据结构,先进先出(排队取餐)阻塞队列:(交通拥堵)1)阻塞队列有没有好的一面(一种情况:海底捞火锅,消费者越多,越阻塞证明生意越好,欢迎阻塞)2)不得不阻塞,你如何管理?什么是阻塞队列(BlockingQueue):当阻塞队列中元素为空的时候,从队列中获取元素的操作将被阻塞当阻塞队列中元素为满的时候,往队列中插入元素的操作将被阻塞...原创 2020-02-17 11:23:50 · 180 阅读 · 0 评论 -
Java并发编程之Semaphore(信号量)
SemaphoreSemaphore是Java并发编程中常用到的,也叫信号量一:用于多个共享资源的互斥访问,二:控制并发线程数(这是相较于Synchronize的优势,当控制的并发线程数为1时,就等同于Synchronize,Lock锁)模拟示例模拟分车位,比如6个车抢占3个共享车位,同时最多只能3个车拥有车位,其他车排队等待,当车位空出来时,新的车进入车位,有增就有减代码及注...原创 2020-02-14 16:14:15 · 192 阅读 · 0 评论 -
设计模式:简单工厂模式/工厂方法模式/抽象工厂模式
简单工厂模式简单工厂模式:并不是23种设计模式的一种而是一种常用的开发编码方式,简单来说就是编写一个类专门用来创建其他类的实例,被创建的实例通常都具有共同的父类示例:创建一个鼠标工厂,专业生产鼠标,给参数 0,生产戴尔鼠标,给参数 1,生产惠普鼠标类图:示例代码实现:/** * 简单工厂模式:并不是23种设计模式的一种 * 而是一种常用的开发编码方式,简单来说就是编写一个类专门...原创 2020-01-14 11:23:02 · 166 阅读 · 0 评论 -
CountDownLatch:计数类
CountDownLatch作用和原理:Java1.5后引入,作用:使得一个线程等待其他线程执行完之后再执行该线程实现原理:通过一个计数器实现,该计数器的初始值就是需要等待执行完的线程的数量,每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0的时候,表示需要等待执行完的线程都执行完了,此时在闭锁上等待的线程就可以恢复工作了源码:countDownLatch类中只提供了一个构...原创 2020-01-09 13:45:42 · 192 阅读 · 0 评论 -
设计模式:单例模式的使用场景和注意事项
单例模式在JDK源码中的应用Runtime类Runtime runtime = Runtime.getRuntime();看Runtime类的源码:由此可见,该类是典型的单例模式,并且是静态常量的饿汉式使用单例模式注意事项:要记住获得实例的方法,而不是通过new来创建一个对象实例...原创 2020-01-04 10:22:11 · 251 阅读 · 0 评论 -
设计模式:单例模式(枚举,强烈推荐)
通过枚举实现单例模式最佳的单例实现模式就是枚举模式。利用枚举的特性,让JVM来帮我们保证线程安全和单一实例的问题。除此之外,写法还特别简单。还可以规避可能还存在反射攻击或者反序列化攻击,完全保证单例模式代码示例和注释:/** * 单例模式:枚举方式 * 1.建一个枚举类 */public class SingletonEnumDemo { public static void ...原创 2020-01-02 15:05:24 · 375 阅读 · 1 评论 -
java锁:读写锁
独占锁/共享锁独占锁:同一时间内只允许一个线程持有该锁,保证数据一致性,Synchronized/ReentrantLock都是独占锁共享锁:同一时间内允许多个线程持有该锁,多个线程可以操作读写锁: ReentrantReadWriteLock读写锁:写操作是独占锁,读操作是共享锁,写独占保证数据一致性,读共享保证并发性就好比一个成绩单需要签名,但是又可以供多个人一起读,此时同一时...原创 2019-12-31 14:56:49 · 370 阅读 · 2 评论 -
Java锁:自旋锁
自旋锁实现原理(while循环+CAS(compareAndSet))一个锁已经被一个线程锁持有,其他尝试获取该锁的线程并不会立即阻塞,而是采用循环的方式不停地尝试去获取锁,直至获取成功,跳出循环现实生活中的例子:公用洗衣机,一个人想去洗衣服,但是此时洗衣机正在被占用着,那么这个人有两种选择,要么一直在洗衣机前等待,等到该洗衣机洗完,另一种每隔一段时间再回来看看,洗衣机是否已经洗完代码...原创 2019-12-30 13:26:50 · 113 阅读 · 0 评论 -
Java锁:可重入锁(递归锁)
可重入锁也叫递归锁:递归传递同一把锁理解:同一个线程在进入外层同步方法获得锁之后,同样可以进入该外层同步方法中所拥有的内层同步方法,它们此时所拥有的是同一把锁这种设计可以避免死锁(如果不是可重入锁,在进入外层同步方法之后,无法进入该外层同步方法所拥有的内层同步方法,这种情况下就会出现死锁)synchronized/ReentrantLock都是可重入锁代码示例和解释:import j...原创 2019-12-30 10:04:42 · 387 阅读 · 0 评论 -
设计模式:单例模式(静态内部类)
单例模式(静态内部类)JVM装载部类不会实例化外部类对象,装载内部类时候才会实例化外部类对象三步:1.构造器私有化2.创建私有静态内部类,在静态内部类中创建私有静态对象实例3.对外提供共有方法(以供外部调用),返回对象实例代码示例和解释/** * 单例模式:静态内部类实现(推荐使用) * 1.构造器私有化 * 2.创建私有静态内部类,在静态内部类中创建私有静态对象实...原创 2019-12-29 20:37:30 · 336 阅读 · 0 评论 -
设计模式:单例模式(懒汉式)
单例模式(饿汉式)两步:1.构造器私有化2.对外提供一个公有方法,用于获得对象实例,(使用到该类,才去实例化对象)方式一:单线程情况下没问题,多线程情况下会出现线程安全问题/** * 单例模式:懒汉式 * 1.构造器私有化 * 2.对外提供一个公有方法,用于获得对象实例,(使用到该类,才去实例化对象) */public class Singleton { public st...原创 2019-12-27 16:47:02 · 346 阅读 · 0 评论 -
设计模式:单例模式(饿汉式:静态常量、静态代码块)
单例模式简单说:一个对象只有一个对象实例饿汉式(静态常量):饿汉式(饥饿,一上来就想吃,一装载就实例化)三步:1.构造器私有化(外部不能通过new来新建一个对象实例)2.类内部创建一个对象实例3.提供一个共有的静态方法(供外部调用):返回实例对象代码示例和注解: * 单例模式: * 饿汉式(静态常量) * 1.构造器私有化(外部不能通过new来新建一个对象实例) * ...原创 2019-12-27 11:19:35 · 573 阅读 · 0 评论 -
设计模式七大设计原则:
设计模式的七大设计原则:单一职责、接口隔离、依赖倒转、里式替换、开闭原则、迪米特法则(最少知道原则)、合成复用原则设计原则的核心思想:为松耦合而设计单一职责: 一个类只具有一个职责,而不具有多个职责,,比如一个用户服务类中应该只有与用户有关的功能实现,而不是包含比如其他模块的职责(类的细分)接口隔离: 每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。(接口的细分)*...原创 2019-12-27 10:54:50 · 140 阅读 · 0 评论 -
Java锁:公平锁/非公平锁
Lock锁之公平锁/非公平锁Java中的公平锁和非公平锁是什么?二者区别?公平锁:多线程高并发情况下,线程获得锁的顺序是先到先得,依次获得非公平锁:线程获得锁的顺序是先抢先得,先运行的线程不一定先获得锁,允许加塞,所以结果是不公平的二者区别:公平锁先到先得,非公平锁先抢先得,非公平锁比公平锁的吞吐量会大一些。ReentrantLock和snychronized是什么锁?Reentran...原创 2019-12-25 14:16:13 · 177 阅读 · 0 评论 -
集合不安全问题:Set
ArraySet类比ArrayList也是线程不安全的,需要注意的一点set,在使用CopyOnWriedArraySet<>()时,CopyOnWriedArraySet底层调用的是CopyOnWriedArrayList<>()原创 2019-12-24 10:17:00 · 176 阅读 · 0 评论 -
集合不安全问题:ArrayList
我们都知道ArrayList是线程不安全的,请给出一个ArrayList不安全的例子,并且给出解决方案ArrayList底层是什么?数组什么类型的数组? Object类型的数组,初始长度为10线程不安全的例子:多线程操作ArrayList集合往里面写数据再读数据,会报java.util.ConcurrentModificationExcepion(并发修改异常)public st...原创 2019-12-24 10:07:44 · 291 阅读 · 0 评论