基础篇
基础篇
JDK 常用的包
java.lang: 这个是系统的基础类,比如 String
、Math
、Integer
、System
和 Thread
,提供常用功能。
java.io: 这里面是所有输入输出有关的类,比如文件操作等
java.net: 这里面是与网络有关的类,比如 URL
,URLConnection
等。
java.util : 这个是系统辅助类,特别是集合类 Collection
,List
,Map
等。
java.sql: 这个是数据库操作的类,Connection
, Statememt
,ResultSet
等
Get 和 Post 的区别
初级回答:
get
是从服务器上获取数据,post
是向服务器传送数据,get
传送的数据量较小,不能大于 2KB。post
传送的数据量较大,一般被默认为不get
安全性非常低,post
安全性较高。但是执行效率却比Post
方法好。- 在进行文件上传时只能使用
post
而不能是get
。
中级回答:【推荐】
get
是从服务器上获取数据,post 是向服务器传送数据。- get 是把参数数据队列加到提交表单的
ACTION
属性所指的URL
中,值和表单内各个字段一一对应,在URL
中可以看到。post
是通过HTTP post
机制,将表单内各个 字段与其内容放置在HTML HEADER
内一起传送到ACTION
属性所指的URL
地址。用户看不到这个过程。 - 对于
get
方式,服务器端用Request.QueryString
获取变量的值,对于post
方式,服务器端用Request.Form
获取提交的数据 get
传送的数据量较小,不能大于 2KB。post
传送的数据量较大,一般被默认为不受限制。但理论上,IIS4
中最大量为 80KB,IIS5
中为 100KB。get
安全性非常低,post
安全性较高get
传递参数的时候【有时候】服务端获取的参数不会乱码,而post
不会,get
请求参数是通过URL
传递的,浏览器默认的会对中文进行gbk
编码(URL
中如果含有中文等非ASCII
字符,则浏览器会对它们进行URLEncode
Java 多态的具体体现
面向对象编程有四个特征:抽象,封装,继承,多态。
多态有四种体现形式:
- 接口和接口的继承
- 类和类的继承
- 重载
- 重写
其中重载和重写为核心:
重载:重载发生在同一个类中,在该类中如果存在多个同名方法,但是方法的参数类型和个数不一样,那么说明该方法被重载了。
重写:重写发生在子类继承父类的关系中,父类中的方法被子类继承,方法名,返回值类型,参数完全一样,但是方法体不一样,那么说明父类中的该方法被子类重写了。
StringBuffer StringBuilder String 区别
类型 | 底层 | 可变性 | 安全性 | 拼接方式 |
---|---|---|---|---|
String | 字符串常量 | 不可变 | 线程安全 | 使用字符串拼接时是不同的 2 个空间 |
StringBuffer | 字符串变量 | 可变 | 线程安全 | 字符串拼接直接在字符串后追加 |
StringBuilder | 字符串变量 | 可变 | 非线程安全 | 字符串拼接直接在字符串后追加 |
StringBuilder
执行效率高于StringBuffer
高于String
String
是一个常量,是不可变的,所以对于每一次+=赋值都会创建一个新的对象,StringBuffer
和StringBuilder
都是可变的,当进行字符串拼接时采用append
方法,在原来的基础上进行追加,所以性能比String
要高,又因为StringBuffer
是线程安全的而StringBuilder
是线程非安全的,所以StringBuilder
的效率高于StringBuffer
- 对于大数据量的字符串的拼接,采用
StringBuffer
,StringBuilder
Hashtable 与 HashMap 的区别
HashMap
不是线程安全的,HashTable
是线程安全。
HashMap
允许空(null
)的键和值(key
),HashTable
则不允许。
HashMap
性能优于Hashtable
。
Map
是一个以键值对存储的接口。Map
下有两个具体的实现,分别是HashMap
和HashTable
HashMap
是线程非安全的,HashTable
是线程安全的,所以HashMap
的效率高于HashTable
HashMap
允许键或值为空,而HashTable
不允许键或值为空
九大隐式对象
输入/输出对象: request
、response
、out
作用域通信对象: session
、application
、pageContext
Servlet 对象: page
、config
错误对象: exception
Forword(请求转发)与 Redirect(重定向)
- 从数据共享上
Forword
是一个请求的延续,可以共享request
的数据Redirect
开启一个新的请求,不可以共享request
的数据
- 从地址栏
Forword
转发地址栏不发生变化Redirect
转发地址栏发生变化
JQurey 总结
jquery
是一个轻量级的 js
框架,具有跨浏览器的特性,兼容性好,并且封装了很多工具,方便使用。
常用的有: 选择器 ,dom
操作 ,ajax
(ajax
不能跨域) ,特效,工具类
XML 和 Json 的特点
Xml 特点:
- 有且只有一个根节点;
- 数据传输的载体
- 所有的标签都需要自定义
- 是纯文本文件
Json(JavaScript Object Notation)特点:
json
对象(就是在{}中存储键值对,键和值之间用冒号分隔, 键 值 对之间用逗号分隔)json
数组(就是[]中存储多个json
对象,json
对象之间用逗号分隔)(两者间可以进行相互嵌套)数据传输的载体之一
区别:
传输同样格式的数据,xml 需要使用更多的字符进行描述,流行的是基于 json 的数据传输,xml 的层次结构比 json 更清晰
共同点:
xml 和 json 都是数据传输的载体,并且具有跨平台跨语言的特性。
Page 和 PageContext 的区别
Page
是 servlet
对象;使用 this
关键字,它的作用范围是在同一页面。PageContext
是作用域通信对象;通常使用setAttribute()
和 getAttribute()
来设置和获取存放对象的值。
JSP9 大隐视对象中四个作用域的大小与作用范围
四个作用域从大到小:appliaction
> session
> request
> page
作用域 | 范围 |
---|---|
application | 全局作用范围,整个应用程序共享.生命周期为:应用程序启动到停止 |
session | 会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记 住这个会话状态 |
request | 请求作用域,就是客户端的一次请求 |
page | 一个 JSP 页面 |
以上作用范围使越来越小, request
和 page
的生命周期都是短暂的,他们之间的区别就是:一个 request
可以包含多个 page
页(include
,forward
)
List,Set,Collection,Collections
List
和Set
都是接口,他们都继承于接口Collection
,List
是一个有序的可重复的集合,而Set
的无序的不可重复的集合。Collection
是集合的顶层接口,Collections
是一个封装了众多关于集合操作的静态方法的工具类,因为构造方法是私有的,所以不能实例化。List
接口实现类有ArrayList
,LinkedList
,Vector
。ArrayList
和Vector
是基于数组实现的,所以查询的时候速度快,而在进行增加和删除的时候速度较慢LinkedList
是基于链式存储结构,所以在进行查询的时候速度较慢但在进行增加和删除的时候速度较快。又因为Vector
是线程安全的,所以他和ArrayList
相比而言,查询效率要低。
java 的基本数据类型
数据类型 | 大小 |
---|---|
byte(字节) | 1(8 位) |
shot(短整型) | 2(16 位) |
int(整型) | 4(32 位) |
long(长整型) | 8(32 位) |
float(浮点型) | 4(32 位) |
double(双精度) | 8(64 位) |
char(字符型) | 2(16 位) |
boolean(布尔型) | 1 位 |
附加:
- String 是基本数据类型吗?(String 不是基本数据类型)
- String 的长度是多少,有限制?(长度受内存大小的影响)
UE 和 UI 的区别
UE 是用户体验度
UI 界面原型(用户界面)(相当于买房时用的模型)
设计 UI 的作用:
- 帮助程序员工作(界面已由美工设计完成)
- 提前让用户对项目有个宏观的了解,知道效果是什么样子。
osi 七层模型
第一层:物理层
第二层:数据链路层
第三层:网络层
第四层:传输层
第五层:会话层
第六层:表示层
第七层:应用层
线程和进程的区别
- 线程(Thread)与进程(Process)进程定义的是应用程序与应用程序之间的边界,通常来说一个进程就代表一个与之对应的应用程序。不同的进程之间不能共享代码和数据空间,而同一进程的不同线程可以共享代码和数据空间。
- .一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程
- 实现线程的两种方式:继承 Thread 类,实现 Runable 接口
jvm 的内存结构
java
虚拟机的内存结构分为堆(heap
)和栈(stack
),堆里面存放是对象实例也就是 new
出来的对象。栈里面存放的是基本数据类型以及引用数据类型的地址。
对于所谓的常量是存储在方法区的常量池里面
内存泄露和内存溢出
内存泄露 (memory leak
),是指应用程序在申请内存后,无法释放已经申请的内存空间.一次内存泄露危害可以忽略,但如果任其发展最终会导致内存溢出(out of memory
).如读取文件后流要进行及时的关闭以及对数据库连接的释放。
内存溢出(out of memory
)是指应用程序在申请内存时,没有足够的内存空间供其使用。如我们在项目中对于大批量数据的导入,采用分段批量提交的方式。
项目的生命周期
1.需求分析
2.概要设计
3.详细设计(用例图,流程图,类图)
4.数据库设计(powerdesigner)
5.代码开发(编写)
6.单元测试(junit 白盒测试)(开发人员)
svn 版本管理工具(提交,更新代码,文档)
7.集成测试 (黑盒测试,loadrunner(编写测试脚本)(高级测试))
8.上线试运行 (用户自己体验)
9.压力测试(loadrunner)
10.正式上线
11.维护
session 和 cookie 的区别
session
是存储在服务器端,cookie
是存储在客户端的,所以安全来讲 session
的安全性要比cookie
高,然后我们获取 session
里的信息是通过存放在会话 cookie
里的 sessionid
获取的。又由于 session
是存放在服务器的内存中,所以 session
里的东西不断增加会造成服务器的负担,所以会把很重要的信息存储在 session
中,而把一些次要东西存储在客户端的 cookie
里,然后 cookie
确切的说分为两大类分为会话 cookie
和持久化 cookie
,会话 cookie
确切的说是,存放在客户端浏览器的内存中,所以说他的生命周期和浏览器是一致的,浏览器关了会话cookie
也就消失了,然而持久化 cookie
是存放在客户端硬盘中,而持久化 cookie
的生命周期就是我们在设置 cookie
时候设置的那个保存时间,然后我们考虑一问题当浏览器关闭时session
会不会丢失,从上面叙述分析 session
的信息是通过会话 cookie
的 sessionid
获取的,当浏览器关闭的时候会话 cookie
消失所以我们的 sessionid
也就消失了,但是 session
的信息还存在服务器端,这时我们只是查不到所谓的 session
但它并不是不存在。那么,session
在什么情况下丢失,就是在服务器关闭的时候,或者是 session
过期(默认时间是 30 分钟),再或 者 调 用 了 invalidate()
的 或 者 是 我 们 想 要 session
中 的 某 一 条 数 据 消 失 调 用session.removeAttribute()
方法,然后 session
在什么时候被创建呢,确切的说是通过调用getsession()
来创建,这就是 session
与 cookie
的区别.
访问 HTML
页面是不会创建 session
,但是访问 index.JSP
时会创建 session
(JSP
实际上是一个 Servlet
, Servlet
中有 getSession
方法)
1、数据存放位置不同:
cookie是存储在客户端的,session是存储在服务器端。
2、安全程度不同:
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
3、性能使用程度不同:
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
4、数据存储大小不同:
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储与服务端,浏览器对其没有限制。
5、会话机制不同
session会话机制:session会话机制是一种服务器端机制,它使用类似于哈希表(可能还有哈希表)的结构来保存信息。
cookies会话机制:cookie是服务器存储在本地计算机上的小块文本,并随每个请求发送到同一服务器。 Web服务器使用HTTP标头将cookie发送到客户端。在客户端终端,浏览器解析cookie并将其保存为本地文件,该文件自动将来自同一服务器的任何请求绑定到这些cookie。