友邦咨询(成都)- Java开发 一面 面经

1. 英文自我介绍

面试官要求用英文做自我介绍,主要包括个人基本信息、教育背景、技术栈、项目经验以及为什么应聘这个岗位。建议准备2-3分钟的英文介绍,突出自己的技术能力和学习能力。

2. Java面向对象的三大特性是什么?

Java面向对象的三大特性是封装、继承和多态。

封装:将数据和操作数据的方法封装在类中,通过访问修饰符(private、protected、public)控制访问权限,隐藏内部实现细节,只暴露必要的接口。这样可以提高代码的安全性和可维护性。

继承:子类可以继承父类的属性和方法,实现代码复用。Java使用extends关键字实现继承,支持单继承,但可以通过接口实现多重继承的效果。继承体现了"is-a"的关系。

多态:同一个方法调用可以有不同的执行结果。多态分为编译时多态(方法重载)和运行时多态(方法重写)。运行时多态通过父类引用指向子类对象实现,调用方法时根据实际对象类型执行相应的方法。多态提高了代码的灵活性和扩展性。

3. List、Set、Map的区别是什么?

这三个都是Java集合框架中的接口,但用途不同:

List:有序集合,允许重复元素,可以通过索引访问元素。常用实现类有ArrayList(基于数组,查询快)、LinkedList(基于链表,插入删除快)、Vector(线程安全但性能较低)。适用于需要保持元素顺序或需要通过索引访问的场景。

Set:无序集合(LinkedHashSet除外),不允许重复元素。常用实现类有HashSet(基于HashMap,无序)、LinkedHashSet(保持插入顺序)、TreeSet(基于红黑树,自动排序)。适用于需要去重或判断元素是否存在的场景。

Map:键值对集合,key不允许重复,value可以重复。常用实现类有HashMap(无序,允许null)、LinkedHashMap(保持插入顺序)、TreeMap(按key排序)、Hashtable(线程安全但过时)。适用于需要通过key快速查找value的场景。

4. Hashtable和HashMap的区别?

主要区别有以下几点:

线程安全:Hashtable是线程安全的,方法都加了synchronized关键字,但性能较低;HashMap是线程不安全的,性能更好。如果需要线程安全,建议使用ConcurrentHashMap。

null值:HashMap允许一个null key和多个null value;Hashtable不允许null key和null value,否则会抛出NullPointerException。

初始容量和扩容:HashMap默认初始容量是16,扩容时变为原来的2倍;Hashtable默认初始容量是11,扩容时变为原来的2倍+1。

继承关系:HashMap继承自AbstractMap;Hashtable继承自Dictionary类。

效率:HashMap效率更高,因为没有同步开销。

迭代器:HashMap使用Iterator迭代器,是fail-fast的;Hashtable使用Enumerator,不是fail-fast的。

实际开发中,Hashtable基本已经被淘汰,推荐使用HashMap或ConcurrentHashMap。

5. MySQL事务的特性和隔离级别有哪些?

事务的四大特性(ACID):

原子性(Atomicity):事务是最小的执行单位,要么全部成功,要么全部失败回滚,不会出现部分成功的情况。通过undo log实现。

一致性(Consistency):事务执行前后,数据库从一个一致性状态转换到另一个一致性状态,数据的完整性约束不被破坏。

隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务。通过锁机制和MVCC实现。

持久性(Durability):事务一旦提交,对数据库的改变是永久性的,即使系统故障也不会丢失。通过redo log实现。

四种隔离级别(从低到高):

读未提交(Read Uncommitted):可以读取其他事务未提交的数据,会出现脏读、不可重复读、幻读问题。

读已提交(Read Committed):只能读取已提交的数据,解决了脏读,但仍有不可重复读和幻读问题。Oracle默认级别。

可重复读(Repeatable Read):同一事务中多次读取同一数据结果一致,解决了不可重复读,但可能有幻读。MySQL默认级别,通过MVCC和间隙锁解决了幻读。

