1. 应用场景: 多次调用同一函数 2. 普通写法: def say(name): print("hellow:%s"%name) now = datetime.datetime.now() return now now = say('tom') print("time:%s"%now) time.sleep(5) now = say('tom') print("time:%s"%now) 结果: hellow:tomtime:2019-09-0…
前言        Android系统与其他操作系统有个很不一样的地方,就是其他操作系统尽可能移除不再活动的进程,从而尽可能保证多的内存空间,而Android系统却是反其道而行之,尽可能保留进程.Android这样设计有什么优势呢?又是通过怎样的方法来管理这些被保留的进程的呢?Android用户又该如何正确使用手机从而更好发挥Android系统所特有的优势呢?本文将一一为您解开这些谜团. 本文的主要内容如下:            一.Android进程管理的特殊设计 Linux系统对进程的管理…
今天我们来深入探索一下LinkedHashMap的底层原理,并且使用linkedhashmap来实现LRU缓存. 摘要: HashMap和双向链表合二为一即是LinkedHashMap.所谓LinkedHashMap,其落脚点在HashMap,因此更准确地说,它是一个将所有Entry节点链入一个双向链表的HashMap. 由于LinkedHashMap是HashMap的子类,所以LinkedHashMap自然会拥有HashMap的所有特性.比如,LinkedHashMap的元素存取过程基本与Ha…
在上一篇日志([朝花夕拾]Android性能篇之(二)Java内存分配)中有讲到,JVM内存由程序计数器.虚拟机栈.本地方法栈.GC堆,方法区五个部分组成.其中GC堆是一块多线程的共享区域,它存在的作用就是存放对象实例.本节中所要讲述的各种场景,就发生在这块区域,垃圾回收也主要发生在GC堆内存中.本章内容为高质量面试中几乎是必问的知识点,尤其是其中GC Root.分代算法.引用类型等方面的知识点,可以很好地体现程序员的内功.本文主要是在相关文章的基础上进行搜集和整理而成,也包含了自己的一些理解和…
今天我们来聊聊“链表(Linked list)”这个数据结构.学习链表有什么用呢?为了回答这个问题,我们先来讨论一个经典的链表应用场景,那就是+LRU+缓存淘汰算法. 缓存是一种提高数据读取性能的技术,在硬件设计.软件开发中都有着非常广泛的应用,比如常见的+CPU+缓存.数据库缓存.浏览器缓存等等. 缓存的大小有限,当缓存被用满时,哪些数据应该被清理出去,哪些数据应该被保留?这就需要缓存淘汰策略来决定.常见的策略有三种:先进先出策略 FIFO(First In,First Out).最少使用策略…
一. 开发中常见的性能问题 我们在日常开发过程中,由于一些不好的习惯,经常会导致所写的代码性能低下,却毫无发觉,下面就总结一下常见的一些性能问题. 1. 真假分页 ① 假分页: db.xxx.toList().Skip(2).take(4) .  ② 真分页:db.xxx.Skip(2).take(3).toList() . 2. 合理的使用EF的数据加载方式 EF的加载方式有:立即加载.延迟加载.显示加载. 详见: ①: 第五节: EF高级属性(一) 之 本地缓存.立即加载.延迟加载(不含导航…
当Redis用作缓存时,通常可以让它在添加新数据时自动逐出旧数据. 这种行为在开发人员社区中非常有名,因为它是流行的memcached系统的默认行为. LRU实际上只是支持的驱逐方法之一. 本页介绍了Redis maxmemory指令的更一般主题,该指令用于将内存使用限制为固定数量,并且它还深入介绍了Redis使用的LRU算法,实际上是精确LRU的近似值. 从Redis 4.0版开始,引入了新的LFU(最不常用,Least Frequently Used)驱逐策略. 本文档的单独部分对此进行了介…
一.什么是链表 和数组一样,链表也是一种线性表. 从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构. 链表中的每一个内存块被称为节点Node.节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next. 二.链表的优劣 插入.删除数据效率高O(1)级别(只需更改指针指向即可),随机访问效率低O(n)级别(需要从链头至链尾进行遍历). 和数组相比,内存空间消耗更大,因为每个存储数据的节点都需要额外的空间存储后继指针. 三.常用链表…
常见的缓存淘汰策略: 先进先出 FIFO 最少使用LFU(Least Frequently Used) 最近最少使用 LRU(Least Recently Used) 链表定义: 链表也是线性表的一种, 数组需要一块连续的内存空间来存储,对内存要求比较高, 链表恰恰相反,它并不需要一块连续的内存空间,它通过"指针"将一组零散的内存块 串联起来使用. 最常见的链表结构: 单链表 双向链表 循环链表 用空间换时间: 当内存空间充足的时候,如果更加追求代码的执行速度,可以选择空间复杂度相对较…
1. LinkedHashMap概述: LinkedHashMap是HashMap的一个子类,它保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap. LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变.   LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表.此…