大家好,我是小牛, 微软程序员一枚,之前经常看见大家在 牛客上有 面经分享,但大多数没有答案。由于小牛和几个BAT小伙伴整理了相关八股文题库,这次就当一回工具人,把题目和对应的答案奉上。
这次面经基本都被我之前整理的大厂面试八股文涵盖了,有兴趣的同学可以点我头像,查看我之前的讨论贴查看我之前整理的八股文
Java八大基本数据类型,位数
byte: 占用1个字节,取值范围-128 ~ 127
short: 占用2个字节,取值范围-2^15^ ~ 2^15^-1
int:占用4个字节,取值范围-2^31^ ~ 2^31^-1
long:占用8个字节
float:占用4个字节
double:占用8个字节
char: 占用2个字节
boolean:占用大小根据实现虚拟机不同有所差异
Java访问修饰符
default: 默认访问修饰符,在同一包内可见
private: 在同一类内可见,不能修饰类
protected : 对同一包内的类和所有子类可见,不能修饰类
public: 对所有类可见
如何判断对象相等
首先开发者需要定义一下,什么情况下两个对象相等。其次完成定义后,重写equal方法。
equals是Object类提供的方法之一,每个Java类都继承自Object类,所以每个对象都具有equals这个方法。Object类中定义的equals方法内部是直接调用 == 比较对象的。但通过覆盖的方法可以让它不是比较引用而是比较数据内容。
不同数据类型之间如何转换
这里猜测是基本数据类型和Object类型。那就讲讲装箱拆箱。Java对基本数据类型和Object类型实现了自动类型转换。
对于Java基本数据类型,均对应一个包装类。
装箱就是自动将基本数据类型转换为包装器类型,如int->Integer
拆箱就是自动将包装器类型转换为基本数据类型,如Integer->int
JVM构成
线程私有的运行时数据区: 程序计数器、Java 虚拟机栈、本地方法栈。
线程共享的运行时数据区:Java 堆、方法区。
Redis主从复制
在主从复制中,有主库(Master)节点和从库(Slave)节点两个角色。从节点服务启动会连接主库,并向主库发送SYNC命令。
主节点收到同步命令,启动持久化工作,工作执行完成后,主节点将传送整个数据库文件到从库,从节点接收到数据库文件数据之后将数据进行加载。此后,主节点继续将所有已经收集到的修改命令,和新的修改命令依次传送给从节点,从节点依次执行,从而达到最终的数据同步。
通过这种方式,可以使写操作作用于主库,而读操作作用于从库,从而达到读写分离
Redis基本数据类型实现原理
字符串:采用类似数组的形式存储 list:采用双向链表进行具体实现 hash:采用hashtable或者ziplist进行具体实现 集合:采用intset或hashtable存储 有序集合:采用ziplist或skiplist+hashtable实现
Redis快的原因
- redis是基于内存的数据库,内存数据读取存储效率远高于硬盘型
-
redis采用多路复用技术通过采用epoll的非阻塞IO,提升了效率
全部评论
(11) 回帖