java基础记录
1.“&”当两边的值不是boolean型值的时候,做位运算。比如,ox0f跟ox31取得最低4位的值ox01.
2.多重循环要用一个信号量对外层循环进行跳出,不要让外层循环空跑。
3.switch可作用于int,byte,short,char,枚举类型,字符串及其包装类型,byte,short,char可隐含转换为int,所以可以,long不可以。
4.short i = i +1 ,错误,short i +=1正确。
第一种运算自动提升类型为int,类型转换错误。
第二种jvm做了特殊处理。
5.char变量占两个字节,unicode也占两个字节。char是用来存unicode编码的,汉字也在unicode编码中,所以可以存储汉字。
但是unicode编码中没有的特殊汉字就不可以。
7. 2 << 3最高效计算2 *8的方法。
8.设计一个上百亿的计算器。
首先java基础类型中不存在这么大的数,无论使用什么类型都会出现运算溢出的情况。那么就需要我们自定义一个类,一个成员变量表示符号,一个成员变量byte[]表示值,然后再去处理加减乘除。比如,java的BigInterger类。
9.权限的作用域要从,本类,同包,异包,子孙类几个方面阐述。
10.重载与重写
重写:
权限只能更小或者一样。
异常只能子类或者一样。
如果原方法是private,那就只是重新定义了一个方法。
重载:
只能使用参数的个数,参数类型,参数的顺序或者组合进行重载。
不能使用抛出的异常,返回值进行重载。
如果原方法是private,那就只是重新定义了一个方法。
11.抽象类可以用main方法,因为main方法是静态的。
12.克隆对象时,往往先克隆父类。
13.asbratct 不能跟同步,静态,native同时使用。
14.静态方法可以重写,但是没有效果。
重写指的是根据运行时对象的类型来决定调用哪个方法,而不是根据编译时的类型。让我们猜一猜为什么静态方法是比较特殊的?因为它们是类的方法,所以它们在编译阶段就使用编译出来的类型进行绑定了。使用对象引用来访问静态方法只是Java设计者给程序员的*。我们应该直接使用类名来访问静态方法,而不要使用对象引用来访问。
15.在java1.7中,内部类访问方法的局部变量需要定义final,1.8已取消。怎样形式的内部类都可以访问,静态成员变量和非静态,方法的局部变量。只有静态的内部类不能访问成员变量,需要对象点去访问。
16.getClass()方法返回的总是当前调用的类,即使你调用了super.
17.try和finally中都有return语句的时候,结果为执行finally以后的结果。
18.多线程中不推荐使用的方法 和方法介绍:
stop: 会导致线程释放所有所持有的锁,如果线程处在一种不连续的状态中,可能会被其他的线程修改数据。很难预料结果。
suspend:线程会停下,但是不会释放锁,所以可能导致死锁。
wait:可以让线程等待,并且释放当前锁,必须在synchronize中调用
sleep:让线程沉睡,但不会释放当前锁。
notify:唤醒线程,但不会释放锁,只是告诉其他线程可以开始竞争资源了。
19.当一个线程进入一个对象的synchronize方法,其他线程还能进入这个对象的其他方法吗?
其他方法没有加synchronize关键字可以。
如果加了synchronize关键字,如果前一个方法调用了wait,则可以,反之不可以。
如果其他方法是静态方法,对象锁是类的字节码则可以。
20.集合
ArrayList 和 Vector
同步性
它们都有有初始值,容量不够时会进行自增。ArrayList是0.5倍,Vector是1倍。
HashTable和HashMap
同步性
HashMap允许有一个key为null,hashtable不允许。
List,Set是继承了Collection,Map不是。
ArrayList,Vector,LinkedList效率问题
ArrayList和Vector是索引效率很高,因为是数组实现,但是插入效率就会很低。所以LinkedList的插入效率就会 很 高
去掉Vector中重复元素的方法
HashSet h = new HashSet(Vector)
Hash类的集合的元素,如果重写equals方法,也必须去重写hashcode
21.序列化
对象 --- 字节流
如果tomcat需要持久化session,那么在tomcat重启的过程中session中的对象就必须实现序列化。
22.当一个类继承了一个类,和实现了一个接口。后两者都有一个变量同名,如果在前者中是super,接口名点调用以区分是可以的。比如:
23.接口是可以多继承的,修改接口中的变量时要意识到这个变量是常量是不能修改的。
24.+= 和 +的区别
25.编码
26.迭代器深入
27.在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
28.基础类型跟对象比较,且他们都在常量池范围时,等号比较的是值,不是地址。
29.
这里仅仅是调用了run()方法,程序就只能顺序执行;开启线程是调用start()方法,这样才能并发执行。
|
1.脚本安装部署
2.jsr303校验功能及国际化。
3.备份方式创建应用。
4.应用转模板功能
5.模板管理
6.数据库配置功能。
7.VPC打通功能。
8.防止跨站脚本
9.shiro