串行化(Serializable):最高隔离级别,事务串行执行,完全避免并发问题,但性能最差。

实际使用中,MySQL默认的可重复读级别能满足大部分需求。

6. MySQL索引相关知识

索引是帮助MySQL高效获取数据的数据结构,类似于书的目录。

常见索引类型:

主键索引(Primary Key):唯一且不能为null,一个表只能有一个主键索引。

唯一索引(Unique):索引列的值必须唯一,但允许null。

普通索引(Index):最基本的索引,没有限制。

全文索引(Fulltext):用于全文搜索,只有MyISAM和InnoDB(5.6+)支持。

组合索引:多个字段组合建立的索引,遵循最左前缀原则。

索引的数据结构:

InnoDB使用B+树,所有数据存储在叶子节点,叶子节点之间有指针连接,适合范围查询。

主键索引(聚簇索引)的叶子节点存储完整的行数据,辅助索引的叶子节点存储主键值,需要回表查询。

索引的优缺点:

优点:大大加快查询速度,减少IO次数;可以加速表与表之间的连接;使用分组和排序时可以显著减少时间。

缺点:占用存储空间;降低更新表的速度,因为需要维护索引;需要花时间研究建立最优的索引。

7. Thread类中有哪些方法?什么场景会出现线程不安全?

Thread类的常用方法:

start():启动线程,JVM会调用该线程的run方法。

run():线程执行的代码逻辑,不能直接调用,否则就是普通方法调用。

sleep(long millis):让当前线程休眠指定时间,不释放锁。

join():等待该线程执行完毕,当前线程才继续执行。

yield():让出CPU时间片,让其他线程有机会执行。

interrupt():中断线程,设置中断标志位。

isAlive():判断线程是否还活着。

setName()/getName():设置/获取线程名称。

setPriority()/getPriority():设置/获取线程优先级。

线程不安全的场景:

多个线程同时修改共享变量:比如多个线程对同一个计数器进行++操作,因为++不是原子操作,会导致结果不正确。

集合类的并发修改:ArrayList、HashMap等非线程安全的集合在多线程环境下会出现问题。

单例模

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Java面试圣经 文章被收录于专栏

Java面试圣经,带你练透java圣经

全部评论

相关推荐

刚刷到字节跳动官方发的消息,确实被这波阵仗吓了一跳。在大家还在纠结今年行情是不是又“寒冬”的时候,字节直接甩出了史上规模最大的转正实习计划——ByteIntern。咱们直接看几个最硬的数,别被花里胡哨的宣传词绕晕了。首先是“量大”。全球招7000多人是什么概念?这几乎是把很多中型互联网公司的总人数都给招进来了。最关键的是,这次的资源分配非常精准:研发岗给了4800多个Offer,占比直接超过六成。说白了,字节今年还是要死磕技术,尤其是产品和AI领域,这对于咱们写代码的同学来说,绝对是今年最厚的一块肥肉。其次是大家最关心的“转正率”。官方直接白纸黑字写了:整体转正率超过50%。这意味着只要你进去了,不划水、正常干,每两个人里就有一个能直接拿校招Offer。对于2027届(2026年9月到2027年8月毕业)的同学来说,这不仅是实习,这简直就是通往大厂的快捷通道。不过,我也得泼盆冷水。坑位多,不代表门槛低。字节的实习面试出了名的爱考算法和工程实操,尤其是今年重点倾斜AI方向,如果你简历里有和AI相关的项目,优势还是有的。而且,转正率50%也意味着剩下那50%的人是陪跑的,进去之后的考核压力肯定不小。一句话总结: 27届的兄弟们,别犹豫了。今年字节这是铁了心要抢提前批的人才,现在投递就是占坑。与其等到明年秋招去千军万马挤独木桥,不如现在进去先占个工位,把转正名额攥在手里。
喵_coding:别逗了 50%转正率 仔细想想 就是转正与不转正
哪些公司开暑期实习了?
点赞 评论 收藏
分享
评论
2
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务