线程局部变量是局限于线程内部的变量,属于线程的内部变量,不与其他线程互通;
封装,继承,多态
public calss Singleton{
private static Singleton instance = new Singleton();
private Singleton(){
//do something
}
public static Singleton getInstance(){
return Singleton;
}
}
Sleep方法 和Wait 方法两者都是暂停线程的方法,但是sleep 方法实际上是短暂停顿,他不会释放锁;而wait 方法意味着条件等待,因为只有这样其他等待线程才能在满足条件时获取到锁;
不可变对象指对象一旦被创建,状态就不能再改编。任何修改都会创建一个新的对象;例如 String ,Integer及其他包装类型
可以,向下转型,但是不建议使用,会出现类型转换异常;
不是,其中涉及了读取变量值,增加,存储回内存。其中可能涉及多个线程
+=是隐式的将 加操作的结果强制类型转换为只有结果的类型。如果两个整型相加,如byte,short 或者 int,首先会将其提升为 int 类型,然后再进行加法操作。如果加法操作的结果比 a 的最大值要大,则 a + b 会出现编译错误;但是 a += b 不会,因为 a += b 会把 a,b都提升为 int 类型在进行强制类型转换
不可以,因为你不能在没有强制类型转换的前提下就酱一个 double的值 赋值给 long类型的变量,因为 double值的类型范围比 long类型范围更广,所以需要强转
Integer对象占用更多内存;Integer 是一个对象,需要储存对象的元数据,但是 int 是一个原始类型的数据;
可以 ,从java 7 开始 Switch case 就可以使用 字符串
不管是在 32位,还是64位,int类型的长度都是一个固定值,都是32位
可以通过检查系统属性 如 sun.arch.data.model 或者 os.arch
JRE 是表示 java运行时,是运行java 引用所必须的
JDK表示 java开发工具,是 java 程序的开发工具
JVM表示 java虚拟机,它的责任是运行 java应用
JIT代表即时翻译;
当通过 JAVA 命令启动 Java进程的时候,会为程序分配内存。内存的一部分会用于创建堆空间,当程序中创建对象的时候,就从空间中分配内存;
GC是JVM内部的一个进程,用于回收无效对象的内存用于将来的分配
不能
JVM中 堆 和 栈属于不同的内存区域,使用目的也不同;
栈用于保存方法帧 和 局部变量,而对象总是在堆上分配;
如果a , b 都是对象,那么 a == b 比较的是两个对象的引用,只有当 a和 b都指向堆中的同一个对象时,才返回 true ;
而a.equals(b) 则是进行逻辑比较。
final 用于修饰 变量,方法,类;如果final 用于修饰变量,意味着该变量的值在初始化之后不能改变;
finalize 方法 是对象被回收前调用的方法;
finaly 是关键字,用于try catch处理异常,无论怎样,finaly 都会执行;
list是一个有序集合,允许元素重复
set是一个无序集合
map 是独立合集,才用键值对应的方法来储存,键不能重复,值可以
ArrayList 底层的数据结构是 数据,支持随机访问;
LinkedList 底层结构是 数据结构书链表,使用下标访问元素
可以使用 Arrays.toString() 和 Arrays.deepToString()的方法来打印数组
双向链表
采用 红黑树 实现
最简单的 HashMap 允许出现一个 null Key;HashTable 则不可以
HashSet 内部采用 HashMap进行实现,所以 HashSet 不允许出现重复的Key,只允许有一个 null key;
正确的方法
Iterator itr = list.iterator();
while(itr.hasNext()){
if(判断条件){
itr.remove();
}
}
客户端发出 http 请求,web服务器将请求转发到 servlet 容器,servlet容器解析url并且根据 web.xml找到对应的 servlet,并将 request,response对象传递给找到的 servlet,servlet根据request 就可以知道是谁发出的请求,请求信息及 其他信息,当servlet处理完业务逻辑,将信息放入 response并响应回客户端
1.用户发起请求到前端控制器 (controller)
2.前端控制器找到具体的模型对象处理(Handler),并且在处理器映射器(HandlerMapping)中找到对象 (Model)
3.HandlerMapping返回执行链
4.前端处理器通过处理器适配器包装 Handler对象
5.处理业务逻辑
6.Handler 处理完业务逻辑,返回 ModelAndView 对象给前端控制器
7.视图解析器返回真正的视图对象(View)
8.前端控制器根据模型对象 和视图对象,进行视图渲染
9.渲染后的视图返回给用户,产生响应
1.一个进程是一个独立的运行环境,可以看做一个程序。线程则是进程的一个任务;比如QQ是一个进程,QQ的聊天窗口是一个线程;
2.在多线程中,多线程并发可以提高程序的效率,cpu不会因为某个线程等待资源而进入空闲状态,会把资源让给其他线程
3.用户线程是我们开发程序时创建的 线程,守护线程相当于 JVM虚拟机中的 GC,用于资源回收,给其他线程分配;
a.IOC 是Spring 的开源框架,而Spring 的核心是 IOC控制反转 和 AOP面向切面编程;
ROM对象关系映射机制;他是将标语表之间的操作映射成对象和对象之间的操作
内存:对Tomcat启动参数进行优化。在启动脚本中修改最大内存数;
并发连接数: 在Tomcat配置文件中 的 server.xml 中配置
缓存:打开压缩功能,修改参数
1.常用的请求方法,有 get,post
2.get和 post 的区别,get携带参数 和访问地址传送,用户可见 ,而Psot将字段和对应值封装在实体中传送,用户不可见
1.设置参数,既设置JVM的最大内存数
2.垃圾回收器的选择
乐观锁:在不确定表的情况下,利用业务的控制来解决并发问题
public class ExamTest {
public static void main(String[] args) {
String s1 = "Hello World" ;
String s2 = "Hello " + "World" ;
String temp1 = "Hello " ;
String temp2 = "World" ;
String s5 = temp1 + temp2 ;
boolean flag1 = s1 ==s2 ;
boolean flag2 = s1==s5 ;
System.out.println("flag1:"+flag1);
System.out.println("flag2:"+flag2);
}
}
打印结果: true|false
因为 flag1 中 s1 和 s2采用 的是 字符串比对,即 equals方法比对字符串;所以 结果 为 true
而flag2 中却 是在创建出了temp1 和temp2 这两个对象之后,再进行 和 s2 对象比对,所谓返回 false