java
文章平均质量分 84
Android Han
这个作者很懒,什么都没留下…
展开
-
显示锁(synchronized)与隐式锁(lock)的区别
简单明了的了解下隐式锁和显示锁转载 2023-07-10 15:09:42 · 487 阅读 · 0 评论 -
50个多线程面试题,你会多少?(一)
下面是Java线程相关的热门面试题,你可以用它来好好准备面试。什么是线程? 什么是线程安全和线程不安全? 什么是自旋锁? 什么是Java内存模型? 什么是CAS? 什么是乐观锁和悲观锁? 什么是AQS? 什么是原子操作?在Java Concurrency API中有哪些原子类(atomic classes)? 什么是Executors框架? 什么是阻塞队列?如何使用阻塞队列来...翻译 2018-03-19 14:06:29 · 87993 阅读 · 22 评论 -
50个多线程面试题,你会多少?(二)
public CountDownLatch(int count) { }; //参数count为计数值翻译 2021-11-12 17:47:38 · 1286 阅读 · 1 评论 -
剖析Java中的装箱和拆箱过程
自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。 以下是本文的目录大纲: 一.什么是装箱?什么是拆箱? 二.装箱和拆箱是如何实现的 三.面试中相关的问题 若有不正之处,请谅解和批评指正,不胜感激。一.什么是装箱?什么是拆箱? 在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类...转载 2021-10-29 18:22:45 · 513 阅读 · 0 评论 -
Java - 多线程之 -- CountDownLatch
开发中最常见的场景,在主线程中开启多线程并执行任务,主线程需要等待所有子线程执行完毕后再进行处理的场景。在CountDownLatch出现之前,一般都是使用线程的join()方法来实现,但是join不够灵活,不能够满足不同场景的需要,所以JDK后来提供了CountDownLatch,用于同步。一、CountDownLatch使用实例public class JoinCountDownLatch{ // 创建一个CountDownLatch实例 private static..原创 2021-07-06 15:22:11 · 680 阅读 · 1 评论 -
知识进阶Handler消息机制 -- 同步屏障由浅入深
前言第一次听到Handler中的同步屏障这个问题,之前没有接触到,感觉一脸懵,自己去查阅了一些资料才明白,所以在这里给大家做一下分享。首先我们先了解一下 Handler Message在Handler中,大致分为3种Message,分别是同步消息,异步消息和同步屏障,他们三者都是Message,只是成员变量有些区别;1.同步消息也就是我一般使用的Message,再通过Handler进行sendMessage到消息队列,前提是构造Handler时候传的构造参数async为falseH原创 2021-06-07 21:42:30 · 765 阅读 · 0 评论 -
Android自动化测试入门(三)Espresso
Android自动化测试入门(三)EspressoEspresso是谷歌力推的一个UI自动化测试框架,新建一个Andrdoid工程的时候默认就引入了Espresso的核心依赖,所以作为Android开发者,非常有必要学习这个框架。之前使用UI Automator的时候,我们经常在不同的指令之间添加一个时间延时保证手机端执行完成,在Espresso直接使用onView(),onView()会等待界面执行完在执行下一步。Espresso和UI Automator一样,也是在项目的app/src/翻译 2021-01-21 21:31:18 · 434 阅读 · 0 评论 -
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 · 454 阅读 · 0 评论 -
Linux 常用命令40式
20分钟吃掉 Linux 常用命令40式Python部落2020-11-08 10:05:18一,目录管理1 , ls 查看目录下文件例1:ls -a 查看全部目录,包含隐藏目录例2:ls -l 查看当前目录详细列表例3:ls -lt 查看当前目录详细列表,按时间顺序排序,最近修改的文件在前面例3:ls -ltr 查看当前目录详细列表,按时间顺序逆序排序,最近修改的文件在后面2, cd 切换目录例1:cd .. #切换到上级目录, linux中一个点表示当前.原创 2020-11-13 17:53:07 · 291 阅读 · 0 评论 -
android复制文件、文件夹,使用FileChannel带进度条
FileChannel管道流复制文件是基于nio的传输方式。速度上有30%的提升。其次在我的项目中使用传统FileOutputStream方式,在复制大文件时。进度打印出现迟滞。综合这两点选择使用FileChannel方案。本文章是简单使用多线程方式实现,个人测试文件读写在多线程下比单线程快4倍,有参考的小伙伴使用的话 还是最好使用线程池进行处理性能上的优化。public class CopyPasteUtil { private static long dirSize = 0;// 文件夹原创 2020-09-01 21:58:15 · 2257 阅读 · 6 评论 -
HashMap-系列(面试)
数据结构解析-HashMap正文一个婀娜多姿,穿着衬衣的小姐姐,拿着一个精致的小笔记本,径直走过来坐在我的面前。看着眼前这个美丽的女人,心想这不会就是Java基础系列的面试官吧,真香。不过看样子这么年轻应该问不出什么深度的吧,嘻嘻。(哦?是么) ...翻译 2019-12-12 13:05:22 · 354 阅读 · 0 评论 -
Java面试官最爱问的volatile关键字,你又答对了几个呢?
在Java的面试当中,面试官最爱问的就是volatile关键字相关的问题。经过多次面试之后,你是否思考过,为什么他们那么爱问volatile关键字相关的问题?而对于你,如果作为面试官,是否也会考虑采用volatile关键字作为切入点呢?小编自己整理了一份JVM核心知点,包含内存结构+性能调优+垃圾收集策略与算法+内存分配与回收策略+类加载+垃圾收集器等十个模块,需要的朋友可以私信关键词...原创 2019-11-12 10:32:14 · 372 阅读 · 0 评论 -
二分查找入门详解
在平常的软件开发过程中,我们经常都会遇到需要在数组或集合中查找某个指定元素的情况。通常情况下,我们会使用按照自然顺序的方式来查找数组中的是否存在指定的元素。例如:/** * 从数组中顺序查找是否存在指定的元素,如果存在则返回该元素的索引,否则返回-1 * * @param array 指定所查找的数组 * @param search 待查找的元素 * @return */...原创 2019-11-06 10:56:01 · 363 阅读 · 0 评论 -
快速排序入门详解
前面我们已经介绍了冒泡排序,选择排序、插入排序等常见的数据排序算法。现在,我们接着介绍快速排序。快速排序可以说是排序算法中的一个重头戏,由于其排序效率在同为O(N*logN)的几种排序方法中相对较高,因此在编程开发中经常被采用。不仅如此,诸如腾讯、微软、百度等许多互联网公司的笔试面试题中,也经常会涉及到与快速排序相关的算法,还有大大小的程序方面的考试如软考、考研中也常常出现快速排序的身影。...原创 2019-11-06 10:52:01 · 205 阅读 · 0 评论 -
插入排序入门详解
在前面的文章中,我们介绍了冒泡排序,选择排序,现在我们接着介绍插入排序。为了便于理解,我们同样以5名运动员的身高A(181)、B(169)、C(187)、D(172)、E(163)为例,并使用插入排序法完成对5名运动员身高的排序任务。首先,教练先让排在左起第1位的A(181)站到更左侧,以便于和剩下的4名运动员形成明显的区分。教练想,以前的5名运动员之间的排列是无序的,现在我让左起第1位的...原创 2019-11-06 10:48:13 · 249 阅读 · 0 评论 -
选择排序入门详解(举例)
冒泡排序接下来给大家举例说明选择排序的用法:以五名运动员身高举例。五名运动员的身高A(181)、B(169)、C(187)、D(172)、E(163)为例,然后使用选择排序法,对其实现从左到右、从低到高的排序。与冒泡排序不同的是,选择排序法并不是让相邻的两名运动员按照顺序依次比较身高来得出排序结果。下面,我们来详细了解一下选择排序法的排序过程。由于5名运动员需要按照从左到右、从低到...原创 2019-11-05 21:02:35 · 2428 阅读 · 0 评论 -
记录一些好的文章链接分享给大家
本篇文章是记录本人在看博客时看到一些不错的文章:会陆续更新好的文章地址链接给大家分享。java篇:准备用HashMap存1w条数据,构造时传10000还会触发扩容吗?链接地址:https://juejin.im/post/5db92860e51d4529ee588406深入理解 Handler 消息机制链接地址:https://juejin.im/post/5d712cedf2...原创 2019-11-04 17:04:37 · 767 阅读 · 0 评论 -
Handler的工作原理,在子线程中可以new Handler()吗?
Handler的工作主要包含消息的发送和接受过程。发送过程通过post的一系列方法和send的一系列方法来实现,post的一系列方法最终是通过send的一系列方法来实现的。发送一条消息的典型过程如下:public final boolean sendMessage(Message msg){ return sendMessageDelayed(msg, 0);...原创 2019-10-29 15:03:34 · 943 阅读 · 0 评论 -
项目流程、进度、人员管理 (敏捷开发)
一个完整的项目输出管理流程:想了解的同学可以按照顺序看,便于理解。有的同学本身已经经历过这样的过程,则可以不需要按照顺序查看1.https://www.jianshu.com/p/448db0e843922.https://www.jianshu.com/p/ee4dcd54eea0...原创 2019-10-11 17:03:57 · 566 阅读 · 0 评论 -
HashMap碰撞问题解析
HashMap是最常用的集合类框架之一,它实现了Map接口,所以存储的元素也是键值对映射的结构,并允许使用null值和null键,其内元素是无序的,如果要保证有序,可以使用LinkedHashMap。HashMap是线程不安全的,下篇文章会讨论。HashMap的类关系如下: java.util Class HashMap<K,V> java.lang...原创 2019-04-18 15:40:22 · 2919 阅读 · 3 评论 -
Android中需要了解的数据结构(一)
前言:java基础,不深不浅Java容器类Java容器类是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java容器主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)通过上图,可以把握两个基本主体,即Co...原创 2019-04-09 18:21:07 · 132 阅读 · 0 评论 -
HashMap, HashTable, CurrentHashMap的区别
HashMap vs ConcurrentHashMap引入ConcurrentHashMap是为了在同步集合HashTable之间有更好的选择,HashTable与HashMap、ConcurrentHashMap主要的区别在于HashMap不是同步的、线程不安全的和不适合应用于多线程并发环境下,而ConcurrentHashMap是线程安全的集合容器,特别是在多线程和并发环境中,通常...原创 2019-10-11 15:48:21 · 231 阅读 · 0 评论 -
Handler.postDelayed()的原理
阅读之前先问大家一个问题:Handler.postDelayed()是先delay一定的时间,然后再放入messageQueue中,还是先直接放入MessageQueue中,然后在里面wait delay的时间?为什么?如果你不答不上来的话,那么此文值得你看看。Handler.postDelayed()的调用路径Handler.postDelayed(Runnable r, l...原创 2019-08-09 17:50:35 · 963 阅读 · 0 评论 -
java的自动拆箱和装箱
自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西。自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象。自动装箱与拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接。如果你在Java1.5下进行过编程的话,你一定不会陌生这一...原创 2019-05-11 16:29:11 · 167 阅读 · 0 评论 -
RxJava2.0-Flowable类
简介RxJava2.0提供了5中操作符的基类,分别为Observable,Flowable,Single,Completable,Maybe;前面几篇文章都是以Observable介绍相关的操作符,Observable是非背压,可选的多值基类,提供工厂方法,操作符和处理同步或者异步数据流的能力;Observable的操作符默认提供缓存空间大小128,但是大多数操作符实现类允许显示的设置缓...原创 2019-04-16 18:24:00 · 272 阅读 · 0 评论 -
Android Intent 传递数据大小限制
在sendBroadcast,startActivity时,我们会用到Intent。 Intent可以携带一些数据,比如基本类型数据int、Boolean,或是String,或是序列化对象,Parcelable与Serializable。Intent传递数据时,如果数据太大,可能会出现异常。比如App闪退,或是Intent发送不成功,logcat报错等等。这就牵涉到一个问题:Inte...原创 2019-04-09 19:34:05 · 2867 阅读 · 0 评论 -
Core Java 52 问(含答案)
上篇文章4.9k Star 安卓面试知识点,请收下!翻译了Mindorks的一份超强面试题,今天带来的是其中Core Java部分 52 道题目的答案。题目的质量还是比较高的,基本涵盖了 Java 基础知识点,面向对象、集合、基本数据类型、并发、Java 内存模型、GC、异常等等都有涉及。整理答案的过程中才发现自己也有一些知识点记不太清了,一边回忆学习,一边整理答案。52 道题,可以代...转载 2019-04-09 18:46:33 · 656 阅读 · 0 评论 -
诠释Java常见数据结构
数据结构:数据元素相互之间的关系称为结构。逻辑结构:集合结构:除了同属于一种类型外,没有其他关系 线性结构:元素之间存在一对一关系常见类型有:数组,链表,队列,栈,它们之间在操作上有所区别。 树形结构:元素之间存在一对多关系,常见类型有:树(有许多特例:二叉树、平衡二叉树、查找树等)。 图形结构:元素之间存在多对多关系,图形结构中每个结点的前驱结点数和后续结点多个数可以任意。...原创 2019-04-09 18:31:31 · 111 阅读 · 0 评论 -
Android集成支付----微信支付总结与封装
前言之前做过一次微信支付的集成,但是没有总结。最近一个App又要集成微信支付,又要重新下载demo,重新看开发文档,重新写代码。相信所有的程序员遇到这种事情都会抓狂。观察了一下微信支付并不设计业务逻辑,完全可以封装成一个工具。这里我们分三大步走:一、导入微信SDK二、写支付逻辑三、封装下面开始详解:一、集成微信支付SDK在集成第三方的时候,首先是要在自己的项目...翻译 2019-04-12 19:27:16 · 740 阅读 · 0 评论 -
支付宝支付 ClassNotFoundException: Didn't find class "com.alipay.sdk.app.PayTask"
在集成支付宝支付过程中,按照支付宝api文档集成,在测试demo 中运行正常,在自己项目就是找不到PayTask,这问题卡了好久没有解决 ,最后发现和项目里用到了冲突了... 故写此篇博客记录一下,希望有次困扰的同学也能看到。在需要申请权限得函数上添加注解如定位权限:@Permission(Manifest.permission.ACCESS_FINE_LOCATION)/...原创 2019-04-12 18:48:56 · 4523 阅读 · 1 评论 -
RxJava2.0——从放弃到入门
前言终于到了讲RxJava这一期,RxJava是笔者个人非常喜欢的一个开源库,它很好的将链式编程风格和异步结合在一起。RxJava其实已经推出很久了,可以说是已经很火了,但是目前仍然还有相当一部分Android开发者没有使用过,甚至说是想用,却不知道怎么用,或者不知道自己的项目哪里可以用到,本着让广大开发者理解并且上手项目,从放弃到入门,故推出这边文章。注:本文简洁易懂 入门读者看...原创 2019-04-10 15:32:16 · 118 阅读 · 0 评论 -
首次在macbook pro上配置JDK
1.打开mac 终端。2.terminal输入 java -version,回车。如若JDK版本不符合需求,看step3;若符合,则跳到step4。3.下载JDK,去oracle官网下载Mac os版本JDK。下载完成,双击.dmg文件,即可按照指引傻瓜式安装。安装完成,就要开始配置参数啦。4.terminal输入 /usr/libexec/java_home -V(注意...原创 2019-03-08 17:29:19 · 271 阅读 · 2 评论 -
30 秒内讲明白 TCP 三次握手
前言某四年经验的同事,去一家包括老板在内总人数只有 13 人的创业团队,面试一份移动端技术经理的职位。开始聊得还挺好的,涉及的不外乎何时何地项目上解决了哪些用户痛点、开发过程中遇到过哪些问题、怎么看待和诊断遇到过的问题、有没有业余的开源项目等等。毕竟四年老手,面试前也有些准备,轻松地就答复了前面这些疑问,只是没想到,面试官最后抛出这样一个问题,把同事给难住了:如何用 30 秒给新手...原创 2019-04-26 11:09:43 · 210 阅读 · 0 评论 -
OkHttp3 流程分析,简介执行源码Dispatcher RealCall
一 为什么推荐使用Okhttp3?首先,我并不觉得OkHttp是一个网络框架。okhttp对标的,应该是HttpClient或者HttpURLConnection,okhttp应该是一种新的网络请求方法,而网络框架,应该是基于上面几个网络访问方式进行封装的。像volley(基于httpClient和httpURLConnection)或者retrofit2(基于OkHttp3)。好吧,...原创 2019-04-17 17:31:03 · 159 阅读 · 0 评论 -
RxJava系列:理解rxjava中的compose操作符
理解rxjava中的compose一.compose基本概念及使用引入:Obsrvable.just().map.map.map.filter.subscribeOn.observeOn.subscribe()如果我们相对多个流重复利用一系列操作符该怎么办?一种方式是,提取一个工具方法,把复用的地方抽取成一个方法applySchedulers。applySch...原创 2019-04-18 10:53:49 · 2104 阅读 · 0 评论 -
Socket进程通信机制
Socket进程通信机制1、Socket通常称为“套接字”,用于描述IP地址和端口,是一个通信链的句柄。2、应用程序通过套接字向网络发出请求或者应答网络请求。3、Socket既不是一个程序,也不是一种协议,其只是操作系统提供的通信层的一组抽象API。4、进程通信的相关概念: 网间进程通信要解决的是不同主机进程间相互通信问题。为此,首先要解决的是网间进程标识问题。同一主机上,不...原创 2019-05-10 16:56:13 · 812 阅读 · 0 评论 -
Socket机制概念讲解说明
Socket两个基本概念:客户方和服务方。当两个应用之间需要采用SOCKET通信时,首先需要在两个应用之间(可能位于同一台机器,也可能位于不同的机器)建立SOCKET连接,发起呼叫连接请求的一方为客户方,接受呼叫连接请求的一方成为服务方。客户方和服务方是相对的,同一个应用可以是客户方,也可以是服务方。我们已经知道网络中的进程是通过 socket 来通信的,那什么是 socket 呢?...原创 2019-05-10 16:40:07 · 1492 阅读 · 0 评论 -
为什么要重写hashcode、 equals 最简单的解析说明
我在面试 Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候选人直接说没写过。我就想,或许真的没写过,于是就再通过一个问题确认:你在用HashMap的时候,键(Key)部分,有没有放过自定义对象?而这个时候,候选人说放过,于是两个问题的回答就自相矛盾了。最近问下来,这个问题普遍回答不大好,于是在本文里,就干脆从hash表讲起,讲述HashMap的存数据规则,由此...原创 2019-04-20 15:06:51 · 122 阅读 · 0 评论 -
正则表达式入门解析!
正则基础知识点 1.元字符 2. 重复限定符 3. 分组 4. 转义 5. 条件或 6. 区间 正则进阶知识点 1. 零宽断言 2. 捕获和非捕获 3. 反向引用 4. 贪婪和非贪婪 5. 反义正则表达式在几乎所有语言中都可以使用,无论是前端的JavaScript、还是后端的Java、c#。他们都提供相应的接口/函数支持正则表达式。但很神奇的是:无论你大学...原创 2019-04-20 14:47:31 · 731 阅读 · 0 评论 -
Android技术栈--HashMap和ArrayMap源码解析
1 总览WARNING!!:本文字数较多,内容较为完整并且部分内容难度较大,阅读本文需要较长时间,建议读者分段并耐心阅读.本文会对 Android 中常用的数据结构进行源码解析,包括 HashMap(有红黑树) + ArrayMap本文ArrayMap的源码来自 Android FrameworkAPI 28和 AndroidX//AndroidXimplementat...翻译 2019-04-18 15:22:26 · 223 阅读 · 0 评论