自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(158)
  • 资源 (1)
  • 收藏
  • 关注

原创 记录一些好的文章链接分享给大家

本篇文章是记录本人在看博客时看到一些不错的文章:会陆续更新好的文章地址链接给大家分享。java篇:准备用HashMap存1w条数据,构造时传10000还会触发扩容吗?链接地址:https://juejin.im/post/5db92860e51d4529ee588406深入理解 Handler 消息机制链接地址:https://juejin.im/post/5d712cedf2...

2019-11-04 17:04:37 724

原创 个人复习面试题

Java中基本类型占用字节数在Java中一共有8种基本数据类型,其中有4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型和1种用于表示真值的boolean类型。(一个字节等于8个bit)1.整型类型 存储需求 bit数 取值范围 备注int 4字节 4...

2019-10-11 15:47:15 483 1

转载 Core Java 52 问(含答案)

上篇文章4.9k Star 安卓面试知识点,请收下!翻译了Mindorks的一份超强面试题,今天带来的是其中Core Java部分 52 道题目的答案。题目的质量还是比较高的,基本涵盖了 Java 基础知识点,面向对象、集合、基本数据类型、并发、Java 内存模型、GC、异常等等都有涉及。整理答案的过程中才发现自己也有一些知识点记不太清了,一边回忆学习,一边整理答案。52 道题,可以代...

2019-04-09 18:46:33 624

转载 通俗易懂 悲观锁、乐观锁、可重入锁、自旋锁、偏向锁、轻量/重量级锁、读写锁、各种锁及其Java实现!

网上关于Java中锁的话题可以说资料相当丰富,但相关内容总感觉是一大串术语的罗列,让人云里雾里,读完就忘。本文希望能为Java新人做一篇通俗易懂的整合,旨在消除对各种各样锁的术语的恐惧感,对每种锁的底层实现浅尝辄止,但是在需要时能够知道去查什么。首先要打消一种想法,就是一个锁只能属于一种分类。其实并不是这样,比如一个锁可以同时是悲观锁、可重入锁、公平锁、可中断锁等等,就像一个人可以是男人、医生、健身爱好者、游戏玩家,这并不矛盾。OK,国际惯例,上干货。

2023-10-11 19:47:27 191

转载 Android 图形系统(Graphics)

系统绘制的是什么?图形缓冲区,也叫Buffer。应用层的View树最终会转换成Buffer,置于BufferQueue中被绘制。绘制的位置在哪里?应用端会把一切内容渲染到surface上,最终显示到LCD/OLED显示屏如何把图像绘制到屏幕?绘制任务由应用发起,通过跨进程方式把Buffer传到FW层,由FW层中的SurfaceFlinger服务调用Linux 硬件驱动最终绘制到硬件屏幕上。

2023-09-13 15:31:56 483

转载 一篇理解 OkHttp 源码实现原理 -- 简述

首先来看一个最简单的Http请求是如何发送的。.build()})这段代码看起来比较简单,OkHttp请求过程中最少只需要接触RequestCallResponse,但是框架内部会进行大量的逻辑处理。所有网络请求的逻辑大部分集中在拦截器中,但是在进入拦截器之前还需要依靠分发器来调配请求任务。关于分发器与拦截器,我们在这里先简单介绍下,后续会有更加详细的讲解分发器:内部维护队列与线程池,完成请求调配;拦截器:五大默认拦截器完成整个请求过程。整个网络请求过程大致如上所示通过建造者模式构建与。

2023-09-07 11:50:20 176

原创 一文了解Android App Bundle 格式文件

Android App Bundle是一种发布格式,打包出来的格式为aab,而之前我们打包出来的格式为apk。编写完代码之后,将其打包成aab格式(里面包含了所有经过编译的代码和资源),然后上传到Google Play。用户最后安装的还是apk,只不过不是一个,而是多个apk,这些apk是Google Play根据App Bundle生成的。

2023-09-06 17:43:25 982

转载 主流开发框架之 -- MAD 简要概述

今天在技术聊天群里看到美团招聘写着熟练使用主流开发框架(例如MAD),对这个名词有点陌生,就找资料了解了一下,有篇文章写的挺不错,我觉得需要分享一下,放在自己的博客中,也更容易阅读,做一个知识的搬运工。Android 诞生已久,其开发方式保持着高频更迭,相较于早期的开发方式已大不相同,尤其是近几年 Google 热切推崇的 MAD 开发技术。其实很多开发者已经有意或无意地正在使用这门技术,借着 2022 开年探讨技术趋势的契机,想要完整地总结 MAD 的愿景、构成、优势以及一些学习建议。MAD,全称。

