1. java的基本编程单元是类,基本存储单元是变量。
2.synchronized 和 volatile
- synchronized : 用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这个段代码;对对象加互斥锁;
- volatile :用来确保将变量的跟新操作通知到其他线程,当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。然而,在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比 synchronized关键字更轻量级的同步机制;
3. JVM操作命令
1、jps:查看本机java进程信息。
2、jstack:打印线程的栈信息,制作线程dump文件。
3、jmap:打印内存映射,制作堆dump文件
4、jstat:性能监控工具
5、jhat:内存分析工具
6、jconsole:简易的可视化控制台
7、jvisualvm:功能强大的控制台
4. java程序内存泄露的最直接表现
java是自动管理内存的,通常情况下程序运行到稳定状态,内存大小也达到一个 基本稳定的值; 但是内存泄露导致Gc不能回收泄露的垃圾,内存不断变大. 最终超出内存界限,抛出OutOfMemoryExpection
5. Math.cos为计算弧度的余弦值,Math.toRadians函数讲角度转换为弧度
6. 存根(Stub)与动态链接有关
7. 线程安全的map:
- HashTable;
- SynchronizedMap;
- ConcurrentHashMap;
8. 关于抽象类与接口
- 接口和抽象类都可以被声明使用
- 接口体现的是一种规范和实现分离的设计哲学,代码编写过程中充分利用接口可以很大程度的降低程序各个模块之间的耦合,从而提高系统的可扩展性和可维护性;
- 抽象类和接口都不能被实例化
9. 数据类型转换
解析: float占4个字节为什么比long占8个字节大呢,因为底层的实现方式不同。 浮点数的32位并不是简单直接表示大小,而是按照一定标准分配的。 第1位,符号位,即S 接下来8位,指数域,即E。 剩下23位,小数域,即M,取值范围为[1 ,2 ) 或[0 , 1) 然后按照公式: V=(-1)^s * M * 2^E 也就是说浮点数在内存中的32位不是简单地转换为十进制,而是通过公式来计算而来,通过这个公式虽然,只有4个字节,但浮点数最大值要比长整型的范围要大。
|