3.15阿里飞猪Java后台-电话面(40min)已凉

  1. 自我介绍

    • 本硕就读院校,参加过的竞赛、项目

  2. C语言和Java语言的核心区别,有什么特点?

    • C面向过程,Java面向对象

    • C需要自己管理内存,Java自动实现(挖了个坑)

    • C不能跨平台,Java可以跨平台

  3. Java资源(内存)管理是怎么管理的?

    Java的内存管理就是对象的分配和释放问题。(两部分)

    分配 :内存的分配是由程序完成的,程序员需要通过关键字new 为每个对象申请内存空间 (基本类型除外),所有的对象都在堆 (Heap)中分配空间。

    释放 :对象的释放是由垃圾回收机制决定和执行的,这样做确实简化了程序员的工作。但同时,它也加重了JVM的工作。因为,GC为了能够正确释放对象,GC必须监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等,GC都需要进行监控。

  4. Java跨平台的核心是什么?

    • Java虚拟机

  5. 数据结构中的常见排序算法

    • 冒泡、快排、直接插入排序、归并排序、堆排序、选择排序(时间复杂度、稳定性)

  6. 假如机器内存500M,比较大的文件超过500M,文件中放的整数,对整数找出N个最小的,怎么做?

    • 用堆排序,大顶堆和小顶堆,能找到前N个

    • 追问:内存有限的话怎么办?(没答上来...)

      • 将文件分割,用归并排序

  7. Java里的接口和抽象类的区别?

    • 抽象类中可以有抽象方法,也可以有非抽象方法共存

    • 接口,jdk1.8之前只能有抽象方法,jdk1.8之后可以存在一个默认default方法

    • 抽象类只能单继承,接口可以实现多个父接口

    • 抽象类可以存在普通成员变量,接口只能存在static final的变量,必须初始化

  8. final关键字定义一个变量或对象,不可变是什么不可变?

    • 问懵了,没答上,答了个地址不可变

  9. C中有指针,指向地址,java定义对象的这个存储结构是不是这样?

    • 答了JVM中的方法区、堆、栈

    补充

    Java内存划分为5个部分:

    1、栈:存的都是方法中的局部变量,方法的运行一定要在栈当中。

    局部变量:方法的参数,或者是方法内部的变量

    作用域:一旦超出作用域,立刻从栈内存消失

    2、堆:凡是new出来的东西,都在堆中

    堆内存里面的东西都有一个地址值:16进制

    3、方法区:存储.class相关信息,包含方法的信息

    4、本地方法栈:与操作系统相关

    5、寄存器:与CPU相关

  10. Java中的集合,哪些线程安全,哪些不安全?

    • 说了Map、Collection(List、Set)

    • HashMap、Hashtable、HashSet等

    • HashMap不安全、Hashtable安全、ConcurrentHashMap安全、ArrayList不安全、Vector安全(弃用)

  11. 线程安全是底层什么在起作用?

    • 回答了同步

    • 追问:同步是指用锁还是别的什么?

      • 回答了加锁可以实现,在就没问了

  12. HashMap和ConcurrentHashMap底层有哪些不一样的?

    • HashMap:数组+链表(jdk1.7)+红黑树(jdk1.8)

    • ConcurrentHashMap:Segement+HashEntry(jdk1.7),数组+链表+红黑树(jdk1.8)

  13. 想追问红黑树、B+、B、平衡二叉树之类的

    • 抽了,说了个没有太深入了解,以为会问一些东西,结果直接过了

  14. Java多线程里创建线程池,提供哪些接口?

    • 说了个ThreadPoolExecutor........

    补充

    1. newCachedThreadPool 创建一个可缓存的线程池,如果线程池长度超过处理需求,可灵活回收空闲线程,若无可回收,则新建线程

    2. newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待

    3. newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行

    4. newSingleThreadExecutor 创建一个单线程化的线程池,它只会唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO,LIFO,优先级)执行

  15. 使用线程池的时候,最关心的是什么,线程池会导致内存溢出,怎么防止?

    • 创建一个无限队列,会出现内存溢出么,怎么解决?

      • 设置核心参数,设置线程数

      • 代码上做清除(答了些啥...)

    • 最大线程数100,在重复的加入任务,造成阻塞,一直加会导致内存溢出么,有什么方法防止一直加?

      • 答:排队策略,超过限制,被拒绝。

    • 超过线程池大小直接屏蔽么?

      • ........

  16. 项目问题,哪个项目遇到技术挑战的,怎么解决的?

    • 最后唠了15多分钟

