Java基础
文章平均质量分 83
errority
这个作者很懒,什么都没留下…
展开
-
你知道Redis中的getbit、setbit的作用吗?
Redis常用的有五种数据结构,String、Hash、List、set、zset。而getbit和setbit则是String中特殊的获取数据方式。String底层数据是用二进制来存储的,而我们获取到的值就是通过二进制转换来的,而getBit就是直接获得某一位对应二进制的值。1.什么是偏移量在计算机里所有的数据都是以二进制的形式存储的,每一个非中文字符占一个字节(Byte),中文字符占两个字节,而一个字节又是占8bit。先在redis中设置一个k-v(key:foo value:bar)在.原创 2022-02-28 18:31:04 · 2469 阅读 · 0 评论 -
CopyOnWriteArrayList写时复制的原理
CopyOnWriteArrayList是一种写时复制的ArrayList,且是线程安全版本。有很多类似设计的数据结构,如CopyOnWriteArraySet。如果想了解具体原理剖析,请看第二章原理,为什么需要拷贝?拓展:CopyOnWriteArraySet线程安全的set,底层使用CopyOnWriteArrayListadd的时候调用addIfAbsent来保证元素无重复和一般set不同,像hashset、treeset底层都是调用相对应map来操作1. 简介CopyOnWrit原创 2022-01-26 11:30:53 · 736 阅读 · 0 评论 -
手写一个简易版的Spring框架
Spring框架很庞大和复杂,为了更好的理解其实现,尝试去模仿其功能手写一个简易版本,暂时只包括简略的几个功能,为了看情况更新。1. 包含功能@ComponentScan包体扫描@Autowire依赖注入@Scope单例实现BeanPostProcessor后置处理器InitializingBean初始化bean接口BeanNameAware名字资源设置BeanDefinition定义SingletonObjects单例池BeanDefinitionMap池基于注解配置的Appl.原创 2021-12-26 22:13:38 · 351 阅读 · 0 评论 -
Java源码中你不知道但经常写的超便捷工具类
1原创 2021-11-27 17:57:10 · 229 阅读 · 0 评论 -
CompletableFuture异步任务编排用法和详解
在工作中,常常会调用多个服务或者方法去获取不同的数据,如果传统做法就是串行一个个获取,然后封装返回。我们可以尝试使用CompletableFuture,将多个操作交给异步线程执行,然后主线程等待最长任务完成,将所有结果一并返回即可。Future局限性当我们得到包含结果的Future时,我们可以使用get方法等待线程完成并获取返回值,但我们都知道future.get()是阻塞的方法,会一直等到线程执行完毕拿到返回值。我们可以看到FutureTask中的get方法,就是循环代码直到线程执行完成返回。 .原创 2021-10-31 01:06:04 · 1464 阅读 · 0 评论 -
总结最常见五种BlockingQueue特点
一、前言我们经常可以在很多地方看到BlockingQueue的声影,最常见的就是在线程池中使用各式的阻塞队列。在Java中,BlockingQueue是一个接口,它的实现类有ArrayBlockingQueue、DelayQueue、 LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue等,它们的区别主要体现在存储结构上或对元素操作上的不同,但是对于take与put操作的原理,却是类似的。二、阻塞与非阻塞入队add(E e):原创 2021-05-04 22:42:03 · 855 阅读 · 1 评论 -
Java8新特性stream流处理
之前文章说了函数式编程,什么是流:Stream(流)是一个来自数据源的元素队列并支持聚合操作元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等;聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。和以前的Collection操作不同, Stream操作还有两个基础的特征;内部迭代: .原创 2021-04-23 14:22:54 · 194 阅读 · 0 评论 -
函数式接口-lambda,优雅开发代码
JDK中现在有很多Functional Interface这个特性用来代替我们传统的匿名内部类写法,传统我们使用实例化接口重写接口内对应的方法来帮助我们实现,但这种方法代码冗杂,而且也不好看。Button button = (Button) findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() { @Override public void原创 2021-04-07 14:29:38 · 148 阅读 · 1 评论 -
Java8新特性Optional - 消灭空指针异常
欢迎来我的博客参观,交流:https://endwas.cn前言:空指针异常在Java中的出现就好像死亡在你生命中一样,你无法避免也无法拒绝。不可否认null对象在编程上给我们带来很多便利,但在便捷的同时,要求开发人员仔细检查、校验。相信我们在写代码中的时候都写过无数个if xx = null …这种代码,这篇博客就是教你使用Optional代替没有营养的校验,然后开启你的函数式编程。空指针引用:价值十亿美元的错误我称之为我的十亿美元错误……当时,我正在设计第一个全面的类型系统,用于面向对象语原创 2021-03-30 17:31:50 · 215 阅读 · 0 评论 -
总结Java中IO流以及几种常见操作
欢迎来我的博客参观,交流:https://endwas.cnjava的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为“流”(stream)。通过流的形式允许java程序使用相同的方式来访问不同的输入/输出源。stram是从起源(source)到接收的(sink)的有序数据。1.IO流IO流可以分为字符流、字节流两大类。字节流一个字节占8位(bit),字符流根据不同字符所占的字节不同而读取的大小不同,常见中文一个原创 2021-03-21 23:49:49 · 152 阅读 · 0 评论 -
分析ArrayList扩容机制
转载自:白春雨(https://www.cnblogs.com/baichunyu/p/12965241.html)一、先从 ArrayList 的构造函数说起ArrayList有三种方式来初始化,这里讲最常用的无参数方法: /** * 默认初始容量大小 */ private static final int DEFAULT_CAPACITY = 10; private static final Object[] DEFAULTCAPACITY_EMPTY_EL原创 2021-02-15 18:36:49 · 235 阅读 · 0 评论 -
Java中集合类常见set、list(Queue)、map特性总结
Java中的集合类总共有三种:set、list(列表包含Queue)、mapCollection: Collection是集合List、Set、Queue的基本接口Iterator:迭代器,可以通过迭代器来遍历集合数据,同时使用这种方法不会造成数据越界异常,所以在遍历删除的时候务必使用。Map:是映射表的基础接口。集合框架List集合List集合实现方式排列顺序增删改查线程安全特点ArrayList底层使用数组排列有序,可重复速度快、增删慢线程不安全容原创 2021-02-12 18:10:29 · 384 阅读 · 3 评论