外存

常见排序算法及对应的时间复杂度和空间复杂度

倾然丶 夕夏残阳落幕 提交于 2019-11-30 04:03:20
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门: https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 排序算法经过了很长时间的演变,产生了很多种不同的方法。对于初学者来说,对它们进行整理便于理解记忆显得很重要。每种算法都有它特定的使用场合,很难通用。因此,我们很有必要对所有常见的排序算法进行归纳。 排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。 内排序有可以分为以下几类:   (1)、插入排序:直接插入排序、二分法插入排序、希尔排序。   (2)、选择排序:直接选择排序、堆排序。   (3)、交换排序:冒泡排序、快速排序。   (4)、归并排序   (5)、基数排序 表格版 ① 插入排序 •思想:每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置,直到全部插入排序完为止。 •关键问题:在前面已经排好序的序列中找到合适的插入位置。 •方法: –直接插入排序 –二分插入排序 –希尔排序 (1)直接插入排序(从后向前找到合适位置后插入) 1、基本思想

在Win10 LTSC 2019上安装和卸载linux子系统

心不动则不痛 提交于 2019-11-29 08:28:14
普通的Windows 10中,可以在应用商店中安装自己喜欢的发行版,但是LTSC并没有应用商店,所以稍微麻烦点 win10 LTSC 2019对应正常的Win10 1809版本.相比之前的LTSB 2016(对应Win10 1607),这个版本有3年的跨度,在此期间linux子系统的改进很多.因而很多之前的方法已经不适用了. 安装 首先,到"控制面板","卸载程序","启用或关闭Windows功能中",启用"适用于Linux的windows子系统" 然后到这个网址https://docs.microsoft.com/en-us/windows/wsl/install-manual,下载你喜欢的linux发行版.截止发稿日,支持的发行版有这些 Ubuntu 18.04 Ubuntu 18.04 ARM Ubuntu 16.04 Debian GNU/Linux Kali Linux OpenSUSE SLES 然后打开下载得到的appx文件,解压缩(如果不能解压缩就把后缀修改为zip再解压缩),注意,要把解压缩后的文件放到一个合适的地方,比如"C:\我的程序\wsl_debian"这样.因为安装其实只是注册,因此安装好后的子系统的文件,就一直放在这里了. 然后点击解压缩目录中的exe文件,会自动注册.之后按照提示输入用户名和密码就可以了. 这种方式安装不经过store,还有一个好处

WeakHashMap,源码解读

泪湿孤枕 提交于 2019-11-29 07:51:03
概述 WeakHashMap 也是Map接口的一个实现类,它与HashMap相似,也是一个哈希表,存储key-value pair,而且也是非线程安全的。不过WeakHashMap并没有引入红黑树来尽量规避哈希冲突带来的影响,内部实现只是 数组+单链表 。此外,WeakHashMap与HashMap 最大的不同之处 在于,WeakHashMap的key是 “弱键”(weak keys) ,即 当一个key不再正常使用时,key对应的key-value pair将自动从WeakHashMap中删除,在这种情况下,即使key对应的key-value pair的存在,这个key依然会被GC回收,如此以来,它对应的key-value pair也就被从map中有效地删除了。 Java的四种引用 在正式进入WeakHashMap源码之前,我们需要先对 “弱引用” 有一个基本的认识,为此这里先介绍一下JDK 1.2开始推出的四种引用: 强引用(Strong Reference) 强引用是指在程序代码之中普遍存在的,类似 Objective obj = new Object() 这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。 软引用(Soft Reference) 软引用是用来描述一些还有用但并非必需的对象,对于软引用关联着的对象, 在系统将要发生内存溢出异常之前

Elasticsearch 日期查询详解,Elasticsearch Date 查询Java API

一笑奈何 提交于 2019-11-28 19:30:40
Elasticsearch 日期存储 Java API 存储的时候,我采用的方式是直接存储 Date 类型。上部分代码。 //Map集合 for (Map<String,Object> source : jsonArray) { //直接 IndexRequestBuilder lrb = ESTools.client.prepareIndex(index, type,id) //直接set .setSource(source); //TTL if(null != timer && timer.length > 0){ lrb.setTTL(timer[0]); } bulkRequest.add(lrb); } 如果有日期查询,大量的日期查询,建议想清楚,是以 String , Date ,还是 Long 类型的毫秒值,怎么存储怎么查询。 Elasticsearch 日期查询 Java API 先来一个完整的业务代码。里面包含时间查询,其实业务很简单,我就需要当天的数据。 /** * 浏览记录,分页查询 * @param key 用户key * @param pageSize size * @param pageNo no * @param isToday 是否只返回当天数据 * @return 分页对象 */ public static Pagination<HistoryBo

计算机系统中使用Cache和虚拟存储器的作用是什么

故事扮演 提交于 2019-11-26 10:02:17
通常人们所说的 Cache 就是指缓存SRAM。 SRAM叫静态内存,“静态”指的是当我们将一笔数据写入SRAM后,除非重新写入新数据或关闭电源,否则写入的数据保持不变。由于CPU的速度比内存和硬盘的速度要快得多,所以在存取数据时会使CPU等待,影响计算机的速度。SRAM的存取速度比其它内存和硬盘都要快,所以它被用作电脑的高速缓存(Cache)。 有了高速缓存,可以先把数据预写到其中,需要时直接从它读出,这就缩短了CPU的等待时间。高速缓存之所以能提高系统的速度是基于一种统计规律,主板上的控制系统会自动统计内存中哪些数据会被频繁的使用,就把这些数据存在高速缓存中,CPU要访问这些数据时,就会先到Cache中去找,从而提高整体的运行速度。一般说来,256K的高速缓存能使整机速度平均提高10%左右 虚拟存储器 就是 把内外存统一起来使用,起基本思想是把正在是用的部分保留在内存中。把暂时不用的部分防在外村中,使用时调入内存,虚拟存储器的容量与cpu的地址结构有关,如奔腾的地址位是32位,那么他的寻址空间就是2的32次方,4GB,就是说他的最大寻址空间是4GB。 相似之处 :①把程序中最近常用的部分驻留在高速的存储器中; ②一旦这部分变得不常用了,把它们送回到低速的存储器中; ③这种换入换出是由硬件或操作系统完成的,对用户是透明的; ④力图使存储系统的性能接近高速存储器,价格接近低速存储器