#面经##阿里巴巴##Java工程师#
全部评论
有些给出的答案感觉欠妥: 1."程序员需要通过关键字new 为每个对象申请内存空间",对象空间的分配不一定是new出来的 2."所有的对象都在堆 (Heap)中分配空间",还有非堆空间和标量替换栈上分配 3.Java跨平台的核心不单单是Java虚拟机,还有字节码文件。 4."局部变量一旦超出作用域,立刻从栈内存消失",并不是这样,虚拟机栈是通过数组实现的,入栈和出栈相当于移动索引,逻辑上出栈了实际内存上并没有,只有当变量槽被重新覆盖的时候才相当于消失了。 5.凡是new出来的东西,都在堆中,和1一样。 6.本地方法栈相当于本地方法的虚拟机栈。 7.PC寄存器每个线程有一份,存放了当前线程的下一条字节码指令的地址 后面还有很多地方感觉都欠妥,就不一一列举了,希望楼主在给出答案的时候能思考一下正确性,很多在某些方面不清楚的人可能就会因此产生错误的认知。
4 回复 分享
发布于 2021-03-21 01:05
楼主你好,请问你是实习、校招还是社招?
点赞 回复 分享
发布于 2021-04-18 20:22
谢谢楼主! 马上要面飞猪了 紧张~
点赞 回复 分享
发布于 2021-03-21 20:01

相关推荐

字节一面:1.面试官自我介绍+小组业务介绍:C/C++,GPU,异构计算,从上层的编译到下层异步执行2.机器学习有了解过吗...  学校选修课...3.自我介绍4.实习项目介绍5.项目里为什么用dpdk? 为什么要搞用户态协议栈,不搞原来内核的那一套?内核那一套可能有一些固定的额外的开销... kernel bypass  绕过很多开销 零拷贝...6.有没有深入研究过dpdk? 深度分析?不太了解,vpp用的多,注册函数指针,成员到主结构体,初始化...7.介绍一下项目2 ??8.讲一下外碎片场景?9.项目里怎么合并内存的?10.照你这么说,一直遍历,O(N),效率是不是有点低?  怎么优化?合并机制类似于伙伴系统,有效减少外部碎片,确保大块内存请求的连续性。联系到工程上....   11.对于解耦的意义?  12.加什么锁?   自旋锁会不会?13.工作线程 vs 主线程?   锁竞争?  桶锁粒度?   12.mmap  vs brk ?13.进程地址空间? 独立性? 页表? 写时拷贝?  (面试官:嗯嗯,对,这个这个这个不错,这个能回答到这个点还是比较少???)14.mm_sturct讲一下?  进程独立拷贝?  区间划分?  管理?  空间布局,自上而下?15. mmap会映射到哪个区域?  文件?物理内存?堆区?16.你对Linux系统的内存管理这块了解的咋样?17.内存分配算法?  伙伴系统?  内存交换?18.unordered_map vs map?  底层?  优缺点?19.vector底层?  异地扩容?  底层指针调整?  元素深拷贝?20.智能指针?  unique vs shared(具体的场景有什么,如何具体选择) ? 底层?  作用域?21. RAII?   除了智能指针还有哪里用到RAII ??22.左值右值引用?   传递unique_ptr?   std::move??  底层? static_cast?23.cpp编译链接流程??24.类模板?  生成模板类?   在编译的哪个阶段??<br>25.讲一下生成的.o文件的格式?  ELF?  忘了...26.和.so .a的联系?  联系实习动静态库?<br>27.动态库的加载?  磁盘到内存?  如何链接过去的?  入口?28.符号表那一套...  大哥你别问了....<br>29.聊一聊   <<程序员的自我修养...>>30.Python会吗?  脚本?31.手撕 链表题  10min 调试过你咋不用智能指针??   写算法题习惯了....32.反问:1.面试表现咋样,哪里可以提升? 平时咋学习?智能指针和新特性,底层编译链接,再复习复习.深度比较重要,找一个方向深入一下吧...2.字节的项目管理流程,从开始到结束,流程?车轱辘话....这个流程的话,它这个这个其实没有这种统一的标准,因为它像自觉它是一个比较大的一个公司嘛,对吧?然后各种各样的这种业务,各种各样的这种项目,他可能。每个项目它都是不太一样的对吧?他可能有的可能希望你。给自己做一些很创新的事情,让你自己一个人去深入的研究某1块儿,然后去独立的去。完成整个一个项目。但是有的项目它可能就是希望你去在他规划的这个大项目里边去让你做某1块事情,然后更加讲究这种分工协作。<br><br>
点赞 评论 收藏
分享
评论
9
54
分享

创作者周榜

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