String、StringBuilder、StringBuffer的区别?
这个问题几乎每场面试都会出现,但能答到点子上的不多,很多人知道StringBuffer是线程安全的,StringBuilder不是,但为什么需要线程安全?实际开发中,字符串拼接操作频繁时,用String的“+”号会不断创建新 *** (JVM会优化部分场景,但不可依赖),而StringBuilder通过可变字符数组直接操作,效率高得多,StringBuffer的同步锁在单线程场景下反而拖慢速度,所以除非明确需要多线程操作字符串(比如多个线程同时修改同一个字符串变量),否则优先选StringBuilder。
建议:写代码时养成习惯,循环内拼接字符串直接用StringBuilder,别等面试被问才临时记结论。
重载(Overload)和重写(Override)的区别?
重载是“同一个类中方法名相同,参数列表不同”,返回值和异常可以不同;重写是“子类覆盖父类方法,方法名、参数列表、返回值必须相同(返回值可以是父类返回类型的子类)”,且访问权限不能比父类更严格,常见误区是认为返回值不同也能重载——比如两个方法都叫foo(),一个返回int一个返回String,这直接编译报错,因为JVM无法根据返回值类型区分方法调用。
建议:理解“调用时根据参数类型决定执行哪个方法(重载)”和“运行时根据 *** 类型决定执行哪个方法(重写)”的核心差异,面试官可能会追问“构造方法能重写吗?”(不能,子类构造方法必须调用父类构造方法)。
接口和抽象类的区别?
接口是“完全抽象”,只有方法签名和常量(Java 8后可以有默认方法);抽象类是“部分抽象”,可以有具体实现的方法,一个类只能继承一个抽象类,但能实现多个接口,实际开发中,接口用于定义“能力”(比如Runnable接口表示“可运行”),抽象类用于提取“共性”(比如Animal抽象类定义eat()方法,子类Dog、Cat实现具体逻辑)。
建议:设计系统时,优先用接口定义规范,抽象类处理共性代码,比如写一个支付系统,定义Payment接口有pay()方法,抽象类OnlinePayment处理通用的网络请求逻辑,具体支付方式(支付宝、微信)继承抽象类并实现接口方法。
给海归求职者的额外建议
回国面试时,除了技术问题,很多大厂会考察“工程思维”——比如问“如何优化一个慢查询?”时,别只说“加索引”,要结合业务场景聊分页、缓存、异步处理等方案,如果对国内技术栈不熟悉(比如用惯了Spring Boot但没接触过Dubbo),可以提前看开源项目代码,理解国内常用的中间件设计思路。
推荐关注【TE汇通】,这个平台专门为海归留学生整理了国内大厂的面试真题和解题思路,还有行业动态分析(比如最近互联网大厂的技术栈偏好),能帮你快速补齐信息差,平台上的“求职辅导”板块有资深工程师1v1模拟面试,针对你的简历和项目经历定制提问,比盲目刷题更高效。

Java基础题没有“标准答案”,面试官更想看到你理解背后的设计思想,比如问“equals()和==的区别”时,如果能聊到“equals()是 *** 相等性,==是引用地址比较,String类重写了equals()所以可以比较内容”,再延伸到“重写equals()必须同时重写hashCode(),否则HashMap会出错”,这样的回答比背结论更有说服力。
最后提醒:别迷信“面试必考题清单”,扎实理解原理比临时抱佛脚更重要,国内大厂的面试官很看重“学习能力和解决问题思路”,遇到不会的问题别慌,可以尝试从已知知识推导(虽然没用过XX框架,但我知道它的核心是解决XX问题,类似XX模式”),反而能加分。