本文共 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 GC和Major 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的实现类
- HashMap和HashSet的背后逻辑是哈希表。
- TreeMap和LinkedHashMap是基于 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/