- 字节跳动资深面试官亲述:15个经典面试问题及回答思路,知乎上转疯了!
左夜天
程序员android
前言这是“拔剑金九银十”的第二篇文章,本文主要针对3年以上的Android开发者进阶面试中高级开发工程师而整理。希望可以对你们有所帮助。不多废话,进入正题。目录:Java中高级计算机网络Android高级面试—性能优化Android优秀第三方库Androidframework相关其他Android高频面试题阿里P7薪资待遇**阿里薪资结构:**一般是12+1+3=16薪•年底的奖金为0-6个月薪资
- Android高级面试题汇总——Android篇(1)
oO樱花祭LI
Android面试
(一)Android基础知识点1、四大组件是什么Activity,Service,ContentProvider,BroadcastReceiver2、四大组件的生命周期和简单用法Activity的生命周期:onCreate()->onStart()->onResume()->onPause()->onStop()->onRestart()->onDestroy()用法:创建一个Intent对象,
- 2024年Android高级面试题总结(附答案解析)
2401_84519907
程序员android
9.简述jvm中默认的classLoader与功能10.switch语句后的控制表达式只能是short、char、int、long整数类型和枚举类型,不能是float,double和boolean类型。String类型是java7开始支持11.重写的特性12.!=和==,当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同,比较内存地址13.null可以被强制类型转换成任
- Jetpack系列(十) — 测试 ,2021Android高级面试题总结
m0_61408726
Androidandroid面试java移动开发
```Room测试在androidTest文件夹下新建测试类```@RunWith(AndroidJUnit4::class)classWordDaoTest{privatelateinitvardatabase:AppDataBaseprivatelateinitvarwordDao:WordDaoprivatevalword1=Word("hello")privatevalword2=Word
- android高级ui01-自定义view-
亢正
学习笔记,整理中摘要面1、layoutparams:xml的属性转换为java用的格式2、面必问:measurespec------------------------------------主要讲自定义viewgroup,viewpager1、所有的xml解析都在layoutinflater里面2、自定义view至少3个构造函数,javanewview调用;xml反射调用;不同主题调用;自定义属
- 深度剖析原理!Android高级工程师面试实战,文末领取面试资料
左夜天
程序员android
Android开发前景怎么样?很多人说Android开发前景越来越差了我觉得这个回答是片面的首先Android应用开发前景差是在最近两年出现的,也就是从2018开始,从那时起移动端的程序员已经慢慢出现供大于求的局面,本人作为移动端开发,深知这一点。然而也必须说明一点,不论是Android开发还是iOS开发,虽然都出现了相关的程序员供大于求的情况,但市场仍然是有需求的,特别是对资深的开发人员及拥有相
- Android高级工程师面试题-字节跳动,含BATJM大厂
Java范德萨
程序员android移动开发面试
其实如果你技术深度足够,大必不用为就业而忧愁。每个行业何尝不是这样,最开始的风口,到慢慢的成熟。Android初级在2020年的日子里风光不再,靠会四大组件就能够获取到满意薪资的时代一去不复返。**经过一波一波的淘汰与洗牌,剩下的都是技术的金子。就像大浪褪去,裸泳的会慢慢上岸。**而真正坚持下来的一定会取得不错成绩。毕竟Android市场是如此之大。从Android高级的蓬勃的就业岗位需求来看,能
- [Android高级动画] 如何让箭头按圆形旋转?
小米Metre
用Android动画,如何让一个箭头按圆形旋转?arrowlikethis:arrow.png最终效果图:效果图一、分析1、两个关键值箭头按圆形旋转,需要两个关键值,一个是圆形坐标,一个是对应圆形坐标位置的角度。圆形坐标:用来实现箭头移动坐标点的角度:用来改变箭头的方向2、两个关键APIa、实现箭头移动和旋转可以使用:Matrix类postTranslate和postRotate方法。b、获取圆坐
- Android高级目录及网络大神的笔记
wayne777
网络大神笔记:https://github.com/BlackZhangJX/Android-Notesjava、Android、高级开发技术、跨平台Hybrid开发一、java基础(一)java基础面试知识点java中==和equals和hashCode的区别int、char、long各占多少字节数int与integer的区别探探对java多态的理解String、StringBuffer、Str
- Android高级混淆和代码保护技术
郭某人1
本文有两部分内容,一部分讲混淆,一部分介绍一些混淆之下的安全手段。基准原则都是:在保证不麻烦到自身以及能够正常阅读异常日志的前提下,尽可能提高混淆强度和保护代码安全。混淆Android官方集成了Proguard以供我们进行代码混淆工作,关于Proguard你可以搜索到各种它的rules解释,这些文章千篇一律,因此我不再赘述,只说一些特别的有用的技巧:一般情况下,Android的gradle中都会默
- Android高级应用开发详解笔记(约束布局ConstraintLayout保姆级)22.1.28 | CSDN创作打卡
莫白媛
android高级应用开发回顾android开发小练习android高级开发笔记androiduijava
回顾:(1)UI控件(UserInterface)TextView\EditText\Button\ImageView\RadioButton\RadioGroup\ImageButton\DatePicker\TimePicker\ScrollView\ListView\GridView\RecycleView\Spinner(2)Layout(布局)LinearLayout\RelativeL
- Android高级-阿里VLayout使用和原理分析
芒果_BJ
VLayout概念定义:VLayout全程VirtuaLayout,它是一个针对RecyclerView的LayoutManager扩展,主要提供一整套布局方案和布局间的组件复用的问题。由阿里团队开发,已经运用在手机淘宝项目上。2017年3月份开源。它通过定制化的LayoutManager,接管整个RecyclerView布局逻辑。使用:implementation'com.alibaba.and
- 【Android - 技术期刊】第006期
Kevin-K先森
Android技术期刊android
技术文章记一次Android线上OOM的排查过程Android高级开发进阶图谱低功耗蓝牙开发之建立连接iBeacon参数把Compose、MVI新技术合起来,快速实现一个玩AndroidApp如何从提升树Estimator迁移到TensorFlow决策森林Android容易遗漏的刷新小细节TargetsdkVersion升级31(Android12)适配Android系统广播(Broadcast)
- Android中高级面试题合集,含答案
Android小安
笔记移动开发Android面试Android学习路线程序员安卓面试
面试的时候总会遇到一些各种各样的面试题,而且这些面试题很多都是关于平时容易疏忽的理论方面的,所以整理一份Android高级开发工程师面试集锦,对照这些问题进行复习,将会事半功倍。从基础到中级在高级,从Android到java,记录下来有需要的时候多复习复习,也希望能帮到有需要的你。Android部分1、Activity生命周期?2、Service生命周期?3、Activity的启动过程4、Broa
- Android插件化(一)-如何加载插件的类
烧伤的火柴
介绍插件化技术可以说是Android高级工程师所必须具备的技能之一。学习这项技术是关心背后技术实现的原理,但是在项目中能不用就不用,因为插件化的做法Google本身是不推荐的。插件化技术最初是源于免安装运行apk的想法,这个免安装的apk我们称之为插件,而支持插件的APP我们称为宿主。所以插件化开发就是将整个APP拆分成很多模块,这些模块包括一个宿主和多个插件,每个模块都是一个apk,最终发版的时
- JetPack初体验,掌握了这些Android高级工程师必备知识
Goog高工
程序员移动开发android面试
Room:官方的ORM库(个人认为比GreenDao好用)ViewModel/LiveData:生命周期管理工具,自此Android才真正的应用上了MVVM(BTW,DataBinding也归到了JetPack里)在2018年,AndroidX横空出世,并且从1开始,意图取代经常自己打自己脸的SupportLib。一张图来看看Google对JetPack有多看重那JetPack到底是啥呢?Jetp
- 1 【Android高级开发必备技能】注解
享阅工作室
Android高级面试必备android高级面试必备注解
Java注解是JDK5.0引入的注释机制,可以被使用在类,方法,参数等地方中,并且可以通过Java的反射机制获取注解中的内容,注解相当于标签,可以标识方法,类或属性具有某些特征,在编译器生成的类文件时,可以被嵌入到字节码中。另外用户可以自定义注解,完成定制化的开发,尤其是在利用springboot进行项目开发时,我们会经常使用注解管理spring容器的bean,从而大大提高了开发的效率。1.1基本
- 腾讯面试Android高级岗,居然被一个多线程基础面倒了?
Android高级开发
前言一个在深圳从事开发五年的老友一个月前从原公司辞职后,昨天去腾讯总部面试Android高级岗,一面的时候,自我介绍后,陆陆续续问了很多问题,有着五年的从业经验很多项目开发的技术问题都回答的很通顺,面试官也很满意,就在最后以为自己要顺利通过时,【多线程——进程线程】,一个基础问题一时没有答上来就失去了二面的机会!image.png在我的身边不止发生了这一个大厂面试被拒的例子,所以从他们的身上我有总
- android 代码保护 高级混淆
yue31313
Android高级混淆和代码保护技术---------有了代码混淆还不够,我们需要更多技巧来保护我们的代码,特别是对于需要做混淆但又需要暴露许多API的SDK开发者来说。混淆是基础,代码安全是意识。首先我们要知道我们混淆代码是如何被攻破的,其实对于反编译者来说,最简单的入手点就是字符串搜索,我们硬编码留在代码里的字符串值都会在反编译过程中被原样恢复,因此这是我们首要关注对象。避免被通过字符串攻破,
- 2021Android高级面试题总结,最全的BAT大厂面试题整理
m0_53537576
程序员android
前言金九银十面试季,相信大家肯定急需一套Android面试宝典,今天小编就给大家准备了我珍藏已久的Android高阶面试宝典,一份超级详细的Android面试必备知识点,供大家学习!想必每一个安卓程序员都有追求大厂的决心,但是想要进入大厂,我们需要掌握哪些知识点呢?这里,我为大家梳理了一个整体的知识架构。整体包括Java、Android、算法、网络等。希望大家阅读之后,能帮助大家完善与整理自己的知
- 年末最新整理:阿里、腾讯,android高级开发及实践课后答案
k186____5189
程序员面试移动开发android
(27)什么是双亲委托机制,为什么需要双亲委托机制?(28)描述JVM类加载过程。(29)动态代理是什么?如何实现?(30)动态代理的方法怎么初始化的?(字节跳动)(31)CGLIB动态代理(字节跳动)(32)说说反射的应用场景,哪些框架,原理是什么?(33)Java泛型的特点与优缺点,泛型擦除是怎么回事?(34)List能否转为List。(35)泛型super和extends的区别。a.说法2:
- Android高级开发面试,retrofit面试
A超喜欢你
Android经验分享面试开发语言
前言这里整理的是一些与技术没有直接关系的面试题,但是能够考察你的综合水平,所以不要以为不是技术问题,就不看,往往有时候就是这样一些细节的题目被忽视,而错过了一次次面试机会。想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样。独立开发过几个产品,说一下自己的见解基本上有完整经历过一个产品的开发过程都应该清楚UI层是应用开发中最常变的一部分,app开
- Android高级工程师技能知识储备
Android725
互联网程序员移动开发Android学习
一、前言从16年毕业至今,就职过两家公司,大大小小项目做了几个,非常感谢我的两位老大,在我的android成长路上给予我很多指导,亦师亦友的关系。从年前至今参加面试了很多公司,也收到了几家巨头的offer,还有其他公司的。总结下经验,也是对过去的一个回顾和总结吧。一、简历网上有很多对程序员简历的一些指导,这里就不重述,大家可以搜下网上其他大神的总结,结合自身情况修改下。我有几点建议:1.尽量不要花
- Android高级实践分享
峰哥的Android进阶之路
android
以下是我学习过程中,觉得比较好的Android进阶高级实践,分享给大家,可能有些东西差异化比较大了,但是我也想经过这些实践,踩踩坑。Android进阶之旅:https://www.jianshu.com/p/c0ec2a7fc26aAndroid自定义view进阶:Android进阶之旅-自定义View篇-简书
- Android 彻底掌握 Handler 看这里就够了,大厂Android高级多套面试专题整理集合
m0_66145114
程序员架构移动开发android
prepare方法在一个线程中只能被调用1次;Looper的构造方法在一个线程中只能被调用1次;MessageQueue在一个线程中只会被初始化1次。结论:也就是说UI线程中只会存在1个MessageQueue对象,后续我们通过Handler发送的消息都会被发送到这个MessageQueue中。Looper干啥的?总结Looper做的事情就是:不断从MessageQueue中取出Message,然
- 跪了!致Android高级工程师的一封信,分享PDF高清版
安卓小希
程序员Android
开头先说一下我大概的情况吧。渣本毕业,工作已经有快两年了,从高中就开始玩小破站。无论是学习还是日常放松都是在b站。大学主学的软件技术专业,所以,进大学校门那一刻起,去上海bilibili工作就在心里埋下了种子。在学校,专业学的挺好的,自己写过一些小项目,也参与过一些协会开发的项目。两年前刚毕业时候,b站也有校招,我当然满怀期待的参加了,但是并没有被录用。当时,挺失落的吧,当时也有想过放弃:我一个渣
- Android高级终端开发学习笔记(《疯狂Android讲义》第11章-第17章)
wyypersist
Java后端开发android移动开发
Android高级终端开发笔记2021/6/19下午13:34开始多媒体应用开发Android支持的音频格式有:MP3WAV3GP等。支持的视频格式有MP43GP等。多媒体数据既可以来自android应用的资源文件,也可以来自外部存储器上的文件,还可以是来自网络的文件流。android也提供了对摄像头麦克风的支持。11.1音频和视频的播放11.1.1android9增强的MediaPlayer使用
- Android高级面试题汇总
cao苗子
前言金三银四,很多同学心里大概都准备着年后找工作或者跳槽。最近有很多同学都在交流群里求大厂面试题。正好我电脑里面有这方面的整理,于是就发上来分享给大家。这些题目是网友去百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。主要分为以下几部分:(1)java面试题(2)Android面试题(3)高级开发技术面
- Jetpack Compose Slider,Android高级工程师进阶学习】
m0_61418216
Androidandroid移动开发
onValueChange进度改变的监听modifier修饰符enabled是否可用valueRange进度值的范围默认是0到1steps将进度条平分成(steps+1)段,比如分成2段。如果我们进度条在第一段之间拉,超过第一段的一半就自动到第一段,没超过一半就回退到开始位置。onValueChangeFinished进度改变完成的监听interactionSource可以处理状态的,比如按下的时
- 性能优化(10)-AndroidGodEye解析之帧率(fps)
ZJ_Rocky
主目录见:Android高级进阶知识(这是总目录索引)框架源码:AndroidGodEye 讲了这么多篇的性能优化,我们应该对性能优化有了一定的了解,今天我们就来讲讲这个开源的性能监测框架,让我们从应用的角度来分析性能问题。今天我们要讲的就是第一篇帧率,我们知道流畅度的衡量指标主要有三个:1.帧率FPS2.丢帧SF(Skippedframe)3.流畅度SM(SMoothness)这三个方面能整体反
- 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