Java岗 面试考点精讲(基础篇02期)(上)

简介: Java岗 面试考点精讲(基础篇02期)(上)

1. 两个对象的hashCode相同,则equals也一定为true,对吗?


不对,答案见下面的代码:


@Override
public int hashCode() {
    return 1;
}

两个对象equals为true,则hashCode也一定相同,对吗?


这块肯定是有争议的。面试的时候这样答:如果按照官方设计要求来打代码的话,hashcode一定相等。但是如果不按官方照设计要求、不重写hashcode方法,就会出现不相等的情况。


2. java线程池用过没有?


Executors提供了四种方法来创建线程池。


  1. newFixedThreadPool() :创建固定大小的线程池。


  1. newCachedThreadPool(): 创建无限大小的线程池,线程池中线程数量不固定,可根据需求自动更改。


  1. newSingleThreadPool() : 创建单个线程池,线程池中只有一个线程。


  1. newScheduledThreadPool() 创建固定大小的线程池,可以延迟或定时的执行任务。


手写一个:


public static void main(String[] args) {
    ExecutorService threadPool = Executors.newCachedThreadPool();
    threadPool.execute(() -> {
        for (int i = 0; i< 20;i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    });
    threadPool.shutdown();
}

线程池作用


  1. 限制线程个数,避免线程过多导致系统运行缓慢或崩溃。


  1. 不需要频繁的创建和销毁,节约资源、响应更快。


3. Math.round(-2.5)等于多少?


不要认为它是四舍五入!不要认为它是四舍五入!不要认为它是四舍五入!


口诀:+0.5后向下取整。所以结果是-2。


留个题,Math.round(-2.6)结果和Math.round(2.6)结果


4. 面向对象六大原则


  1. 单一职责原则——SRP


让每个类只专心处理自己的方法。


  1. 开闭原则——OCP


软件中的对象(类,模块,函数等)应该对于扩展是开放的,但是对于修改是关闭的。



  1. 里式替换原则——LSP


子类可以去扩展父类,但是不能改变父类原有的功能。


  1. 依赖倒置原则——DIP


应该通过调用接口或抽象类(比较高层),而不是调用实现类(细节)。


  1. 接口隔离原则——ISP


把接口分成满足依赖关系的最小接口,实现类中不能有不需要的方法。


  1. 迪米特原则——LOD


高内聚,低耦合。


5. static和final区别


关键词 修饰物 影响
final 变量 分配到常量池中,程序不可改变其值
final 方法 子类中将不能被重写
final 不能被继承
static 变量 分配在内存堆上,引用都会指向这一个地址而不会重新分配内存
static 方法块 虚拟机优先加载
static 可以直接通过类来调用而不需要new


6. String s = "hello"和String s = new String("hello");区别


String s = new String("hello");可能创建两个对象也可能创建一个对象。如果常量池中有hello字符串常量的话,则仅仅在堆中创建一个对象。如果常量池中没有hello对象,则堆上和常量池都需要创建。


String s = "hello"这样创建的对象,JVM会直接检查字符串常量池是否已有"hello"字符串对象,如没有,就分配一个内存存放"hello",如有了,则直接将字符串常量池中的地址返回给栈。(没有new,没有堆的操作)


7. 引用类型是占用几个字节?


hotspot在64位平台上,占8个字节,在32位平台上占4个字节。


8. `(1<3)?"a":"b")+3+4`和`(1<3)?"a":"b")+(3+4)`区别


System.out.println(((1<3)?"a":"b")+3+4);
System.out.println(((1<3)?"a":"b")+(3+4));


控制台:


a34
a7

8.1 什么情况下,加号会变成字符串连接符


依据上面的例子来思考。


9. java中的switch选择结构可以使用数据类型的数据(JDK1.8)


image.png


  1. char
  2. byte
  3. short
  4. int
  5. Character
  6. Byte
  7. Short
  8. Integer
  9. String
  10. enum


更好的记忆方法:


基本类型中,没有boolean浮点类型+长类型long.相应的包装类型也没有。

外加Stringenum


10. `4&5``4^5``4&10>>1`各等于多少


// 0100 & 0101 = 0100 = 4
System.out.println(4&5);
// 0100 ^ 0101 = 0001 = 1
System.out.println(4^5);
System.out.println(10>>1);
 // 有疑问参考下面的运算符优先级
System.out.println(4&10>>1);


4
1
5
4

`4|5`等于多少呢


答案:5


运算符优先级


运算符 结合性
[ ] . ( ) (方法调用) 从左向右
! ~ ++ -- +(一元运算) -(一元运算) 从右向左
* / % 从左向右
+ - 从左向右
<< >> >>> 从左向右
< <= > >= instanceof 从左向右
== != 从左向右
& 从左向右
^ 从左向右
| 从左向右
&& 从左向右
|| 从左向右
?: 从右向左
= 从右向左
相关文章
|
22天前
|
消息中间件 缓存 算法
Java多线程面试题总结(上)
进程和线程是操作系统管理程序执行的基本单位,二者有明显区别: 1. **定义与基本单位**:进程是资源分配的基本单位,拥有独立的内存空间;线程是调度和执行的基本单位,共享所属进程的资源。 2. **独立性与资源共享**:进程间相互独立,通信需显式机制;线程共享进程资源,通信更直接快捷。 3. **管理与调度**:进程管理复杂,线程管理更灵活。 4. **并发与并行**:进程并发执行,提高资源利用率;线程不仅并发还能并行执行,提升执行效率。 5. **健壮性**:进程更健壮,一个进程崩溃不影响其他进程;线程崩溃可能导致整个进程崩溃。
27 2
|
22天前
|
存储 Java
Java面向对象面试题总结(上)
在Java中,重写(Override)与重载(Overload)是两个重要的概念,关联到方法的定义与调用。重写是指子类对继承自父类的方法进行新的实现,以便提供子类特有的行为,其关键在于方法签名一致但方法体不同。重载则允许在同一个类中定义多个同名方法,只要参数列表不同即可,以此提供方法调用的灵活性。重写关注多态性,而重载强调编译时多态。
18 1
|
22天前
|
NoSQL Java 数据库
2022年整理最详细的java面试题、掌握这一套八股文、面试基础不成问题[吐血整理、纯手撸]
这篇文章是一份详尽的Java面试题总结,涵盖了从面向对象基础到分布式系统设计的多个知识点,适合用来准备Java技术面试。
2022年整理最详细的java面试题、掌握这一套八股文、面试基础不成问题[吐血整理、纯手撸]
|
11天前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
50 0
|
19天前
|
Java 编译器 开发工具
JDK vs JRE:面试大揭秘,一文让你彻底解锁Java开发和运行的秘密!
【8月更文挑战第24天】JDK(Java Development Kit)与JRE(Java Runtime Environment)是Java环境中两个核心概念。JDK作为开发工具包,不仅包含JRE,还提供编译器等开发工具,支持Java程序的开发与编译;而JRE仅包含运行Java程序所需的组件如JVM和核心类库。一个简单的&quot;Hello, World!&quot;示例展示了两者用途:需借助JDK编译程序,再利用JRE或JDK中的运行环境执行。因此,开发者应基于实际需求选择安装JDK或JRE。
37 0
|
22天前
|
存储 缓存 安全
Java多线程面试题总结(中)
Java内存模型(JMM)定义了程序中所有变量的访问规则与范围,确保多线程环境下的数据一致性。JMM包含主内存与工作内存的概念,通过8种操作管理两者间的交互,确保原子性、可见性和有序性。`synchronized`和`volatile`关键字提供同步机制,前者确保互斥访问,后者保证变量更新的可见性。多线程操作涉及不同状态,如新建(NEW)、可运行(RUNNABLE)等,并可通过中断、等待和通知等机制协调线程活动。`volatile`虽不确保线程安全,但能确保变量更新对所有线程可见。
15 0
|
22天前
|
缓存 安全 Java
Java基础面试题总结(上)
Java有8种基本数据类型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)、float(4字节)、double(8字节)、boolean、char(2字节)。String类被`final`修饰,不可被继承。String为只读,内容不可改;StringBuffer和StringBuilder可修改内容,前者线程安全,后者非线程安全,故效率更高。
13 0
|
22天前
|
算法 Java
【多线程面试题十八】、说一说Java中乐观锁和悲观锁的区别
这篇文章讨论了Java中的乐观锁和悲观锁的区别,其中悲观锁假设最坏情况并在访问数据时上锁,如通过`synchronized`或`Lock`接口实现;而乐观锁则在更新数据时检查是否被其他线程修改,适用于多读场景,并常通过CAS操作实现,如Java并发包`java.util.concurrent`中的类。
|
22天前
|
存储 Java 调度
【多线程面试题 八】、说一说Java同步机制中的wait和notify
Java同步机制中的wait()、notify()、notifyAll()是Object类的方法,用于线程间的通信,其中wait()使当前线程释放锁并进入阻塞状态,notify()唤醒单个等待线程,notifyAll()唤醒所有等待线程。
|
22天前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。