博客
关于我
java基础面试题,还不错,我面试了几家就遇到了上面的挺多的面试题
阅读量:195 次
发布时间:2019-02-28

本文共 3768 字,大约阅读时间需要 12 分钟。

Java核心技术问题解答

1. ArrayList 和 LinkedList 的区别

ArrayList 是基于数组实现的动态数组,支持快速随机访问。其底层通过自动扩容(初始容量为10,每次扩容为上一次的一半)实现,适合读取操作;而 LinkedList 是基于双向链表实现的,适合插入和删除操作。

2. 重载与重写的区别

重写( Override )适用于不同的类之间,要求方法的签名完全一致。重载( Overload )适用于同一类中的方法,要求方法的参数列表不同。重写的方法不能被重载,且重写的方法不能是 final 方法。

3. && 与 || 的区别

&& 和 || 都可以实现逻辑与,但两者的执行顺序不同。&& 从左到右评估,左边为 false 时,右边不会被评估;而 || 从左到右评估,左边为 true 时,右边不会被评估。&& 更高效,适合多次条件判断。

4. 接口与抽象类的区别

  • 抽象类:不能被实例化,作为父类存在。可以有属性、方法和构造方法,抽象方法必须被重写。子类必须实现所有抽象方法。
  • 接口:也不能被实例化,作为父接口存在。属性只能是常量值,子类可以实现多个接口。接口比抽象类更抽象,且接口中的成员变量必须是 public。

