Java
文章平均质量分 82
赵彦军
android开发工程师、烧菜能手、暖男
展开
-
Java 数组拷贝
方法其实就是返回一个数组,而这个数组就等于数组array的前 newLength 数。其实内部用了 System.arraycopy 方法。原创 2022-09-28 10:06:50 · 357 阅读 · 0 评论 -
Java 动态代理Proxy.newProxyInstance()
这种方式就是我们通常编写代码的方式。原创 2022-07-17 18:55:33 · 1629 阅读 · 0 评论 -
android gradle自定义钉钉群提醒
今天接到一个需求,写一个 gradle 小插件,在执行完某个 gradle 任务后,向钉钉群聊机器人发送一条消息,并自动 @所有人。首先在钉钉群中创建智能机器人,并获取到 Webhook 链接有了 Webhook 链接就可以给机器人发消息了。下面我们来自定义 gradle 工具。在项目的跟目录创建 dingding.gradledingding.gradle 代码如下:import groovy.json.JsonBuilderimport groovy.json.JsonOutput原创 2022-02-16 20:10:04 · 1521 阅读 · 0 评论 -
Shell脚本学习笔记
什么是 ShellShell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 脚本Shell 脚本(shell script),是一种为 shell 编写的脚本程序。Shell 环境Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。Shell 语法打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩原创 2022-02-14 15:55:04 · 548 阅读 · 0 评论 -
Java字符串、文件MD5工具类
Hex首先定义 Hex 工具类, 来源于 apache 开源工具类 https://commons.apache.org/proper/commons-codec/download_codec.cgi/** * @author : zhaoyanjun * @time : 2021/6/8 * @desc : file md5值 https://commons.apache.org/proper/commons-codec/download_codec.cgi */public class原创 2021-10-20 20:27:23 · 459 阅读 · 0 评论 -
Java原子操作Atomic
Java的java.util.concurrent包除了提供底层锁、并发集合外,还提供了一组原子操作的封装类,它们位于java.util.concurrent.atomic包。AtomicInteger我们以AtomicInteger为例,它提供的主要操作有:增加值并返回新值:int addAndGet(int delta)加1后返回新值:int incrementAndGet()获取当前值:int get()用CAS方式设置:int compareAndSet(int expect, int原创 2021-10-19 21:33:04 · 711 阅读 · 0 评论 -
Java线程安全StampedLock
ReadWriteLock前面介绍的ReadWriteLock可以解决多线程同时读,但只有一个线程能写的问题。如果我们深入分析ReadWriteLock,会发现它有个潜在的问题:如果有线程正在读,写线程需要等待读线程释放锁后才能获取写锁,即读的过程中不允许写,这是一种悲观的读锁。要进一步提升并发执行效率,Java 8引入了新的读写锁:StampedLock。StampedLock和ReadWriteLock相比,改进之处在于:读的过程中也允许获取写锁后写入!这样一来,我们读的数据就可能不一致,所以,原创 2021-10-19 21:02:27 · 467 阅读 · 0 评论 -
Java阻塞队列 LinkedBlockingDeque
LinkedBlockingDequeLinkedBlockingDeque类实现了BlockingDeque接口。阅读BlockingDeque文本以获取有关的更多信息。Deque来自“双端队列” 这个词。Deque是一个队列,你可以在插入和删除队列两端的元素。LinkedBlockingDeque是一个Deque,如果一个线程试图从中获取一个元素,而队列空的,不管线程从哪一端试图获取元素,都会被阻塞。以下是实例化和使用LinkedBlockingDeque的例子:BlockingDeque&l原创 2021-10-19 10:47:35 · 1085 阅读 · 0 评论 -
Java栈 Stack
Stack栈(Stack)是一种后进先出(LIFO:Last In First Out)的数据结构。什么是LIFO呢?我们先回顾一下Queue的特点FIFO:所谓FIFO,是最先进队列的元素一定最早出队列,而LIFO是最后进Stack的元素一定最早出Stack。如何做到这一点呢?只需要把队列的一端封死:因此,Stack是这样一种数据结构:只能不断地往Stack中压入(push)元素,最后进去的必须最早弹出(pop)来:Stack只有入栈和出栈的操作:把元素压栈:push(E);把栈顶的原创 2021-10-18 19:33:19 · 503 阅读 · 0 评论 -
Java队列 PriorityQueue
PriorityQueue我们知道,Queue是一个先进先出(FIFO)的队列。在银行柜台办业务时,我们假设只有一个柜台在办理业务,但是办理业务的人很多,怎么办?可以每个人先取一个号,例如:A1、A2、A3……然后,按照号码顺序依次办理,实际上这就是一个Queue。如果这时来了一个VIP客户,他的号码是V1,虽然当前排队的是A10、A11、A12……但是柜台下一个呼叫的客户号码却是V1。这个时候,我们发现,要实现“VIP插队”的业务,用Queue就不行了,因为Queue会严格按FIFO的原则取出队原创 2021-10-18 16:42:42 · 402 阅读 · 0 评论 -
Java队列 Deque
我们知道,Queue 是队列,只能一头进,另一头出。如果把条件放松一下,允许两头都进,两头都出,这种队列叫双端队列(Double Ended Queue),学名Deque。Java集合提供了接口Deque来实现一个双端队列,它的功能是:既可以添加到队尾,也可以添加到队首;既可以从队首获取,又可以从队尾获取。我们来比较一下Queue和Deque出队和入队的方法:QueueDeque添加元素到队尾add(E e) / offer(E e)addLast(E e) / o原创 2021-10-18 16:32:51 · 604 阅读 · 0 评论 -
Java队列 Queue
Queue队列(Queue)是一种经常使用的集合。Queue实际上是实现了一个先进先出(FIFO:First In First Out)的有序表。它和List的区别在于,List可以在任意位置添加和删除元素,而Queue只有两个操作:把元素添加到队列末尾;从队列头部取出元素。超市的收银台就是一个队列:在Java的标准库中,队列接口Queue定义了以下几个方法:int size():获取队列长度;boolean add(E)/boolean offer(E):添加元素到队尾;E rem原创 2021-10-18 16:08:52 · 1226 阅读 · 0 评论 -
Java线程安全Lock、ReentrantLock、ReentrantReadWriteLock
文章目录前言LockReentrantLock公平锁/非公平锁超时机制可重入锁读写锁 ReentrantReadWriteLock源码结构总结示例前言java5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁的功能,它提供了与synchronized关键字类似的同步功能。既然有了synchronized这种内置的锁功能,为何要新增Lock接口?先来想象一个场景:手把手的进行锁获取和释放,先获得锁A,然后再获取锁B,当获取锁B后释放锁A同时获取锁C,当锁C获取后,再释放锁B同时获取锁D,以此原创 2021-10-13 20:32:26 · 575 阅读 · 0 评论 -
Java线程安全集合总结
从Java5开始,在Java.util.concurrent包下提供了大量支持高效并发访问的集合接口和实现类,如下图:从图中可以看出,这些线程安全的集合主要分为两类,以Concurrent开头的集合类和以CopyOnWrite开头的集合类。1、以Concurrent开头的集合类,可以支持多个线程并发写入访问,写入操作都是线程安全的,读取操作不必锁定,采用更复杂的算法保证永不会锁住整个集合,因此在并发写入时有较好的性能。ConcurrentLinkedQueue实现多线程高效、无须等待的访问,不能使用原创 2021-10-13 18:08:01 · 3004 阅读 · 0 评论 -
Java CountDownLatch的两种常用场景
简介先来看看 CountDownLatch 的源码注释;/** * A synchronization aid that allows one or more threads to wait until * a set of operations being performed in other threads completes. * * @since 1.5 * @author Doug Lea */public class CountDownLatch {}描述如下:它是一个同原创 2021-09-27 13:46:38 · 857 阅读 · 0 评论 -
RSA加密 — 详解
文章目录RSA 简介实际运用注意事项实战RSA 简介RSA——非对称加密,会产生公钥和私钥,公钥在客户端,私钥在服务端。公钥用于加密,私钥用于解密。实际运用注意事项1、一般由服务器创建秘钥对,私钥保存在服务器,公钥下发至客户端2、公钥是二进制数据,怎么下发给客户端呢?第一种方式:服务器把二进制数据写入文件,然后把文件传给客户端。由客户端从文件读取二进制数据。第二种方式:服务器把二进制数据转成 base64 字符串,客户端获取到 base64 字符串后,再转码为二进制数据。实战我们封存一原创 2021-09-15 21:16:21 · 20082 阅读 · 1 评论 -
AES加密 — 详解
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/120285594本文出自【赵彦军的博客】AES 简介DES 全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS)AES 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种.原创 2021-09-14 13:47:25 · 34733 阅读 · 6 评论 -
JAVA多线程中wait()方法的详细分析
最近看帖子,发现一道面试题:启动两个线程, 一个输出 1,3,5,7…99, 另一个输出 2,4,6,8…100 最后 STDOUT 中按序输出 1,2,3,4,5…100题目要求用 Java 的 wait + notify 机制来实现,重点考察对于多线程可见性的理解。wait 和 notify 简介wait 和 notify 均为 Object 的方法:Object.wait() —— 暂停一个线程Object.notify() —— 唤醒一个线程从以上的定义中,我们可以了解到以下事原创 2021-08-12 16:15:03 · 8365 阅读 · 3 评论 -
JAVA多线程中join()方法的详细分析
虽然关于讨论线程join()方法的博客已经非常极其特别多了,但是前几天我有一个困惑却没有能够得到详细解释,就是当系统中正在运行多个线程时,join()到底是暂停了哪些线程,大部分博客给的例子看起来都像是t.join()方法会使所有线程都暂停并等待t的执行完毕。当然,这也是因为我对多线程中的各种方法和同步的概念都理解的不是很透彻。通过看别人的分析和自己的实践之后终于想明白了,详细解释一下希望能帮助到和我有相同困惑的同学。首先给出结论:t.join()方法只会使主线程(或者说调用t.join()的线程)进入等原创 2021-08-11 18:16:40 · 596 阅读 · 1 评论 -
Android RxJava 3.x 使用总结
依赖接入implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'implementation "io.reactivex.rxjava3:rxjava:3.0.4"Flowable//java 方式Flowable.just(1) .subscribe(new Consumer<Integer>() { @Override public void accept(Integ原创 2020-06-12 20:50:18 · 5542 阅读 · 1 评论 -
Java 8 Stream 使用
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/106197857本文出自【赵彦军的博客】目录1、基础概念filter 过滤findFirst 查找第一个sorted 从小到大排序map 方法用于映射每个元素到对应的结果limit 获取指定数量的流collect 将流转换成集合和聚合元素average 求平均值1、基础概念Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使.原创 2020-05-27 20:20:07 · 454 阅读 · 0 评论 -
Android 反射 换一种方式编程
Android 反射-换一种方式编程 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/55051917 本文出自【赵彦军的博客】首先创建工具类 ResourceUtilspackage com.app.fanse;import android.content.Context;import android.graphics原创 2017-03-01 16:03:58 · 692 阅读 · 0 评论 -
Java IO流学习总结六:ByteArrayInputStream、ByteArrayOutputStream
Java IO流学习总结六:ByteArrayInputStream、ByteArrayOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54894451 本文出自【赵彦军的博客】类的继承关系InputStream|__ ByteArrayInputStreamOutputStream|__ B原创 2017-02-09 14:18:44 · 8049 阅读 · 2 评论 -
Java IO流学习总结五:转换流-InputStreamReader、OutputStreamWriter
Java IO流学习总结五:转换流-InputStreamReader、OutputStreamWriter 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54894451 本文出自【赵彦军的博客】类的继承关系Reader|__ BufferedReader、StringReader、InputStreamReader原创 2017-02-08 10:10:06 · 5563 阅读 · 0 评论 -
Java IO流学习总结二:File
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54581478 本文出自【赵彦军的博客】Java File类的功能非常强大,利用java基本上可以对文件进行所有操作。 首先来看File类的构造函数的源码 /** * Internal constructor for already-normalized pat原创 2017-01-17 11:26:32 · 6075 阅读 · 9 评论 -
Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter
Java IO流学习总结四:缓冲流-BufferedReader、BufferedWriter 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54894451 本文出自【赵彦军的博客】在上一篇文章中Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream介绍了缓原创 2017-02-07 16:13:24 · 3961 阅读 · 2 评论 -
Java 装饰器模式详解
转载请注明出处:在上面的几篇文章中,着重介绍了java 中常见的`IO` 相关知识,在学习的过程中,发现IO包中是用了大量的装饰器模式,为了彻底的学习IO,今天就来揭开装饰器模式的面纱。为了弄明白装饰器模式的本质,我查看了很多资料,发现有很多文章要么说的很苦涩,要么举的例子不恰当。其实我们可以这样理解装饰器模式, 就拿自己举例子,你把自己裸体的样子,想象成被装饰的对象。原创 2017-02-22 16:22:14 · 4812 阅读 · 0 评论 -
Java IO流学习总结八:Commons IO 2.5-IOUtils
Java IO流学习总结八:Commons IO 2.5-IOUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54972773 本文出自【赵彦军的博客】在上一篇文章中,介绍了IO FileUtils的常规用法,今天介绍IOUtils的使用。IOUtils流操作的相关方法copy:这个方法可以拷贝流,算是这个工原创 2017-02-13 19:15:35 · 15621 阅读 · 2 评论 -
Java IO流学习总结七:Commons IO 2.5-FileUtils
Java IO流学习总结七:Commons IO 2.5 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54946762 本文出自【赵彦军的博客】在上面的几篇文章中,介绍了IO的常规用法,今天介绍Commons IO框架的使用。Commons IO简介Apache Commons IO是Apache基金会创建并维护的Ja原创 2017-02-10 17:40:39 · 19883 阅读 · 3 评论 -
Java web 开发填坑记 1 -如何正确的下载 eclipse
Java web 开发填坑记-如何正确的下载 eclipse最近在做 Java web 相关的开发,遇到的很多问题,也填了很多坑,就来做一下总结。首先遇到的第一个问题就是,如何正确的下载 Eclipse.下载 Eclipse 首先要到官网:https://www.eclipse.org/downloads/进入官网后,第一眼看到的就是下面的画面一般情况下,我们都是毫不犹豫的点击 DOWNLOAD 6原创 2017-05-19 20:35:58 · 3677 阅读 · 0 评论 -
Java 锁机制 synchronized
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/62896784 本文出自【赵彦军的博客】 1、前言在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中为了原创 2017-07-14 17:39:28 · 1381 阅读 · 0 评论 -
Java 中Comparator 的使用,实现集合排序
目标:实现对Person 对象的年龄,从小到大排序1、实现排序package com.app;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class A1 { public static原创 2017-05-16 14:34:23 · 9941 阅读 · 2 评论 -
Java 时间总结
时区整个地球分为二十四时区,每个时区都有自己的本地时间。为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated,也翻译为:全球标准时间)。UTC与格林尼治平均时(GMT, Greenwich Mean Time,也翻译成:格林威治标准时间)一样,都与英国伦敦的本地时相同。UTC 与 GMT 基本相同。UTC(世界标准时间)协调世...原创 2018-06-07 17:54:51 · 890 阅读 · 0 评论 -
Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
Java IO流学习总结三:缓冲流 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54292148 本文出自【赵彦军的博客】InputStream|__FilterInputStream |__BufferedInputStream首先抛出一个问题,有了InputStream为什么还要有Buffered原创 2017-02-06 16:41:04 · 38710 阅读 · 8 评论