Java
文章平均质量分 90
Java日常开发总结
Hirezy
人生没有彩排,每一个细节都是现场直播。
永远不抱怨,抱怨只能体现你的无能。
展开
-
Kotlin Flow 操作符
Kotlin Flow 常用的操作符,巧妙使用Flow操作符可以大大简化我们的程序结构,提升可读性与可维护性。原创 2023-12-06 21:31:03 · 821 阅读 · 0 评论 -
算法系列(二)并查集
算法系列(二)并查集算法 - 并查集前言Quick FindQuick Union加权 Quick Union路径压缩的加权 Quick Union比较前言用于解决动态连通性问题,能动态连接两个点,并且判断两个点是否连通。方法描述UF(int N)构造一个大小为 N 的并查集void union(int p, int q)连接 p 和 q 节点int find(int p)查找 p 所在的连通分量编号boolean connec原创 2022-01-30 21:15:00 · 1005 阅读 · 0 评论 -
算法系列(一)栈和队列
算法 - 栈和队列算法 - 栈和队列栈1. 数组实现2. 链表实现队列栈public interface MyStack<Item> extends Iterable<Item> { MyStack<Item> push(Item item); Item pop() throws Exception; boolean isEmpty(); int size();}1. 数组实现public原创 2022-01-27 10:46:12 · 994 阅读 · 0 评论 -
Leetcode 题解(四)数组与矩阵
Leetcode 题解 - 数组与矩阵Leetcode 题解 - 数组与矩阵1. 把数组中的 0 移到末尾2. 改变矩阵维度3. 找出数组中最长的连续 14. 有序矩阵查找5. 有序矩阵的 Kth Element6. 一个数组元素在 [1, n] 之间,其中一个数被替换为另一个数,找出重复的数和丢失的数7. 找出数组中重复的数,数组值在 [1, n] 之间8. 数组相邻差值的个数9. 数组的度10. 对角元素相等的矩阵11. 嵌套数组12. 分隔数组1. 把数组中的原创 2022-01-26 14:15:00 · 1098 阅读 · 0 评论 -
Java基础系列深入Java IO
Java IOJava IO一、概览二、磁盘操作三、字节操作实现文件复制装饰者模式四、字符操作编码与解码String 的编码方式Reader 与 Writer实现逐行输出文本文件的内容五、对象操作序列化Serializabletransient六、网络操作InetAddressURLSocketsDatagram七、NIO流与块通道与缓冲区缓冲区状态变量文件 NIO 实例选择器套接字 NIO 实例内存映射文件对比原创 2022-01-21 05:00:00 · 689 阅读 · 0 评论 -
深入Java 并发
Java 并发Java 并发一、使用线程实现 Runnable 接口实现 Callable 接口继承 Thread 类实现接口 VS 继承 Thread二、基础线程机制ExecutorDaemonsleep()yield()三、中断InterruptedExceptioninterrupted()Executor 的中断操作四、互斥同步synchronizedReentrantLock比较使用选择五、线程之间的协作join()wa原创 2021-10-12 13:54:58 · 3661 阅读 · 5 评论 -
深入理解Java 容器
Java 容器Java 容器一、概览CollectionMap二、容器中的设计模式迭代器模式适配器模式三、源码分析ArrayListVectorCopyOnWriteArrayListLinkedListHashMapConcurrentHashMapLinkedHashMapWeakHashMap参考资料一、概览容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对原创 2021-10-11 15:02:09 · 2229 阅读 · 4 评论 -
深入理解Java 虚拟机
Java 虚拟机Java 虚拟机一、运行时数据区域程序计数器Java 虚拟机栈本地方法栈堆方法区运行时常量池直接内存二、垃圾收集判断一个对象是否可被回收引用类型垃圾收集算法垃圾收集器三、内存分配与回收策略Minor GC 和 Full GC内存分配策略Full GC 的触发条件四、类加载机制类的生命周期类加载过程类初始化时机类与类加载器类加载器分类双亲委派模型自定义类加载器实现参考资料本文大部分内容参考 周志明原创 2021-10-09 12:06:01 · 2251 阅读 · 4 评论 -
Java对象的四种引用
前言在JDK1.2之前,创建的对象只有在处于可触及(reachable)的状态下,才能被程序使用。也就是说,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。垃圾回收器一旦发现这些无用对象,就会对其进行回收。但是,在某些情况下,我们会希望有些对象不需要被立即回收,或者说从全局的角度来说没有立即回收的必要性。比如缓存系统的设计,在内存不吃紧或者说为了提高运行效率的情况下,一些暂时不用的对象仍然可放置在内存中,而不是立即进行回收。为了满足这种要求,从JDK1.2版本开始,Java的设计人员把对象的引原创 2021-09-09 16:33:50 · 6357 阅读 · 6 评论 -
Android View体系‘铁三角‘
前言在搞Android开发的时候,和View的交互是必不可免的,因为我们肉眼可见,可以控制操作最直观的也是View,因此很有必要来吹水一下整个View体系的三件大事情,既View 绘制流程,View 事件分发,View 刷新机制。目录View 绘制流程View 事件分发View 刷新机制View 绘制流程View 的显示是以 Activity 为载体的,Activity 是在 ActivityThread 的 performLaunchActivity 中进行创建的,在创建完成之后就会调用原创 2021-09-07 12:03:38 · 6673 阅读 · 6 评论 -
Socket通信之TCP拆包和封包
前言我们在使用Socket传递信息时候,经常会遇到这样的问题,输入流数据读取不完整,或者输入流读取数据错乱的问题。下面就针对这俩个问题谈谈我的想法,以及解决思路。举例说明最近我在做一个工业物联网的项目,其中就用到了TCP,只要是通过TCP远程操控和实时获取工业设备信息(比如控制电灯,空调,智慧屏…),由于设备众多,为了保证服务端实时数据的完整性,我在数据链路层采用了异步传输,半双工传输。服务端读取数据后,通过CRC校验的方式来确定数据的完整性。但是后发现还是不能百分百保证数据的完整性。public原创 2021-08-16 17:57:32 · 5899 阅读 · 0 评论 -
Android 缓存机制
一、Android 中的缓存策略一般来说,缓存策略主要包含缓存的添加、获取和删除这三类操作。如何添加和获取缓存这个比较好理解,那么为什么还要删除缓存呢?这是因为不管是内存缓存还是硬盘缓存,它们的缓存大小都是有限的。当缓存满了之后,再想其添加缓存,这个时候就需要删除一些旧的缓存并添加新的缓存。因此 LRU(Least Recently Used)缓存算法便应运而生,LRU 是近期最常使用的算法,它的核心思想是当缓存满时,会优先淘汰那些近期最少使用的缓存对象。采用LRU 算法的缓存有两种:LrhCache 和原创 2021-07-31 15:16:40 · 12043 阅读 · 1 评论 -
Android全面解析Handler
前言:由于Handler和Binder是Android开发的俩大利器之一,所以有必要来深入讲解一下Handler,关于Binder可以参考我上一篇博客《IPC机制 Binder》,废话不多说,今天我将图文并茂,一节一节解剖Handler,一节一节的总结Handler相关知识点。#mermaid-svg-w8x1zwBESUZ0ZyLz .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-fami原创 2021-07-23 17:38:32 · 14462 阅读 · 12 评论 -
Java基础之深入认识hashCode和equals
Java是很多开发者都曾经接触过的一门开发语言,它之所以流行,那是因为他有很多的设计思想解决了很多现实中的问题,其中对象的equals方法,hashCode方法的设计思想值得我们学习,所以我们有必要去深入学习一下这两个方法。1:hashCode的作用hashcode的作用大概归纳为如下几点:hashCode的存在主要用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的。如果两个对象相同,就是适用于equals(java.lang转载 2021-05-14 18:34:07 · 4148 阅读 · 0 评论 -
深入解析Glide
在深入了解Glide之前,我们要先来认识一下Glide到底是什么,不要只知道他是图片处理框架,只会其简单的使用,只知道这些是不够的,因为学东西就是要刨根问底,学以致用。今天我们就带着这样几个问题来学习Glide。Glide是什么?Glide的实现原理是什么?Glide对比其他图片加载框架有什么优缺点(也就是为什么要使用Glide)? 自己如何设计一款图片加载框架?Glide是什么?1.Glide是什么?Glide是Google在2014的IO大会发布一款图片处理框架,是目前android领域比较成熟的原创 2021-04-07 02:07:20 · 7272 阅读 · 7 评论 -
Bitmap详解(上)常用概念和常用API
前言:图片的操作我相信大家都操作过,在算法层面大家往往都是把图片转成MAT矩阵处理的,而Android 开发层面大多数都是bitmap位图操作。接下来我将分算法层面以及android层面来讲解一下图片的操作。好了,废话不多说,先将android层面的图像处理,这里我将分俩篇介绍,一个是基础篇,另外一篇是实战演练篇。基本概念什么是BitmapBitmap位图包括像素以及长、宽、颜色等描述信息。长宽和像素位数是用来描述图片的,可以通过这些信息计算出图片的像素占用内存的大小。Config:图片像素类型原创 2021-04-06 00:25:53 · 2548 阅读 · 2 评论 -
主流语言实现冒泡排序算法
什么是冒泡排序冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。下面主要讲解几种常用开发语言的冒泡排序的实现逻辑:主流语言实原创 2020-06-19 21:10:42 · 1691 阅读 · 0 评论 -
深入探索多线程优化方法
前言什么是线程的概念我就不在介绍,不懂的自行百度,我想百分之九十九的人都是知道的,至于多线程,通俗的就是有很多的线程在一起工作从而完成某一件事,从而提升效率。这就是使用多线程的好处之一,举个列子,一家酒店,几个厨子,杂工,切菜工,服务员…大家各司其职,各完成一道工序,这道菜才可以快速做成,如果一直只要一个厨师去做,哈哈哈,告诉你,人多,店就等着被关门吧。由于,我在做Java或android的...原创 2020-11-23 20:58:14 · 1726 阅读 · 0 评论 -
for循环之性能优化
前言for循环是开发时常用的语法之一,比如对数组,集合的遍历等,但是如果使用不好也会出现很多新能损耗的问题,今天就来讲解一下for循环的常用性能优化问题。嵌套循环嵌套循环是有俩层或者俩层以上的循环嵌套在一起,下面直接上代码说明。外大内小嵌套: /** * 大循环驱动小循环(即外大内小) */ private static void bigSmall...原创 2020-01-19 11:24:43 · 19811 阅读 · 13 评论 -
Nginx 与 Tomcat,Apache的区别
一、定义:ApacheApache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上。其属于应用服务器。Apache支持支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。(Apche可以支持PHPcgiperl,但是要使用Java的话,你需要Tomcat在Apache后台支撑,将Java请求由Apa...原创 2020-01-16 15:18:03 · 2932 阅读 · 2 评论 -
音视频之——FFmpeg教程(一)——初见FFmpeg
什么是FFmpeg打开FFmpeg官网首先就会介绍什么是FFmpeg。原文:FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machi...原创 2020-01-14 13:29:08 · 5604 阅读 · 4 评论 -
别让for循环毁了你的程序(二)
上一篇,我们讲解了:别让for循环毁了你的程序(一),今天我继续讲解for循环还会带来哪些坑。这些坑都是开发中的小细节,都是值得我们注意的。. 在遍历ArrayList时调用 ArrayList.remove()方法。举个栗子一:移除所有能被2整除的数 List<Integer> list=new ArrayList<>(); ...原创 2020-01-09 18:53:45 · 722 阅读 · 3 评论 -
别让for循环毁了你的程序(一)
前言for循环是开发中常用的,但是使用for循环仍然有很多有需要注意的地方。今天我们就来细说for循环带了的坑。for循环问题一,遍历list集合出现死循环。今天,同事遇到了一个奇怪的问题,问题是这样的,他遍历向一个集合添加数据,结果发现for循环变成了死循环。大致代码如下。//学生类class Student{ private String name;//性命 private ...原创 2020-01-09 17:39:00 · 2818 阅读 · 4 评论 -
【Android自定义View】Bitmap的绘制和颜色滤镜
前言Bitmap在开发中是经常遇到的,因为他用到的地方有很多,比如Android的图片预览,自定义相机,自定义美颜相机,图片滤镜,图像算法。。。。,既然使用场景这么多,今天就先讲一下Android中常用的吧。今天,我们来说说Bitmap相关的绘制以及颜色滤镜。看看我们是怎样虐狗的哈看看虐狗前的图原图,是一只可爱的阿拉斯加。Bitmap 绘制Bitmap的绘制,主要有以下4个方法,其中2...原创 2020-01-07 10:55:15 · 9056 阅读 · 6 评论 -
OpenGL(一)——OpenGL入门
1.概念2D+透视 = 3D3D术语:光栅化:实际绘制或填充每个顶点之间的像素形成过程着色:沿着顶点之间改变颜色值,能够轻松创建光照照射到一个立方体的效果纹理贴图:将纹理图片附着到你绘图的图像上混合:颜色混合效果渲染:表示计算机从模型创建最终图像的过程2.认识GPUGPU全称是GraphicProcessing Unit--图形处理器,其最大的作用就是进行各种绘制计算机图形所...原创 2020-01-05 09:16:49 · 4526 阅读 · 3 评论 -
设计模式--装饰器模式
装饰器模式装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。简单来说,装饰器模式就是在不改变原有类的结构和功能上,通过实现共有接口方式,加强了自身的功能。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。我们通过下面的实例来演示装饰器模式的...原创 2018-03-20 22:51:03 · 308 阅读 · 0 评论 -
设计模式简介
设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 ...原创 2018-03-19 17:47:33 · 169 阅读 · 1 评论 -
设计模式之--单例模式
序言今天,我会来详细的讲解二十三种设计模式中最常见的设计模式--单例模式,包括单例模式的特点,应用常见,单例模式使用的好处,以及单例模式实现的方式,以及每个方式之间的优缺点等。好了,话不多说了,让我们走进单例模式,一层层揭开单例模式的面纱吧。单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。...原创 2018-03-19 17:24:37 · 179 阅读 · 1 评论 -
java_security之base64原理解析以及三种代码的实现方式
一. Base64编码由来 为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就 不能通过邮件传送。这样用途就受到了很大的限制,比如图片二进制流的每个字节不可能全部是可见字符,所以就传送不了。最好的方法就是在不改变传统协议的情 况下,做一种扩展方案来支持二进制文件的传送。把不可打印的字符也能用可打印字符来表示,问题就...原创 2018-03-18 14:55:00 · 690 阅读 · 0 评论 -
常用加密算法之非对称加密算法
非对称加密算法 非对称加密算法是一种密钥的保密方法。非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 非对称加密算法实现机密信息交换的...原创 2018-03-16 21:44:45 · 81874 阅读 · 4 评论 -
高效 保活长连接:手把手教你实现 自适应的心跳保活机制
前言当实现具备实时性需求时,我们一般会选择长连接的通信方式而在实现长连接方式时,存在很多性能问题,如 长连接保活今天,我将 手把手教大家实现自适应的心跳保活机制,从而能高效维持长连接目录1. 长连接 介绍1.1 简介1.2 作用通过 长时间保持双方连接,从而:提高通信速度确保实时性避免短时间内重复连接所造成的信道资源 & 网络资源的浪费1.3 长连接 与 短连接的区别2. 长连接断开的原因...转载 2018-03-25 21:40:52 · 1008 阅读 · 0 评论 -
Android 性能优化 之初识Java内存区域
前言 不管是日常开发,还是面试,我们都会和内存打交道,因为内存是支持软件运行的基本硬件环境。了解Android 内存管理,就有必要了解Java GC机制,必须要理解JVM 内存区域,这里我们主要从概念上介绍Java虚拟机内存的各个区域。认识Java内存区域组成Java虚拟机在执行程序过程中会把管理的内存划分为不同的数据区域,包括方法区、堆内存、虚拟机栈、本地方法栈、程序计数器这5个部分的运行...原创 2018-04-02 20:24:13 · 286 阅读 · 0 评论 -
JVM垃圾回收机制
在前面,我们认识了内存的区域构成之Android 性能优化 之初识Java内存区域,认识了Java的内存组成区域,以及和内存先关的重要概念,接下来,我们进一步认识Android的内存管理原理。一般来说,程序使用内存的方式遵循先向操作系统申请一块内存,使用内存,使用完毕之后释放内存归还给操作系统。然而在传统的C/C++等要求显式释放内存的编程语言中,记得在合适的时候释放内存是一个很有难度的工作,因此...原创 2018-04-02 21:04:55 · 2090 阅读 · 1 评论 -
jar包与aar包的区别
1. 概述在Android开发过程中,我们总是会引入第三方库或者资源等,而这些第三方库、或者资源文件有可能是jar文件,有可能是aar文件,那么这两种文件有什么区别呢?请继续往下边看。2. jar文件1>:jar文件就是 Java Archive File,java归档文件,是与平台无关的文件格式,将许多文件组合成一个压缩文件;2>:以 .zip格式为基础,不仅用于压缩和...原创 2018-04-27 17:34:42 · 74180 阅读 · 0 评论 -
解决Execution failed for task ':app:clean'. > Unable to delete directory问题
今天,打开自己的项目,发现昨天原本正常的项目今天在变异时出现了以下问题,真是叫人难受好久,经过本人的认证分析,终于找到了解决方法。先看一下报错信息:Error:Execution failed for task ':app:clean'.> Unable to delete directory: E:\Android\MyApp\app\build\intermediates\transf...原创 2018-04-28 10:06:43 · 2052 阅读 · 0 评论 -
Android移动端开发代码规范与格式化工具
原则有几个原则可以帮助大家不看文档也能写出符合规范的代码:如果是修改已有的代码,跟周围的风格一致如果是使用系统SDK来开发,除非特别说明,风格要和系统SDK一致新建文件写代码都按规范来写;旧文件中不符合规范的代码,找个合适的时间批处理格式化。学会IDE如何设置默认的代码格式如果无公司标准,为了方便都使用谷歌的代码规范集,它已覆盖了很多流行的编程语言。规范1:Android开源项目(AOSP)有自己...原创 2018-07-10 00:12:40 · 1134 阅读 · 1 评论 -
Android四大组件---BroadcastReceiver
前言:BroadcastReceiver(广播接收器),属于Android四大组件之一 在Android开发中,BroadcastReceiver的应用场景非常多 今天,我将详细讲解关于BroadcastReceiver的一切相关知识目录:下面小可会把自己使用广播的心得体会以及广播dev具体用途详细的讲解。1:定义广播,是一个全局的监听器,属于Android四...原创 2019-03-16 21:19:35 · 1771 阅读 · 0 评论 -
Android四大组件---Activity
1:前言上一遍讲解了四大组件的广播----BroadcastReceiver,今天,我来解释一下四大组件最常用的activity。2:概述Activity 作为与用户交互的一个窗口,是使用非常频繁的一个基本组件。比如我们打开京东,淘宝,天猫。。。。这些APP软件,首先映入我们眼帘的页面就是一个activity,比如首页,购物车,我的。。。。这些用户可以看见的,可以操作的都是activi...原创 2019-03-17 21:40:06 · 897 阅读 · 1 评论 -
开发中常用的加密算法大全初步总结
为什么要使用加密算法:在开发的过程中,为了能够保证程序能够安全高效运行,数据信息不被泄露,我们通常都会对要操作的数据就行加解密,从而提高程序的安全性。比如常见的客户端和后台服务器的数据交互传输,我们通常都会对服务器返回的数据进行解密,服务器返回给用户的数据进行加密,客户端提交的数据也会加密之后提交给后台服务器,后台服务器会按照对应的规则进行解密或者加密的传输,尤其是做金融项目的,数据接口的操...原创 2018-03-16 21:18:57 · 15303 阅读 · 1 评论