5. JDBC 操作数据库的步骤

  • 加载驱动:Class.forName("com.mysql.jdbc.Driver")
  • 创建连接:Connection con = DriverManager.getConnection("url", "username", "password")
  • 创建语句:PreparedStatement ps = con.prepareStatement("insert into user values(?)")
  • 执行语句:ResultSet rs = ps.executeQuery()
  • 处理结果:while (rs.next()) { rs.getString(1); }
  • 关闭资源:确保在 finally 块中关闭连接和结果集。
  • 6. Hashtable 与 HashMap 的区别

    • Hashtable:线程安全,不能存储 null 键值,效率较低。
    • HashMap:线程不安全,允许 null 键值和值,效率更高。
    • 主要区别:Hashtable 的方法是线程安全的,而 HashMap 是轻量级实现。

    7. 多线程方式及死锁防治

    • 创建方式:继承 Thread 或实现 Runnable 接口。
    • 死锁产生原因:资源竞争和互斥。
    • 防治方法:加锁顺序、加锁时限、死锁检测。

    8. StringBuffer、StringBuilder 与 String 的区别

    • 运行速度:StringBuilder > StringBuffer > String。
    • 线程安全:StringBuilder 是线程不安全的,而 StringBuffer 是线程安全的。
    • 应用场景:String 用于字符串常量,StringBuilder 用于字符串变量,适合频繁修改操作。

    9. TCP 与 UDP 的区别

    • TCP:三次握手协议,连接稳定性高但效率较低。
    • UDP:无连接性,效率高但稳定性差。
    • 应用场景:TCP 适用于需要可靠连接的场景,UDP 适用于实时性要求高但可靠性不重要的场景。
    • Session:服务器端保存状态,数据存储在服务器,影响性能。
    • Cookie:客户端保存状态,数据存储在浏览器,不安全。
    • 应用场景:Session 适用于需要高安全性但性能影响较大的场景,Cookie 适用于简单的状态管理。

    11. GET 与 POST 请求的区别

    • GET:用于从服务器获取数据,不支持修改操作。
    • POST:用于向服务器提交数据,支持修改操作。
    • 安全性:POST 更安全,但 GET 数据量有限。
    • 应用场景:GET 适用于数据查询,POST 适用于数据提交。

    12. Redis 数据类型

    • String:字符串类型,支持动态字符串操作。
    • List:列表类型,支持按序存储元素。
    • Set:集合类型,存储唯一元素。
    • ZSet:有序集合,支持按优先级存储元素。
    • Hash:哈希表,存储键值对。

    13. Redis 与 MongoDB 的应用场景

    • Redis:适用于数据量较小的高性能操作。
    • MongoDB:适用于处理海量数据,提供高效的查询和存储性能。

    14. == 与 equals 的区别

    • ==:比较内存地址相同。
    • equals:比较对象值是否相同。
    • 注意事项:对象类型必须一致,且 equals 方法正确实现。

    15. List 与 Map 的区别

    • List:有序,允许重复元素。
    • Map:无序,键不重复。
    • 应用场景:List 适用于有序存储,Map 适用于键值对存储。

    16. Integer 与 int 的区别

    • int:基本数据类型,值为 0。
    • Integer:对象类型,值为 null。
    • 注意事项:自动拆装箱和装箱,需注意缓存机制。

    17. 进程与线程的区别

    • 进程:资源分配单元,包含多个线程。
    • 线程:CPU调度单元,共享进程资源。
    • 创建方式:进程创建调用 fork 或 vfork,线程创建调用 pthread_create。

    18. 进程状态

    • 就绪状态:已分配资源,等待处理。
    • 运行状态:正在执行程序。
    • 阻塞状态:等待资源或事件。
    • 状态转换:就绪 → 运行 → 就绪 → 阻塞 → 就绪。

    19. URL 请求与响应流程

  • 域名解析
  • TCP 三次握手
  • 客户端发送 HTTP 请求
  • 服务器处理请求
  • 服务器发送响应
  • TCP 连接关闭
  • 20. HTTP 状态码

    • 1:信息性状态码(200: 请求成功,204: 服务器成功但无内容返回)。
    • 3:重定向状态码(301: 永久重定向,302: 临时重定向)。
    • 4:客户端错误状态码(400: 语法错误,401: 缺少认证信息)。
    • 5:服务器错误状态码(500: 服务器错误,503: 服务器超负载)。

    21. sleep 与 wait 的区别

    • sleep:属于 Thread 类,线程进入睡眠状态,方法不释放锁,需捕获 InterruptedException。
    • wait:属于 Object 类,线程进入等待状态,方法释放锁,无需捕获异常。

    22. Error 与 Exception 的区别

    • Error:系统级错误,通常由 JVM 抛出,不需要程序处理。
    • Exception:程序级错误,需程序处理。
    • 捕获与抛出:遵循就近原则,捕获异常时应尽量靠近异常源。

    23. Java I/O 与 NIO 的区别

    • 传统 I/O:基于流,效率低,阻塞型。
    • NIO:基于块,效率高,非阻塞型。
    • 特点:NIO 通过通道和缓冲区实现高效 IO 操作。

    24. 单例模式特征与应用场景

    • 特征:私有构造方法、静态引用、公有静态获取方法。
    • 应用场景:频繁实例化且销毁资源的对象,工具类对象,数据库连接池等。

    25. Java 接口修饰符

    • public:允许所有类访问。
    • final:不能被重写,适用于不需要重写的接口方法。
    • abstract:必须被重写,适用于需要继承实现的接口方法。

    26. Java 数据类型与自动拆装箱

    • 基本数据类型:byte、short、char、boolean、int、long、float、double。
    • 包装类型:Byte、Character、Short、Integer、Long、Float、Double。
    • 自动拆装箱:基本类型与包装类型之间的转换。

    27. 单例模式实现

    • 饿汉式:类装载时创建实例。
    • 懒汉式:第一次使用时创建实例。
    • 优缺点:饿汉式高效,懒汉式节省内存。

    28. 构造器的可重写性与可重载性

    • 构造器不能被继承,因此不能重写。
    • 可以被重载,不同构造器的参数列表不同。

    29. ThreadLocal 随机存取机制

    • 特点:线程局部存储,线程私有。
    • 使用场景:需要每个线程维护独立的数据。

    30. GC 的作用与原因

    • 垃圾回收器:管理内存,自动回收无用对象。
    • 原因:内存泄漏会导致程序崩溃,GC自动清理内存。

    31. Thread synchronization 方法

    • wait():让线程等待,释放锁。
    • sleep():让线程睡眠,需捕获 InterruptedException。
    • notify():唤醒等待的线程。

    32. 事务隔离级别与问题

    • read uncommitted:最低隔离级别,允许脏读。
    • read committed:防止脏读。
    • read repeatable:防止不可重复读。
    • serializable:防止幻读。

    33. 数据库查询效率优化

    • 索引使用:避免全表扫描。
    • 避免复杂查询:减少索引使用。
    • 查询优化:按索引列排序,避免 NOT IN、IS NULL 等操作。

    34. 数据库连接池

    • 开源连接池:DBCP、C3P0,支持最大最小连接数设置。
    • 特点:连接池管理连接,提高数据库吞吐量。

    35. Redis 与 MongoDB 的对比

    • Redis:适用于小数据量、高性能操作。
    • MongoDB:适用于大数据量、高效查询场景。

    转载地址:http://urms.baihongyu.com/

    你可能感兴趣的文章
    Network Sniffer and Connection Analyzer
    查看>>
    Network 灰鸽宝典【目录】
    查看>>
    NetworkX系列教程(11)-graph和其他数据格式转换
    查看>>
    Networkx读取军械调查-ITN综合传输网络?/读取GML文件
    查看>>
    network小学习
    查看>>
    Netwox网络工具使用详解
    查看>>
    Net与Flex入门
    查看>>
    net包之IPConn
    查看>>
    Net操作配置文件(Web.config|App.config)通用类
    查看>>
    Neutron系列 : Neutron OVS OpenFlow 流表 和 L2 Population(7)
    查看>>
    New Relic——手机应用app开发达人的福利立即就到啦!
    查看>>
    NFinal学习笔记 02—NFinalBuild
    查看>>
    NFS
    查看>>
    NFS Server及Client配置与挂载详解
    查看>>
    NFS共享文件系统搭建
    查看>>
    nfs复习
    查看>>
    NFS安装配置
    查看>>
    NFS的安装以及windows/linux挂载linux网络文件系统NFS
    查看>>
    NFS的常用挂载参数
    查看>>
    NFS网络文件系统
    查看>>