数组复制效率
System.arraycopy > clone > Arrays.copyOf > for循环
web容器
作用:在Web应用程序中,负责将HTTP请求转换为HttpServletRequest对象
- 注:
Apache就是一个Http服务器,Tomcat是一个web容器,静态的html - Apache还可以处理,但是动态的需要转发给Tomcat去处理了,比如jsp页面,请求先经由Apache转发给Tomcat再由Tomcat解析请求
Java体系结构
1、Java程序设计语言
2、Java.class文件格式
3、Java应用编程接口(API)
4、Java虚拟机
- 注:四者关系
当我们编写并运行一个Java程序时,就同时运用了这四种技术,用Java程序设计语言编写源代码,把它编译成Java.class文件格式,然后再在Java虚拟机中运行class文件。当程序运行的时候,它通过调用class文件实现了Java API的方法来满足程序的Java API调用
volatile关键字 - 只用于修饰变量,不能修饰方法和类
1、每次从内存中取值,不从缓存中什么的拿值。这就保证了用 volatile修饰的共享变量,每次的更新对于其他线程都是可见的。
2、volatile保证了其他线程的立即可见性,就没有保证原子性。
3、由于有些时候对volatile的操作,不会被保存,说明不会造成阻塞。4、不可用与多线程环境下的计数器。
IO流细碎
1、Stream结果的都是字节流
2、处理流就是包装流
Histroy对象
1、length - 返回浏览器历史列表中的URL数量。
2、back() - 加载history列表中的前一个URL。
3、forward() - 加载history列表中的下一个URL。
4、go() - 加载到history列表中的某个具体页面。
Statement
1、Statement
2、PreparedStatement
3、CallableStatement
求长度
字符串:length()
数组:length
集合:size()
内部类修饰符
成员内部类:可以看成成员变量,可以有public,protected,public,static修饰
局部内部类:不能有public,protected,public、static修饰,但是可以被abstract和 final修饰
Arraylist扩容
Arraylist默认数组大小是10,扩容后的大小是扩容前的1.5倍。但是如果新创建的集合有带初始值,默认就是传入的大小,也就不会扩容
String
String s = new String(“xyz”);
如果常量池没有,就会在常量池创建一个xyz字符串,然后执行new,在堆中再创建一个字符串
如果常量池有,就会根据常量池中的xyz字符串,在堆中new一个新的字符串
关系
is-a - 继承关系
has-a - 从属关系
like-a - 组合关系
abstract class表示的是 is-a 关系
interface表示的是 like-a 关系
System.out.println()
System是java.lang中的一个类,out是System内的一个成员变量,这个变量是一个java.io.PrintStream类的对象,println呢就是一个方法
索引
组合索引(a, b, c),会建立三个索引, (a), (a, b), (a, b, c)
String、StringBuffer、StringBuilder运行速度
StringBuilder > StringBuffer > String
JVM内存
方法区、堆内存是线程共享的
程序计数器(PC寄存器)、虚拟机栈是线程隔离的
java concurrent包
Semaphore:类,控制某个资源可被同时访问的个数
ReentrantLock:类,具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大
Future:接口,表示异步计算的结果
CountDownLatch: 类,可以用来在一个线程中等待多个线程完成任务的类
ServletContext
getParameter():获取POST/GET传递的参数值
getInitParameter:获取Tomcat的server.xml中设置Context的初始化参数
getAttribute():获取对象容器中的数据值
getRequestDispatcher:请求转发
单例模式中,两个基本要点
1、唯一实例
2、构造函数私有
System
System.in:标准输入
System.out:标准输出
System.err:错误输出
System.exit():结束程序
匿名内部类
1、使用匿名内部类时,必须继承一个类或实现一个接口
2、匿名内部类由于没有名字,因此不能定义构造函数
3、匿名内部类中不能含有静态成员变量和静态方法
socket
- 服务器端
ServerSocket(int port)
创建一个serversocket,绑定在特定的端口 - 客户端
Socket(InetAddress address, int port)
创建一个socket流,连接到特定的端口和ip地址
Synchronized
修饰非静态方法:锁的是this对象
修饰静态方法:锁的是class对象
关键字
true、false、null都不是关键字
JDBC设计模式
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化
装饰模式:动态地给一个对象添加一些额外的职责,扩展功能
序列化
序列化的是对象,不是类,类变量不会被序列化
重载和重写
重载是根据形参的静态类型确定调用的方法版本
重写是根据调用者在运行期的实际类型来确定调用的方法版本
Synchronizd和Volatile的特性
Synchronized:原子性,有序性,可见性,
Volatile:有序性,可见性,不能保证原子性
ResultSet
第一列索引为1(从1开始)
用于并发编程的同步器
Semaphore
CyclicBarrier
CountDownLatch
char
String Character.toString(char c)
String String.valueOf(char c)
Java程序内存泄露的最直接表现
程序抛内存控制的Exception
线程安全的类
Stack、Hashtable、Vector
Java文件
Java中对于文本文件和二进制文件,都可以当作二进制文件进行操作