博客
关于我
java 很全的面试
阅读量:647 次
发布时间:2019-03-14

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

Java基础

Java中的几种基本类型,各占用多少字节?

  • boolean, byte, char, short, int:占用1字节。
  • long:占用8字节。
  • float, double:占用4字节。

String能被继承吗?

不可以,因为String类带有final修饰符。final类无法被继承,防止其实现细节发生变化。


String与StringBuffer/ StringBuilder的区别

  • String: 字符串常量(不可变),通过String.valueOf或直接赋值创建。
  • StringBuilder/ StringBuffer: 字符串可变,主要区别在于线程安全(StringBuffer线程安全,而StringBuilder非线程安全)。
  • StringBuffer/ StringBuilder通常用于字符串操作,效率比String高。

ArrayList vs LinkedList

  • ArrayList: 基于数组,优点是随机访问速度快(O(1)),缺点是随机插入删除慢(O(n))。
  • LinkedList: 基于双向链表,优点是插入删除速度快(O(1)),缺点是随机访问速度慢(O(n))。

类的实例化顺序

  • 父类静态变量 ⇒ 父类静态代码块。
  • 父类非静态变量 ⇒ 父类构造函数。
  • 子类静态变量 ⇒ 子类静态代码块。
  • 子类非静态变量 ⇒ 子类构造函数。
  • 父类构造函数 ⇒ 进入子类构造函数的终结执行部分。

  • Map的实现类

    • HashMap:线程不安全,内部采用哈希表,效率高。
    • LinkedHashMap:保持插入顺序,查询速度相同。
    • TreeMap:无序,支持排序。
    • ConcurrentHashMap:线程安全,分段锁优化,适合多线程环境。

    JVM

    JVM内存结构

    • Eden(新生代):初次分配存运算的空间,通常占比20%。
    • Survivor(旧生代):存活通过次轮GC后分配的空间,占比约80%。
    • Minor GCMajor GC:新生代的垃圾回收方式。

    ####垃圾回收算法

    • Serial:标记-清除,效率低。
    • ParNew:新生代标记-清除,适合单线程和多核环境。
    • ConcurrentMark&Sweep:并发标记-清除,线程安全优越。
    • ReferenceCounting:基于引用计数,缺点是难以处理循环引用。

    内存溢出类型

    • StackOverFlowError:线程栈溢出。
    • OutOfMemoryError:JVM无法分配内存。

    反射与动态代理

    反射创建实例的三种方式

  • Object.newInstance
  • 静态方法调用(如valueOf**)**。
  • 手动构造(如String类的构造函数)。

  • 动态代理实现方式

    • 基于Reflection(JDK代理):利用反射机制,实现由InvocationHandler管理的动态方法执行。
    • 基于ASM(Cglib代理):无反射机制,优于JDK代理效率。

    多线程

    ThreadLocal的使用

    • 作用:提供线程私有的局部变量。
    • 实现机制:存储 HashMap,键为线程本身的信息(如线程ID)。
    • 注意事项:必须在使用结束时主动移除,否则会占用内存。

    TCP/IP

    TCP三次握手的流程

  • ** SYN**:客户端发送SYN报文。
  • SYN-ACK:服务器响应ACK,并发送SYN报文。
  • ACK:客户端确认接收。

  • TCP四次挥手的含义

    • FIN(1):表示断开连接。
    • ACK(2):确认对方收到断开请求。
    • FIN(3):发送方准备断开连接。
    • ACK(4):确认完成断开。

    Map的实现类

    • HashMapHashSet的背后逻辑是哈希表。
    • TreeMapLinkedHashMap是基于 compareTo 进行排序。

    IP协议与网络

    常用网络参数

    • net.ipv4.tcp_syncookies:启用半连接缓存。
    • net.ipv4.tcp_max_syn_backlog:SYN队列最大长度。
    • net.ipv4.tcp_keepalive_time:延迟发送 KEEP-ALIVE消息。

    Web

    HTTP1.0 vs HTTP1.1

    • HTTP1.0:没有persistent连接,数据分块传输。
    • HTTP1.1:支持persistent连接,数据块传输。

    HTTPS加密流程

  • 客户端发起HTTPS请求
  • 服务器发送证书
  • 客户端验证证书并建立 TLS 推送
  • 数据传输加密

  • Redis

    Redis持久化方式

    • RDB:定期快照,部分数据丢失。
    • AOF:记录所有写操作,数据完整性高。

    Redis Cluster实现

    • 节点间通信:每个节点有固定的TCP端口互相通信。
    • 选举机制:周期发送ping消息,收到pong消息的节点作为Leader。
    • 数据同步:通过replication同步数据。

    Memcached适用场景

    • 高并发:用户量大,数据动态。
    • 数据稳定:不需要实时入库复杂场景。

    ##数据库

    数据库隔离级别

    • Read Uncommitted:允许脏读。
    • Read Committed:只读已提交数据。
    • Repeatable Read:支持非严格的并发控制。
    • Serializable:严格的并发控制,每次查询都获得表锁。

    SQL优化技巧

    • 执行计划:使用EXPLAIN分析查询性能。
    • 索引优化:遵循“最左前缀匹配”规则。
    • 避免全表扫描:避免在WHERE子句中使用诸如!=、>等操作符。

    拿到字符串反转函数

    public class StringReverse {    public static String reverseString(String str) {        if (str == null) {            return null;        }        return new StringBuilder(str).reverse().toString();    }}

    所有内容经过优化后,保留了核心技术点,即便有部分内容被删减或简化,默认信息无需过度扩展,仅需保持核心技术点的严谨性和连贯性。

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

    你可能感兴趣的文章
    MySQL 的mysql_secure_installation安全脚本执行过程介绍
    查看>>
    MySQL 的Rename Table语句
    查看>>
    MySQL 的全局锁、表锁和行锁
    查看>>
    mysql 的存储引擎介绍
    查看>>
    MySQL 的存储引擎有哪些?为什么常用InnoDB?
    查看>>
    Mysql 知识回顾总结-索引
    查看>>
    Mysql 笔记
    查看>>
    MySQL 精选 60 道面试题(含答案)
    查看>>
    mysql 索引
    查看>>
    MySQL 索引失效的 15 种场景!
    查看>>
    MySQL 索引深入解析及优化策略
    查看>>
    MySQL 索引的面试题总结
    查看>>
    mysql 索引类型以及创建
    查看>>
    MySQL 索引连环问题,你能答对几个?
    查看>>
    Mysql 索引问题集锦
    查看>>
    Mysql 纵表转换为横表
    查看>>
    mysql 编译安装 window篇
    查看>>
    mysql 网络目录_联机目录数据库
    查看>>
    MySQL 聚簇索引&&二级索引&&辅助索引
    查看>>
    Mysql 脏页 脏读 脏数据
    查看>>