-
数据类型
-
字符串
-
String str = "i"与 String str = new String(“i”)
内存分配不同,str=“i”,存于常量池,new是对象,存于堆。
- HashMap与HashTable
hashmap去掉了hashtable的contains方法,但是加上了conrainsValue()和containsKey()方法。
hashtable同步的,hashmap非同步的,效率上hashmap高。
hashmap允许空键值对,hashtanle不允许。
-
多线程创建
- 继承Thread类,重新run()
- 定义Runnable接口的实现类,重新run()
run()方法的返回值是void,
- 创建Callable接口的实现类,并实现call()
call()方法是有返回值的,返回值是泛型,和Future,FutureTask配合可以用来获取异步执行的结果。
-
线程池创建
- newFixedThreadPool(int nThreads)固定长度,当线程发生未预期的错误而结束时,线程池会补充一个新的线程。
- newCachedThreadPool()可缓存的线程池,若线程池规模超过了处理需求,自动回收空闲线程,当需求增加,自动添加新线程,线程池规模不受任何限制。
- newSingleThreadExecutor()单线程的Executor,他创建单个工作线程来执行任务,若线程异常结束,会创建一个新的线程代替,特定时确保任务在队列中顺序串行执行。
- newScheduledThreadPool(int corePoolSize)固定长度的线程池,而且以延迟或定时的方式来执行任务,类似于Timer。
-
死锁四个必要条件
- 互斥条件
- 请求和保持条件
- 不可剥夺条件
- 环路等待条件
-
synchronized
- 可保证方法或代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时还保证贡献变量的内存可见性,java每个对象都可作为锁,这是synchronized实现同步的基础;普通同步锁当前实例对象;静态同步方法锁当前类的class对象;同步方法块锁括号里的对象。
- synchronized与volatile
volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可访问该变量,其他线程被阻塞。
volatile仅能使用在变量级别:synchronized可使用在变量、方法和类级别
volatile仅能实现变量的修改可见性;不能保证原子性;synchronized可保证变量的修改可见性和原子性。
volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。
volatile编辑的变量不会被编译器优化;synchronized标记的变量可以被编译器优化。- synchronized与Lock
首先synchronized是java关键字,Lock是java类;
synchronized无法判断是否获取锁的状态;Lock可判断是否获取到锁;
synchronized会自动释放锁(a、线程执行完同步代码会释放锁b、线程执行过程中发生异常会释放锁)Lock需要在finally中手动释放(unlock())容易造成线程死锁。
synchronized锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平; -
jsp与servlet
jsp经编译后就变成了Servlet(jsp本质就是Servlet,JVM只能识别java类,不能识别jsp的代码,web容器将jsp的代码编译成jvm能够识别的java类。)
Servlet没有内置对象,jsp的内置对象都是必须通过HttpServletRequests对象,HttpServletResponse对象以及HttpServlet对象得到。 -
JSP
- 9个内置对象
- request:封装客户端的请求;
- response:封装服务器对客户的响应;
- pageContext通过该对象可获取其他对象;
- session:封装用户会话的对象;
- application:封装服务器运行环境的对象;
- out:输出服务器响应的输出流对象;
- config:Web应用的配置对象;
- page:JSP页面本身(相当于java的this);
- exception:封装页面抛出异常的对象;
-
4作用域
- page:与一个页面相关的对象和属性;
- request:与web客户端发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个web组件:需要在页面显示的临时数据可以置于此作用域;
- session:与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据影噶放在用户自己的session中。
- application:与整个web应用程序相关的对象和属性,它实质是跨越整个web应用程序,包括多个页面、请求和会话的一个全局作用域。
-
静态变量与实例变量的
- 静态变量tatic修饰又称类变量,是属于类的,不是属于对象的,不管一个类创建多少对象,静态变量在内存中有且只有一个拷贝;静态变量可以实现让多个对象共享内存。
- 实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问。