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

    你可能感兴趣的文章
    nginx配置域名和ip同时访问、开放多端口
    查看>>
    Nginx配置多个不同端口服务共用80端口
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-动静分离实例:搭建静态资源服务器
    查看>>
    Nginx配置实例-反向代理实例:根据访问的路径跳转到不同端口的服务中
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    Nginx配置文件nginx.conf中文详解(总结)
    查看>>
    Nginx配置自带的stub状态实现活动监控指标
    查看>>
    nginx配置详解、端口重定向和504
    查看>>
    Nginx配置负载均衡到后台网关集群
    查看>>
    Nginx配置限流,技能拉满!
    查看>>
    Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?
    查看>>
    Nginx:NginxConfig可视化配置工具安装
    查看>>
    ngModelController
    查看>>
    ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
    查看>>
    ngrok内网穿透可以实现资源共享吗?快解析更加简洁
    查看>>
    NHibernate学习[1]
    查看>>
    NHibernate异常:No persister for的解决办法
    查看>>
    NIFI1.21.0_java.net.SocketException:_Too many open files 打开的文件太多_实际操作---大数据之Nifi工作笔记0051
    查看>>