博客
关于我
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/

    你可能感兴趣的文章
    Python RSA操作
    查看>>
    Python轻松实现统计学中重要的相关性分析
    查看>>
    Python scrapy 常见问题及解决 【遇到的坑】
    查看>>
    Python Seborn热图数据的动态更新
    查看>>
    Python Seborn绘制空白直方图
    查看>>
    Python Selenium - 获取href值
    查看>>
    Python Selenium实现自动化测试及Chrome驱动使用!
    查看>>
    Python Selenium搭建UI自动化测试框架
    查看>>
    Python Selenium模块详解
    查看>>
    Python selenium爬取影评生成词云图
    查看>>
    python selenium自动化测试报告
    查看>>
    Python selenium自动化测试框架实战 —— 登录测试案例
    查看>>
    Python Selenium设计模式 —— POM
    查看>>
    Python Serial:如何使用 read 或 readline 函数一次读取多个字符
    查看>>
    Python set([]) 如何检查两个对象是否相等?一个对象需要定义哪些方法来自定义它?
    查看>>
    Python setup.py:数据文件无法复制目录:不存在或不是常规文件
    查看>>
    Python setuptools sdist:仅安装版本化文件
    查看>>
    Python Shell下使用matplotlib
    查看>>
    Python Slice How-to,我知道Python Slice,但我怎么才能使用内置的Slice对象呢?
    查看>>
    python socket分包发送数据
    查看>>