1、Collection 增加、遍历、删除:
public interface Collection
2、List:
public interface List
3、LinkedList——List——Collection:
public class LinkedList
extends AbstractSequentialList
implements List
4、ArrayList——List——Collection:
public class ArrayList
implements List
5、Set:
public interface Set
6、LinkedHashSet——HashSet——Set——Collection:
public class LinkedHashSet
extends HashSet
implements Set
public class HashSet
extends AbstractSet
implements Set
public abstract class AbstractSet
public abstract class AbstractCollection
7、TreeSet——SortedSet——Set:
public class TreeSet
implements NavigableSet
public interface NavigableSet
public interface SortedSet
8、Map:
9、HashMap——Map:
public class HashMap
implements Map
10、TreeMap——SortedMap——Map:
public class TreeMap
extends AbstractMap
implements NavigableMap
总结:即Vector增长原来的一倍, ArrayList增加原来的0.5倍。
一.历史原因:
Hashtable是基于陈旧的Dictionary类的, HashMap是Java1.2引进的Map接口的一个实现
二.同步性:
Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
三.值:
只有HashMap可以让你将空值作为一个表的条目的key或value
set:
Set里面不允许有重复的元素,所谓重复,即不能有两个相等(注意,不是仅仅是相同)的对象
Set集合的add方法有一个boolean的返回值,当集合含有与某个,元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。
Set取元素时,没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。
List:
add(Obj e)方法时,先来后到的顺序排序。
也可以插队,即调用add(int index,Obje)方法。
一个对象可以被反复存储进List中,每调用一次add方法,这个对象就被插入进集合中一次,其实,并不是把这个对象本身存储进了集合中,而是在集合中用一个索引变量指向这个对象。
List除了可以以Iterator接口取得所有的元素,再逐一遍历各个元素之外,还可以调用get(index i)来明确说明取第几个。
map:
put(obj key,objvalue),每次存储时,要存储一对key/value,不能存储重复的key,这个重复的规则也是按equals比较相等.
取则可以根据key获得相应的value,即get(Object key)返回值为key所对应的value。另外,也可以获得所有的key的结合,还可以获得所有的value的结合,还可以获得key和value组合成的Map.Entry对象的集合。
总结:List 以特定次序来持有元素,可有重复元素。 Set 无法拥有重复元素,内部排序。 Map保存key-value值, value可多值。
说出ArrayList,Vector, LinkedList的存储性能和特性ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。
Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差。
LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
LinkedList也是线程不安全的, LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用。
String:线程不安全—每次新建一个对象—频繁拼接不建议用
StringBuffer:线程安全—每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象——频繁操作字符串可考虑使用
StringBuilder:线程不安全—与StringBuilder方法差不多——但是效率高
新建(new)—就绪(start())—运行(执行run)—阻塞(sleep()\yield()\wait()\join())—消亡(正常结束\故障\异常)
调度分类:
分时模型:分一个时间片给你
抢占模型:高优先级执行(java支持的)
优先级:1——10 10级 普通优先级是5
1、继承Thread 2、实现Runnable接口 3、线程池创建
4、如何选取:
当你继承了一个类了,那只能用实现接口或则是线程池这种了嘛。
1、synchronized(对像){临界代码块} 共享变量是私有静态变量。
2、public synchronized int fun1(){方法块}
3、一个对象的互斥锁在某一时刻只能被一个线程拥有,但一个线程同一时刻可以拥有多个对象的互斥锁,拥有一个对象的互斥锁后才可以调用互斥方法。
1、wait()
2、notify \notifyAll()
详见:点击打开链接
3、JVM部分(GC、类加载机制、内存):
3、1GC:
3、2类加载机制:
3、3内存:点击打开链接
3、4执行:就是一个虚拟的计算机、处于JDK最底层,将.java文件执行以后的二进制文件.class文件翻译成具体平台的机器码去执行,实现了”一次编译到处运行的关键异步“。
详见:点击打开链接
1、构造方法:抽象可以有、接口不可以有
2、成员方法:
抽象类:可以有abstract的,也可以有一般的普通成员变量。
接口:只能是public abstract 的。
3、成员变量:
抽象类:private public protected 缺省都行 final static 任意。
接口:只能是public static final 。
4、单继承多实现:一个类已经继承了一个类,那只能拿接口来实现一下了。
1、时间复杂度:
2、链表、增、删、查、改:
点击打开链接
3、栈和队列:
5、堆:
6、串:
7、树遍历与二叉树性质、森林转化、哈夫曼树、哈夫曼编码:
8、图广度优先、深度优先、最小生成树(Kruskal、Prim):
9、查找:顺序查找、有序查找、分块查找
10、二叉排序树:插入、删除
11、B树插入、删除:
12、哈希表:哈希函数、各种方法
13、直接排序:直接插入排序、折半插入、表插入、希尔排序、
14、交换排序:冒泡排序、快速排序
15、选择排序:简单选择排序、树形选择排序、堆排
16、归并排序:
17、基数排序:多关键字排序、链式基数
1、1、1 request:
request.getParameter();获取参数
requet.getMethod():客户提交方式
request.getProtocol();使用的协议
request.getRequestURL():请求字符串客户端的地址
request.getRemoteAddr():客户端IP
request.getServerName():服务器主机名
request.getServerPort();服务器端口
request.getRemotoHost();客户端主机名
request.getHeader("host");获取协议定义头信息host
request.getHeader("user-agent");获取定义头信息user-agent
1、1、2 response
<%response.setHeader("refresh","10");%>自动刷新
<%response.setHeader("refresh","10;URL=index.jsp")%>页面跳转
<%response.sendRedirect("login.jsp")%>地址会变
1、1、3 out
1、1、4 session
1、生命周期:同一个浏览器各页面的跳转,服务器为每一个session对象其实是给了一个ID,且唯一,关闭浏览器就结束。
2、方法:get/setAttribute()/removeAttribute()/getCreateTime()/setMaxInactionInterval()/invalidate()
3、应用:传数据的时候使用
4、session ID唯一的保证:客户访问服务器上的JSP页面时,JSP容器会自动创建一个session对象,并为其分配一个唯一的ID,然后JSP容器还会将此ID传到客户端中保存下来,具体保存在cookie中。
5、JSP运行原理:JSP为每个客户启动一个线程,即JSP容器为每个线程分配不同的session对象,当客户同一WEB应用的其他页面,或则是从该服务器转到其他服务器在回来的时候,不会重建Session,直到客户关闭浏览器,服务器上的session才被撤销。
1、1、5 application
1、生命周期:一个WEB应用一个application,服务器关闭,application被销毁。
2、方法:
3、应用:存一些全局信息,一个网页被访问多少次
4、servletContext对象提供的服务:
1、1、6 page
1、1、7 pageContext
1、1、8 config
1、1、9 exception
其实,JSP就是一个Servlet。
(1)WEB容器JSP页面的访问请求时,它将把该访问请求交给JSP引擎去处理。Tomcat中的JSP引擎就是一个Servlet程序,它负责解释和执行JSP页面。
(2)每个JSP页面在第一次被访问时,JSP引擎先将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEB容器像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。
(3)Tomcat 5把为JSP页面创建的Servlet源文件和class类文件放置在“apache-tomcat-5.5.26\work\Catalina\localhost\<应用程序名>\”目录中,Tomcat将JSP页面翻译成的Servlet的包名为org.apache.jsp(即:apache-tomcat-5.5.26\work\Catalina\localhost\org\apache\jsp\文件下)
<%@ include file="url"%>先插入在编译
访问参数乱码:
<%String name=new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8")%>
表单提交信息乱码:
<%request.setCharacterEncoding("UTF-8")%>
详见:点击打开链接
详见:点击打开链接
详见:点击打开链接
详见:点击打开链接
1、电子文件安全管理系统
2、基于微信小程序的教学辅助软件
3、基于j2ee的互联网金融平台开发
1、期望
2、概率
OSI:
2、1将复杂的网络划分为更容易管理的层。
2、2较低层为较高层提供服务。
2、3更容易讨论学习每层具体的协议。
2、4层间有标准接口方便工程模块化。
2、5各层更好的互连。
2、6降低了复杂度,程序容易修改,开发产平更快。
更多详见点击打开链接
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
1、先判断是不是自己本身 2、再用instanceof判断对象是不是String类型的 3、然后比两个串的长度 4、值转成数组遍历一次判断每个字符是不是相同。
Runable:
@FunctionalInterface
public interface Runnable {
/**
* When an object implementing interface Runnable
is used
* to create a thread, starting the thread causes the object's
* run
method to be called in that separately executing
* thread.
*
* The general contract of the method run
is that it may
* take any action whatsoever.
*
* @see java.lang.Thread#run()
*/
public abstract void run();
}
Thread:实现了Runnalbe
2、1 目前多是偏java语言基础\设计模式\框架