- 在操作系统写回策略中,如果未命中cache,为何要先将数据读进cache再修改?
我叫磁力泵~
笔记
下文摘抄自小林coding(2.4CPU缓存一致性|小林coding)如果当发生写操作时,数据已经在CPUCache里的话,则把数据更新到CPUCache里,同时标记CPUCache里的这个CacheBlock为脏(Dirty)的,这个脏的标记代表这个时候,我们CPUCache里面的这个CacheBlock的数据和内存是不一致的,这种情况是不用把数据写到内存里的;如果当发生写操作时,数据所对应的C
- LeetCode146.LRU 缓存(哈希表+双向链表)
techpupil
缓存散列表链表
请你设计并实现一个满足LRU(最近最少使用)缓存约束的数据结构。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回关键字的值,否则返回-1。voidput(intkey,intvalue)如果关键字key已经存在,则变更其数据值value;如果不存在,则向缓存中插入该组k
- $.ajax()方法详解
小二爱编程·
ajaxjavascriptjquery
jquery中的ajax方法参数总是记不住,这里记录一下。目录1.url2.type3.timeout4.async5.cache6.data7.dataType8.beforeSend9.complete10.success11.error12.contentType13.dataFilter14.dataFilter15.global16.ifModified17.jsonp18.userna
- 基于AOP注解+Redisson实现Cache-Aside缓存模式实战
@淡 定
缓存
(2)缓存更新注解一、场景需求在高并发系统中,缓存是提升性能的关键组件。而Cache-Aside模式作为最常用的缓存策略之一,要求开发者手动管理缓存与数据库的交互。本文将结合自定义注解与Redisson客户端,实现声明式的缓存管理方案。二、方案亮点零侵入性:通过注解实现缓存逻辑完整防护:解决缓存穿透/击穿/雪崩问题⚡双删策略:保障数据库与缓存一致性️逻辑删除:支持数据恢复与审计需求三、核心实现1.
- 为什么在Linux系统中,available会比free+buff/cache的总和少很多
fzip
Linuxlinux运维服务器
在Linux系统中,available内存值小于free+buff/cache总和的现象源于内存管理的复杂机制。以下是核心原因及技术细节:一、背景1.现象#1.free-htotalusedfreesharedbuff/cacheavailableMem:503Gi475Gi8.9Gi605Mi18Gi13GiSwap:63Gi12Gi51Gi#2.grep-E'^(MemTotal|MemFre
- vllm安装踩坑
蒸土豆的技术细节
人工智能
今天是2024/7/18.vllm0.5.2最近一周出了个不好搞的新issue,会遇到torch.ops._C没有rms_norm,或者没有reshape_and_cache_flash这两个属性的问题。完整报错如下:AttributeError:‘_OpNamespace’‘_C_cache_ops’objecthasnoattribute‘reshape_and_cache_flash’Att
- 【无标题】
gs80140
AI人工智能
KVCache在自回归生成中的作用及显存优化1.什么是KVCache?在大语言模型(LLM)进行自回归(autoregressive)文本生成时,每次生成新token,都需要基于过去的上下文重新计算self-attention机制中的Key(K)和值(V)。KVCache(键值缓存)是一种优化策略,它缓存先前计算的K/V张量,避免重复计算,从而提高生成速度并降低计算成本。2.KVCache在自回归
- Redis 详解
z小天才b
Redisredis数据库缓存
1.NoSQL的核心概念和应用场景核心概念NoSQL(NotOnlySQL):一类非关系型数据库的统称,专为处理大规模数据存储而设计特点:高扩展性、高性能、灵活的数据模型、分布式架构CAP理论:一致性(Consistency)、可用性(Availability)、分区容错性(Partitiontolerance),NoSQL通常优先保证AP或CP主要类型键值存储:Redis,Memcached文档
- 【Redis系列】Redis从入门到进阶顶级教程
小夕Coding
大数据系列数据库redisjava缓存分布式
文章目录Redis单机环境搭建(1)下载并解压(2)编译(3)启动服务(4)启动客户端(5)修改访问配置一、概述二、数据类型(1)STRING(2)LIST(3)SET(4)HASH(5)ZSET三、数据结构(1)字典(2)跳跃表四、使用场景(1)计数器(1)缓存(2)查找表(3)消息队列(4)会话缓存(5)分布式锁实现(6)其它五、Redis与Memcached(1)数据类型(2)数据持久化(3
- ci如何做才能做到每秒rps 为3000+
行思理
LNMP运维CIphp
要让CodeIgniter(CI)实现每秒3000+RPS(RequestsPerSecond)的高并发处理能力,需要从框架优化、服务器配置、代码设计等多方面入手。尽管CI本身是一个轻量级框架,但其默认配置和传统PHP-FPM模式的性能天花板较低(通常RPS在500-800左右),需通过以下优化策略突破性能瓶颈:一、核心优化方向1.升级PHP版本与启用OPcachePHP8+:使用PHP8.0及以
- 使用vue3和vue-router实现动态添加和删除cachedViews数组
没资格抱怨
vue3vue.js前端typescript
以下是一个使用Vue3和VueRouter实现动态添加和删除cachedViews数组的代码示例,该示例结合keep-alive组件来动态控制路由组件的缓存。src/├──App.vue├──router/│└──index.js├──views/│├──Home.vue│├──About.vue│└──Contact.vue└──main.js代码实现router/index.jsimport{
- 指令系统和计算机体系结构——一文解析冯·诺依曼架构
点滴汇聚江河
软考-软件设计师架构
文章目录一、核心思想二、核心组成部分1.中央处理器(CPU)2.内存(Memory)3.输入/输出(I/O)设备4.总线(Bus)三、工作流程四、冯·诺依曼架构的局限性五、现代计算机的改进1.流水线技术(Pipeline)关键机制2.高速缓存(Cache)关键机制3.多核CPU(Multi-Core)关键挑战与解决方案4.乱序执行(Out-of-OrderExecution)关键技术5.其他关键改
- python pip报错:Preparing metadata (pyproject.toml) ... error
我有一个魔盒
其他pythonpip开发语言
环境:win11(Python3.9.13)原因:想安装低版本python,结果安装成了32位的,但是依赖包基本都是64位的。解决办法:重装64位python(可能还需要VisualStudio内安装“使用C++的桌面开发”)异常报错:Collectingmatplotlib~=3.0(fromgradio)Usingcachedhttps://pypi.tuna.tsinghua.edu.cn/
- KV 缓存简介
dev.null
AI缓存
以下是关于KV缓存(Key-ValueCache)的简介,涵盖其定义、原理、作用及优化意义:1.什么是KV缓存?KV缓存是Transformer架构(如GPT、LLaMA等大模型)在自回归生成任务(如文本生成)中,用于加速推理过程的核心技术。其本质是:在生成序列时,缓存历史token的Key和Value矩阵,避免重复计算,从而显著减少计算量。2.为什么需要KV缓存?传统自注意力计算的问题在生成第t
- Redis系列:深入理解缓存穿透、缓存击穿、缓存雪崩及其解决方案
菜就多练少说
Redis缓存redis数据库
在使用Redis作为缓存系统时,我们经常会遇到“缓存穿透”、“缓存击穿”和“缓存雪崩”等问题,这些问题一旦出现,会严重影响应用性能甚至造成服务不可用。因此,理解这些问题的产生原因和解决方案非常重要。本文将全面讲解缓存穿透、缓存击穿、缓存雪崩的具体概念、产生原因、以及对应的解决策略,帮助开发人员高效、安全地使用Redis。一、缓存穿透(CachePenetration)(一)什么是缓存穿透?缓存穿透
- C/C++高效编译工具ccache
工头阿乐
C/C++c语言c++java
C/C++文章目录C/C++前言一、引入ccache二、ccache基本原理三、安装前言在处理一些规模相对较大的工程时,编译花费的时间可能会很长。有时候我们会经常一遍一遍地编译相同的程序,此时,有了ccache情况就好多了。它将在第一遍编译时多花几秒钟,但接下来就会使编译成倍(5-10倍)的提速。ccache的基本原理是通过将头文件高速缓存到源文件之中而改进了构建性能,因而通过减少每一步编译时添加
- 【重回基础】理解CPU Cache及缓存一致性MESI
Patrick_Lam
重回基础CPUCacheMESI缓存一致性
文章目录一、前言二、为何需要CPUCache三、L1、L2、L3Cache三级缓存结构四、CacheLine:与内存数据交换的最小单位五、MEIS:缓存一致性5.1底层操作5.2MESI协议参考一、前言原打算重新学习一下volatile的实现原理,其中涉及到指令调度重排和数据可见性保证,这两者的理解离不开对CPUCache的掌握,因此,先重温一下CPUCache,便有了本文。二、为何需要CPUCa
- 一条查询sql的执行流程和底层原理
weixin_30608503
大数据数据库
1、一条查询SQL执行流程图2、查询SQL执行流程之发送SQL请求(1)客户端按照Mysql通信协议将SQL发送到服务端,SQL到达服务端后,服务端会单起一个线程执行SQL。(2)执行时Mysql首先判断SQL的前6个字符是否为select。并且语句中是否带有SQL_NO_CACHE关键字,如果没有则进入查询缓存。3、查询SQL执行流程之查询缓存查询缓存说白了就是一个哈希表,将执行过的语句及其结果
- 【Redis】什么是缓存穿透、击穿、雪崩?如何解决?
熏鱼的小迷弟Liu
Redis缓存redis数据库
1.缓存穿透定义:缓存穿透是指查询一个不存在的数据,由于缓存中没有该数据,请求会直接落到数据库上。如果大量这样的请求同时发生,数据库可能会被压垮。原因:恶意攻击:攻击者故意请求大量不存在的数据。业务逻辑问题:某些查询条件本身就不存在有效数据。解决方案:1.缓存空值:如果查询结果为空,扔将空值缓存起来,并设置一个较短的过期时间。if(data==null){cache.put(key,"NULL",
- 带过期时间的LRUCache java实现
.禾火
java算法数据结构
实现代码,惰性删除过期节点importjava.util.*;publicclassLRUWithExpire{staticclassListNode{intkey;intvalue;//单位为毫秒longexpire;ListNodepre;ListNodenext;publicListNode(intkey,intvalue,longexpire){this.key=key;this.valu
- 如何修改pip全局缓存位置和全局安装包存放路径
Ven%
linux命令实用系列Ubuntu深度学习速通系列pip缓存人工智能python自然语言处理深度学习
使用场景:在默认情况下,pip会将安装的包存放在Python环境的site-packages目录下,会使用到系统盘的内存。当遇到系统盘的内存很小的时候,需要修改pip的全局缓存位置和全局安装包存放路径,可以极大的节省系统盘内存详细步骤:1.修改pip的全局缓存位置pip会默认将下载的文件存放在缓存目录中(如Linux的~/.cache/pip,Windows的%LOCALAPPDATA%\pip\
- 前端缓存接口数据
jjjjjjjjj¢
笔记前端
在前端缓存接口数据时,可以结合浏览器缓存策略、前端存储(localStorage、sessionStorage、IndexedDB)、内存缓存(变量存储)、ServiceWorker等方式,选择适合的方案。使用浏览器HTTP缓存(推荐,依赖后端支持)如果接口数据不会频繁变化,可以使用HTTP缓存策略(强缓存+协商缓存),减少不必要的请求。后端设置Cache-Control在接口响应头中,服务器可以
- 输入:0.5元/百万tokens(缓存命中)或2元(未命中) 输出:8元/百万tokens
杏花春雨江南
缓存
这句话描述了一种定价模型,通常用于云计算、API服务或数据处理服务中,根据资源使用情况(如缓存命中与否)来收费。以下是对这句话的详细解释:1.关键术语解释Tokens:在自然语言处理(NLP)或数据处理领域,Token通常指文本的最小单位(如一个单词或一个字符)。在这里,Tokens是计费的单位。缓存命中(CacheHit):当请求的数据已经在缓存中时,称为缓存命中。缓存命中通常意味着更快的响应速
- 探索未来架构:基于AWS的响应式微服务框架
柏赢安Simona
探索未来架构:基于AWS的响应式微服务框架reactive-refarch-cloudformationReactiveMicroservicesArchitectureswithAmazonECS,AWSLambda,AmazonKinesisStreams,AmazonElastiCache,andAmazonDynamoDB项目地址:https://gitcode.com/gh_mirror
- 实验六 多cache一致性——监听协议_多核Cache一致性
weixin_39576336
实验六多cache一致性——监听协议
经过这么多篇文章的介绍,我们应该已经对Cache有一个比较清晰的认识。Cache会面临哪些问题,我们该怎么处理这些问题。现在我们讨论多核Cache一致性问题。在摩尔定律不太适用的今天,人们试图增加CPU核数以提升系统整体性能。这类系统称之为多核系统(简称MP,Multi-Processor)。我们知道每个CPU都有一个私有的L1Cache(不细分iCache和dCache)。假设一个2核的系统,我
- CentOS 6 YUM源切换成国内yum源
longerxin2020
Linuxcentoslinux运维
由于CentOS6已于2020年11月进入EOL(EndofLife),官方软件源已不再提供更新,因此你可能会遇到`yummakecache`命令失败的问题。以下是解决该问题的详细步骤:###解决方案1.**备份原有yum源文件**```bashsudomv/etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.back
- Spring Boot--@PathVariable、@RequestParam、@RequestBody
m0_74823408
面试学习路线阿里巴巴springboot后端java
目录声明!!什么是RESTful?RESTful的基本原则无状态性(Stateless)统一接口(UniformInterface)分层系统(LayeredSystem)缓存(Cacheable)按需代码(CodeonDemand,可选)HTTP协议里面,四个表示操作方式的动词:@PathVariable@PathVariable映射URL绑定的占位符@PathVariable的参数基本用法多个路
- ARM嵌入式实时系统(RTOS) 中通过页表关闭DCACHE的方法
papaofdoudou
嵌入式系统内存管理armlinux
现在的嵌入式实时系统规模越来越大,很多在linux中使用的特性,例如虚拟内存管理,动态加载等功能也加入进来,进一步增加了RTOS开发的难度.在应用开发中,和cache相关的同步问题有两个,一个是flush操作,另一个是invalidate操作,有时候为了确认问题是否和cache同步有关,需要关闭dcache来验证.这里介绍一种经过验证过的通过页表项关闭DCACHE的实践。Cortex-A7中启用c
- 使用yolo训练自己的模型数据遇到的问题
次次皮
YOLO深度学习人工智能
1、报错:NolabelsfoundinD:\xxx\valid\labels.cache查找网上的文章大多都是说文件目录没按规定创建,但我检查了我的目录没问题,后来发现是labels文件夹里的txt文件和images文件夹的图片没有一一对应,对应好之后问题解决2、解决完上个问题之后还是不报上面的错了但还是FatalPythonerror:Aborted;Restartingkernel...检查
- linux 时间同步(阿里云ntp服务器)
小鸡,啄米
linuxpython运维
1、安装ntp服务root@localhost~]#yum-yinstallntp已加载插件:fastestmirror,langpacksLoadingmirrorspeedsfromcachedhostfile*base:mirrors.nju.edu.cn*centos-sclo-rh:mirrors.nju.edu.cn*centos-sclo-sclo:mirrors.huaweiclo
- java杨辉三角
3213213333332132
java基础
package com.algorithm;
/**
* @Description 杨辉三角
* @author FuJianyong
* 2015-1-22上午10:10:59
*/
public class YangHui {
public static void main(String[] args) {
//初始化二维数组长度
int[][] y
- 《大话重构》之大布局的辛酸历史
白糖_
重构
《大话重构》中提到“大布局你伤不起”,如果企图重构一个陈旧的大型系统是有非常大的风险,重构不是想象中那么简单。我目前所在公司正好对产品做了一次“大布局重构”,下面我就分享这个“大布局”项目经验给大家。
背景
公司专注于企业级管理产品软件,企业有大中小之分,在2000年初公司用JSP/Servlet开发了一套针对中
- 电驴链接在线视频播放源码
dubinwei
源码电驴播放器视频ed2k
本项目是个搜索电驴(ed2k)链接的应用,借助于磁力视频播放器(官网:
http://loveandroid.duapp.com/ 开放平台),可以实现在线播放视频,也可以用迅雷或者其他下载工具下载。
项目源码:
http://git.oschina.net/svo/Emule,动态更新。也可从附件中下载。
项目源码依赖于两个库项目,库项目一链接:
http://git.oschina.
- Javascript中函数的toString()方法
周凡杨
JavaScriptjstoStringfunctionobject
简述
The toString() method returns a string representing the source code of the function.
简译之,Javascript的toString()方法返回一个代表函数源代码的字符串。
句法
function.
- struts处理自定义异常
g21121
struts
很多时候我们会用到自定义异常来表示特定的错误情况,自定义异常比较简单,只要分清是运行时异常还是非运行时异常即可,运行时异常不需要捕获,继承自RuntimeException,是由容器自己抛出,例如空指针异常。
非运行时异常继承自Exception,在抛出后需要捕获,例如文件未找到异常。
此处我们用的是非运行时异常,首先定义一个异常LoginException:
/**
* 类描述:登录相
- Linux中find常见用法示例
510888780
linux
Linux中find常见用法示例
·find path -option [ -print ] [ -exec -ok command ] {} \;
find命令的参数;
- SpringMVC的各种参数绑定方式
Harry642
springMVC绑定表单
1. 基本数据类型(以int为例,其他类似):
Controller代码:
@RequestMapping("saysth.do")
public void test(int count) {
}
表单代码:
<form action="saysth.do" method="post&q
- Java 获取Oracle ROWID
aijuans
javaoracle
A ROWID is an identification tag unique for each row of an Oracle Database table. The ROWID can be thought of as a virtual column, containing the ID for each row.
The oracle.sql.ROWID class i
- java获取方法的参数名
antlove
javajdkparametermethodreflect
reflect.ClassInformationUtil.java
package reflect;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.Modifier;
import javassist.bytecode.CodeAtt
- JAVA正则表达式匹配 查找 替换 提取操作
百合不是茶
java正则表达式替换提取查找
正则表达式的查找;主要是用到String类中的split();
String str;
str.split();方法中传入按照什么规则截取,返回一个String数组
常见的截取规则:
str.split("\\.")按照.来截取
str.
- Java中equals()与hashCode()方法详解
bijian1013
javasetequals()hashCode()
一.equals()方法详解
equals()方法在object类中定义如下:
public boolean equals(Object obj) {
return (this == obj);
}
很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、I
- 精通Oracle10编程SQL(4)使用SQL语句
bijian1013
oracle数据库plsql
--工资级别表
create table SALGRADE
(
GRADE NUMBER(10),
LOSAL NUMBER(10,2),
HISAL NUMBER(10,2)
)
insert into SALGRADE values(1,0,100);
insert into SALGRADE values(2,100,200);
inser
- 【Nginx二】Nginx作为静态文件HTTP服务器
bit1129
HTTP服务器
Nginx作为静态文件HTTP服务器
在本地系统中创建/data/www目录,存放html文件(包括index.html)
创建/data/images目录,存放imags图片
在主配置文件中添加http指令
http {
server {
listen 80;
server_name
- kafka获得最新partition offset
blackproof
kafkapartitionoffset最新
kafka获得partition下标,需要用到kafka的simpleconsumer
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.
- centos 7安装docker两种方式
ronin47
第一种是采用yum 方式
yum install -y docker
 
- java-60-在O(1)时间删除链表结点
bylijinnan
java
public class DeleteNode_O1_Time {
/**
* Q 60 在O(1)时间删除链表结点
* 给定链表的头指针和一个结点指针(!!),在O(1)时间删除该结点
*
* Assume the list is:
* head->...->nodeToDelete->mNode->nNode->..
- nginx利用proxy_cache来缓存文件
cfyme
cache
user zhangy users;
worker_processes 10;
error_log /var/vlogs/nginx_error.log crit;
pid /var/vlogs/nginx.pid;
#Specifies the value for ma
- [JWFD开源工作流]JWFD嵌入式语法分析器负号的使用问题
comsci
嵌入式
假如我们需要用JWFD的语法分析模块定义一个带负号的方程式,直接在方程式之前添加负号是不正确的,而必须这样做:
string str01 = "a=3.14;b=2.71;c=0;c-((a*a)+(b*b))"
定义一个0整数c,然后用这个整数c去
- 如何集成支付宝官方文档
dai_lm
android
官方文档下载地址
https://b.alipay.com/order/productDetail.htm?productId=2012120700377310&tabId=4#ps-tabinfo-hash
集成的必要条件
1. 需要有自己的Server接收支付宝的消息
2. 需要先制作app,然后提交支付宝审核,通过后才能集成
调试的时候估计会真的扣款,请注意
- 应该在什么时候使用Hadoop
datamachine
hadoop
原帖地址:http://blog.chinaunix.net/uid-301743-id-3925358.html
存档,某些观点与我不谋而合,过度技术化不可取,且hadoop并非万能。
--------------------------------------------万能的分割线--------------------------------
有人问我,“你在大数据和Hado
- 在GridView中对于有外键的字段使用关联模型进行搜索和排序
dcj3sjt126com
yii
在GridView中使用关联模型进行搜索和排序
首先我们有两个模型它们直接有关联:
class Author extends CActiveRecord {
...
}
class Post extends CActiveRecord {
...
function relations() {
return array(
'
- 使用NSString 的格式化大全
dcj3sjt126com
Objective-C
格式定义The format specifiers supported by the NSString formatting methods and CFString formatting functions follow the IEEE printf specification; the specifiers are summarized in Table 1. Note that you c
- 使用activeX插件对象object滚动有重影
蕃薯耀
activeX插件滚动有重影
使用activeX插件对象object滚动有重影 <object style="width:0;" id="abc" classid="CLSID:D3E3970F-2927-9680-BBB4-5D0889909DF6" codebase="activex/OAX339.CAB#
- SpringMVC4零配置
hanqunfeng
springmvc4
基于Servlet3.0规范和SpringMVC4注解式配置方式,实现零xml配置,弄了个小demo,供交流讨论。
项目说明如下:
1.db.sql是项目中用到的表,数据库使用的是oracle11g
2.该项目使用mvn进行管理,私服为自搭建nexus,项目只用到一个第三方 jar,就是oracle的驱动;
3.默认项目为零配置启动,如果需要更改启动方式,请
- 《开源框架那点事儿16》:缓存相关代码的演变
j2eetop
开源框架
问题引入
上次我参与某个大型项目的优化工作,由于系统要求有比较高的TPS,因此就免不了要使用缓冲。
该项目中用的缓冲比较多,有MemCache,有Redis,有的还需要提供二级缓冲,也就是说应用服务器这层也可以设置一些缓冲。
当然去看相关实现代代码的时候,大致是下面的样子。
[java]
view plain
copy
print
?
public vo
- AngularJS浅析
kvhur
JavaScript
概念
AngularJS is a structural framework for dynamic web apps.
了解更多详情请见原文链接:http://www.gbtags.com/gb/share/5726.htm
Directive
扩展html,给html添加声明语句,以便实现自己的需求。对于页面中html元素以ng为前缀的属性名称,ng是angular的命名空间
- 架构师之jdk的bug排查(一)---------------split的点号陷阱
nannan408
split
1.前言.
jdk1.6的lang包的split方法是有bug的,它不能有效识别A.b.c这种类型,导致截取长度始终是0.而对于其他字符,则无此问题.不知道官方有没有修复这个bug.
2.代码
String[] paths = "object.object2.prop11".split("'");
System.ou
- 如何对10亿数据量级的mongoDB作高效的全表扫描
quentinXXZ
mongodb
本文链接:
http://quentinXXZ.iteye.com/blog/2149440
一、正常情况下,不应该有这种需求
首先,大家应该有个概念,标题中的这个问题,在大多情况下是一个伪命题,不应该被提出来。要知道,对于一般较大数据量的数据库,全表查询,这种操作一般情况下是不应该出现的,在做正常查询的时候,如果是范围查询,你至少应该要加上limit。
说一下,
- C语言算法之水仙花数
qiufeihu
c算法
/**
* 水仙花数
*/
#include <stdio.h>
#define N 10
int main()
{
int x,y,z;
for(x=1;x<=N;x++)
for(y=0;y<=N;y++)
for(z=0;z<=N;z++)
if(x*100+y*10+z == x*x*x
- JSP指令
wyzuomumu
jsp
jsp指令的一般语法格式: <%@ 指令名 属性 =”值 ” %>
常用的三种指令: page,include,taglib
page指令语法形式: <%@ page 属性 1=”值 1” 属性 2=”值 2”%>
include指令语法形式: <%@include file=”relative url”%> (jsp可以通过 include