java后端面经——(默写)熟悉第一遍

本文涵盖了Java后端面试的一些核心知识点,包括JDK、JRE、JVM的关系,面向对象的特点,线程安全概念,GC垃圾回收机制,字节码理解,以及hashCode()和equals()的关系。还涉及到了final关键字的作用,抽象类与接口的区别,数据库优化策略,常用容器的特性比较,以及String、StringBuilder和StringBuffer的使用场景。最后提到了Hashtable和HashMap的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:
jdk java开发工具
jre java运行时环境
jvm java虚拟机
包含关系:jdk(jre(jvm+其他工具))

2:面向对象的理解:
优点:忘了 易于代码扩展,复用和维护
专注于对象,先对象再考虑内部属性和行为
封装,继承,多态:
封装:封装对象,限制外部对其访问。1:javabean类,私有属性,用getset方法访问2:对象映射关系 (是对象关系映射,不需要关系如何建立连接)
继承:子类沿用父类属性和方法,并扩展新属性与方法
多态:使用同一个方法,实现逻辑和结果不同。条件(1继承,2方法重写,3父类引用指向子类)

3:线程安全理解:
堆是线程和进程共有的领域。
堆是进程中最大的一个内存。
线程安全:多个线程,不需要采用其他同步机制,访问同一个对象,结果正确,就是安全。
栈是在线程内部封死的,是每一个方法生成的。
线程不安全:堆是一个大的内存空间,存放大量的对象实例和用于开辟对象实例和数组空间(。),是共享区域,进程中的所有线程都可以访问到这个区域,可能会造成线程不安全。

4:gc垃圾回收:
引用计数法:每一个对象都有引用属性,新建一个引用计数+1,被释放-1,为0被回收(对于相互引用的对象无效)
可达性分析法:gc roots 会有一个引用链,逐级向后延伸,不在引用链上的对象,会被回收。
可达性分法会对对象使用两次标记:
1,是否在引用链上
2,是否覆盖Finalizer()
没有覆盖的,回收
覆盖的,没有执行的,放入Finalizer队列中,进行执行
执行了的,再判断1是否在引用链上。

5:字节码的认识
java代码-》编译-》字节码-》虚拟机-》不同平台的解释器-》机械码

6:hashcode()和equals()关系
所有类都有hashcode();两者都用于比较是否为同一个对象
新建一个对象:会有hashset,计算hashcode(),如果set里面没重复,就插入,有相同的值,就用equals()判断。可以减少使用equals()次数,加入效率。

7,final的认识
对类:不能被继承
对方法:不能被重写,只能重载
对变量:不可改变
后面的好难: 局部内部类和匿名内部类只能访问局部final变量。
因为编译生成两个class,内部类用final变量延长生命。

8,abstract和接口类:
前:对类本质的抽象 后:对类行为的抽象
1:函数:前普通成员函数 后public abstract
2:变量:都有; 后只能为 public static final
3:一个类只能继承一个abstract,但能实现多个接口
4:接口的性价比更高,实现简单,

9:数据库的简单优化
1,使用索引
2,优化表结构
3,优化系统配置
4,优化服务器性能
优先级:
select from on join where groupby union orderby limit
from on jion where groupby having select distinct orderby limit;
使用索引:
1,where中 字段前不要用模糊查询
2,where中 =前不要加表达式或函数
3,不用1=1
4,不用null
5,(好难记哦)
6,

1,where中的 字段前不要加模糊查询
2,where中的 表达式左侧不要使用函数表达式
3,不要使用 1=1 查询
4,不要使用nulll查询
5,不要使用 不等于 <> !=
6,不要用 or 可以用union

10,容器
vector:动态数组。空间满后,申请新区域空间,再复制。线程安全
arraylist:底层是动态数组,线程不安全,查找效率高
linkedlist:线程不安全,插入和删除效率高

set和list:
1,存储顺序不同,前者无序
2,set会去重
3,忘了。 set不允许插入空值
4,忘了。 实现的类不同。hashset,treeset,linkedhashset;ArrayList,linkedlist,vector;

array和arraylist:
1,前存储基本数据类型和对象;后者只存对象
2,后者可使用的方法更多,因为是实现类
3,忘了 。前者固定大小,后者自动扩展大小

11,string,error,equals
string:常量,线程安全,增删改消耗很大空间
stringbuilder:变量,线程不安全,自动扩容,增删改是在原字符串基础上
stringbuffer:变量,线程安全,自动扩容,线程安全,性能没哟builder高

error:(忘了) 正常情况下,不太可能出现的错误,不可复转的,不便于也不需要进行捕捉。
exception:(忘了) 可以预料到的错误,分为可检查与不可检查的错误。可检查错误,可以进行捕捉,添加操作。

==:基本数据比较数值,引用类型比较地址
equals:比较数值

12:hashtable和 hashmap
线程安全, 不安全
key,value:hashtable不可以为null,后可以
idx计算方式不同
遍历方式不同:前:有自己的一个方法 后:用iterater
自动扩容,11,2n+1, 自动扩容 ,16,2n;
(忘光了)
外部:
1,同步,线程安全;不同步,线程不安全
2,继承不同,dictionary类,abstractmap类
内部:
1,初始化空间,扩容:hashtable 11,2n+1;hashmap 16,2n;
2,key,value:hashtable都不能为空,hashmap可以为空。
3,遍历方式:hashtable:自己的方法(Enumeration) hashmap:iterator
4,计算内部地址(idx)值不同:
hashtable,用key的hash加工后%对象的length
hashmap,用key的hash进行与运算(冲突较多)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值