java零碎基础
HashMap VS Hashtable
HashMap 新,非线程安全,检查锁,快
Hashtable 旧 (JDK1.2版本以前),线程安全,检查锁,慢一点(差的很小) HashMap较常用
----------------------------------------------------------------------------------------------
一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等
-----------------------------------------------------------------------------------------------
集合复制,Java 默认的复制规则是浅表(浅层)复制 集合复制有2种方式:
1) clone() 方法 n clone()方法是Object定义的
2) 使用"复制构造器"
n Map map = new HashMap(); Map map2 = new HashMap(map);
n List list1 = new ArrayList(); List list2 = new LinkedList(list1);
---------------------------------------------------------------------------------------------------
. Collection 与 Collections *
面试可能会遇到的题目,Collection 和Collections 的区别是什么?
Collection 抽象的集合概念,实现它的有List和Set
Collections 集合静态工具类, 包含集合的工具方法,如sort()等
1.5. Map 的迭代 **
对key:value 进行迭代 map.entrySet();
对key进行迭代 map.keySet();
对value 进行迭代 map.values()
-------------------------------------------------------------------------------------------------
内部类
1) 根据位置的不同,Java 中的内部类分为四种:
n 静态内部类
u 使用static修饰,声明在类体中
u 静态内部类中可以访问外部类的静态成员
n 成员内部类
u 声明在类体中,不使用static,具有类的成员特征,也就是,必须有类的实例才能 创建内部类实例
u 内部类实例可以访问共享外部类的成员变量(很常用)
u 如:链表的节点就可以定义为内部类
n 局部内部类 把类声明在方法中,就是局部内部类,作用域
u 类似局部变量(很少见)
n 匿名内部类
u 匿名类,非常常见,可以写在任何地方,就像一般的语句
u 语法更象是创建对象:Date d = new Date(){//...};
u 匿名类是对原类的一个继承,同时创建了实例,{} 就是继承以后的类体 类体中可使用所有类的语法
u 匿名类不能写构造器
u 匿名类可以从抽象类或者接口继承,必须提供抽象方法的实现 2) 任何内部类都编译成独立的class 文件 3) 最大的作用:封装!
n 匿名类可以封装内部概念:情侣间的“土豆”和菜市场的“土豆”是不一样的
----------------------------------------------------------------------------------------------
GBK和UTF编码不兼容,编码转换的时候需要使用转换器
----------------------------------------------------------------------------------------------
Map对应统计比较有用
1.首先去除关键字key的统计值
2.统计值加+1
----------------------------------------------------------------------------------------------
对象的序列化和反序列化可以变相实现对象的深层复制
----------------------------------------------------------------------------------------------
Java 语言的优势之一就是线程处理较为简单。 一般操作系统都支持同时运行多个仸务,一个任务通常就是一个程序,每个运行中的程序被称为一 个进程,当一个程序运行时,内部可能包含多个顺序执行流,每个顺序执行流就是一个线程。
1) 程序 指令 + 数据的byte 序列,如: qq.exe
2) 进程 正在运行的程序, 是程序动态的执行过程(运行于内存中)
3) 线程 在进程内部,并发运程的过程(Java 中的方法可以看做线程)
4) 并发 进程是并发运行的,OS将时间划分为很多时间片段(时间片),尽可能均匀分配 给正在运行的程序,微观上迚程走走停停,宏观上都在运行,这种都运行的现象叨并发,但是不是绝对意义上的“同时发生
------------------------------------------------------------------------------------------------
后台线程就是守护线程
继承Thread 类(extends Thread)或者实现Runnable 接口(implements Runnable)
1) 继承Thread 类 n 实现步骤:
ü 继承Thread 类, 覆盖run()方法, 提供并发运程的过程
ü 创建这个类的实例
ü 使用start() 方法启劢线程
2) 实现Runnable 接口 n 实现步骤:
ü 实现Runnable 接口, 实现run()方法, 提供并发运程的过程
ü 创建这个类的实例, 用这个实例作为Thread 构造器参数,创建Thread 类
ü 使用start() 方法启劢线程
3) 使用内部类/匿名类创建线程 -------------------------------------》由于是匿名线程所以创建的时候就要马上运行。
ü Daemon 意为“精灵、守护神”
n “守护神”就像“影子”,后台线程(守护线程)相当于“影子”
ü Java 进程在全部前台线程结束时结束,而守护线程会被”提前杀掉“
1) 异步 并发, 各干自己的。如: 一群人上卡车
2) 同步 步调一致的处理。 如: 一群人上公交车
程序可以包含守护线程和非守护线程。当程序中所有的非守护线程结束后,程序结束。
* 守护线程在没有用户线程可服务时自动离开
* 在Java中比较特殊的线程是被称为守护(Daemon)线程的低级别线程。
* 这个线程具有最低的优先级,用于为系统中的其它对象和线程提供服务。
* 将一个用户线程设置为守护线程的方式是在线程对象创建之前调用线程对象的setDaemon方法。
* 典型的守护线程例子是JVM中的系统资源自动回收线程,
* 我们所熟悉的Java垃圾回收线程就是一个典型的守护线程,
* 当我们的程序中不再有任何运行中的Thread,
* 程序就不会再产生垃圾,垃圾回收器也就无事可做,
* 所以当垃圾回收线程是Java虚拟机上仅剩的线程时,Java虚拟机会自动离开。
* 它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。
* 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
* 也就是说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”。
* 那Java的守护线程是什么样子的呢。
* 当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;
* 如果还有一个或以上的非守护线程则JVM不会退出。
-------------------------------------------------------------------------------------------------
Java中同步的API *
1) StringBuffer 是同步的,synchronized append(); StringBuilder 不是同步的,append();
2) Vector 和 Hashtable 是同步的;ArrayList 和 HashMap 不是同步的
3) Collections.synchronizedList()
Collections.synchronizedMap()
ArrayList list = new ArrayList();
List syncList = Collections.synchronizedList(list);
--------------------------------------------------------------------------------------------------
javaAPI中提供了定时器功能用于到某时间的时候运行某一个任务
TimerTask 类用于定义计时器任务。通过覆盖或者匿名类的方式覆盖其中的run方法
Timer 提供了一个定时器功能类
--------------------------------------------------------------------------------------------------
编程步骤:
1) 创建ServerSocket实例绑定一个服务端口(Socket/套接字 端口号)
2) 开始ServerSocket实例的监听,等待客户端的连接
3) 如果有客户连接进来, 就获得了客户的套接字(Socket)实例 客户的套接字(Socket)实例中包括不客户端建立的连接流
4) 为这个客户(Socket) 创建一个服务线程,提供服务(run()方法)
5) 继续等待下一个连接, 返回到2) 6) 服务线程完成通讯服务过程
7) 端口号范围为:0~65535,但是1K 以下(0~1024)是留给系统使用的
--------------------------------------------------------------------------------------------------
在java中字符流Reader/Write 和字节流InputStream/OutputStream 是独立的
其中Reader有子类InputStreamReader 可以关联InputStrream类
---------------------------------------------------------------------------------------------------------------------------
XmlHttpRequest 对象的重要属性 **
1) onreadystatechange: 注册一个监听器(也就是,绑订一个事件处理函数)。
2) readyState: 返回该对象不服务器通讯的状态。
返回值是一个number 类型的值,不同的值表示的 含义如下:
0 (未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)。
1 (初始化) 对象已建立,尚未调用send 方法。
2 (发送数据) send 方法已调用。
3 (数据传送中) 已接收部分数据。
4 (响应结束)接收了所有的数据。
3) responseText: 获得服务器返回的文本。
4) responseXML: 获得服务器返回的XML dom对象。
5) status: 获得状态码
得到返回的status的值可以确定Ajax的运行结果
---------------------------------------------------------------------------------------------------------------------------
Jquery将dom对象转化成了Jquery对象 得到Jquery对象后我们就可以调用Jquery对象的方法
---------------------------------------------------------------------------------------------------
我们一般用的Session可以基于Cookies和Cookieless,前者是将身份标识放在Cookies里面,后者是跟在Url里作为get传递的参数..我们普遍用的前者
Cookies可以序列化,所以通过部分算法可以暂时性的将一些Cookies对象写到文件中暂时存储起来。
---------------------------------------------------------------------------------------------------
购物车的实现:
可以讲购物车的存放在sessin中,然后将部分物品存放到Cookies中。
--------------------------------------------------------------------------------------------------
当用户禁用Cookie 后,使用URL重写方式1(适用于链接、表单提交) response.encodeURL(String url); 继续使用session
---------------------------------------------------------------------------------------------------------------------------
HSSFWorkbook excel的文档对象
HSSFSheet excel的表单
HSSFRow excel的行
HSSFCell excel的格子单元
HSSFFont excel字体
HSSFDataFormat 日期格式 在poi1.7中才有以下2项:
HSSFHeader sheet头
HSSFFooter sheet尾(只有打印的时候才能看到效果)
和这个样式
HSSFCellStyle cell样式
辅助操作包括
HSSFDateUtil 日期
HSSFPrintSetup 打印
HSSFErrorConstants 错误信息表
---------------------------------------------------------------------------------------------------------------------------
1) servlet 线程安全问题产生的原因 在默认情况下,容器只会为每一个servlet类创建唯一的一个实例,当有多个请求到达容器, 就有可能有多个线程同时访问同一个实例。
2) 解决方式
a. 加锁(可以对整个service方法加锁,或者对代码块加锁,建议使用代码块加锁)。
b. 让servlet实现SingleThreadModle接口(丌建议使用) SingleThreadModel接口是一个标识接口(没有定义仸何的方法)。容器会为实现该接口 的servlet创建多个实例,即一个线程分配一个。这种方式创建了过多的servlet实例, 系统开销太多,丌建议使用。
c. servlet 的属性尽量设置成可读的,不要去修改。
---------------------------------------------------------------------------------------------------------------------------
EL表达式的范围是 pageContext、request、session、application
-------------------------------------------------------------------------------------------------------
每次向服务器发送请求后,发送后得到放回就会断开连接
-------------------------------------------------------------------------------------------------------
实时聊天一般用Socket和flex。使用AJAX对资源要求很大。很合适
-------------------------------------------------------------------------------------------------------
实现序列化就必须实现两个接口中的一个Serializable 或者Externalizable
实现Serializable 调用Io的ObjectInputStream/ObjectOutputStream序列化对象
实现Externalizable时候在实现的方法里面序列化属性
-------------------------------------------------------------------------------------------------------------
网络的编程实质就是I/O
-------------------------------------------------------------------------------------------------------------
注解是给反射用的
-------------------------------------------------------------------------------------------------------------
java的webservice
使用到的包是javax.jws下面的
使用@WebService注解注释提供的服务类,使用Endpoint类发布该服务。
SOAP是建立在http协议上面使用xml交流的协议。
-----------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------
.. 表示上一级目录
. 表示当前目录
---------------------------------------------------------------------------------------------------------------------------
屏幕剪辑的捕获时间: 2014/6/8 21:34
1.我们将类放在classpath中实质就是使用AppClassLoader。
2.如果将我们的类直接放入rt.jar
在装载类的时候。自己首先不装载,而是看上面的装载器能否装载。
这样的好处 避免声明一个变量和实例一个对象的时候加载了两个字节码。变量类型错误。
3.加载的时候使用了缓存。
---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------
父节点的值一定大于或等于子节点的值。堆被认为在计算机算法中起到重要作用,并被用于各种编程语言,例如c++、Java等中。
堆中存放的数据都是程序显式分配的,如果没有垃圾回收机制。就要自己手动回收
---------------------------------------------------------------------------------------------------------------------------
Final 意为终极的。
定义了类就不能被继承,定了方法就不能重写。定义了变量就不能再次赋值。
---------------------------------------------------------------------------------------------------------------------------
在每一个对象中,某些属性定义为静止序列化使用关键字transient
---------------------------------------------------------------------------------------------------------------------------
继承了Throwable类都可以使用throw关键字
---------------------------------------------------------------------------------------------------------------------------
Switch()
{
Case : …;break;
}
---------------------------------------------------------------------------------------------------------------------------
线程中等待和休眠的区别。
wait时候别的线程还是可以访问资源。
sleep时候资源别锁定。
---------------------------------------------------------------------------------------------------------------------------
Socket/ServerSocket 对应TCP编程
DatagramSocket 用于UDP编程
---------------------------------------------------------------------------------------------------------------------------
Jar 命令将class文件打包成jar包
---------------------------------------------------------------------------------------------------------------------------
javaWEB规范
javaWeb------
|resource源文件
|META-INF
|WEB_INF---
|Class 编译后的class文件
|lib加载的第三发jar包存放位置
〔 以 , WEB-INF " src="file:///C:\Users\WangKang\AppData\Local\Temp\msohtmlclip1\02\clip_image009.png">
eclipse的目录
---------------------------------------------------------------------------------------------------------------------------
一个类在继承另一个类的时候。必须调用继承类的构造方法。一般使用的时候。我们没有写类的构造方法的时候,默认的构造方法里面自己spuer()调用了父类的构造方法
---------------------------------------------------------------------------------------------------------------------------
内部类------------------|局部内部类 ----------------有效范围是{}
|成员内部类 --------------- |静态的
|非静态的-------------首先实例外部类的对象。然后对象.new 非静态类
---------------------------------------------------------------------------------------------------------------------------
默认使用double 如果float 需要人为的转换或者定义的时候在后面添加一个F
由于double或者float使用的精度过高,导致小数点最后的几位有很小的误差。
java的API提供了BigDecimal类
java中char占了两个字节,int占了四个字节
---------------------------------------------------------------------------------------------------------------------------
java虚拟机在开始运行的时候会初始化9个对象池。用来处理8个基本数据类型和String类型
---------------------------------------------------------------------------------------------------------------------------
使用java命令运行程序的时候可以输出、入参数
---------------------------------------------------------------------------------------------------------------------------
数组拷贝的时候使用System.arraycope()方法。数组使用的引用。类似对象。可以是用循环逐步复制值。
二维数组是不需要的定长的。
---------------------------------------------------------------------------------------------------------------------------
集合框架只能存放对象。之所能存放基本数据类型。那是因为自动转换趁了封装类型
Comparable和Comparator两个接口
前者的接口只有一个方法需要实现。表示比较器,然后输入比较器。对集合进行排序。后者是在对象的类中包含了比较器的实现。
---------------------------------------------------------------------------------------------------------------------------
在集合中Vector和ArrayList都是list接口的实现类。两者的区别是前者线程安全,后者效率高。
HashTable与HashMap的区别
1.前者是同步的。后者不能同步。
2.前者不允许null,后者允许。
3.后者使用的迭代器。
---------------------------------------------------------------------------------------------------------------------------
File 类提供了许多方法
文件I/O实质就是read()通过它把数据读到内存里面去,通过write()把数据写到文件中
中间存在一个过渡的byte数组做缓存
Stream I/O流
BufferedReader/BufferedWrite 字符流 字符的输出流可以使用PrintWriter
ObjectOutputStream/ObjectInputStream 对象的序列化和反序列化
---------------------------------------------------------------------------------------------------------------------------
多线程的好处,允许一个程序同时运行过个并发的指令流
线程之间能共享一些资源,进程就不能
一个类成为线程类有两种方式。1.实现Runnable接口 2.继承Thread类覆盖run方法
---------------------------------------------------------------------------------------------------------------------------
ThreadPoolExecutor对应线程池
---------------------------------------------------------------------------------------------------------------------------
java为每一个类,类中构造方法,变量,方法都创建了一个对象。通过反射我们就能动态的调用类,构造方法,变量或者方法
Class对象代表一个加载到虚拟机中的一个类,代表了类信息的映射
Class--------------| getDeclaredFiled()/getDeclaredFileds---------->Field对象
| getMethod()/getMethods()-----------------------》得到Method对象
|
---------------------------------------------------------------------------------------------------------------------------
HttpURLConnecation 访问网站
---------------------------------------------------------------------------------------------------------------------------
动态代理 使用了Proxy(类加载器,接口,代理实例)
代理实例使用了InvocationHandler 接口里面需要实现
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {}方法 第一个参数代理的方法实现对象 第二个拦截的方法 第三个方法的参数
通过 return method.invoke(被代理实例, 参数)返回一个代理后的对象
---------------------------------------------------------------------------------------------------------------------------
javaEE部分
在使用eclipse时候创建的servlet都是继承了HttpServlet然后覆盖一些方法。(加载--->初始化--->提供服务------>调用摧毁方法)
所有的servlet都实现了servlet接口,javaEE提供了实现类GenericServlet。对于http请求的Servlet我们直接集成HttpServlet。这个Servlet本质是继承
GenericServlet
---------------------------------------------------------------------------------------------------------------------------
如果get方式传递参数的时候,参数中包含中文字符和空格。中文和空格都会使用UTF8编译后发送
---------------------------------------------------------------------------------------------------------------------------
Forward和Redirect
客户端转发
RequestDispatcher requestDispatcher=request.getRequestDispatcher("url")
requestDispatcher.forward(request,response);
服务器端转发
Response.sendRedirect("资源的URL");
过滤器是在一种在请求或者响应响应之前拦截请求的拦截器
所有拦截器必须实现Filter接口,接口方法中的FilterChain 对象的doFilter方法就是放行拦截业务
---------------------------------------------------------------------------------------------------------------------------
Web应用中Request-->Session-->Application的范围依次增大
三个范围里可以设置和删除一些变量也会发生一些事件。
可以分别使用ServletRequestListener,HttpSessionListener,ServletContextListener三个接口来监听三个对象创建和摧毁时候时候的事件
---------------------------------------------------------------------------------------------------------------------------
jsp在第一次访问的时候会转换和编译
----------------------------------------------------------------------------------------------------------------------------------------------------
Configuration------>SessionFactory------->Sesssion-->Transaction/Query
实体存在以下几种状态:
1.瞬时态
2.持久态 有id
3.托管态 Session关闭,id有值。此时发生改变。也不会影响到数据库中对应的值。
HQL是一种面对对象的数据库语言
Select/update/delete………………from………….where……group by….having….order by…….asc/desc
----------------------------------------------------------------------------------------------------------------------------------------------------
Get()/Load()方法的区别
Get()是去数据库中取某一个数据,如果存在就返回。不存在就是返回null
Load()将指定主键的对象加载到内存中,如果不存在就直接异常
---------------------------------------------------------------------------------------------------------------------------------------------------
默认情况下BeanFactory产生的Bean都是单例
浙公网安备 33010602011771号