![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 96
尘埃zza
搜索关注“开发者营地”公众号,持续分析优质技术文章
展开
-
剑指offer:中等部分
剑指offer:中等部分[001] 求1+2+…+n求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45限制:1 <= n <= 10000方法一:平均计算问题: 此计算必须使用 乘除法 ,因此本方法不可取。public int sumNums(int n) { return (1 + n)原创 2020-12-22 11:49:08 · 444 阅读 · 0 评论 -
EventBus:源码详解 | 详细分析EventBus的源码实现
关于EventBus的基本使用已经在《EventBus:基本使用详解》一文中进行了详细的阐述。接下来,通过这篇文章来分析其源码。源码基于eventbus:3.1.1版本首先我们回顾一下主要流程:1.注册订阅EventBus.getDefault().register(this);2.事件处理@Subscribe(threadMode = ThreadMode.MainThread) public void onNewsEvent(NewsEvent event){原创 2020-11-30 22:46:53 · 341 阅读 · 0 评论 -
Java设计模式完全解析
《Head First 设计模式》读书备忘笔记,整合了一些网上资料,记录了所有常见的算法模式实现的示例。适合有一定Java基础和设计模式的读者,若无基础建议先看《Head First 设计模式》,是一本很好的入门资料。设计原则:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。设计原则:针对接口编程,而不是针对实现编程。设计原则:多用组合,少用继承。设计原则:为了交互对象之间的松耦合设计而努力。设计原则:类应该对扩展开放,对修改关闭。设计原则原创 2020-11-18 23:24:48 · 284 阅读 · 0 评论 -
剑指offer:简单部分
[001] 左旋转字符串字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = "abcdefg", k = 2输出: "cdefgab"示例 2:输入: s = "lrloseumgh", k = 6输出: "umghlrlose"限制:1 <= k < s.length <= 10000方原创 2020-11-18 11:05:51 · 372 阅读 · 0 评论 -
OkHttp:源码详解|通过源码阐述OkHttp的工作流程和设计思想
源码基于okhttp3 java版本:3.14.x在《OkHttp:基本使用详解》和 《OkHttp:进阶详解》中描述了OkHttp的基本使用方法。自此我们了解了OkHttp的基础使用和了解了使用中设计到的相关概念。接下来我们通过《OkHttp:源码详解》一系列文章从源码的角度来阐述OkHttp的工作流程和设计思想。本系列文章分为六部分OkHttp:源码详解之核心流程(一)OkHttp:源码详解之重试重定向拦截器(二)OkHttp:源码详解之桥拦截器(三)OkHttp:源码详解之缓存拦截器.原创 2020-11-17 15:23:14 · 183 阅读 · 0 评论 -
OkHttp:源码详解之请求服务拦截器(六)
源码基于okhttp3 java版本:3.14.x请求服务拦截器,也就是真正地去进行网络IO读写了——写入http请求的header和body数据、读取响应的header和body。ConnectInterceptor主要介绍了如何寻找连接以及连接池如何管理连接。在获取到连接后,调用了RealConnection的newCodec方法ExchangeCodec实例,然后使用ExchangeCodec实例创建了Exchange实例传入CallServerInterceptor了。ExchangeCo.原创 2020-11-17 15:20:17 · 490 阅读 · 0 评论 -
OkHttp:源码详解之连接拦截器(五)
源码基于okhttp3 java版本:3.14.x前面分析了RetryAndFollowUpInterceptor、BridgeInterceptor、CacheInterceptor,三个拦截器,它们在请求建立连接之前做了一些预处理。请求经过这三个拦截器后,接下要分析剩下的两个拦截器:ConnectInterceptor、CallServerInterceptor,分别负责 连接建立、请求服务读写。本文先分析ConnectInterceptor拦截器。ConnectInterceptor连接拦截.原创 2020-11-17 15:19:38 · 588 阅读 · 0 评论 -
OkHttp:源码详解之缓存拦截器(四)
源码基于okhttp3 java版本:3.14.xCacheInterceptor,缓存拦截器,提供网络请求缓存的存取。合理使用本地缓存,有效地减少网络开销、减少响应延迟。在解析CacheInterceptor源码前,先了解下http的缓存机制:第一次请求:第二次请求:上面两张图很好的解释了http的缓存机制:根据 缓存是否过期、过期后是否有修改 来决定 请求是否使用缓存。详细说明可点击了解 彻底弄懂HTTP缓存机制及原理;CacheInterceptor添加的代码如下:interce.原创 2020-11-17 15:19:01 · 300 阅读 · 0 评论 -
OkHttp:源码详解之桥拦截器(三)
源码基于okhttp3 java版本:3.14.xBridgeInterceptor ,意为 桥拦截器,相当于 在 请求发起端 和 网络执行端 架起一座桥,把应用层发出的请求 变为 网络层认识的请求,把网络层执行后的响应 变为 应用层便于应用层使用的结果。 看代码:public final class BridgeInterceptor implements Interceptor { //Cookie管理器,初始化OkhttpClient时创建的 //默认是CookieJar.NO_CO.原创 2020-11-17 15:18:09 · 107 阅读 · 0 评论 -
OkHttp:源码详解之重试重定向拦截器(二)
源码基于okhttp3 java版本:3.14.x上一篇《OkHttp:源码详解之核心流程(一)》文章详细的描述了OkHttp发起一个请求的整体流程,详细读者已经对整体流程有一个较为清晰的认知。接下来我们开始依次分析5个系统添加的拦截器,通过这5个拦截器的分析,掌握OkHttp是如何进行一次真正的网络请求。如果请求创建时没有添加应用拦截器,那么第一个拦截器就是RetryAndFollowUpInterceptor,意为“重试和重定向拦截器”,作用是连接失败后进行重试、对请求结果跟进后进行重定向。通.原创 2020-11-17 15:17:21 · 431 阅读 · 0 评论 -
OkHttp:源码详解之核心流程(一)
源码基于okhttp3 java版本:3.14.xOkHttp整体架构:首先,我们回顾一下基本的okhttp请求流程:Get异步请求: private void asynchronousGetRequests() { String url = "https://wwww.baidu.com"; OkHttpClient okHttpClient = new OkHttpClient(); final Request request = new R.原创 2020-11-17 15:16:06 · 307 阅读 · 0 评论 -
OkHttp:进阶详解
在《OkHttp:基本使用详解》中描述了OkHttp的基本使用方法。已掌握了如何使用OkHttp进行基本的网络请求,但这只是最基础的使用,想要在实际的开发项目中应用我们还需知道OkHttp的底层实现方式。本文《OkHttp:进阶详解》主要详细的描述OkHttp的在设计和使用时涉及到的相关概念,为后续阅读源码打下基础。接下来通过《OkHttp:源码详解》一系列文章分析源码。一、CallHTTP客户端的工作是接受网络请求并产生其响应。请求每个HTTP请求都包含一个URL,一个方法(如GET或POST原创 2020-11-17 15:14:36 · 711 阅读 · 0 评论 -
LeeCode 算法(Java实现)系列汇总
LeeCode 算法,使用Java实现,在这里做一个记录。现在更新到160题,其中绝大部分是简单难度,按通过率从高到低进行学习的。这部分先告一段落,更新Hot100题库和剑指offer题库,这两个题库学习完成后,会继续更新该部分。Leetcode数据结构与算法(一)Leetcode数据结构与算法(二)Leetcode数据结构与算法(三)Leetcode数据结构与算法(四)Leetcode数据结构与算法(五)Leetcode数据结构与算法(六)Leetcode数据结构与算法(七)Leetc原创 2020-10-29 15:55:30 · 1057 阅读 · 0 评论 -
Leetcode数据结构与算法(十)
[0145] 斐波那契数斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.给定 N,计算 F(N)。示例 1:输入:2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1.示例 2:输入:3输出:2解释:F(3) = F(2) + F(1) = 1 +原创 2020-10-29 15:36:25 · 174 阅读 · 0 评论 -
Leetcode数据结构与算法(九)
[0129] 二叉树的层次遍历 II给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3]]方法一:BFS/** * Definition for a binary tree node. * public cla原创 2020-10-29 15:35:25 · 222 阅读 · 0 评论 -
Leetcode数据结构与算法(八)
[0113] 转置矩阵给定一个矩阵 A, 返回 A 的转置矩阵。矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。示例 1:输入:[[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2:输入:[[1,2,3],[4,5,6]]输出:[[1,4],[2,5],[3,6]]提示:1 <= A.length <= 10001 <= A[0].length <= 1000方法一:class原创 2020-10-29 15:34:06 · 317 阅读 · 0 评论 -
Leetcode热题100:简单部分
[001] 合并二叉树给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入: Tree 1 Tree 2 1 2原创 2020-11-09 19:12:47 · 451 阅读 · 0 评论 -
Leetcode数据结构与算法(七)
[0097] 一维数组的动态和给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。示例 1:输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。示例 2:输入:nums = [1,1,1,1,1]输出:[1,2,3,4,5]解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1,原创 2020-08-10 23:04:11 · 589 阅读 · 0 评论 -
Leetcode数据结构与算法(六)
Leetcode数据结构与算法(六)原创 2020-06-12 11:28:17 · 569 阅读 · 0 评论 -
Leetcode数据结构与算法(五)
[0065]汉明距离两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 231.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。方法一:异或...原创 2020-05-04 09:36:27 · 488 阅读 · 0 评论 -
Leetcode数据结构与算法(四)
[0049]二进制中1的个数请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。...原创 2020-04-17 10:19:01 · 381 阅读 · 0 评论 -
Leetcode数据结构与算法(三)
Leetcode数据结构与算法###[0033]从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000方法一: 栈/** * Definition for singly-linked list. * public class ...原创 2020-04-08 09:45:38 · 333 阅读 · 0 评论 -
Protobuf 教程:基于Java
本教程提供了Java程序员使用protocol buffer的基本介绍。原创 2020-02-05 21:45:51 · 1143 阅读 · 0 评论 -
EventBus:基本使用详解
简介EventBus项目:https://github.com/greenrobot/EventBusEventBus 3.0.0 API:http://greenrobot.org/files/eventbus/javadoc/3.0/EventBus是一种用于Android/Java的事件发布-订阅总线框架。特点:简化组件之间的通信分离事件发送者和接收者很好地处理A...原创 2020-01-06 19:25:43 · 1793 阅读 · 1 评论 -
设计模式
设计模式《Head First 设计模式》读书备忘笔记,整合了一些网上资料。过一段时间,复习的时候,再详细整合。零、策略模式设计原则:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。设计原则:针对接口编程,而不是针对实现编程。设计原则:多用组合,少用继承。良好的OO设计必须具备:可复用,可扩充,可维护三个特性。策略模式:定义了算法族,分别封装起来,让它...原创 2019-12-31 09:32:19 · 226 阅读 · 0 评论 -
[学习笔记] Java核心技术 卷一:基础知识 并发(七)
当线程的 run方法执行方法体中最后一条语句后, 并经由执行 return 语句返冋时, 或者出现了在方法中没有捕获的异常时,线程将终止。 在 Java 的早期版本中, 还有一个 stop方法, 其他线程可以调用它终止线程。但是, 这个方法现在已经被弃用了。没有可以强制线程终止的方法。然而, interrupt 方法可以用来请求终止线程。当对一个线程调用interrupt方法时,线程的中断状态将被原创 2017-11-21 14:22:46 · 280 阅读 · 1 评论 -
[学习笔记] Java核心技术 卷一:基础知识 集合(六)
iterator方法用于返回一个实现了 Iterator 接口的对象。可以使用这个迭代器对象依次访 问集合中的元素。Java库中的具体集合 集合框架中的类 在 Java 程序设计语言中,所有链表实际上都是双向链接的(doubly linked)—即每个结点还存放着指向前驱结点的引用树集是一个有序集合( sorted collection) 可以以任意顺序将元素插入到集合中。在对集合进行遍历时原创 2017-11-21 14:19:07 · 324 阅读 · 0 评论 -
[学习笔记] Java核心技术 卷一:基础知识 泛型程序设计(五)
在 Java SE 7及以后的版本中, 构造函数中可以省略泛型类型: ArrayList<String> files = new ArrayListoO;在 Java 库中, 使用变量 E 表示集合的元素类型, K 和 V 分别表示表的关键字与值的类型。 T ( 需要时还可以用临近的字母 U 和 S ) 表示“ 任意类型”。泛型方法可以定义在普通类中,也可以定义在泛型类中。...原创 2017-10-23 09:33:53 · 418 阅读 · 0 评论 -
[学习笔记] Java核心技术 卷一:基础知识 异常、断言和曰志(四)
[学习笔记] Java核心技术 卷一:基础知识 异常、断言和曰志(四)try 语句可以只有 finally 子句,而没有 catch 子句当 finally 子句包含 return 语句时,这个返回值将会覆盖 try 语句块中的返回值。带资源的 try 语句(try-with-resources) 的最简形式为:try (Resource res = . . .){ work wit原创 2017-10-23 09:33:22 · 233 阅读 · 0 评论 -
[学习笔记] Java核心技术 卷一:基础知识 接口、lambda表达式与内部类(三)
[学习笔记] Java核心技术 卷一:基础知识 接口、lambda表达式与内部类(三)使用 instanceof检查一个对象是否属于某个特定类一样, 也可以使用 instance 检查一个对象是否实现了某个特定的接口接口不是类,尤其不能使用 new 运算符实例化一个接口,能声明接口的变量,接口变量必须弓I用实现了接口的类对象与可以建立类的继承关系一样,接口也可以被扩展。这里允许存在多条从具有较原创 2017-10-23 09:32:45 · 402 阅读 · 0 评论 -
hadoop之HDFS:通过Java API访问HDFS
HDFS是一个分布式文件系统,可以通过Java API接口对HDFS进行操作,下面记录实现Java API的过程和出现的一些问题及解决方案环境搭建导入jar包#common包中的jar文件导入hadoop-2.8.1\share\hadoop\common\lib\*.jarhadoop-2.8.1\share\hadoop\common\hadoop-common-2.8.1.jar#客户端需原创 2017-09-30 17:08:37 · 2129 阅读 · 0 评论 -
[学习笔记] Java核心技术 卷一:基础知识 Java 的基本程序设计结构(一)
[学习笔记] Java核心技术 卷一:基础知识 Java 的基本程序设计结构(一)根据 Java 语言规范, main 方法必须声明为 public原创 2017-09-26 15:48:40 · 308 阅读 · 0 评论 -
[学习笔记] Java核心技术 卷一:基础知识 对象与类、继承(二)
Java核心技术 卷一:基础知识 对象与类、继承(二)对象与类原创 2017-09-28 17:43:32 · 257 阅读 · 0 评论 -
Java时间日期格式转换
容易忘记时间格式怎么转换,在此做个记录转载 2016-08-08 14:52:26 · 544 阅读 · 0 评论 -
VS2012中使用FFmpeg开发音视频编解码,在Eclipse中使用JNA调用生成的dll文件
开发中需要通过Java调用FFmpeg的dll文件,进行音视频的编解码工作,直接采用jni的方式太过麻烦,如果采用jna(Java Native Access)访问FFmpeg的dll文件工作量太多,现在经过测试采用一种简单的方案:在VS2012中使用FFmpeg的dll库进行音视频编解码开发,然后打包为dll文件,然后在eclipse使用jna访问这个dll文件。VS2012中使用FFm...原创 2018-03-16 16:31:14 · 1074 阅读 · 0 评论 -
[学习笔记] Java核心技术 卷二:数据库编程(四)
注册驱动器:在Java程序中加载驱动器类 Class.forName("com.mysql.jdbc.Driver");设置jdbc.drivers属性连接到数据库:调用DriverManager.getConnection执行SQL语句Statement state=conn.createStatement(); ,增删改state.executeUpdate(sql);,查询R...原创 2019-03-14 19:22:37 · 470 阅读 · 0 评论 -
[学习笔记] Java核心技术 卷二:Java SE 8 的流库(一)
流和集合的差别:流不存储元素流的操作不修改数据源流的操作是尽可能地惰性执行操作流的流程:创建一个流指定将初始流转化为其他流的中间操作终止操作,产生结果stream() 顺序流parallelstream() 并行流Stream.of数据转化为流Arrary.stream(array, from, to)可以从from和to的元素中创建一个流filter 产...原创 2019-03-07 14:14:51 · 296 阅读 · 0 评论 -
OkHttp:基本使用详解
简介OkHttp是一个高效的HTTP客户端,它有以下默认特性:支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接连接池减少请求延时透明的GZIP压缩减少响应数据的大小缓存响应内容,避免一些完全重复的请求当网络出现问题的时候OkHttp依然坚守自己的职责,它会自动恢复一般的连接问题,如果你的服务有多个IP地址,当第一个IP请求失败时,OkHttp会交替尝试你配置...原创 2019-08-28 22:52:34 · 12921 阅读 · 1 评论 -
J2V8:编译J2V8最新版Jar包
编译J2V8最新版Jar包原创 2019-07-23 14:15:55 · 3497 阅读 · 3 评论 -
[学习笔记] Java核心技术 卷二:脚本、编译与注解处理(六)
脚本引擎是一个可以执行用某种特定语言编写的脚本的类库。构造一个ScriptEngineManager,调用getEngineFactories脚本引擎工厂的属性可以通过调用脚本上下文的setReader和setWriter方法来重定向脚本的标准输入和输出脚本引擎实现Invocable接口,可以提供调用脚本语言函数的功能,需要函数名来调用invokeFunction方法,或者通过实现接口的...原创 2019-03-18 19:49:27 · 300 阅读 · 0 评论