
面试相关
提辖鲁
这个作者很懒,什么都没留下…
展开
-
Android LruCache 原理
Android LruCache 原理LruCache是基于Least Recently Used(最近最少使用)算法实现的一个线程安全的数据缓存类,当超出设定的缓存容量时,优先淘汰最近最少使用的数据LruCache的LRU缓存策略是利用LinkedHashMap来实现的,并通过封装get/put等相关方法来实现控制缓存大小以及淘汰元素,但不支持为null的key和value因此先学习Lin...原创 2020-01-31 16:20:24 · 1401 阅读 · 0 评论 -
Java LinkedHashMap 原理
Java LinkedHashMap 原理LinkedHashMap是基于哈希算法,以键值对的形式存储和操作数据的非线程安全容器,继承于HashMap,在HashMap的基础上增加了双链表来支持插入顺序遍历,除此之外对操作顺序遍历也提供了支持,可用于实现LRU缓存操作性能也保证了O(1),根据操作顺序排列可以用于实现LRU缓存与HashMap相比在无哈希冲突情况下时间复杂度也能达到O(1),...原创 2020-01-21 17:44:32 · 656 阅读 · 0 评论 -
Java ConcurrentHashMap 原理
Java ConcurrentMap 原理HashMap在设计上是非线程安全的容器,当出现并发情况时会导致类似CPU占用100%等问题Hashtable以及Collections.synchronizedMap实现的线程安全Map容器都只是在各个方法中加了synchronized同步锁,仅适合简单并发场景ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashM...原创 2020-01-16 19:14:56 · 567 阅读 · 0 评论 -
Java HashMap 原理
Java HashMap 原理HashMap是基于哈希算法,以键值对的形式存储和操作数据的非线程安全容器,支持null键和值,添加删除等操作在无哈希冲突情况下时间复杂度为O(1),不保证有序内部结构...// 存储元素的数组,长度总是2的幂数transient Node<k,v>[] table;// 单链表节点static class Node<K,V> i...原创 2020-01-10 15:45:42 · 327 阅读 · 0 评论 -
Java ReentrantLock 原理
Java ReentrantLock 原理ReentrantLock是Java5引入的可重入锁,Lock的实现类,相比synchronized它提供更精细的同步操作,高竞争场景表现好主要有如下几个特点:可以设置公平性,设置后会倾向于将锁赋予等待时间最久的线程,减少线程饥渴具备尝试非阻塞地获取锁,且可选超时可以判断是否有线程或某个特定线程,在排队等待获取锁可以响应中断请求,获取到锁的线...原创 2019-12-26 11:02:33 · 390 阅读 · 0 评论 -
Java AtomicInteger 原理
Java AtomicInteger 原理AtomicInteger是一个支持原子操作的int封装类,提供了原子性的访问和更新操作其底层是通过volatile和CAS实现的,其中volatile保证了内存可见性,CAS算法保证了原子性volatilevolatile是用于保证可见性的关键字,当变量被声明为volatile后,每次操作该变量都会强制将修改的值立即写入主存在AtomicInt...原创 2019-12-23 20:02:01 · 1960 阅读 · 0 评论 -
Java synchronized 原理
Java synchronized 原理synchronized是Java内建的同步机制(Intrinsic Lock),提供了互斥的语义和可见性主要有如下几个特点:可用于修饰方法、代码块等,修饰代码块时以对象(this)或类(xxx.class)作为同步单位自动获取和释放锁,即使在同步代码块中抛出异常也同样自动释放依赖操作系统线程调度,无法设置公平性Java对象头Java头对象...原创 2019-12-12 14:34:55 · 345 阅读 · 0 评论 -
Java 进阶知识点
java进阶知识点线程安全概念线程安全就是保证多线程环境下共享的、可修改的状态或数据的正确性线程安全特性:原子性:相关操作不会中途被其他线程干扰,一般通过同步机制实现可见性:一个线程修改了某个共享变量,其状态能够立即被其他线程知晓,就是被修改的状态能够立刻反映在内存中,通过volatile实现有序性:是保证线程内串行语义,避免指令重排等synchronized与Reentrant...原创 2019-12-12 14:34:11 · 420 阅读 · 0 评论 -
Java 基础知识点
java基础知识点谈谈对Java的理解特性:面向对象:封装,继承,多态跨平台:编写一次,到处运行(Write once, run anywhere)垃圾收集:通过垃圾收集器(Garbage Collector)自动回收分配内存开发:JRE:Java运行环境,包含JVM,类库等JDK:Java开发工具,包含JRE,编译器,诊断工具等语言:支持泛型,反射,Lambda、注解等...原创 2019-11-28 13:04:38 · 244 阅读 · 0 评论 -
Android中Activity、Dialog、Toast的Window创建过程
Android Window的创建过程Android中可以提供视图的地方有Activity、Dialog、Toast,除此之外还有一些依托Window而实现的视图,比如PopUpWindow、菜单,因此Activity、Dialog、Toast等视图都对应着一个Window,本篇将分析这些是土元素中的Window创建过程。Activity的Window创建过程activity的启动过程很复杂...原创 2019-09-17 20:05:18 · 1257 阅读 · 0 评论 -
Android 理解Window和WindowManager
Android 理解Window和WindowManagerWindow表示的是一个窗口的概念,它是一个抽象类,具体实现是PhoneWindow。创建一个Window只需要通过WindowManager即可完成,WindowManager是外界访问Window的入口。Window的具体实现是在WindowManagerService中,WindowManager与WindowManagerSe...原创 2019-09-05 13:34:47 · 574 阅读 · 0 评论 -
Android 属性动画工作原理
Android 属性动画工作原理属性动画要求作用的对象必须有set方法,它会根据传递的初始值和最终值以动画效果多次调用set方法,随着时间的推移,所传递的值越来越接近最终值。如果动画的时候没有传递初始值,则需要提供get方法,可以让系统获取属性的初始值。首先我们根据ObjectAnimator.onInt(mButton, "width", 500).setDuration(5000).sta...原创 2019-08-20 22:38:18 · 515 阅读 · 0 评论 -
Android View 工作原理分析
View的工作原理分析View的工作流程主要是指measure、layout、draw这三大流程,即测量、布局和绘制,其中measure确定View的测量宽/高,layout确定View的最终宽/高和四个顶点的位置,而draw则将View绘制到屏幕上。measure过程measure过程分两种,第一种是view,只需通过measure方法就可以完成测量过程。还有一种是ViewGroup,除了...原创 2019-08-20 16:18:21 · 235 阅读 · 0 评论 -
Android View 工作原理基础
View 工作原理基础本章主要介绍View的工作原理,了解了工作原理后才能作出比较完善的自定义View,View需要掌握三大流程:measure、layout和draw,除了三大流程以外,还需要掌握常见的回调方法,比如构造方法、onAttach、onVisibilityChanged、onDetach等。初识ViewRoot和DecorView了解ViewRoot和DecorView的概念有...原创 2019-08-15 13:37:56 · 285 阅读 · 0 评论 -
Android View 事件分发机制
Android View 事件分发机制点击事件传递规则在分析点击事件传递规则之前,首先要分析的对象是MotionEvent,点击事件的事件分发,其实就是对MotionEvent事件的分发过程,即当一个MotionEvent产生了以后,系统需要把这个事件传递给一个具体的View,而这个传递的过程就是分发过程。点击事件的分发过程由三个很重要的方法来完成:puhlic boolean disp...原创 2019-08-05 13:59:53 · 339 阅读 · 0 评论 -
Android View 滑动
Android View 滑动View 滑动有三种方式可以实现View的滑动:通过View本身提供的scrollTo/scrollBy方法来实现滑动通过动画给View施加平移效果来实现滑动通过改变Viev的LayoutParams使得View重新布局从而实现滑动使用scrollTo/scrollByView提供了scrollTo/scrollBy来实现滑动,实现如下:/** ...原创 2019-07-21 18:41:21 · 311 阅读 · 0 评论 -
Android View 事件基础
Android View 基础View 基础知识本节主要介绍:View的位置参数、MotionEvent和TouchSlop、VelocityTracker,GestureDetector和Scroller对象什么是ViewView是Android中所有控件的基类,是界面层的一种抽象,代表了一个控件。除了View还有ViewGroup,ViewGroup继承于View,内部是可以有子Vie...原创 2019-07-18 22:48:59 · 400 阅读 · 0 评论 -
Android中Binder与AIDL之间的关系
Android中Binder与AIDL之间的关系BinderAndroid中特有的一种进程间通信方式,一种虚拟的物理设备,设备驱动是/dev/binderAndroid中实现了IBinder接口的一个类ServiceManager连接各种Manager(ActivityManager、WindowManager等等)和相应ManagerService的桥梁应用层客户端和服务端进行通信的...原创 2018-12-16 16:49:12 · 3182 阅读 · 0 评论 -
Android性能优化
Android性能优化布局优化布局优化可以通过HierarcheyViewer可以直接看到冗余的层级,然后尽量减少视图树层级并使用下面的常用布局优化方式进行优化布局优化遵循以下原则:尽量多使用相对布局(RelativeLayout)或约束布局(ConstraintLayout)在List组件中尽量避免使用LinearLayout的layout_weight属性将可复用组件抽取出来并通...原创 2018-11-21 14:05:16 · 275 阅读 · 0 评论 -
Java多线程:同步集合与同步锁
Java多线程:同步集合与同步锁同步集合同步集合在多线程开发中扮演非常重要的角色,本文介绍些常用但被忽略的同步集合。CopyOnWriteArrayListCopy-On-Write是一种用于程序设计中的优化策略,基本思路是多个线程共享同一个列表,当某个线程想要修改这个列表的元素时会把列表中的元素Copy一份,然后进行修改,修改完后再讲新的元素设置给这个列表,是一种延时懒惰策略。好处是可以...原创 2018-10-14 21:58:34 · 4733 阅读 · 1 评论 -
Java多线程:多线程基础
多线程基础多线程实现-Thread和Runnable通常使用如下代码启动一个新的线程:private void startNewThread1() { new Thread() { @Override public void run() { //耗时操作,此时target为空 } }.start();}...原创 2018-10-07 12:47:28 · 7441 阅读 · 1 评论 -
Android 消息机制 Handler、Looper与MessageQueue
Android 消息机制Android的消息机制主要指Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper支撑MessageQueue就是消息队列,它内部存储了一组消息,以队列的形式对外提供插入和删除的工作,但内部存储结构不是真正的队列,而是采用单链表的数据结构来存储消息列表Looper就是消息循环,它会以无限循环的形式去查找是否有新消息,有的话就处...原创 2018-10-05 22:34:56 · 307 阅读 · 0 评论 -
HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别
①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存...转载 2018-07-04 13:54:51 · 245 阅读 · 1 评论 -
Java 多线程:线程池
Java 线程池:ThreadPoolExecutor线程池当需要频繁的创建多个线程进行耗时操作时,频繁创建和销毁线程对象性能较差,并且缺乏统一管理,可能会无限制创建线程,导致相互竞争资源导致死锁,因此使用线程池就可以创建多个线程并且进行管理,提交的任务会被线程池指派给其中的线程进行执行,通过线程池的统一调度和管理使得多线程的使用更简单高效。线程池的优点重用线程池中的线程,避免因为线程的创建和销毁原创 2018-02-25 16:29:09 · 878 阅读 · 0 评论 -
Android面试基础知识总结
Android基础知识总结原创 2016-04-21 20:19:58 · 487 阅读 · 0 评论 -
Android面试题
Android面试题原创 2016-04-21 19:19:12 · 418 阅读 · 0 评论