半身风雪
九年码农,移动全栈领域优质创作者,华为云专家,阿里云专家博主,51CTO专家博主。立志打造一条架构路的博主
展开
-
flutter 键盘回收操作
日常开发中,很多时候键盘不会自动回收,这样会照成非常不好的用户体验,本篇文章,将记录如何统一封装键盘回收功能。原创 2022-12-05 14:57:27 · 3424 阅读 · 3 评论 -
java注解反射之自定义Retrofit 项目实战
项目需求:1. 自定义注解2. 使用反射功能,来实现点击事件的各个功能3. 使用代理的方式,实现onClick 事件的自动注入功能原创 2022-09-06 11:55:37 · 1351 阅读 · 12 评论 -
java 注解反射项目实战
实战需求通过自定义注解与反射实现页面跳转的参数注入:1. 页面跳转携带参数2. 使用注解标记属性参数3. 通过反射读取打印数据原创 2022-09-06 10:23:29 · 797 阅读 · 6 评论 -
Java 高级语言特性之 java中的泛型
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。.........原创 2022-08-12 14:01:50 · 1415 阅读 · 40 评论 -
【JVM 系列】JVM 调优
性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。 架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。原创 2022-07-26 09:22:10 · 1137 阅读 · 51 评论 -
【JVM 系列】JVM 中常见的垃圾回收器
在新生代中,每次垃圾回收时都发现有大批对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成回收。原创 2022-07-19 10:05:31 · 561 阅读 · 18 评论 -
【JVM 系列】JVM 垃圾回收算法
在进行垃圾回收之前,需要首先进行垃圾定位,知道哪些对象可以进行回收。那么什么样的对象算是可回收对象呢,指的是没有任何引用指向的对象,这些想大家都有了一定的了解,如何还不明白什么是需要回收的垃圾的话,可以看一下前面的两篇文章。...原创 2022-07-18 15:38:20 · 406 阅读 · 6 评论 -
【JVM 系列】JVM 对象的分配策略
针对那些作用域不会逃逸出方法的对象,在分配内存时不在将对象分配在堆内存中,而是将对象属性打散后分配在栈(线程私有的,属于栈内存)上,这样,随着方法的调用结束,栈空间的回收就会随着将栈上分配的打散后的对象回收掉,不再给gc增加额外的无用负担,从而提升应用程序整体的性能。......原创 2022-07-18 14:43:36 · 1575 阅读 · 42 评论 -
【JVM 系列】JVM 四大引用和对象的判断
在堆里面存放着几乎所有的对象实例,垃圾回收器在对堆进行回收前,要做的事情就是确定这些对象中哪些还是“存活”着,哪些已经“死去”(死去代表着不可能再被任何途径使用得对象了) ......原创 2022-07-18 11:04:28 · 409 阅读 · 11 评论 -
【JVM 系列】JVM 对象的分配过程
虚拟机遇到一条 new 指令时,首先检查是否被类加载器加载,如果没有,那必须先执行相应的类加载过程。类加载就是把 class 加载到 JVM 的运行时数据区的过程。下面我们先来看一张图:首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用(符号引用 :符号引用以一组符号来描述所引用的目标),并且检查类是否已经被加载、 解析和初始化过。符号引用 :符号引用以一组符号来描述所引用的目标。符号引用可以是任何形式的字面量,JAVA 在编译的时候每个 java 类都会被编译成一个 class 文件,但在编译的原创 2022-07-14 10:37:52 · 641 阅读 · 43 评论 -
【JVM 系列 】深入理解JVM内存区域
JVM 向操作系统申请内存: JVM 第一步就是通过配置参数或者默认配置参数向操作系统申请内存空间,根据内存大小找到具体的内存分配表,然后把内存段的起始地址和终止地 址分配给 JVM,接下来 JVM 就进行内部分配。JVM 获得内存空间后,会根据配置参数分配堆、栈以及方法区的内存大小**-Xms30m -Xmx30m -Xss1m -XX:MaxMetaspaceSize=30m**类加载(类加载的细节后续章节会讲): 这里主要是把 class 放入方法区、还有 class 中的静态变量和常量也要放入方法区原创 2022-07-11 15:41:56 · 532 阅读 · 20 评论 -
【JVM 系列 】同学你是否对JVM 有什么误解 JVM内存浅析
JVM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 主流虚拟机一个 Java 程序,首先经过 javac 编译成 .class 文件,然后 JVM 将其加载到方法区,执行引擎将会执行这些字节码。执行时,会翻译成操作系统相关的函数。JVM 作为 .class 文件的翻译存在,输入字节码,调用操作系统函数。Java 文件->编译器>字节码->JVM->机器码。JVM 全称 Java原创 2022-07-08 15:44:51 · 402 阅读 · 67 评论 -
Java 线程面试题总结2022
对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的 class 对象上的。我们知道,类的对象实例可以有很多个,但是每个类只有一个 class 对象,所以不同对象实例的对象锁是互不干扰的,但是每个类只有一个类锁。 有一点必须注意的是,其实类锁只是一个概念上的东西,并不是真实存 在的,类锁其实锁的是每个类的对应的 class 对象。类锁和对象锁之间也是互不干扰的。 可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到原创 2022-06-01 13:20:02 · 1071 阅读 · 108 评论 -
【Java 线程系列】一文看懂--并发编程归纳总结
Java 内存模型即 Java Memory Model,简称JMM。JMM 定义了Java 虚拟机 (JVM)在计算机内存(RAM)中的工作方式。JVM 是整个计算机虚拟模型,所以 JMM 是隶属于 JVM 的。Java1.5 版本对其进行了重构,现在的 Java 仍沿用了 Java1.5 的版本。Jmm 遇到的问题与现代计算机中遇到的问题是差不多的。 物理计算机中的并发问题,物理机遇到的并发问题与虚拟机中的情况有不少 相似之处,物理机对并发的处理方案对于虚拟机的实现也有相当大的参考意义。原创 2022-05-31 13:59:52 · 2186 阅读 · 95 评论 -
【算法数据结构系列】哈夫曼树进阶解读
作者:半身风雪简介:移动开发全栈领域工作者哈夫曼树详解一、树1.1、什么是树1.2、树的定义1.3、树的常用基本术语1.4、树与非树二、二叉树2.1、什么是二叉树三、Huffman 编码及实现3.1、编码问题3.2、使用二叉树解决编码问题3.3、哈夫曼树的构造四、哈夫曼树代码实现一、树1.1、什么是树 因为在客观世界里,有许多的事务,存在着细致的划分,比如下图:在我们中国,存储在各个省市的划分。那为什么要采取树这种.原创 2022-05-30 12:26:34 · 1139 阅读 · 134 评论 -
【Java 线程系列 】线程池原理解析--看这一篇就够了
Java 中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来 3 个好处。 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成 的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性原创 2022-05-29 12:51:16 · 1412 阅读 · 72 评论 -
【Java 线程系列 】阻塞队列原理解析--看这一篇就够了
作者:半身风雪上篇:CAS 原理解析阻塞队列原理解析一、队列二、什么是阻塞队列三、常用阻塞队列3.1、有界无界?3.2、ArrayBlockingQueue3.3、LinkedBlockingQueue3.4、Array 实现和 Linked 实现的区别3.5、PriorityBlockingQueue3.6、DelayQueue3.7、SynchronousQueue3.8、LinkedTransferQueue3.9、LinkedBlockingDeque一、队列  .原创 2022-05-28 08:11:43 · 599 阅读 · 104 评论 -
【Java 线程系列】CAS 原理解析
作者:半身风雪上篇:ThreadLocal进阶解析系列文章简介:什么叫做CAS呢?CAS 本名叫做:Compare And Swap。本文将通过CAS 的实现,JDK中相关的原子操作,及原子操作的三大问题,来全面的解析CAS。CAS 原理解析一、什么是原子操作?如何实现原子操作?二、CAS 实现原子操作的三大问题2.1、ABA 问题2.2、开销问题2.3、只能保证一个共享变量的原子操作。三、Jdk 中相关原子操作类的使用3.1、AtomicInteger3.2、AtomicIntegerArra.原创 2022-05-27 16:02:25 · 740 阅读 · 46 评论 -
【Java 线程系列】ThreadLocal进阶解析
作者:半身风雪上篇:Java 天生就是多线程系列文章简介:上一节我们都明白了为什么Java 天生就是多线程,这一节我们一起来学习ThreadLocal进阶解析。Java关键: 线程进阶解析一、ThreadLocal 辨析二、ThreadLocal 的使用三、ThreadLocal 解析四、引发的内存泄漏分析4.1、 强引用4.2、 软引用4.3、 弱引用4.4、 虚引用五、 分析总结一、ThreadLocal 辨析 &nbs.原创 2022-05-25 13:37:06 · 400 阅读 · 90 评论 -
【Java 线程系列】Java 天生就是多线程
作者:半身风雪上一篇:线程之间的共享和协作Java 天生就是多线程前言一、Java 中的线程1、启动2、中止3、阻塞4、深入理解run 和 start5、join 方法6、线程优先级7、守护线程8、synchronized 内置锁9、对象锁和类锁总结前言一、Java 中的线程一个Java 程序从main() 方法开始执行,然后按照既定的代码逻辑执行,看似没有其他线程参与,但实际上Java程序天生就是多线程程序,因为执行main() 方法的是一个名称为main 的线程。 .原创 2022-05-24 15:24:32 · 4785 阅读 · 101 评论 -
【Java 线程系列】Java线程之间的共享和协作
线程基础、线程之间的共享和协作前言一、进程和线程1、进程是程序运行资源分配的最小单位2、线程是CPU 调度的最小单位,必须依赖于进程而存在3、线程无处不在二、CPU 核心数和线程数的关系1、多核心2、多线程3、核心数、线程数三、CPU 时间片轮转机制四、并行和并发1、并发2、并行五、高并发编程1、CPU 资源利用的充分2、加快用户响应时间3、使代码模块化、异步化、简单化六、多线程注意事项1、线程之间的安全性2、线程之间的死锁3、线程多了会将服务资源耗尽形成死机、当机总结前言在系列文章开始之前,我们首先原创 2022-05-23 17:42:13 · 1211 阅读 · 70 评论 -
HashMap 面试详解
1、你用过HashMap吗?什么 是HashMap? 你为什么用到它?答:用过,key,value,entry. 效率高。(集合了有序表和链表的优点,增删改查,效率高)2、你知道HashMap的工作原理吗?答:1、put原理:使用key,生成对应的hashCode 值,在对应hash值范围内,生成下标index并存储在对应index链表中。2、get原理:根据key,解析出对应的hashCode 值,在解析出对应的index 下标,获取存储的数据3、你知道HashMap的get() 方法的原理吗?原创 2022-04-02 22:35:27 · 2191 阅读 · 4 评论 -
Java 中的注解反射
文章目录一、注解1、注解声明2、元注解3、注解类型元素4、注解的应用场景(1)、SOURCE(2)、CLASS(3)、RUNTIME二、反射1、Class2、获得Class 对象一、注解Java 注解(Annotation)又称Java 标注,是JDK5.0 引入的一种注释机制。注解是元数据的一种形式,提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的操作没有直接影响。1、注解声明声明一个注解类型Java 中所有的注解,默认实现Annotationpublic interface原创 2022-04-12 14:03:03 · 1347 阅读 · 6 评论 -
java 算法 简单的二分查找
二分查找也叫半分查找针对的数据,必须是一个有序的数据集合 int array[] = {1,2,3,4,5,6,7,8,9}; int key = 7; //需要查找的数据 int result = biSearch(array, key); // 查找到的数据下标 System.out.println(result); private int biSearch(int[] array, int key)原创 2022-04-05 15:45:09 · 608 阅读 · 1 评论 -
Java 大数据算法 布隆过滤器的简单实现
布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的,布隆过滤器可以用于检索一个元素是否在一个集合中,因此它是一个空间效率极高的概率型算法;它实际上是一个很长的二进制向量和一系列随机映射函数;优缺点仅仅保留数据的指纹信息,空间效率极高;查询效率极高,时间复杂度为:O(n);信息安全性较高;存在一定的误判;(默认大概3% 的错误率,可牺牲时间和空间,使错误率无限趋向于零)数据删除困难;public class BloomFilterDemo { private static原创 2022-04-05 11:32:40 · 2508 阅读 · 2 评论 -
Java 中的十大排序算法
1、冒泡排序public class BubbleSort { public static int[] sort(int[] array) { if (array.length == 0) return array; /*循环数组长度的次数*/ for (int i = 0; i < array.length; i++){ /*从第0个元素开始,依次和后面的元素进行比较原创 2022-04-05 10:17:54 · 823 阅读 · 9 评论