小米Java开发一面面经

  1. 算法题:有序数组找某个值第一次和最后一次出现的位置
  2. 讲一下什么是GC,为什么需要GC?
  3. 有哪些常见的内存泄漏场景?(没答上来,扯了一句ThreadLocal如何解决内存泄漏的)
  4. 如何判断一个对象可不可以被回收?
  5. JDK 8默认的垃圾回收器是什么?(答错了,答成CMS了,然后就接着问了CMS)
  6. 为什么要分代回收?分代回收背后的思想?
  7. 有哪些GC算法?为什么新生代采用标记复制?为什么老年代采用标记整理和标记清除?
  8. 标记复制和标记整理算法的对比?
  9. 常用的集合框架有哪些?(搭了HashMap,接着问HashMap)
  10. 为什么HashMap的查找时间复杂度是O(1)?
  11. 链表查找的时间复杂度?为什么JDK 8要引入红黑树?
  12. HashMap元素过多了怎么解决?(扩容,问了一下面试官要不要详细讲一下扩容,面试官说不用了,面试结束)

大概半个多小时,就问了GC和HashMap,能回忆起来的就这些了,感觉问题有点少,是不是要凉
#面经##小米##Java工程师##校招#
全部评论
第三题: 1.非静态内部类的静态实例 非静态内部类会持有外部类的引用,如果非静态内部类的实例是静态的,就会长期的维持着外部类的引用,组织被系统回收,解决办法是使用静态内部类 2.多线程相关的匿名内部类和非静态内部类 匿名内部类同样会持有外部类的引用,如果在线程中执行耗时操作就有可能发生内存泄漏,导致外部类无法被回收,直到耗时任务结束,解决办法是在页面退出时结束线程中的任务 3.Handler内存泄漏 Handler导致的内存泄漏Handler内部message是被存储在MessageQueue中的,有些message不能马上被处理,存在的时间会很长,导致handler无法被回收,如果handler是非静态的,就会导致它的外部类无法被回收,解决办法是1.使用静态handler,外部类引用使用弱引用处理2.在退出页面时移除消息队列中的消息 4.Context导致内存泄漏 根据场景确定使用Activity的Context还是Application的Context,因为二者生命周期不同,对于不必须使用Activity的Context的场景(Dialog),一律采用Application的Context,单例模式是最常见的发生此泄漏的场景,比如传入一个Activity的Context被静态类引用,导致无法回收 5.静态View导致泄漏 使用静态View可以避免每次启动Activity都去读取并渲染View,但是静态View会持有Activity的引用,导致无法回收,解决办法是在Activity销毁的时候将静态View设置为null(View一旦被加载到界面中将会持有一个Context对象的引用,在这个例子中,这个context对象是我们的Activity,声明一个静态变量引用这个View,也就引用了activity) 6.WebView导致的内存泄漏 WebView只要使用一次,内存就不会被释放,所以WebView都存在内存泄漏的问题,通常的解决办法是为WebView单开一个进程,使用AIDL进行通信,根据业务需求在合适的时机释放掉 7.资源对象未关闭导致 如Cursor,File等,内部往往都使用了缓冲,会造成内存泄漏,一定要确保关闭它并将引用置为null 8.集合中的对象未清理 集合用于保存对象,如果集合越来越大,不进行合理的清理,尤其是入股集合是静态的
7 回复
分享
发布于 2020-09-21 21:41
楼主你好,请问你是实习、校招还是社招?
点赞 回复
分享
发布于 2020-09-21 16:25
小红书
校招火热招聘中
官网直投
同学,请问你是什么时候笔试的呀。。。
点赞 回复
分享
发布于 2020-09-21 19:56
**,我也以为是cms呢
点赞 回复
分享
发布于 2020-09-21 22:03

相关推荐

1 15 评论
分享
牛客网
牛客企业服务