当前位置: 首页 > 面试经验 >

江苏某互联网公司 Java 面经-25分钟

优质
小牛编辑
78浏览
2024-04-01

江苏某互联网公司 Java 面经-25分钟

江苏某互联网公司 Java 面经

刚面完,写一份面经~,总体来说,可能说既是八股又不是常规八股,因为面试官会追问,不是一些表面的东西去说,面试体验良好.jpg。

1)自我介绍

面试官:可以简单介绍一下自己吗?

2)毕业时间?

面试官:你是什么时候毕业?

我:25届,明年。

3)计划考研?

面试官:后面计划考研吗?

我:我是打算直接就业的,不考研(我也得能考上啊...)

4)Java 面向对象?

面试官:怎么理解 Java 面向对象?

我:万物皆对象,对客观事物进行抽象,比如人是一个父类,然后学生、老师等等都可以去 extends 人这个父类,做一些独特的实现,比如学习和教授课程。面向对象三特性:封装、继承、多态、这边这可以一个特点举一个例子讲。

5)在项目中是怎么利用到的?

面试官:你在项目中怎么利用三大特性的?

我:我用设计模式的例子去举例吧,比如我用到适配器模式,装饰器模式,这些就需要用到继承、封装、多态,这边可以详细讲一下某个设计模式的具体实现,以及作用,比如装饰器,动态给对象添加一些职责,是大盒子套小盒子的原理,然后调用的时候类似与前端的事件冒泡和事件捕获机制。

6)简单工厂、抽象工厂?

面试官:简单工厂、工厂方法、抽象工厂讲一下?

我:简单工厂,传输参数,去创建定制的商品,但不能进行动态的添加,必须要修改原有的工厂类,违背了设计模式的开闭原则(对拓展开放,多修改关闭),工厂方法,为每个不同的品牌、种类创建不同的工厂,每个工厂再自己创建产品,抽象工厂通过一组相关的工厂方法,增加具体工厂和产品族会很方便,符合开闭原则,但同样增加新的产品等级结构会很麻烦,一般还是简单工厂+策略模式+装饰器模式用的多一些。

7)ArrayList 和 LinkedList 迭代遍历 1亿条数据?

面试官:ArrayList 和 LinkedList forEach 迭代遍历 1亿条数据?谁快?

我:面试官这里是假设,实际上根本不用考虑1亿,ArrayList 由于是数组,数组是连续的内存地址,而 LinkedList 是利用指针,不连续的内存地址,连续的内存地址是可以利用缓存的,也就是 CPU 三级缓存,而不连续的内存地址需要去访问主存(物理内存),非缓存(工作内存)。计算机在读取内存中数据时,优先读取缓存中的数据,缓存速度>内存,而相邻的内存地址,计算机可以一次性读取多个数据库并存储在缓存,链表是随机访问的,需要多次从内存中数据,导致缓存中数据被频繁替换,降低缓存效率。为什么按数据块读取?不能单独读取某个地址的数据吗?内存页的概念,Linux 大多数都是 4KB,部分处理器有 8KB、16KB、64KB,4KB 依然是主流(历史遗留问题,不是说内存利用率最佳)。

8)C 语言?

面试官:会用 C 语言开发吗?

我:大一学过 C 语言,然后就没动过了。(原谅我理解不了 C 的有趣之处)

9)Object 的 hashCode 和 equals?

面试官:Object 的 hashCode 和 equals 为什么要重写,假如没有重写 hashCode 会有什么问题?在哪些场景下会发生?

我:当判断两个对象是否相等,先利用 hashCode 判断,因为哈希的效率会比直接 equals 高很多,但哈希冲突时,再用 equals 比较对象内容。没有重写 hashCode 会导致约定的失效,Java 约定 equals 和 hashCode 的返回要保持一致,equals 为true,hashCode 必为 true,不重写 hashCode 可能导致相同对象存储在不同位置。增加哈希冲突可能性。场景:当 Student 类没有重写 hashCode,导致两个内容相同的 Student,放入 HashSet 并没有被去重,HashMap 同样存在放入的问题。

10)HashMap 的 LoadFactor

面试官:LoadFactor 负载因子参数怎么调?什么时候调?

我:负载因子越大,散列表的填充程度越高,插入和查找性能下降,哈希冲突概率变大,负载因子越小,查找和插入性能越高,哈希冲突概率降低,但空间利用率下降,可以根据追求时间还是空间去做相对应的调整。

11)Synchronized 和 Lock 的选择

面试官:Synchronized 和 Lock 级别的锁的区别?

我:Synchronized 是 JVM 级别,随着 JDK 版本升级会不断优化,Lock 是 API 级别,Synchronized 是关键字,Lock 是接口,前者隐式加锁,后者显示加锁,Synchronized 采用的对象锁 ObjectMonitor 监视器,Lock 采用的是 AQS 抽象队列同步器(CLH 锁),synchronized 阻塞式加锁,Lock 非阻塞式,支持中断和超时时间,Synchronized 非公平,Lock 公平,前者悲观锁,后者 CAS 乐观锁,Synchronized 不能获取锁状态,Lock 可以用 tryLock 获取锁的状态,然后就是 Lock 必须在 Finally 中手动释放锁,而 Synchronized 代码执行完毕或出现异常后自动释放。

12)微服务和云原生?

面试官:微服务和云原生了解多少,策略或者使用场景?

我:云原生没有了解过(这块 b 不出来什么东西,就不吹牛了),微服务了解了下基本的五大组件,后面去介绍五大组件和具体的作用,提到微服务服务拆分的好处,后面面试官问 K8S 和 Docker,我只了解过 Docker,K8S 没学过...

13)方向选择?

面试官:你是希望做前端还是后端?

我:肯定是后端,全栈也可以(前端写的一坨...)

反问:技术栈和业务,人工智能公司,大模型,车载、家具....一个组 Java 的传统 SpringBoot,一个 Lua 的 OpenResty。

反问:面试表现和建议,实习生要求不高....

面了 25 分钟,电话面这个时间也正常,下一份面经(腾讯云智)正在准备中~

AI 智能图书馆开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

Github & Gitee 总计已经 1000+ Star,2 W+ 访问!

⭐点赞⭐收藏⭐不迷路!⭐

 类似资料: