java面试小事项

一些tips

类型转换

三目运算符 其中的后面的值会进行类型转换,两个值得类型是统一的;
但是 当第一个是常量表达式时,常量可以使用第二个的表示类型
System.out.print(false? i: x) // 120
System.out.print(false ? 10: x) // x

运算符等级从一级到16级

final finally finalize

fianl

  • fianl成员 修饰变量: 一旦被初始化就不可改变(其值不可变);修饰类时是其引用不可变,初始化可以在 定义处,在构造函数中也可;
  • final 方法: 此方法不需要进行扩展已经满足要求了;不允许扩展;2.允许编译器将所有对此方法的调用转化为inline调用机制(把此方法直接插入进调用处)
  • final 类: 无法被继承,
    finally : 在代码终究会执行,无论返回rerurn;
    finalize: jvm保证调用finalize函数之前,这个对象是不可达的,但jvm不保证会调用该函数;主要用于一些不容易控制的,且重要的资源的释放;

在try里面的return语句 执行前 会执行finally的代码

传递和引用

java是传递副本

  1. 对于基本数据类型(int,long,duble等)是传递值的副本
  2. 对于一切对象性变量,传递引用的副本;
    数组也是按值传递,修改后,也会直接改变;

内部访问

class Wo{
    private int c;
    Wo(int c){
        this.c=c;
    }
    public void getTT(){
        Wo wo=new Wo(33);
        System.out.println(wo.c); // 虽然是私有变量 但是在类内部还是可以访问的
        // 在外部生成wo就不能访问c了
    }
}

boolean 默认初始化时false;

序列化能把一个实现了Serializable接口的对象转化为一组byte,能够把这个对象从byte中恢复,然后能恢复状态;并进行网络传输;实现RMI远程调用(能够像本地机器一样调用此对象);2.状态保存,启动时使用

Integer k;
for (int i = 0; i <10 ; i++) k=new Integer(i);

//下面就会编译出错
for (int i = 0; i <10 ; i++) Integer k=new Integer(i); // 局部变量的声明应该在块内

浅复制与深复制

单线程:
单元线程: 一个任务分成多个部分,每个线程完成不同部分;
自由线程: 多个线程完成相同;

##SQL
存储过程和函数: 存储过程是用户定义的一系列sql的语句集合,涉及到特定的表或其他对象的任务,用户可以调用存储过程,函数是数据库已将定义好的方法 count()等

聚集索引:其顺序就是数据的物理顺序;对与非聚集 索引顺序与数据的物理排序顺序无关;

J2EE

spring 控制反转,依赖注入;

EJB重要的

JDBC

jdbc api被划分为两个部分: JDBC 核心API 和标准扩展API
其核心的api在java.sql里面.

  • java.sql包: 是核心API
    • DataSource接口:和java名字目录服务JNDI一起工作的数据源接口
    • Connection pooling(连接池): 可以重复使用连接,不是对每个请求都使用一个新的连接
    • Distribute transaction(分布式的事务):
    • Rowsets: javaBean组件包含结果集;主要是将数据传送给瘦客户;
  • javax.sql : 标准扩展API,全新的包, 支持SQL3数据类型,增加了对持久化对象的存储;

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注