蚂蚁金服 后端一面复盘
蚂蚁国际 电话面试
面试官很认真,也很nice,严肃地探索问题答案同时,聊到一些点也会忍不住笑了出来
-
你对软件工程的理解?软件工程解决了什么问题?
把变成从一种单打独斗的行为变成一个团队协作的工程化的事情,提高代码的可维护性和可复用性
-
提供了哪些方法来提高可复用性?开闭原则不会导致代码非常臃肿吗?
面向对象编程,开闭原则。确实是会的,这也是我们滥用设计模式会带来的一个常见问题
-
谈谈你对并发编程的理解?
并发编程提高了计算机资源的利用率,分为并发和并行两种,吧啦吧啦
-
Java是如何实现的并发编程?这是属于并行还是并发?
创建Thread线程去执行任务。单核cpu上跑是并发,多核cpu上跑可以是并行?
-
并发编程会产生什么问题?
数据冲突,数据竞争,比较典型的有:写覆盖 -- 多线程执行 i ++操作
-
什么是原子化操作?
要么全部执行,要么全都不执行
-
计算机层面是如何使i ++成为原子操作的?
不了解,只知道Java语言层,可以通过加锁或者原子类的方式实现原子操作
-
JMM了解吗?
一开始答成了JVM运行时数据区。纠正后回答了,Java内存模型有一个主内存,还有一个cpu缓存,如果一个普通变量,更改了数据,但是没有及时刷到主内存,或者是其他变量没有从主内存读取新值,也会产生数据错误
-
为什么要有cpu缓存?
提高数据访问的效率,Java语言认为从内存访问数据的速度还不是最快的,能把一部分数据放到cpu缓存上是更好的
-
你刚才也提到了JVM运行时数据区中的栈,那你继续介绍一下其他部分吧?
程序计数器、虚拟机栈、本地方法栈、堆、方法区吧啦吧啦
-
对象实例是放在哪的?对象引用是放在哪的?
-
除了在栈和堆上,Java还有什么数据是存在这两个区域之外的?
应该是方法区里的东西吧,里面会包括静态变量、常量、class类文件等等
-
了解堆外内存吗?
不了解
-
OOM可能有哪些原因造成?
堆上对象的数量和大小太大,超出了堆的大小, OutOfMemory
栈上分为两种情况:栈大小为静态时,StackOverflow
动态时,OutOfMemery
-
Error和Exception的区别了解吗
不太了解。在面试官的引导下,给出的回答:Exception可以通过try catch处理,不影响程序的正确执行;Error一般是比较严重的错误,可能导致服务宕掉
- mysql的InnoDB存储引擎了解吗?它有哪些特点?(八股文)
-
索引用的什么数据结构?B+树的结构特点?(八股文)
- B+树如何控制高度?
-
开放性问题:从小到大一直坚持的一件事情?
-
本来做不好,后来做的好的事情?如何做到的?
-
反问:部门情况?