一、Java基础部分 Java基础是Java面试中的重要内容,涵盖了语言的语法、关键字、基本类库等方面。 1. 一个".java"源文件中可以包括多个类,但只有一个public类,并且这个public类的名字必须与文件名一致。 2. Java语言本身没有goto语句,这是一种早期编程语言中用于无条件跳转的语句,因为使用不当容易造成程序逻辑混乱,Java不支持这种语句。 3. &与&&都可以进行逻辑运算,但是&是逻辑与运算,两边的表达式都会进行运算;而&&是短路与运算,当第一个表达式的结果为false时,后面的表达式不会被计算。 4. Java中跳出多重嵌套循环通常使用标签(label),在循环前加一个标签,然后使用break标签名的方式跳出。 5. switch语句在Java中可以作用于byte和short、char以及枚举类型,但是不能作用于long和String,因为switch的case后面只能是常量表达式。 6. short类型进行运算时会发生类型提升,s1=s1+1;会导致编译错误,因为这个表达式的结果是int类型,应该显式转换。而s1+=1;是合法的,因为它是一个复合赋值操作,编译器会自动进行类型转换。 7. char型变量可以存储一个中文汉字,因为Java采用的是Unicode字符集。 8. 计算2乘以8最有效率的方式是直接计算,即使用2 << 3。 9. 设计一个一百亿的计算器,可以采用BigInteger类来处理大整数的计算。 10. final关键字修饰一个变量时,表示该变量一旦被赋值后不能被重新赋值,引用的对象可以变。 11. "=="是比较两个对象的引用是否指向同一个对象,而equals方法是比较两个对象的内容是否相等。 12. 静态变量属于类,实例变量属于对象。静态变量由类加载时初始化,实例变量在对象创建时初始化。 13. static方法中不能直接调用非static方法,因为非static方法依赖于具体对象实例。 14. Integer是int的包装类,可以存储int值的范围之外的值,例如-128到127的自动装箱,还有提供各种方法操作int数据。 15. Math.round(11.5)结果是12,Math.round(-11.5)结果是-11,因为Math.round在四舍五入时总是会向上取整。 16. Java代码中通常不建议把异常声明放在方法签名中,应该用try-catch块来处理可能发生的异常。 17. public是类、方法、成员变量可以被任何其他对象访问;private是只能在同一个类中访问;protected是同一个包内的类和其他包中的子类可以访问;默认访问权限(没有写访问修饰符)是同一个包内的类可以访问。 18. Overload和Override是Java中方法重载和重写的区别。方法重载是在同一个类中,方法名相同,参数列表不同;重写是子类对父类方法的覆盖,方法名、参数列表必须相同。Overloaded方法不能改变返回值类型,Override方法可以改变返回值类型,只要满足协变返回类型的要求。 19. 构造器Constructor不能被override,但可以被overload,也就是重载。 20. 接口之间可以相互继承,抽象类可以实现接口,但抽象类不能继承具体的类。抽象类中可以有静态的main方法。 二、线程与并发 Java的多线程编程和并发控制是面试中的重要话题,涉及对Java内存模型、线程状态和线程同步的理解。 1. 写clone()方法时,通常会调用super.clone(),因为Object类提供了一个默认的浅复制clone方法。 2. 面向对象的特征包括封装、继承、多态。 3. Java中实现多态的机制是基于继承和接口实现。子类重写父类方法是多态的一种表现。 4. abstract class和interface都可以用来定义抽象的成员,但接口可以实现多个,抽象类只能继承一个。 5. abstract方法不能同时是static、native或synchronized,因为这些关键字与抽象方法的定义相冲突。 6. 内部类可以引用外部类的成员变量和方法。StaticNestedClass是静态内部类,与外部类的实例没有依赖关系;而InnerClass是非静态内部类,需要外部类的实例。 7. 匿名内部类AnonymousInnerClass可以实现接口,也可以继承一个抽象类或者具体类。 8. super.getClass()方法返回的是当前对象的父类类型。 9. String不是基本数据类型,而是final类,一旦创建不可变。 10. String的不可变性使得每次对String的操作都会产生新的String对象。 11. 不可以继承String类,因为String类被声明为final。 12. new String("xyz");创建了一个新的String对象,使用String的构造函数会产生一个新的对象。 13. StringBuffer是可变的字符序列,String是不可变的字符序列。StringBuffer在处理字符串拼接和修改时效率更高。 14. 逗号分隔的字符串可以用String.split(",")方法转换为字符串数组。 15. 数组有length属性,String也有length()方法,用于获取字符数。 16. try-finally结构中的finally块无论try块中的代码如何执行,都会执行。 17. final关键字用于声明一个变量为常量,finalize方法是Object类的一个方法,用于在垃圾回收器确定一个对象不再被引用时调用该方法,而finally关键字用于异常处理结构中,保证了无论是否发生异常都要执行的代码块。 18. 运行时异常是unchecked异常,一般异常是checked异常,两者的区别在于运行时异常不需要在方法签名中显式声明或捕获。 19. error是系统错误,一般由系统执行错误造成,而exception是程序需要处理的异常。 20. Java中的异常处理机制通过try、catch、finally、throw和throws关键字实现。 21. Java中实现线程的方式有继承Thread类或者实现Runnable接口。synchronized关键字用于修饰同步方法或同步代码块。 22. sleep()是Thread类中的方法,暂停线程执行指定的时间;wait()是Object类中的方法,使当前线程进入等待状态直到其他线程调用同一个对象的notify()或notifyAll()方法。 23. 启动线程应该使用start()方法,run()方法仅是普通的方法调用。 24. 当一个线程进入一个对象的synchronized方法后,其他线程无法进入这个对象的其他synchronized方法,除非该对象的锁被当前线程释放。 25. 线程的基本概念涉及线程的创建、线程状态及其转换、线程调度等。 26. synchronized和Lock都能够实现线程的同步,但Lock提供了更灵活的锁机制,包括尝试非阻塞获取锁、可中断的锁获取等特性。 27. 设计线程通常会涉及到线程的创建、线程的优先级、线程同步等问题。
剩余165页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助