- 博客(21)
- 收藏
- 关注

原创 Mybatis 模糊查询三种方法
背景 由于项目需要模糊查询,所以需要使用LIKE子句。LIKE子句需要使用%作为占位符,所以需要将%与字段值连接到一起。Mybatis下大概有如下几种方式实现:①使用$占位符,②使用数据库函数concat,③使用Mybatis的动态sql标签,下面会简单介绍下前两种的用法和缺陷,然后重点介绍第三种,如何使用以及存在的坑。使用$代码如下:@Select({"<script>",...
2019-11-08 20:40:40
1589

原创 你真的了解Wait 和Notify吗?
前言 大家对生产者和消费者模式很熟悉吧,这个模式很好理解,也在工程实践中经常被使用到。学习Java的同学有很大一部分使用Java语言实现过生产者和消费者模式,我就是其中之一。大概思路:有个盛装数据的容器(list)即缓冲区,一个往容器里放数据即生产者,一个从容器中取数据即消费者。但当容器满的时候,生产者就不能往里放东西了,此时需要等待缓冲区不满,即有消费者从容器中取出数据了,这就需要一个等待...
2019-11-05 22:47:07
221

原创 记一次线上问题排查经历 面试
背景记得是今年3月份初的事情,我一个同事在之前写的一个程序receiver 。receiver 主要是从第三方厂家接收数据,下载对应的图片,然后发给我们自己的产品。receiver跑了将近3个月都是正常的,没有任何问题。到三月份的时候,技术支持反馈数据断了,当时我们没有多大重视,只是让重启了,但是没过多久又断了 ,然后又让重启,没过10分钟就断了,然后接连很多次都是这样,当时我在忙别的项目,就...
2019-11-02 16:43:28
1302
3

原创 Hadoop 租约(一)
“租约” ,何为租约,一个租约管理着一个client的所有锁,对于每个client 都有一个相应的租约,但一个client 定期 check in 时租约的时间戳就会更新,当一个client 停止的时候并且允许租约到期,则对应的所有 锁都会释放。大家来看看租约这个类:class Lease implements Comparable<Lease> { // 租约的持有者,就...
2019-10-27 10:59:27
467

原创 Java 8 之Stream Pipeline
为了计算,“流”操作组成了一个流管道。一个流管道包括数据源、中间操作和终端操作。数据源可以是数组、集合、I/O通道和生成函数。而中间操作则是像过滤filter 或者map这种将一个流转换为另一个流的操作。那终端操作呢,就是产生一个结果或者别的副作用(转为集合或者统计成一个数字)。流是惰性的,源数据的计算只在终端操作启动时操作,流只在需要时消费。下面我们就聊聊“流”管道的那些事在遍历集合的时候,...
2019-10-27 10:58:01
769

原创 Java 8 之Stream Spliterator
定义用于遍历和分割“源”元素的对象。数据源Spliterator的元素来源可能是一个数组,一个集合,一个IO通道,一个生成函数。处理数据源的方式Spliterator可以单独或顺序地批量地遍历元素。Spliterator也可以将其部分元素作为另一个Spliterator进行分区,为了并行化操作。使用不能拆分或以非常不平衡或低效的方式进行拆分Spliterator的操作不太可能...
2019-10-27 10:55:23
460
1

原创 Java 8 之Stream 生成姿势
Stream 的定义支持顺序和并行聚合操作的元素序列可以由数组、集合以及文件转换而成Stream 消费完之后便没有了,就想流水一样生成流的“源”是一个不会在操作流的过程中改变生成流的"姿势"数组生成流Integer[] arr = {1, 2, 3, 4, 6};//这里可以开成int[] 试试看看结果。。。① Stream.of(arr)//生成流Strea...
2019-10-27 10:53:11
329

原创 Java 多线程之Semaphore (限流Java 版)
概念计数信号量。从概念上讲,信号量维护一组许可证。举一个例子某银行分店只有三个窗口,所以同一时间最多只有三个人办理业务,其它人只能等待。可以把办理业务的人比作成线程,三个窗口就相当于三个许可证。此时来了4个人,先到的三个领到人许可证然后办理业务,第四个人呢只有等待,等待其中一个先办好业务释放许可证之后,然后再办理业务。简单的用法调用aquire方法是阻塞的直到有一个许可可用然后返回。每次...
2019-10-27 10:51:55
581

原创 AQS实现探究 ——Java 锁的基架 AQS(二)
前言上篇介绍了AQS的概念,AQS 所支持的两种模式:独占模式和共享模式,如何去使用AQS 实现独占锁。这篇就介绍下AQS 是怎么是将线程锁住的?以及多个线程争夺时AQS 做了哪些事情?知识点简介volatilevolatile 是Java 中的关键字,主要有两个特性:可见性和防止重排序。在AQS主要用到第一个特性就是可见性;什么是可见性呢?学过操作系统的都知道,主内存是存放程序运行时数据...
2019-10-27 10:50:04
201

原创 Java 锁的基架 AQS(一)
简述提供一个框架来实现基于先入先出等待队列的阻塞锁和相关同步器(信号量,事件等)。该类被设计成多种类型同步器的有用基础,这些同步器使用一个简单原子整数值表示状态。这个简单原子整数是核心,它是用volatile关键字修饰,改变其値是通过CAS方式去修改的。子类必须定义改变这个状态的受保护的方法,这些方法的定义意味着被获取或者被释放对象的意义是什么。因此这个类的其他方法实现了所有的排队和阻塞机制。...
2019-10-27 10:48:26
124

原创 Java Nio 之高级搬砖工(FileChannel) 一
Java Nio 系列Java Nio 之BufferJava Nio 之直接内存Java Nio 之高级搬砖工(FileChannel) 一前言 大家对搬砖都很熟悉吧;小绿和小蓝是搬砖工,小绿比小蓝早一点开始搬砖,小绿搬砖的方式:一块砖一块砖搬,一直勤勤恳恳;小蓝的性格比较懒,一开始和小绿一起搬砖的方式 一样,但是发现这样搬砖很累,于是小蓝就想着怎么减轻自己的活然后又能干多一点,于是想...
2019-10-27 10:42:56
563

原创 Java Nio 之高级搬砖工(FileChannel)二
Java Nio 系列Java Nio 之BufferJava Nio 之直接内存Java Nio 之高级搬砖工(FileChannel) 一Java Nio 之高级搬砖工(FileChannel)二前言前段时间同事分享了一篇文章给我:为什么Kafka速度这么快? ,这篇文章相信大家也都看了。这篇文章说Kafka 有个作弊的技能 :直接从文件某个位置处读取某个长度的字节直接发送给消费者...
2019-10-27 10:41:26
186

原创 nio 之buffer
了解历史在 java1.4之前java io ,最核心的点是在"流"上;java io 的两大基石InputStream和OutputStream 也就是大家耳熟能祥的输入流和输出流,通过这个两个基石可以实现从外界读取数据到内存,以及将内存中数据写到外界;但是输入流和输出流有个弊端就是单向只能输入或者输出,而在java1.4提供的FileChannel不仅仅可以输入也同样可以输出,是一个双向的通...
2019-07-20 14:52:29
252
3
翻译 Java 函数组合
函数组合是一项把多个函数合并到一个函数的技术。你可以自己将多个独立的函数合并成一个函数(比如一个或多个 Java Lambda 表达式),但是对于函数组合 Java 也提供了内置的支持使其变得更为简单。在这篇文章中,我会介绍如何通过你自己或者 Java 内置的支持来组合函数。
2022-12-11 10:00:00
568
翻译 【译】MapReduce: 在大规模机器上的简易数据处理
在过去的五年,作者以及在 Google 的其他同事实现了上百个特定需求的计算程序用来处理大规模的原生数据,例如爬取的文档,web 请求日志,等等。计算多种形式的派生数据,例如倒排索引,多种形式的 web 文本图结构,从每个主机爬取文档的数量,给定日期最常访问的请求等等。大多数这样的计算在概念上是直接的。可是,输入数据通常是巨大的,为了在合理时间完成计算程序不得不分布在几百或几千台机器上执行。如何并行化计算、分布数据和处理故障等问题,使用大量复杂代码来处理这些问题使得原始简单计算变得模糊起来。
2022-11-25 22:42:23
801
翻译 Java 函数式接口
Java 函数式接口 这个术语首先出自于 Java 8。Java 里的函数式接口 指的是一个接口只包含一个抽象方法。也就是说函数式接口可以包含拥有实现(方法体)的默认方法和静态方法,另加一个未实现的方法。
2022-11-06 18:17:23
762
翻译 Java 函数式编程
“Java 函数式编程” 指的是在 Java 里的函数式编程。从历史上看,用 Java 进行函数式编程并不容易,甚至一些函数式编程在 Java 中是不可能实现的。在 Java 8 , Oracle 做了一些努力使得函数式编程变得更容易,这些努力在某种程度上取得了成功。在这个 Java 函数式编程教程中将介绍基本的函数式编程,以及 Java 中可以实现的部分。
2022-10-28 21:29:23
332
原创 Java ThreadLocal 妙用
最近公司需要做一个功能:导出报表的数据到 Excel 中,要求按报表内容分多个 sheet 导出;我用开源的 easy-excel 导出数据,easy-excel 写excel 的时候,设置多 sheet 时有两个属性:sheetNo 和 sheetName ,分别表示 sheet 号 和 sheet 名称;easy-excel 框架要求这两个属性不能重复,如果重复则会覆盖掉重复的那个 sheet。
2022-10-25 22:05:29
290
1
原创 多线程之ThreadLocal
前言 前几天在京东的同学给我打了个电话,聊了下家常,技术宅的我多嘴问了最近有没有学啥? 他说最近有点忙,但抽空也看了几篇博客,他说我考考你吧,我说可以啊,他问我: ThreadLocal 使用不当会导致 OOM 吗?我不假思索的回答:会。他继续追问道:为什么? 我说:因为 ThreadLocal 和操作它的线程绑定在一起,如果操作他的线程不被销毁,与之关联的 ThreadLocal 不会被 G...
2019-11-17 16:06:42
334
2
转载 nio 之HeapByteBuffer 和DirectByteBuffer
转载自 Unyieding前面介绍了buffer 相关的概念以及如何使用ByteBuffer 进行读写nio 之 buffer堆外内存和堆上内存首先来讲一下什么是堆上内存,在java 中我们经常会编写类似下面一段代码代码清单1-1public class HeapByteBufferDemo { public static void main(String[] args) { ...
2019-07-20 14:42:05
354
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人