MySQL分页查询及优化
一、分页
什么是分页
一般在客户端实现分页功能的时候,要显示当前页的数据、当前所在页数、临近页面的按钮以及总页数等等。这些数据随着翻页的进行能够动态的变化,为了实现这样的效果,一般会采取两种办法:真分页和假分页。这样的划分方式是从与数据库的交互方式出发的,是每次翻页时都进行查询还是一次性查出所有的数据。
真分页
真分页指的是每次在进行翻页时都只查询出当前页面的数据,特点就是与数据库的交互次数较多,但是每次查询的数据量较少,数据也不需要一直保存在内存中。适用于数据量比较大的场景,数据不适合全量查出的情况。
假分页假分页指的是对于要显示的数据一次性全部查出,一直存在在服务端或客户端,在前端进行分页或由服务端控制分页。将根据当前所在页来计算应该显示的数据所在下标,用循环取出目标数据。只有当会话断开或页面关闭,相应的资源才会被释放。
缓存层真分页和假分页都要和数据库进行交互,对于真分页来说不需要担心数据同步的问题,因为每次都是查询出最新的,但是数据库的负担会很重,尤其是用户量大的情况下。假分页可以在一定程度上减轻数据库的压力,但是数据不能及时得到同步,除非重新请求或页面刷新。一 ...
HashMap底层原理
简单介绍HashMap是一种以 key-value 对的形式存储的数据结构,其中key一定是唯一的(可以为null,但 null 作为键只能有一个,null 作为值可以有多个),如果再次添加相同的key值,它会覆盖key值所对应的内容。
HashMap 通过 key 的 hashCode 经过扰动函数处理过后得到 hash 值,然后通过 “hash” 判断当前元素存放的位置,如果当前位置存在元素的话,就判断该元素与要存入的元素的 “hash” 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。
以下是 jdk1.8 “hash” 的实现
12345static final int hash(Object key) { int h; // >>>:无符号右移,忽略符号位,空位都以0补齐 return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);}
扩容机制JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 ...
常见排序算法
一、冒泡排序算法描述
比较相邻的元素。如果第一个比第二个大,就交换它们两个;
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
针对所有的元素重复以上的步骤,除了最后一个;
重复步骤1~3,直到排序完成。
代码实现123456789101112public void bubbleSort(int[] arr){ int temp; for (int i = arr.length-1; i > 0; i--) { for (int j = 0; j < i; j++) { if (arr[j]>arr[j+1]){ temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } }}
稳定性在相邻元素相等时,它们 ...




