大数据WEB阶段总结
一、概述
- HTTP协议
- web容器 - Tomcat
- 静态web资源 - 本质上是文件
- html css js 图片 音频 视频 flash…
- 动态web资源 - 本质上是程序
- Servelt JSP
- 数据库 - sql mysql
- JDBC
二、HTML CSS JS JQUERY
- 看的懂 基本的使用
- 略
三、WEB容器 - Tomcat
- 常见的web服务器
- Tomcat - 开发 测试 部分网站的后台
- WebLogic
- WebSphere
Tomcat
- 虚拟主机
- Tomcat中允许配置多个网站 这些网站独立运行 在外界访问者看来似乎就像运行每个网站都运行在一个独立的服务器上一样。
- 所以Tomcat中引入了虚拟主机的概念,认为每个站点都运行在一个独立的虚拟出来的主机上,这就是虚拟主机的概念。
- 简单起来一句话,tomcat中一个网站占就是一个虚拟主机
- web应用
- 一个站点内可能提供不止一种功能,每个功能相当于这台虚拟主机内部配置的一个web应用。
- 一个web应用由web资源按照一定的结构组织而成
- web应用的目录结构
- new
- |
- |-静态web资源 和 jsp
- |-WEB-INF - 这个路径下的资源无法直接访问
- |-classes - 动态资源的class文件
- |-lib - 动态资源运行时依赖的jar包
- |-web.xml - 当前web应用的配置文件
- |-其他需要保护的不应被访问的资源
- web的应用虚拟路径映射
- web应用存放在服务器的磁盘中,但是为了安全起见应用的真正磁盘路径是不应该暴露给外界访问者的,所以需要进行配置 将真实的web应用的路径 影射为一个虚拟的路径 外界访问虚拟路径 由web应用翻译位真正的磁盘路径访问资源 这个过程称之为web应用的虚拟路径映射。
!!!虚拟主机的配置
在tomcat的conf/server.xml文件中配置
<Engin><Host name="虚拟主机名称" appBase="虚拟主机管理的目录">...</Host></Engin>
- **还需要在dns服务器或本机hosts文件中 配置ip地址和主机名的映射
!!!web应用的配置
方式 1:
在tomcat的conf/server.xml文件中配置
<Engin><Host name="虚拟主机名称" appBase="虚拟主机管理的目录"><Context path="虚拟路径" docBase="真实路径"></Context></Host> </Engin>
- **需要重启才能生效
- 方式 2:
- 在tomcat/conf/[engin]/[hosts]下创建以应用虚拟路径位名称的xml文件 在其中配置
- **不需要明确配置虚拟路径名称 因为文件名将作为虚拟路径来使用
- 方式 3:
- 将应用本身放置到虚拟主机管理的目录下
- **tomcat/webapps目录就是tomcat中localhost虚拟主机默认管理的目录 直接放在该目录下 相当于位localhost增加 web应用
- 其他
- 监听端口指定
- tomcat默认监听8080 可以修改conf/server.xml修改
- 打war包
- 通用web.xml和context.xml
- 在tomcat的conf下有这两个文件 是通用默认的web.xml和context.xml的默认配置
- 在myeclipse下开发web应该
- 发布web应用:将web项目下WebRoot下的内容拷贝到tomcat/webapps下当前web应用名称的文件夹中 因此可以通过localhost虚拟主机访问
- 监听端口指定
- 虚拟主机
!!!!!四、HTTP协议
1.概述HTTP是一种通用的应用层协议 定义了客户端和服务器端通信方式底层时TCP/IP协议2.基本原则基于请求响应模型一次请求对应一次响应请求只能由客户端发出 服务器端被动等待请求做出响应3.版本区别HTTP/1.0 - 一次请求响应后底层的连接关闭 下次访问再重新创建HTTP/1.1 - 提供了连接保持能力 当短时内多次访问服务器时 复用底层连接 效率高4.HTTP请求一个请求行GET /index.jsp HTTP/1.1请求方式:一共7种 最常用的GET POST GET请求参数在地址后 POST请求参数请求的实体内容中请求资源的虚拟路径当前遵循的协议版本若干请求头Accept: text/html,image/* -- 通知服务器当前浏览器可以接受那些格式的数据Accept-Charset: ISO-8859-1 -- 浏览器可以接受的字符集编码Accept-Encoding: gzip,compress -- 浏览器可以接受的压缩格式Accept-Language: en-us,zh-cn -- 浏览器接受的语言环境,和国际化相关的头Host: www.tedu.cn:80 -- 需要访问的虚拟主机的名称If-Modified-Since: Fri, 17 Feb 2017 18:23:51 GMT -- 这是和缓存机制相关的头Referer: http://www.tedu.cn/index.jsp -- 这是和防盗链相关的头,对当前资源的访问来自哪个页面的超链接User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) -- 客户端的基本信息Cookie -- 和cookie相关的头Connection: close/Keep-Alive -- 是否继续保持连接 Date: Fri, 17 Feb 2017 18:23:51 GMT -- 当前发送请求的时间 空行实体内容5.HTTP响应一个状态行HTTP/1.1 200 OK协议版本状态码:200 302 304 307 404 500描述信息若干响应头Location: http://www.tedu.cn/index.jsp -- 配合302使用实现请求重定向Server:apache tomcat -- 服务器的基本信息Content-Encoding: gzip -- 服务器发送的数据使用的压缩格式Content-Length: 80 -- 服务器发送的数据的大小Content-Language: zh-cn --服务器发送的数据使用的语言环境 国际化相关的头Content-Type: text/html; charset=GB2312 -- 服务器发送的数据是什么格式的,如果是字符格式的数据,则还可以通知服务器发送的数据使用的是什么编码,浏览器会根据这个头指定的编码决定使用哪个编码来打开收到的数据Last-Modified: Fri, 17 Feb 2017 18:24:11 GMT -- 和缓存相关的头Refresh: 1;url=http://www.tedu.cn -- 定时刷新相关的头,通知浏览器,过几秒后自动刷新访问哪个地址Content-Disposition: attachment;filename=aaa.zip -- 通知浏览器以附件的形式打开发送过去的数据,是和文件下载相关的头Set-Cookie:SS=Q0=5Lb_nQ; path=/search -- 和Cookie相关的头Expires: -1 -- 通知浏览器是否缓存Cache-Control: no-cache -- 通知浏览器是否缓存Pragma: no-cache -- 通知浏览器是否缓存--之所以一个功能有三个头,是因为历史原因.所以为了网页的兼容性考虑,通常这三个头要一起使用Connection: close/Keep-Alive -- 是否保持连接Date: Fri, 17 Feb 2017 18:24:11 GMT -- 响应时的时间一个空行实体内容
!!五、Servlet
1.概述Servlet是sun公司提供的一门用于开发动态web资源的技术。按照这套规范写出来的Servlet可以放置到web应用中在Servlet容器中运行。
2.开发步骤写一个类实现Servlet接口在web.xml中配置Servelt的访问路径<servlet><servlet-name>起一个名字</servlet-name><servlet-class>Servlet类的全路径名称</servlet-class></servlet><servlet-mapping><servlet-name>起一个名字</servlet-name><url-pattern>对外访问虚拟路径</url-pattern></servlet-mapping>对外访问路径的配置:/xxx/xxx/**.xx哪个最像找哪个*.后缀优先级最低
3.继承结构Servelt|-GenericServlet|-HttpServlet4.Servlet的生命周期第一次被访问时创建 调用init方法执行初始化创建出来后驻留在内存中为后续对该Servelt的请求服务每次访问都触发service方法执行处理逻辑直到web应用被销毁之前 Servlet销毁 销毁之前调用destory方法执行善后工作5.Servlet访问流程参看图
!!六、Request Response
1.Request概述在服务器内部代表http请求的对象2.Request继承结构ServletRequest|-HttpServletRequest 3.Request主要功能获取请求相关信息getRequestURL方法 -- 返回客户端发出请求完整URL如: http://localhost/day09/servlet/SecondServletgetRequestURI方法 -- 返回请求行中的资源名部分如: /day09/servlet/SecondServletgetQueryString方法 -- 返回请求行中的参数部分如: username=zhangfei&password=123getRemoteAddr方法 -- 返回发出请求的客户机的IP地址如: 127.0.0.1 //可能会出现0:0:0:0:0:0:0:1形式,是ipv6的表现形式。getMethod -- 得到客户机请求方式如: GET或POST!!getContextPath -- 获得当前web应用虚拟目录名称 如: /day09获取请求头getHeader(name)getHeaderNames()getIntHeader(name)方法 --- intgetDateHeader(name)方法 --- long(日期对应毫秒)获取请求参数getParameter(String name) --- String 通过name获得值getParameterValues(String name) --- String[] 通过name获得多值 checkboxgetParameterMap() --- Map<String,String[]> key :name value: 多值getParameterNames() --- Enumeration<String> 获得所有name乱码:request.setCharacterEncoding(encode) -- post乱码new String(param.getBytes("iso8859-1"),encode) -- get乱码实现转发包含request.getRequestDispatcher("xxx").forward(request,response); -- 服务器内部跳转 只能看到被转发的资源内容 转发前的内容会被抛弃request.getRequestDispatcher("xxx").include(request,response); -- 服务器内部包含 两边的内容都有作为域来使用生命周期请求开始时创建request对象 生命周期开始 请求结束request对象销毁 生命周期结束作用范围整个请求链主要功能在整个请求过程中共享数据4.Response概述代表http响应的对象5.Response继承结构ServletResponse|-HttpServletResponse6.主要功能设置状态码setStatus(int sc)setStatus(int sc, String sm)设置响应头setHeader(String name, String value)setIntHeader(String name, int value)setDateHeader(String name, long date)获取输出流输出数据到实体内容 PrintWriter getWriter()ServletOutputStream getOutputStream();乱码:response.setCharacterEncoding(encode) -- 服务器将字符解析为字节时的编码response.setContentType("text/html;charset="+encode) -- 通知浏览器解析响应时使用的编码实现重定向302+Locationresponse.sendRedirect("xxx");实现定时刷新response.setHeader("refresh","3;url=xxx");实现禁止缓存response.setDateHeader("Expires",-1);response.setHeader("Cache-contrl","no-cache");response.setHeader("Pragma","no-cache");
七、ServletConfig !ServletContext
1.ServletConfig概述代表当前Servlet的配置的对象
2.ServletConfig获取this.getServletConfig();
3.ServletConfig功能获取Servlet的初始化参数 - 在web.xml的<servlet>标签下配置的<init-param>标签里指定的参数 可以将不像写在servlet的提取到web.xml中管理getInitParameter()getInitparameterNames()
4.ServeltContext对象代表当前web应用
5.ServletContext对象的生命周期web应用创建时跟着创建 一直驻留在内存中 唯一的代表当前web应用 直到web应用销毁时 跟着web应用的销毁被销毁
6.ServleltContext对象获取servletConfig.getServletContext()this.getServletContext();
7.ServletContext对象功能 - 获取web应用的初始化参数可以在web应用的web.xml中<context-param>标签为当前web应用配置初始化参数可以通过ServletContext获取该web应用初始化参数getInitParametergetInitparameterNames
8.ServletContext对象作为域对象使用生命周期和web应用的命一样长作用范围整个web应用主要功能在web应用范围内共享数据
9.ServletContext解决路径难题web应用中获取资源时路径怎么写都不对如果写 相对路径 -- tomcat/bin如果写 绝对路径 -- tomcat所在磁盘的根目录下如果写 盘符开始的路径 -- 可以找到资源 一旦换一个发布环境 路径就错了servletContext.getRealPath("xxx") -- 会在传入的路径前拼接当前web应用的盘符开始的路径 得到资源的盘符开始的路径 从而访问到资源 由于是动态获取的 所以即使换了发布环境也没问题**类加载器加载资源如果没有ServletContext可以通过类加载器加载资源classLoader.getResource().getPath("xxx") -- 需要传入相对于类加载器加载类的路径
!!八、Cookie Session
1.会话技术概述浏览器为了实现某一个功能 开发访问服务器 从开始访问 到结束功能 之间多次 请求响应加在一起 称之为发生了一次会话会话最主要的问题时会话数据的保存2.cookiecookie的原理 - set-cookie响应头 和 cookie请求头cookie的apiCookie c = new Cookie(name,value);c.setMaxAge() -- 设定cookie的保存时长 如果不设置 默认保存在浏览器的内存中 浏览器关闭则消失 如果配置过则在浏览器的临时文件夹下保存 到指定的时间c.setPath() -- 设定浏览器在访问哪些路径时 带回这个cookie 如果不设置 默认值时 发送cookie的Servlet的父目录及其子孙目录response.addCookie(c)request.getCookies();删除cookie发送同名 同path 但是maxage为0的cookie3.sessionsession的原理 - 在服务器内部创建浏览器对应的空间保存数据 专门为指定浏览器服务 这样每个浏览器都有对应空间 保存会话数据- 通过一个特殊的Cookie - JSESSIONID 来识别浏览器域对象:生命周期第一次调用request.getSession()方法时创建 自杀超时意外身亡作用范围整个会话范围主要功能 在会话范围内共享数据
九、!!AJAX !!!!URL编码 三种资源跳转方式
AJAX - 异步请求 局部刷新 - 背着浏览器通过js访问服务器 获取 数据后 通过js改变页面URL编码 - HTTP协议只支持ISO8859-1 如果 想要在请求携带非iso8859-1的字符 需要进行URL编码三种资源跳转方式转发重定向定时刷新
十、JSP基础
1.jsp概述看起来像html 但是其中可以写java代码 便于开发页面在第一次被访问时被翻译成了Servlet执行 本质上仍然是一种动态web资源开发技术2.jsp语法模版元素脚本表达式<%= %>脚本片段<% %>jsp声明<%! %>jsp注释<%-- --%>jsp指令<%@ %>page指令<%@ page %>include指令<%@ include file=""%>taglib指令<%@ taglib uri="" prefx="" %>!!!jsp的九大隐式对象pagerequestresponseconfigapplicationsessionoutexceptionpageContextPageContext作为入口获取其他八大隐式对象作为入口操作四大作用域域对象生命周期jsp页面访问开始时创建 访问结束时销毁作用范围整个jsp页面主要功能在当前jsp页面中共享数据便捷的转发包含
十一、JSP标签技术
jsp标签 <jsp:inclue>用来替代request.getRequestDispatcher().include()<jsp:forward>用来替代request.getRequestDispatcher().forward()<jsp:param>配合前两个标签使用,可以在包含或转发时,带一些参数过去
!!el表达式获取数据常量数据变量数据集合 数组中的数据map中的数据javabean的属性执行运算算术运算比较运算逻辑运算empty运算符三元表达式使用内置常用对象 - 11内置对象pageContextpageScoperequestScopesessionScopeapplicationScopeparamparamValuesheaderheaderValuesCookieinitParam调用java方法jstl中fn函数库jstl标签库c库fn库fmt库sql库xml库<c:out>!<c:set>!<c:remove><c:catch>!!<c:if>!!<c:foreach><c:choose><c:when><c:otherwise><c:fortokens><c:fortokens><c:url>
!!十二、JAVAEE开发模式
1.javaee开发模式的发展ServeltJSPJSP + JavaBeanServlet + JavaBean +Jsp!!!JAVAEE的经典三层架构 - web service dao - Servlet JSP Service Dao Javabean!!!!!**MVC设计模式 !!!!!**耦合 解耦 - 高内聚低耦合 - 接口+配置文件+工厂 - 依赖注入
十三、Filter
1.filter概述三大组件之一拦截对资源的请求 控制是否允许通过 或在通过之前或之后做一些额外操作2.filter开发步骤写一个类实现Filtler接口在web.xml中进行配置3.filter的声明周期应用启动创建 执行init 驻留在内存中工作 每次拦截执行 dofilter方法 应用销毁前销毁 调用destory方法善后4.filter的相关对象filterConfiggetInitParametergetInitparameterNamesgetServletContextfilterChaindofilter5.filter的应用全站乱码解决过滤器!!!改造已有对象身上的不喜欢的方法:继承装饰动态代理Proxy.newProxyInstance自动登录过滤器!!!MD5加密算法 - 数据摘要算法 数据指纹算法任意二进制算出128位二进制原文相同密文相同原文不同密文不同只能由原文算成密文 密文算不回原文数据中密码保存 文件校验 数字签名
十四、Listener
1.概述 三大组件之一监听相关事件进行处理2.八大监听器监听三大作用域创建和销毁的监听器监听三大作用域中属性变化的监听器使javabean自己敢做自己在session域中属性变化的监听器
十五、文件上传
1.文件上传表单
上传项必须有name属性
必须post提交
设置enctype为multipart/form-data
2.服务器中的处理自己写代码处理 - 麻烦通过commons-fileupload - 方便ie的bug文件存放位置文件重名覆盖文件夹下文件过多 - hash分目录存储
!!!!!!十六、数据库 - sql
1.mysql数据库的安装配置2.sql语言 增删改查普通查询条件查询 where分组查询 group by聚合查询 count sum avg min max排序查询 order by分页查询 limit子查询连接查询(多表查询)3.多表设计数据之间的关系 要用表之间的关系保存1 - 1 在任意一方设计外键保存另一方的主键1 - * 在多的一方设计外键保存另一方的主键* - * 建立第三方关系表来保存两张表主键的对应关系4.多表查询笛卡尔积查询 - 两张表相乘的结果内连接查询 - 两边都有的数据才查询外连接查询左外连接查询 - 在内连接的基础上增加左边有右边没有的数据右外连接查询 - 在内连接的基础上增加右边有左边没有的数据全外连接查询 - 在内连接的基础上增加左边有右边没有的数据 和 右边有左边没有的数据
!!!!!!十七、数据库 - jdbc
1.jdbc概述jdbc:sun提供的操作数据库的接口数据库驱动:不同数据库厂商对jdbc接口的实现2.开发jdbc步骤导入驱动包 注册数据库驱动 获取数据库连接获取传输器对象传输sql执行得到结果集遍历结果集获取数据关闭资源3.sql注入攻击将用户提交的数据拼接为sql的一部分造成 当用户提交恶意参数 造成意外的sql的执行PreparedStatement 4.批处理5.连接池频繁的开关数据库连接 效率低下 通过数据库连接池 来管理复用连接
!!!!!!十八、数据库 - 事务
1.事务的概念逻辑上的一组操作 要么同时完成 要么同时不完成2.控制事务mysql默认一条语句一个事务sql控制事务:start transaction;commit;rollback;jdbc控制事务: conn.setAutoCommit(false)conn.commit()conn.rollback()SavePoint sp = conn.setSavePoint();conn.rollback(sp);3.事务四大特性 - ACID原子性一致性隔离性持久性4.隔离性加锁 - 效率低 - 并不是所有场景都要严格的隔离性 - 提供了选项5.四大隔离级别Read Uncommitted - 脏读 不可重复读 虚读(幻读)Read committed - 不可重复读 虚读(幻读)Repeatable read - 虚读(幻读)Serilizable - 没有任何问题 但是效率低脏读:一个事务读取到另一个事务未提交的数据不可重复读:一个事务读取到另一个事务已经提交的数据虚读(幻读):一个事务读取全表数据 读取到另一个并发事务的新增删除记录已提交的结果根据需求 选择能够防止想要防止的问题的基础上 性能尽可能高的隔离级别6.锁机制两个并发读取 - 不隔离两个并发修改 - 必须隔离一个修改一个读取 - Serializable下隔离 其他情况下不隔离共享锁共享锁和共享锁共存 共享锁和排他锁不能共存非Serializable隔离级别下查询不加所 Serializable隔离级别下查询加共享锁排他锁排他锁和任意锁都不能共存任意隔离级别下增删改加排他锁**死锁7.更新丢失两个并发的事务基于同一个查询结果进行修改 后提交的事务忽略了先提交的事务对数据库的影响 造成的问题案例:重复充值秒杀抢购解决方案:数据库隔离级别设置为Serializable - 效率低悲观锁for update 乐观锁修改时拼接额外检查查询条件的语句 之后 判断是否修改成功 以此检测是否更新丢失 如果丢失重来更新多查询少 悲观锁查询多更新少 乐观锁
!!!!十九、ThreadLocal
Thread内部有map 但是外界无法直接操作
通过ThreadLocal可以操作
利用线程内部的map携带数据 由程序执行的上游向下游传递数据 又由于每个Thread有各自的map可以保存各自的对象 可以防止线程安全问题的产生set(obj) - 向当前线程map中存 tl->obj
get() - 从当前线程map中获取 tl对应的值
remove() - 从当前线程map中移除 tl键值对
大数据WEB阶段总结相关推荐
- 大数据WEB阶段 TransientDateAccessResourceException
大数据WEB阶段 TransientDateAccessResourceException 一 . 分析 如果数据库保存的字段有时间 , 但是没有给该字段赋值时 ,则该字段默认是0000-00-00 ...
- 大数据WEB阶段(九)Servlet+Request
Servlet与Request 一.概述 Servlet 是sun公司提供的一门用于开发动态web资源的技术 按照这套规范写出来的servlet可以放置在web应用中在servlet容器中运行 . 开 ...
- 大数据WEB阶段 (六)MySql详解(一)
MySql(二) 一.概述 什么是数据库 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,简而言之就是存储数据的仓库. 数据库的分类 层次式数据库.网络式数据库.关系型数据库 数 ...
- 大数据WEB阶段Maven安装配置与使用
Maven 零.目录 Maven简介 Maven 的安装与配置 创建Maven工程 创建maven-web工程 搭建私服 使用本地资源库 阿里私服 maven命令 上传本地工程到私服中 maven-w ...
- 大数据WEB阶段(十三)JSP(二)JSP标签、EL表达式、JSTL
JSP标签.EL表达式.JSTL (一)JSP标签技术 一.JSP标签技术概述 jsp本质上是一种动态web资源开发技术 , 看起来像是html , 但其中可以写java代码 , 非常方便用来开发动态 ...
- 大数据WEB阶段(十三)JSP(一)JSP基础、JSP指令详解、四大域九大隐式对象总结
JSP基础.指令.四大作用域九大隐式对象总结 (一)JSP基础 一.JSP概述 jsp其实是java动态页面技术 HTML可以用来组织页面但是HTML是一种静态web资源技术无法嵌入动态数据. Ser ...
- 大数据WEB阶段 (十)Response、ServletConfig、ServletContext、资源跳转三种方式
Response.ServletConfig.ServletContext.资源跳转三种方式 - (一)Response 一.Response概述 在doGet和doPost方法的参数中,HttpSe ...
- 大数据WEB阶段 Maven与SSM框架整合
Maven整合SSM框架 零. 目录 Maven整合SSM 常见的问题 以及一些优化 一. Maven整合SSM 创建webapp工程 修改jdk和编译器 配置pom.xml文件 并在pom.xml文 ...
- 大数据WEB阶段Mybatis(二)
Mybatis(二) 零.目录 Mybatis接口形式 Mybatis整合Spring Mybatis的缓存机制 手动封装结果集 一对一表操作 一对多表操作 多对多表操作 SpringMVC . Sp ...
最新文章
- 【iOS-cocos2d-X 游戏开发之十一】使用New CCSprite() CCUserDefault要注意!
- 安卓HTML中打开一个连接!点击跳转了,可以实现返回上一级的HTML的页面!
- Linux教程:10条秘诀确保Linux桌面安全性
- 2.UML2 软件建模入门与提高 --- UML入门基础
- github 检查代码质量_使用Gradle做Java代码质量检查
- 案例 - 收藏集 - 掘金
- 【Gym-102606 H】Heat Pipes【奇环染色、bfs 生成树】
- 实现B站弹幕很难么?这个开源项目了解一下
- 【转载】Excel中批量填充公式有5个方法
- python语句分号_你知道分号在各种编程语言中的作用吗?
- 【洛谷题解】B2033 A*B 问题
- 高级工程师职称计算机要求,高级工程师职称评定条件及流程
- 学习笔记 | Orillusion-WebGPU小白入门(六)
- Python_Dataframe_去除重复数据
- Spark SQL: Relational Data Processing in Spark
- VR硬件演进与其游戏开发中的若干注意事项
- oracle索引查询
- opencv与C++实现最大类间方差法(OTSU)进行图像二值化
- 解决VC6.0出现的Error spawning cl.exe错误
- 《大话数据结构》读书笔记(二)
热门文章
- 动态将表中的列名全部转换成小写
- 蓝桥杯练习(java):字符串对比
- kirin710f是什么处理器_如何看待麒麟710F处理器?
- java中的jre里面有什么_Java中JRE介绍,JRE是什么
- mysql没法修改数据_MySQL学习笔记之数据的增、删、改实现方法
- nginx匹配规则_Nginx系列之server_name定义与匹配规则
- word2vec原理浅析
- .net使用SqlBulkCopy类操作DataTable批量插入数据库数据,然后分页查询坑
- [BZOJ1833][ZJOI2010]Count数字计数(DP)
- [转载]线上应用故障排查之一:高CPU占用