2023-09-06 16:39:29 401

转载 Kotlin 内联函数 inline 解答 (节省内存开销)

Kotlin 内联函数 inline

2023-07-15 15:52:15 242

原创 自动化测试集成指南 -- 本地单元测试

构建本地单元测试简介:单元测试(Unit Test) 是针对 程序的最小单元 来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。一个单元可能是单个程序、类、对象、方法等。如何区分单元测试和集成测试,一般情况下,单元测试应该不依赖数据库,网络,I/O和其他模块,否则就是集成测试单元测试特性单元性(快速) 测试力度足够小,能够精确定位问题 单一职责:一个测试case只负责一条路径,测试代码中不允许有复杂的逻辑条件 独立性(无依赖) 避免单元测试之间的依赖关系,一个测试..

2023-07-11 15:23:57 1823

转载 显示锁(synchronized)与隐式锁(lock)的区别

简单明了的了解下隐式锁和显示锁

2023-07-10 15:09:42 367

原创 RxJava2 + Retrofit2 处理data为null的情况

"data": null, "message": null},客户端就会抛出类型转换异常,原因是框架的封装是通过rxjava将。,其实思路一样只是将BaseResponse,改成了Optional,我觉得没什么必要引入新的类。结果,就会导致客户端crash了,因为网络请求我们传的泛型是数据bean,这就是导致类型转换异。是为了减少逻辑的判断,但是这样做,如果和服务端没有约定好,服务端返回null或者其他类型的。代码就不贴了,解决方式按照这个思路处理即可。想参考代码可以看下这个。

2022-12-02 10:04:19 1178 1

翻译 50个多线程面试题,你会多少?(二)

public CountDownLatch(int count) { }; //参数count为计数值

2021-11-12 17:47:38 1263 1

转载 Ubuntu搭建samba服务器教程

什么是 Samba?安装 Samba创建samba共享文件夹的两种方式Anonymous 和 Secured创建一个 Anonymous share创建一个 Secured shareUbuntu环境下测试Samba配置文件说明用户账号映射什么是 Samba?Samba 的一个应用场景是,有两台主机,一台Windows主机,一台Linux主机,当这两台主机位于同一个局域网之下时,可以在Linux主机上搭建一个Samba服务器,之后,在Windows主机上连接到Linux..

2021-11-09 18:02:31 1290

原创 NTFS, FAT32和exFAT文件系统有什么区别

当用户在Windows平台上插入新的U盘或移动硬盘时,系统会自动弹出需要格式化的窗口,提供了3种不同文件格式:NTFS,FAT32,exFAT。很多用户对这3种格式知之甚少,只是根据弹窗的指示进行操作,Windows也没有对3种格式提供详细的解释。本文会对这些问题进行详细解释:首先需要明白什么是文件系统。文件系统是系统对文件的存放排列方式,不同格式的文件系统关系到数据是如何在磁盘进行存储,文件名、文件权限和其他属性也存在不同。Windows操作系统支持 NTFS, FAT32, and ex..

2021-11-09 11:24:08 10973

转载 剖析Java中的装箱和拆箱过程

自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。  以下是本文的目录大纲:  一.什么是装箱?什么是拆箱?  二.装箱和拆箱是如何实现的  三.面试中相关的问题  若有不正之处,请谅解和批评指正,不胜感激。一.什么是装箱?什么是拆箱?  在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类...

2021-10-29 18:22:45 496

原创 Android RecyclerView 根据屏幕宽度动态调整列

