- 博客(84)
- 资源 (3)
- 收藏
- 关注
原创 java多线程两个线程交替打印0-100
思路 :利用线程的争抢锁资源实现交替打印0-100代码/** * 两个线程交替打印0-100 方式一 * 两个线程争抢锁 */public class AlternateNumDemo { private static Object object=new Object(); private static int count=0; public static void main(String[] args) { new Thread(() ->
2020-10-27 17:56:36
716
原创 java多线程顺序打印ABC使用newSingleThreadExecutor方式
public class NewSingleThreadExecutorABC { public static void main(String[] args) { Thread threadA = new Thread(() -> System.out.println("A")); Thread threadB = new Thread(() -> System.out.println("B")); Thread threadC = n
2020-10-27 17:49:56
266
原创 java多线程顺序打印ABC CountDownLatch方式
public class CountDownLatchABC { public static void main(String[] args) { CountDownLatch countDownLatchA = new CountDownLatch(1); CountDownLatch countDownLatchB = new CountDownLatch(1); CountDownLatch countDownLatchC = new Coun.
2020-10-27 17:48:26
927
原创 java多线程顺序打印ABC BlockingQueue方式
思路: 利用BlockingQueue的线程阻塞的特效进行顺序打印ABC代码如下public class BlockingQueueABC { public static void main(String[] args) { Thread threadA = new Thread(new Runnable() { @Override public void run() { System.out.
2020-10-27 17:44:01
246
原创 java多线程顺序打印ABC Join方式
/** * https://blog.csdn.net/Evankaka/article/details/80800081 * join 让当前线程执行完之后执行接下来的逻辑 */public class JoinABC { public static void main(String[] args) throws InterruptedException { Thread threadA = new Thread(new Runnable() { .
2020-10-27 17:41:22
612
原创 java多线程操作变量的例子乐观锁悲观锁
/** * 乐观锁悲观锁 */public class OptimismAndPessimismLock { // 线程不安全 private static int value1 = 0; //线程安全 使用乐观锁 private static AtomicInteger value2 = new AtomicInteger(0); //线程安全 使用悲观锁 private static int value3 = 0; private
2020-10-27 17:12:40
168
原创 java ArrayBlockQueue阻塞队列
阻塞队列的特点 就是当没有消息的时候就会进入阻塞状态/** * 阻塞队列 当消费者消费的时候若是没有消息 就会进入阻塞状态 */public class ArrayBlockingQueueDemo { public static void main(final String[] args) throws InterruptedException { ArrayBlockingQueue<Integer> arrQueue = new ArrayBlocking
2020-10-27 15:47:09
307
原创 java多线程AtomicBoolean使用
AtomicBoolean是Java.util.concurrent.atomic包下的原子变量,这个包里面提供了一组原子类,具有排他性 如下例子当线程thread1 进行操作的的时候thread2,thread3都不能进行操作public class AtomicDemo { public static void main(String[] args) { AtomicBoolean atomicBoolean = new AtomicBoolean(false);
2020-10-27 15:40:35
546
原创 2020年7月18阿里Android面试总结
很激动在Github上的一个项目flutter_plugin_record被阿里的一个技术主管关注到了然后收到阿里的面试邀请,但是由于面试比较仓促没准备好,很遗憾没通过面试写此篇文章的目前是为了记录和总结面试的流程和面试提问的一些问题先说一下面试流程吧首先是收到技术主管的发送的邀请面试邮件,然后把简历发过去,之后就收到了主管的的电话约了晚上7点进行视频电话面试注意!!!! 一定要准备好电脑 把浏览器视频通过调试好 ,我就是在开始视频面试的时候一直打不开摄像头和面试官来回测试了三次还不...
2020-07-20 15:34:50
245
原创 剑指 Offer 04. 二维数组中的查找
思路:由于给定的二维数组具备每行从左到右递增以及每列从上到下递增的特点,当访问到一个元素时,可以排除数组中的部分元素。从二维数组的右上角开始查找。如果当前元素等于目标值,则返回 true。如果当前元素大于目标值,则移到左边一列。如果当前元素小于目标值,则移到下边一行。可以证明这种方法不会错过目标值。如果当前元素大于目标值,说明当前元素的下边的所有元素都一定大于目标值,因此往下查找不可能找到目标值,往左查找可能找到目标值。如果当前元素小于目标值,说明当前元素的左边的所有元素都一定小于目标值,因此往
2020-07-15 11:04:37
137
原创 剑指 Offer 05 .替换空格
剑指 Offer 第五题替换空格请实现一个函数,把字符串s中的每个空格替换成"%20"。输入:s = "We are happy." 输出:"We%20are%20happy."
2020-07-15 10:56:58
196
原创 二叉树的遍历图解
二叉树前序遍历 ABDGHCEIF 中序遍历 GDHBAEICF 后序遍历 GHDBIEFCA 二叉树的性质 已知前序遍历序列和中序遍历序列,可以唯一确定一棵二叉树 已知后序遍历序列和中序遍历序列,可以唯一确定一棵二叉树 参考 https://zhuanlan.zhihu.com/p/38603548 ...
2020-07-15 10:51:06
338
原创 LinkHashMap总结
linkHashMap继承HashMap LinkHashMap的底层维护了一个双向列表 ,重写了HashMap的 的实体类Entry 实现了双向列表,内部结构还是数组+链表 双向链表 linkHashMap和HashMap的区别 HashMap的存储和获取是无序的 LinkHashMap是有序的 (1,根据插入顺序排序,2,根据访问顺序排序(accessOrder)) LRUCache 最简单的LRUCache实现 最关键的参数是accessOrder 当为...
2020-07-15 10:46:46
2726
原创 LinkedList总结
底层实现是双向链表 add方法是如何添加元素的 调用add方法的时候会调用linkLast()方法 ,把last变量赋值给临时变量l,然后创建一个新的node节点信息 ,赋值给last节点 ,判断临时变量l是否为null 若为null 说明是第一个节点 fast 等于newNode,若l不为null的时候就l.next为newNode remove方法是如何删除元素的 首先先检查一下index是否越界 ,若不越界 检查节点是在前半部分还是在后半部...
2020-07-15 10:45:48
215
原创 ArrayList总结
ArrayList 继承关系 ArrayList构造方法 底层原理 ArrayList 封装了一个可以扩容的数组,当数据的长度大于数组的长度,数组变为原来长度的1.5倍,把老数组的数据copy到新的数组里面. 扩容的原理 扩容原理调用add方法的时候执行流程 调用remove方法执行的流程 arrayList和LinkedList对比 Arraylist特点 随机访问速度快,插入和移除的性能差 支持null元素 ...
2020-07-15 10:43:54
239
原创 HashMap总结
hashMap的内部结构 (java8):数组+链表+红黑树 hashmap put方法 流程 hashmap内部数组结构图 面试题 问题你知道HashMap的工作原理吗? 回答 :HashMap的底层实现是数组+链表+红黑树 ,通过put 和get方法存储和获取对象, 存储对象的时候,把key和value传递给put方法 ,他调用hashcode计算hash得到bucket的位置,然后判断table[i]是否等于null ,若是null 直接进行存储,若不是null...
2020-07-15 10:42:22
140
原创 rxjava总结
RxJava2.0特点 实现优雅 RxJava的实现方式 = 基于事件流的链式调用 逻辑简洁 使用简单 随着程序逻辑变得复杂性提高,它依然能保持简洁和优雅 定义 一个基于事件流,实现异步操作的库 作用 实现异步操作 注: 类似于 Android 中的 AsyncTask, handler 作用 使用步骤 使用方式1 1:创建被观察者 (Observable)& 生产事件 顾客入饭店 - 坐下餐桌 - 点菜 .
2020-07-15 10:17:37
168
原创 Retrofit 2.0总结
1. 简介 Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。 原因:网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装 App应用程序通过 Retrofit 请求网络,实际上是使用 Retrofit 接口层封装请求参数、Header、Url 等信息,之后由 OkHttp 完成后续的请求操作 设计模式 动态代理模式 那么Retrofit为何要这么设计呢? 我们一个应用的请求接口可能有很多个,通过动态代理模式...
2020-07-15 10:14:05
322
原创 TCP三次握手
TCP(csdn)什么是tcp协议 一种面向连接的、可靠的、基于字节流的传输层通信协议 TCP数据包结构图 总要的字段 序号 Seq 确认号Ack 标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN URG:紧急指针(urgent pointer)有效。 PSH:接收方应该尽快将这个报文交给应用层。 RST:重置连接。 SYN:发起一个新连接。 ACK:确认序号有效。 FIN:释放一个连接 T
2020-07-14 16:35:23
115
原创 java 垃圾回收机制
java 垃圾回收机制(csdn)GC回收 需要干的事情是找到垃圾 ,然后进行垃圾回收 垃圾回收算法 (六种) 引用计数法 标记整理法 标记清除法 缺点 当存在大量对象的时候,只有小部分存活的情况,耗时严重 复制搜集法 克服了标记清除法的缺点 可达性分析法 分代计数法 java内存模型 java内存 线程私有区域 程序计数器 本地方法栈 虚拟机栈 线程共享
2020-07-14 16:32:23
112
原创 Okhttp一些总结
OKHttpOkhttp调用流程 Okhttp时序图 Okhttp责任链模式调用逻辑 优点 1. 支持SPDY、HTTP2.0 SPDY:HTTP的兼容协议、支持多路复用请求、对请求划分优先级(优先返回文字,图片音频等随后返回)、压缩HTTP头,以减少请求数据量; HTTP2.0:添加了更安全的SSL协议 2.无缝支持GZIP来减少数据流量 ,发送的数据和接受的收据在传递过程中都是经过gzip压缩的,BridgeIntercept的interce...
2020-07-14 15:03:29
812
原创 Glide使用总结
简介 优点 与使用环境生命周期相绑定:RequestManagerFragment & SupportRequestManagerFragment 内存的三级缓存池:LruMemoryResources, ActiveResources, BitmapPool 内存复用机制:BitmapPool 为什么要绑定生命周期 可以实现网络请求根据生命周期而暂停、执行、恢复、释放等 可以实现资源比如图片的自动释放 降低了内存的压力 降低了内存泄漏的风险...
2020-07-14 13:50:42
214
原创 DataBinding 使用总结
DataBinding简介 DataBinding 是谷歌发布的框架数据绑定框架 是MVVM在android上的实现.用于降低布局和逻辑的耦合性,使代码看起来更简介 DataBinding 能省去FindViewById() ,减少Activity内的代码 能够单向或则双向绑定到layout 有助于防止内存泄漏 能自动进行空值检测避免空指针异常 使用步骤 在对应model的build.gradle里加入如下代码 数据绑定方式 BaseObservalbe
2020-07-14 10:58:07
988
原创 handle原理
handle原理handler 总体概述 使用场景 线程通信 handler 四个对象 handler message, messagequeue looper 总体流程图 总体流程图 handler使用的流程图 handler原理图 UML类图 handler 作用 线程间通信 通过runnable 回调进行消息处理 handler 初始化的时候都做了什么工作 获取当前线程的looper实例,然后和lo
2020-07-14 10:36:35
883
原创 android 性能优化三板斧
三板斧 Android Studio Profiler leakCanary 内存泄漏 BlockCanary UI卡的 性能优化 内存优化 优化方式 避免内存泄漏, 常见的内存泄漏 单例模式导致的内存泄漏 最常见的例子就是创建这个单例对象需要传入一个 Context,这时候传入了一个 Activity 类型的 Context,由于单例对象的静态属性,导致它的生命周期是从单例类加载到应用程序结束为止,所以即使已经 finish 掉
2020-07-10 11:34:49
181
原创 android App安全总结
app会遇到什么样子安全问题 以及对应的解决方案 app反编译 应对策略 进行代码混淆 进行资源文件混淆 app的二次打包 进行apk的加固 (360加密 dex加密) app的进程劫持 主要对象是xposed 应对策略 检查手机是否安装xpoed 异常方式查看堆栈是否包含xposed app DNS劫持 使用Https 参考 https://zhuanlan.zhihu.com/p/.
2020-07-10 10:16:08
274
原创 Android 内存泄漏解决方案
Android 内存泄漏总结内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收。最近自己阅读了大量相关的文档资料,打算做个 总结 沉淀下来跟大家一起分享和学习,也给自己一个警示,以后 coding 时怎么避免这些情况,提高应用的体验和质量。我会从 java 内存泄漏的基础知识开始,并通过具体例子来说明 Android 引起内存泄漏的各种原因,以及如何利用工
2020-07-09 23:30:22
321
原创 android ANR 问题
android ANR 问题 List item1、ANR排错一般有三种类型KeyDispatchTimeout(5 seconds) --主要是类型按键或触摸事件在特定时间内无响应BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成ServiceTimeout(20 secends) --小概率事件 Service在特定的时间内无法处理完成2、哪些操作会导致ANR在主线程执行以下操作:高耗时的操作,如图像变换
2020-07-09 22:39:31
185
原创 ART和Dalvik的理解
ART和Dalvik区别Art上应用启动快,运行快,但是耗费更多存储空间,安装时间长,总的来说ART的功效就是"空间换时间"。ART: Ahead of Time Dalvik: Just in Time什么是Dalvik:Dalvik是Google公司自己设计用于Android平台的Java虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一,它可以支持已转换为.dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式
2020-07-09 22:22:22
293
原创 Android View事件传面试相关
View 事件分发传递图示 事件拦截的应用场景 https://www.jianshu.com/p/d82f426ba8f7 https://www.jianshu.com/p/b21a2d91a704 面试题 为什么要有事件传递机制 因为android的view 是树形结构,当点击事件发生的时候 要经过好几层的View ,若是没有事件传递机制 ,就没办法确定这个事件给谁处理了,所以事件传递机制就是为了处理这个问题而出现的 android布局加载的过程 用
2020-07-01 15:28:28
266
原创 Flutter 二维码扫描插件
文章目录flutter_plugin_qrcodeGetting Started引入方式使用关注公众号获取更多内容flutter_plugin_qrcode二维码扫描 同时支持 Android&IOSGetting Started扫描效果androidIOS引入方式 dependencies: flutter_plugin_qrcode: ^1.0.1#...
2019-11-18 14:14:08
5190
4
原创 使用Flutter实现仿微信录音的插件
文章目录使用Flutter实现 仿微信录音的插件1,引入使用1, 初始化录制2, 开始录制3, 停止录制4, 播放3, 释放资源4,回调监听2,录制组件的使用1,在使用的页面进行导入package2,在使用的地方引入VoiceWidget组件GitHub地址TODO关注公众号获取更多内容使用Flutter实现 仿微信录音的插件插件支持android 和IOS插件提供的功能录制语音,播...
2019-11-18 10:44:07
6421
9
原创 flutter使用redux模式模块工程
redux 触发的流程[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HgqMLLAA-1572489564197)(https://github.com/yxwandroid/flutter_app_redux/blob/master/redux.jpg)]1,首先是UI层触发action 2,action 把消息传递到reducer 3,reducer...
2019-10-31 10:41:34
179
原创 Flutter仿微信发送语音动画
先看效果完整代码请访问------------------------------完整代码请访问GitHub------------------------如有帮助到你请给个star吧 你的支持就是我的努力做好的动力!!!------------------------关注公众号第一时间获取最新内容------------------------...
2019-09-27 15:10:18
2374
转载 Java基础HashCode真正的含义
https://blog.csdn.net/SEU_Calvin/article/details/52094115?utm_source=blogxgwz1
2019-09-26 10:35:14
324
原创 flutter 跨组件传递数据的三种方式
三种方式 1. inheritedWidget 2. notification 3. eventbus inheritedWidget方式class InheritedWidgetScreen extends StatefulWidget { InheritedWidgetScreen({Key key}) : super(key: key); @override ...
2019-09-26 10:10:27
4766
转载 建造者模式
1.定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。2.介绍建造者模式主要用来创建复杂的对象,用户可以不用关心其建造过程和细节。例如:当要组装一台电脑时,我们选择好CPU、内存、硬盘等等,然后交给装机师傅,装机师傅就把电脑给组装起来,我们不需要关心是怎么拼装起来的。3.UML类图角色说明:Product(产品类):要创建的复杂对象。在本类图中,...
2019-09-25 16:18:49
110
原创 主线程looper是死循环为啥没有ANR
面试官问:主线程looper是死循环为啥没有ANR面试者回答:1,ANR的根本原因是在5s内没有响应输入的事件(如 按钮点击,屏幕触摸)2,BroadcastReceiver 在10秒内没执行完造成上面两点的原因有很多 比如主线程做了耗时的操作 再看Android主线程:Java程序我们都知道,入口从main()方法执行,安卓用java,也不例外,入口从Activity...
2019-09-17 10:18:04
232
swift使用sqlite Demo
2018-09-13
Android-Universal-Image-Loader-master.zip
2015-12-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人