摘要: 面试中多次被问到synchronized关键字的实现原理,一直认为仅是monitorenter与monitorexit两条指令而已,原来底层涉及到多种锁优化策略,包括:自旋锁,轻量锁,偏向锁。 1、自旋锁 互斥同步对性能影响最大的部分是线程的阻塞与恢复,因为这两个操作涉及用户态与内核态的转换。如果共 阅读全文
posted @ 2018-04-23 16:40 mmmmar 阅读(482) 评论(0) 推荐(0) 编辑
摘要: 当我们需要将自己的类存入HashMap或HashSet时一般都要重写其equals与hashCode方法,但在重写时要符合规范否则会出问题。 1、equals方法 首先equals方法需要满足如下几点性质: 自反性:对于非空引用x,x.equals(x)的的结果一定为真。 对称性:对于非空引用x,y 阅读全文
posted @ 2018-04-09 21:19 mmmmar 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 这几天打算研究一下Retrofit,遇到的第一个知识点就是动态代理 。动态代理对应设计模式中的代理模式,还有个模式叫做静态代理,我们知道代理类与目标类需要实现相同的接口,在静态代理中手动实现这些接口会产生大量的模板代码,动态代理就可以很好地解决这一问题。 1、示例 接下来的例子,我们使用动态代理为网 阅读全文
posted @ 2018-03-30 10:06 mmmmar 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 开发中使用注解框架可以极大地提高编码效率,注解框架用到的技术可以分为两种,运行时注解跟编译时注解。运行时注解一般配合反射机制使用,编译时注解则是用来生成模板代码。这里我们分别使用这两种方法实现ButterKnife的控件绑定功能。 1、运行时注解 运行时注解实现比较简单,但是由于完全依靠反射技术,所 阅读全文
posted @ 2018-03-28 15:35 mmmmar 阅读(454) 评论(0) 推荐(0) 编辑
摘要: Android系统中图片一般用Bitmap对象表示,它支持png,jpg等常见格式。通常情况下图片的体积都比较大,单个应用允许使用的内存又是有限的,所以我们需要采取一些手段减少内存占用并提高加载速度。 1、图片加载 SDK提供了BitmapFactory类供我们加载图片,常用的方法有这么几个: Bi 阅读全文
posted @ 2018-03-26 16:50 mmmmar 阅读(863) 评论(0) 推荐(0) 编辑
摘要: 从半个多月前接到阿里的面试电话,被多线程问题难住,到今天终于读完了《Java Concurrency In Practice》。想总结一下,又发现自己没有能力将一本书的内容都概括下来。还是把书里最后一部分Java内存模型相关的内容搬过来谈一谈吧。 1、happens-before 什么是Java内存 阅读全文
posted @ 2018-03-24 14:58 mmmmar 阅读(1070) 评论(0) 推荐(0) 编辑
摘要: 1、前言 Android Studio对模块化开发提供的一个很有用的功能就是可以在主项目下新建库项目(Module),但是在使用库项目时却有一个问题就是资源ID冲突,因为编译时SDK会自动帮我们处理这个问题,所以一般我们不会察觉到,但是在某些情况下,我们需要意识到这个问题的存在。 比如,在新建的库项 阅读全文
posted @ 2018-03-23 13:20 mmmmar 阅读(2672) 评论(0) 推荐(0) 编辑
摘要: 1、前言 之前好几次看到有人在面经中提到了乐观锁与悲观锁,但是一本《Java Concurrency In Practice》快看完了都没有见到过这两种锁,今天终于在第15章发现了它们的踪迹。 15.2 Hardware support for concurrency Exclusive locki 阅读全文
posted @ 2018-03-22 18:49 mmmmar 阅读(21917) 评论(0) 推荐(0) 编辑
摘要: 这个问题也是头条面试官问的,本身没什么难度,但以前确实没仔细研究过。 1、使用介绍 ViewStub是一种不可见的尺寸为0的View,用来实现布局资源的懒加载。当ViewStub被设置为用户可见或其 inflate() 被调用时,实际的布局资源才会被加载。这时ViewStub在View树中的位置会被 阅读全文
posted @ 2018-03-21 15:24 mmmmar 阅读(894) 评论(0) 推荐(0) 编辑
摘要: 今天头条的面试官问起了实现View滑动的方式,其实前几天刚刚看过,但还是没能答上来,这里再来总结一遍。 1、使用scrollTo/scrollBy 为了实现View滑动,Android专门提供了这两个方法让我们使用。这两个函数的区别是scrollBy提供的是基于当前位置的相对滑动,而scrollTo 阅读全文
posted @ 2018-03-19 22:13 mmmmar 阅读(555) 评论(0) 推荐(0) 编辑