java基础面试/笔试题整理(三)

  1. 数据的隔离级别由数据库系统实现,是数据库系统本身的一个功能。我们写java程序的时候只是设定事务的隔离级别,而不是去实现它。
    (这个我标重点,因为真的被问到很多次。当然了,事务的隔离级别也要会。不太明白的可以点链接进去看数据库的事务隔离级别和四大特性)
  2. ThreadLocal是类。声明为public class ThreadLocal
    ThreadLocal类为每一个线程都维护了自己独有的变量拷贝。每一个线程都拥有了自己独立的一个变量。
    ThreadLocal是采用哈希表的方式来为每个线程提供一个变量的副本。
    ThreadLocal保证各个线程之间数据安全,每个线程的数据不会被另外的线程访问和破坏。
  3. 在父类没有无参构造函数的时候,子类要在自己的构造函数中显示的调用父类的构造函数。
  4. 形式参数可以被视为局部变量(local variable)。
    形式参数被调用时被传递的是实际参数的拷贝。
  5. int i = 0;i = i++;system.out.print(i);结果为0;
    因为i=i++;i++是先使用再计算,所以就是i=0;
  6. static方法不能被子类覆盖
    Father.staticMethod();或者 Father f = new son();f.staticMethod();
    这两个语句调用的都是父类的static方法。
  7. try-catch-finally:
  • 不管有没有异常,finally块中的代码是一定会执行的。
  • try或者catch中有return的时候,finally也会执行。
  • finally是在return后的表达式运算后执行的(此时没有返回运算后的值,而是先保存起来,若finally中没有return,则不管如何返回的都是保留的值)。所以函数返回值是在finally执行前确定的。
  • finally中有return,程序会提前退出,返回的是finally中的return而不是try或者catch中的return。
  1. simpleDateFormat是线程不安全的。
  2. java命令行:“java Test one two three”。
    Test是调用的方法,one two three才是main函数的参数。
  3. ASCⅡ码包含一些特殊空字符,不可打印。
  4. stream结尾都是字节流,reader和writer结尾都是字符。
  • 静态内部类才可以声明静态方法。
  • 静态方法不可以使用非静态变量
  • 抽象方法不可以有函数体
  1. java中“=”是赋值,“==”是判断相等。
  2. 年老代溢出的原因可能有:循环上万次字符串处理。创建上千万个对象。在一段代码中申请上百M或者上G内存。
    持久代溢出原因:动态加载大量java类而导致溢出。
  3. DriverManager.getConnection方法返回一个Connection对象,这是加载驱动之后才能进行的。
  4. 一个子类可以覆盖父类的同步方法(synchronized修饰的)。
  5. java语言中,非静态方法属于对象的成员,静态方法属于类的成员。
  6. java反射机制主要提供了以下几个功能:
  • 运行时判断任意一个对象的所属类。
  • 在运行时构造任意一个类的对象。
  • 在运行时判断任意一个类所具有的成员变量和方法。
  • 在运行时调用任意一个对象的方法,生成动态代理。
  1. 实例方法可以直接调用本类的类方法(虽然很少这么用,但是语法没错误,有黄色警告)。
  2. 方法调用时,会创建栈帧在栈中,调用完成时程序自动出栈释放。
  3. 包装类和Math类都是不可以被继承的类。
  4. jvm根据两个方面判断类相同:1)类的全称。2)类加载器。
  5. 一个java源程序文件中定义几个类和接口,则编译后生成几个.class字节码文件。包括接口和内部类都有自己的.class文件。
  6. RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象相互调用实现双方通讯的一种通讯机制。是建立分布式java应用程序的方便途径。默认采用TCP/IP协议。
  7. java的两个基本垃圾回收算法:复制算法,标记清理算法。
  • 复制算法:两个区域A,B。初始对象在A,垃圾回收时继续活着转移到B,此为新生代最常用的算法。
  • 标记清理算法(也有的叫标记清除算法):一块区域,通过可达性分析标记可达对象。然后回收不可达对象。因为会出现空间碎片,由此引出
  • 标记整理算法:多了碎片整理,清理出更大的内存。
  1. jdk提供的用于并发编程的同步器:Semaphore ,CyclicBarrier,CountDownLatch。
  2. socket编程中,服务端的操作(我觉得这个格式比较好看,真的不会有序里面套有序):

①服务器初始化socket。
②与端口进行绑定(blind())。
③创建serverSocket进行监听(listent())。
④调用阻塞(accept())等待客户端连接。
⑤连接后读写操作(read(),write())。
⑥最后调用close()关闭连接。

  1. Math.round(11.5);值为12。Math.round(-11.5);值为-11。
    该方法取离它最近的整数,如果上下一下则取较大值。
  2. 对管道进行读写操作都有可能被阻塞。
    若管道为空,则读操作被阻塞。如管道满了,则写操作被阻塞。
  3. final修饰的成员变量三种赋值方式:
  • 在声明时直接赋值。
  • 在构造器中赋值。
  • 在初始代码块中赋值。

好了,今天就到这里了。争取每天学习一点点,不知道多久会发生质变,哈哈。然后大家共勉,祝大家工作生活顺顺利利的吧!
全文手打不易,如果你觉得有帮到你或者有点用,别吝啬的点个喜欢和点个关注哦~~

你可能感兴趣的:(java基础面试/笔试题整理(三))