java学习
学习java,demo或者源码查看
DLC的学习笔记
这个作者很懒,什么都没留下…
展开
-
面试中常问的Java IO模型到底是什么?
文章目录一、同步阻塞IO(BIO)二、同步非阻塞IO(NIO)三、IO多路复用1.Linux中的IO多路复用最近在面试中常常被问到IO模型,于是想在网上找找对应的讲解,可都没有一个详细好理解且带例子的。下面会介绍Java的几种IO模型,并且均给予代码演示。Java中最常用的模型个人认为有以下四种:同步阻塞IO(Blocking IO)同步非阻塞IO(Non-Blocking IO)IO多路复用异步IO(Asynchronous IO)一、同步阻塞IO(BIO)同步阻塞IO可以说是最简单的原创 2020-09-12 14:28:06 · 346 阅读 · 0 评论 -
Redis面试
一、Redis简介Mysql的数据都存放在磁盘中,读取时IO压力大,所以缓存数据库应运而生。1.缓存中间件—Memcache和Redis的区别Memcache:代码层次类似Hash支持简单数据类型不支持数据的持久化存储不支持主从不支持分片Redis数据类型丰富支持数据磁盘持久化存储支持主从支持分片2.为什么Redis这么快Redis可以达到100000+QPS。完全基于内存,绝大部分请求是纯粹的内存操作数据结构简单,对数据操作也简单采用单线程,避免了处理并发问题原创 2020-08-07 17:26:56 · 167 阅读 · 0 评论 -
线程池
一、并发队列(一)阻塞队列线程池是通过阻塞队列实现的。入队:当队列满了的时候,进行等待,什么时候有数据出队,再放进去。出队:当队列中没有元素,等待队列中有数据,再取出。(二)非阻塞队列入队:当队列满了的时候,放入数据,数据丢失。出队:队列中没有元素,取数据,得到的是null。(三)测试BlockingQueueBlockingQueue是一个接口,有多种实现类。入队 多种方法:...原创 2020-03-27 10:48:12 · 210 阅读 · 0 评论 -
HashMap、ConcurrentHashMap原理剖析
一、HashMap底层原理1. 默认加载因子(loadFactor) 0.75,为什么?何时扩容:当hashmap中的元素个数超过数组大小*loadFactor时,就会进行数组扩容。为什么非要0.75?过高会导致更多哈希碰撞,过低会导致空间利用率低。根据源码注释来看,节点在hash桶中的分布大致遵循泊松分布,在加载因子为0.75时,每个碰撞位置链表长度超过8个的概率便小于千万分之一。2...原创 2020-03-20 21:35:04 · 157 阅读 · 0 评论 -
牛客笔试题整理(3)
1.类方法类方法指的就是被static修饰的方法,有如下选择题:下列说法错误的有( )A. 在类方法中可用this来调用本类的类方法B. 在类方法中调用本类的类方法时可直接调用C.在类方法中只能调用本类中的类方法D. 在类方法中绝对不能调用实例方法A. static方法是属于类的,而不是属于某一个对象,所以没有this指针。B.一个类方法中可以直接调用另一个类方法C.一个...原创 2020-03-19 12:12:42 · 451 阅读 · 0 评论 -
牛客笔试题整理(2)
1.类初始化的顺序父类的静态变量和静态代码块赋值(按照声明顺序)自身的静态变量和静态代码块赋值(按照声明顺序)父类的成员变量和块赋值(按照声明顺序)父类构造器赋值:如果父类没有无参构造器,则子类中一定要使用super(参数)指定父类的有参构造器,否则会报错自身的成员变量和块赋值(按照声明顺序)自身构造器赋值2.数组是对象吗数组是一个对象,不同类型的数组具有不同的类两个数组用...原创 2020-03-17 21:16:29 · 253 阅读 · 0 评论 -
牛客笔试题整理(1)
1.final、finally和finalize的区别final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize()是Object中的方法,当垃圾回收器将要回收对象所占内存之前被调用,即当一个对象被虚拟机宣告死亡时会先调用它finalize()方法,让此对象处理它生前的最后事情。不过,finali...原创 2020-03-17 20:21:55 · 684 阅读 · 0 评论 -
单例模式的几种写法
单例模式在《设计模式》中的定义为“保证一个类仅有一个实例,并提供一个访问它的全局访问点。”1.饿汉式饿汉式在类装载时便完成实例化,注意:单例模式的构造函数都是私有的。public class HungryMan { //静态常量,可以避免多次实例化 private final static HungryMan instance = new HungryMan(); pri...原创 2020-03-17 16:38:01 · 172 阅读 · 0 评论 -
使用wait/notify实现生产者消费者模式
利用阻塞队列可以轻松实现生产者和消费者,不过我们也可以通过wait和notify来手动实现PV。利用List建立一个仓库,实现put(),和take()方法。其中生产者调用put,当仓库满后wait(),每次调用都执行notify唤醒消费者;消费者调用take,当仓库空后wait(),每次调用都执行notify唤醒生产者。代码如下:import java.util.ArrayList;im...原创 2020-03-02 10:08:08 · 668 阅读 · 0 评论 -
volatile到底能用来中断线程吗
在中断线程的方法中,除了使用interrupt(),还能否使用别的方法。volatile可以实现变量的可见性,能否用来充当中断标志位?一、在没有阻塞的时候,可以使用volatile设计一个实现Runnable的类,在run方法中循环打印出从0到100000中100的倍数。在循环判断的条件中,判断volatile的变量来控制是否停止循环。在主线程中通过修改其volatile变量,是可以实现使线...原创 2020-02-29 22:10:25 · 534 阅读 · 2 评论