当我们的应用窗口是可以拖动调整宽度的时候,网格列表下,想根据屏幕宽度动态调整网格列数,就需要对RecyclerView进行动态计算GridColumnCount并进行设置。这里就需要对RecyclerView进行自定义,我们直接看代码:public class GridLayoutRecyclerView extends RecyclerView{ private int mWidth; private int mGridItemWidth; private int mGrid

2021-09-07 10:55:35 1601

原创 Android handler 同步屏障简要说明

同步屏障:发送异步消息的关键就是要消息开启一个同步屏障。屏障的意思即为阻碍,顾名思义,同步屏障就是阻碍同步消息,只让异步消息通过。如上图所示,在消息队列中有同步消息和异步消息(黄色部分)以及一道墙----同步屏障(红色部分)。有了同步屏障的存在,msg_2 和 msg_M 这两个异步消息可以被优先处理,而后面的 msg_3 等同步消息则不会被处理。那么这些同步消息什么时候可以被处理呢?那就需要先移除这个同步屏障举个栗子:开演唱会的时候,观众们需要在体育馆门口排队依次检票入场(..

2021-09-06 11:44:39 342

原创 Android 面试---跳台阶的问题解析

问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级,求,该青蛙跳上一个N级台阶总共有多少种跳法?分析:1级台阶的跳法显然只有一种,2级台阶有两种,对于3级台阶以上N级,可以看成 n 的函数,记为 f(n),当 n> 2 时,如果第一次跳 1级,此时跳法总数等于后续 n-1 级台阶的跳法数目,记为 f(n-1),如果第一次跳2级,此时跳法总数等于后续 n-2 级台阶的跳法数目,记为 f(n-2)。所以 总数目即为 f(n)=f(n-1)+f(n-2),根据这种思路,容易写出算法如下: ..

2021-09-02 20:55:40 307

原创 Android数据结构队列与栈

对于队列稍有耳闻的同学肯定会知道它有一个特点:先进先出。正是这个特点使得队列在处理一些对于顺序要求很高的需求时有很好的效果,就像网络请求的排序,队列大概是这样的:上图可以队列是一个很明显的先进先出的结构,中间的元素是不允许修改的。java中使用Queue来描述队列,它里面有一系列方法:- offer方法,向队列尾部入列一个元素;- poll方法,把队列的第一个元素出列;- peek方法,查看队列的第一个元素,但是不出列。除了上面3个方法,其实还有3个方法:add,remove,e.

2021-09-02 20:50:01 896

翻译 Android R 如何访问Android/data目录

前言Android R上分区存储的限制得到进一步加强,无论APP的targetsdkversion是多少,都将无法访问Android/data和Android/obb这二个应用私有目录。这无疑对会部分APP的业务场景及用户体验造成冲击,典型的如下文件管理类软件:微信、QQ传输的文件无法展示给用户以便捷使用 垃圾清理类软件:清理缓存功能受阻“你有你的张良计,我有我的过墙梯”,现市面上文件管理类软件(如MT管理器)已解决上述系统限制,本文将浅析其实现方案,并主要分析以下2个问题:SAF是通过何种

2021-09-02 20:31:17 13261

转载 Android 10(Q)/11(R) 分区存储适配

首先说明下:如果想在Android 11 上访问Android data目录文件需要使用DocumentFile相关来进行授权访问,java.File类已没有权限访问,因为Android 11 引入的Fuse文件系统做了隔离Android 访问data目录大部分应用都会请求 ( READ_EXTERNAL_STORAGE ) ( WRITE_EXTERNAL_STORAGE ) 存储权限,来做一些诸如在 SD 卡中存储文件或者读取多媒体文件等常规操作。这些应用可能会在磁盘中存储大量文件,即使应用被卸

2021-08-31 12:40:52 870

转载 Android 11 引发的IO 性能下降问题分析 SDCardFS Vs FUSE

Sdcard vs External storage在Android手机的早期,几乎所有设备都依赖于使用microSD卡进行存储。这是由于当时的手机出厂时内部存储容量很小。但是,至少与内部闪存可以读取/写入数据的速度相比,用于存储应用程序的SD卡通常无法提供出色的用户体验。因此,越来越多地将SD卡用于外部数据存储,由于SD卡作为外部存储设备的泛滥,Android的存储命名约定基于以下事实:每个设备都有一个实际的物理microSD卡插槽。但是,即使在不包含SD卡插槽的设备上,/ sdcard标签仍..

2021-08-31 11:31:15 4148

原创 Android单元测试框架介绍 -- 调研篇

查阅了关于Android单元测试的一些资料后,发现网上对于现有的单元测试框架说法褒贬不一,各有优缺点,在框架的选择上也是需要很多因素来决定,因此我总结了一下最近的调研,对现有的单元测试框架做下简单介绍,列举下各个框架的优缺点,根据每个框架的优缺点,做下抉择。单元测试一般分两类:本地测试:运行在本地的计算机上,这些测试编译之后可以直接运行在本地的Java虚拟机上(JVM)。可以最大限度的缩短执行的时间。如果测试中用到了Android框架中的对象,那么谷歌推荐使用Robolectric来模拟对象。 插

2021-08-29 14:46:40 1636

翻译 使用 Room 将数据保存到本地数据库

Room 在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库。处理大量结构化数据的应用可极大地受益于在本地保留这些数据。最常见的用例是缓存相关数据。这样,当设备无法访问网络时,用户仍可在离线状态下浏览相应内容。设备重新连接到网络后,用户发起的所有内容更改都会同步到服务器。由于 Room 负责为您处理这些问题,因此我们强烈建议您使用 Room(而不是 SQLite)。不过,如果您想直接使用 SQLite API,请参阅使用 SQLite 保存数据

2021-08-11 14:44:09 637

原创 ANR常见场景分析策略

定义主线程在特定的时间内没有做完特定的事情常见的场景 A.input事件超过5S没有处理完成 B.service executing 超时(bind,create,start,unbind等等),前台20s,后台200s C.广播处理超时,前台10S,后台60s D.ContentProvider执行超时,20s常见的原因 A.耗时操作,如复杂的layout,庞大的for循环,IO等。 B.被Binder 对端block C.被子线程同步锁b

2021-07-15 18:48:51 3517

原创 Java - 多线程之 -- CountDownLatch

开发中最常见的场景,在主线程中开启多线程并执行任务,主线程需要等待所有子线程执行完毕后再进行处理的场景。在CountDownLatch出现之前,一般都是使用线程的join()方法来实现,但是join不够灵活,不能够满足不同场景的需要,所以JDK后来提供了CountDownLatch,用于同步。一、CountDownLatch使用实例public class JoinCountDownLatch{ // 创建一个CountDownLatch实例 private static..

2021-07-06 15:22:11 648 1

原创 根据屏幕宽高等比例缩放图片

public static Bitmap resizeBitmap(Bitmap bitmap, int screenWidth ,int screenHeight){ // 获得图片的宽高. int width = bitmap.getWidth(); int height = bitmap.getHeight(); //取得图片和图片所处空间的比例 float scaleBitmap = ((float) bitmap.getWidth()) / bitm...

2021-06-27 16:14:44 423 1

原创 android 多窗口复用方案 documentLaunchMode属性的作用

Let’s take a quick look at the launchMode values:standard and singleTop both allow multiple instances of an activity to be created, within other tasks.singleTask and singleInstance both limit an activity to a single instance, as the first activity in i

2021-06-18 19:03:15 963 1

原创 知识进阶Handler消息机制 -- 同步屏障由浅入深

前言第一次听到Handler中的同步屏障这个问题,之前没有接触到,感觉一脸懵,自己去查阅了一些资料才明白,所以在这里给大家做一下分享。首先我们先了解一下 Handler Message在Handler中,大致分为3种Message,分别是同步消息,异步消息和同步屏障,他们三者都是Message,只是成员变量有些区别;1.同步消息也就是我一般使用的Message,再通过Handler进行sendMessage到消息队列,前提是构造Handler时候传的构造参数async为falseH

2021-06-07 21:42:30 705

原创 Ubuntu 16.04 卸载&安装jdk

如何在Ubuntu 上卸载安装jdk, 下面将步骤给列出来,以供使用。需要在终端上进行使用。1.检查系统使用的是哪个版本的JDK:java -version如果使用OpenJDK,则结果应如下所示:openjdk version "1.8.0_282"OpenJDK Runtime Environment (build 1.8.0_282-8u282-b08-0ubuntu1~16.04-b08)OpenJDK 64-Bit Server VM (build 25.282-b08,.

2021-04-21 17:17:17 491

原创 adb shell am instrument 命令详解(调试参数传递)

官网关于该命令的详解:点击查看1 Instrument是什么?instrument为am命令的一个子命令。用于启动一个Instrumentation测试。首先连接手机或者模拟器,通过adb shell命令,进入shell层进行操作。2 命令格式及参数解读(来自官网)格式:instrument [options]component目标component是表单test_package/runner_class,在UiAutomator2.0中,目标component为:测试包名/a...

2021-03-01 11:28:49 3547

翻译 Android自动化测试入门(三)Espresso

Android自动化测试入门(三)EspressoEspresso是谷歌力推的一个UI自动化测试框架,新建一个Andrdoid工程的时候默认就引入了Espresso的核心依赖,所以作为Android开发者,非常有必要学习这个框架。之前使用UI Automator的时候,我们经常在不同的指令之间添加一个时间延时保证手机端执行完成,在Espresso直接使用onView(),onView()会等待界面执行完在执行下一步。Espresso和UI Automator一样,也是在项目的app/src/

2021-01-21 21:31:18 403

翻译 Android自动化测试入门(二)UI Automator

Android自动化测试入门(二)UI AutomatorUI Automator是一个界面测试框架,支持跨进程,几乎可以模拟所有的人工操作。需要运行在4.3或者更高的系统版本上。它的测试代码的编写不依赖于目标应用的内部实现细节,非常适用编写黑盒自动化测试。UI Automator 测试框架的主要功能包括:uiautomatorviewer: 用来扫描和分析当前设备的当前页面的布局结构,它是sdk中自带的工具位置在sdk/tools/bin/uiautomatorviewer.bat U.

2021-01-21 21:21:21 350 1

翻译 Android自动化测试入门(四)单元测试

Android自动化测试入门(四)单元测试单元测试一般分两类:本地测试:运行在本地的计算机上,这些测试编译之后可以直接运行在本地的Java虚拟机上(JVM)。可以最大限度的缩短执行的时间。如果测试中用到了Android框架中的对象,那么谷歌推荐使用Robolectric来模拟对象。 插桩测试:在Android设备或者模拟器上运行的测试,这些测试可以访问插桩测试信息,比如被测设备的Context,使用此方法可以运行具有复杂Android依赖的单元测试。前两篇中的Espresso 和 UI Aut

2021-01-21 20:57:00 373

原创 AndroidQ 运行时报java.lang.NoClassDefFoundError:Animator.AnimatorListener$-CC

报此错误是因为Android 在29引入了default 方法,需要重写Animator.AnimatorListener 默认实现对应的生命周期即可,public class AnimatorListenerImpl implements Animator.AnimatorListener { @Override public void onAnimationStart(Animator animation, boolean isReverse) { this.on

2020-12-28 11:13:00 502 1

原创 AndroidQ 运行时报java.lang.NoClassDefFoundError:Application$ActivityLifecycleCallbacks$-CC

报此错误是因为Android 在29引入了default 方法,需要重写ActivityLifecycleCallbacks 默认实现对应的生命周期即可,abstract void onActivityCreated(Activity activity, Bundle savedInstanceState)Called when the Activity calls Activity#onCreate.abstract void onActivityDestroyed(Activity a.

2020-12-28 11:08:45 866

原创 为System.exit添加回调-监听用户杀进程

在app中调用System.exit(0)时,当前activity的onDestroy()方法没有被调用,现在为System.exit(0)方法添加一个回调。为System.exit添加回调System.exit(int): 123 public static void exit(int status) { Runtime.getRuntime().exit(status);} Runtime#exit(int)...

2020-12-10 14:18:36 486

原创 Java中的21种锁,图文并茂的详细解释

Java中的21种锁,图文并茂的详细解释程序员springmeng2020-09-03 09:10:58作者:悟空聊架构本篇主要内容如下:本篇主要内容本篇文章已收纳到我的Java在线文档、 Github我的SpringCloud实战项目持续更新中帮你总结好的锁:序号锁名称应用1乐观锁CAS2悲观锁synchronized、vector、hashtable3自旋锁CAS4可重入锁synchronized、Reentrantlock、Lock5读写锁Reent..

2020-11-13 17:57:50 291

原创 多线程面试题

不会多线程还想进BAT?精选19道多线程面试题,有答案边看边学Java架构师丨苏先生2019-10-15 14:58:22一. Java程序如何停止一个线程?建议使用”异常法”来终止线程的继续运行。在想要被中断执行的线程中, 调用 interrupted()方法,该方法用来检验当前线程是否已经被中断,即该线程 是否被打上了中断的标记,并不会使得线程立即停止运行,如果返回 true,则 抛出异常,停止线程的运行。在线程外,调用 interrupt()方法,使得该线程打 上中断的标记。.

2020-11-13 17:55:18 142

jdk-8u191-macosx-x641111.dmg.zip

mac book jdk安装包 官网现在下载需要登录 mac book jdk安装包 官网现在下载需要登录mac book jdk安装包 官网现在下载需要登录

2020-10-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除