如何处理分页,最牛面试者如此回答

来源:互联网 发布:mac梦幻西游手游 编辑:程序博客网 时间:2024/06/06 00:26

(一)

1. 分页的页数计算.

2. 数据库的差异, 并介绍常用数据库分页方式.

3. ORM框架支持的统一分页

4. 分页相关的框架.

5. 前台分页和后台分页区别.

6. 分页模型的封装.

7. 通过分页模型封装, 封装出一个分页搜索的接口.

(二)

比如在 util 下写到个公共类 PageBean  然后在到里面写道
私有的 数字型 总记录数、总页数、当前页、每页显示记录数、上一页、下一页
在到LIST集合里写上 每页的集合 在里面写个方法
在到ACTION 里调用FORM跟这个方法,给它总记录当前页数以及你自己的方法
然后在
request.setAttribute("XX",XX );
return mapping.findForward("XXX")
页面调用ACTION 如XX.什么什么 的 就可以了

(三)

通常是封装一个分页对象,记录当前分页的状态,比如当前第几页,每页多少条,一共多少条,当页显示多少条等等,然后所有的从页面到数据库的操作,都是对这个对象的设置和读取而已,这个对象要良好的设计,要隐藏各字段的set方法,只暴露get方法和一个总的设置方法如setTotalRecords()方法,通过对总记录数的设置,自动计算其它字段的值,不要让用户可以自己设置各字段的值。

(四)

X86的分页机制和相应系统结构
  32bits的线性地址空间可以直接映射到物理地址空间,也可以间接映射到许多小块的物理空间(磁盘存储空间)上。这种间接映射方式就是分页机制。X86可用页大小为4KB、2MB和4MB(2MB和4MB只能在Pentium和Pentium Pro处理器中使用,本文中限定采用4KB页)。
  在分页机制,X86使用了四种数据结构:
  · 页目录项(PDE,Page Directory Entry):32bits结构,高20bits为页表基地址(物理地址),以4KB为递增单位,低12bits为页表属性,具体换算参见后面初始化部分;
  · 页目录(Page directory):存储页目录项,位于一页中,总共可容纳1024个页目录项;
  · 页表项(PTE,Page Table Entry):32bits结构,高20bits为页基地址(物理地址),低12bits为页属性;
  · 页表(Page table):存储页表项,位于一页中,总共可容纳1024个页表项;
  · 页(Page):4KB的连续地址空间;
  为了实现分页机制和提高地址转换的效率,X86提供和使用了如下的硬件结构:
  · 页标志位(PG,Page):该标志位为1,说明采用页机制;实际就是控制寄存器CR0的第31bit;
  · 页缓存/快表(TLBs,Translation Lookaside Buffers):存储最近使用的PDE和PTE,以提高地址转换的效率;
  · 页目录基地址寄存器(PDBR,Page Directory Base Register):用于存储页目录的基地址(物理地址),实际就是控制寄存器CR3;
  为了实现将线性地址映射到物理地址,X86将32bits线性地址解释为三部分:第31bit到第22bit为页目录中的偏移,用于索引页目录项(得到对应页表的基地址);第21bit到第12bit为页表中的偏移,用于索引页表项(得到对应页的基地址);第11bit到第0bit为页中的偏移。这样,通过两级索引和页中的偏移量,最后能正确得到线性地址对应的物理地址。