网易有道 一面凉经

网易有道 Android 一面挂

2020/2/25

  • 自我介绍,项目中有什么Android比较熟悉的。(okhttp)
  • 使用到了线程池,怎么用的。
  • int与Integer int a=1; Integer b=1; Integer c = new Integer(1); a == b? a == c? b == c?(答案true,true,false。b与c不同是因为new了一个对象。其他相同是因为自动装箱拆箱Integer内部还是int value,equals()里面就是判断this.value == ((Integer)obj).intValue())(https://www.jianshu.com/p/2d2b5b35410c)
  • 另一个介绍堆内存、栈内存:(https://blog.csdn.net/sinat_41144773/article/details/89742329)
  • Integer a = 128; Integer b = 128; 为什么不相等(https://www.jianshu.com/p/5b2837e063fd)
  • JVM内存机制。
  • 怎样创建线程(继承Thread,实现runnable,Callble、future,线程池)先看深入理解java虚拟机(讲hotspot jvm) 再看这个链接https://www.cnblogs.com/UncleWang001/articles/10422289.html
  • 多线程 wait与sleep
  • 怎样退出一个线程?(老版的stop已经被废弃(由于stop强制停止的特性(立刻释放所有monitors),可能会导致一系列难以处理的问题)interrupt()是一个“很软”的操作,也就是提醒线程应该结束了,至于如何结束,什么时候结束,以及是否需要结束,都是由线程自行处理。所以,interrupt()的使用,会让开发做更多的事,但这是有必要的,因为只有线程自己判断(isInterrupted),才知道如何合适的结束自己。)(https://www.cnblogs.com/alimayun/p/10928573.html)
  • hashMap说一下(https://blog.csdn.net/l18848956739/article/details/85998121)
  • 接上一个(https://blog.csdn.net/striveb/article/details/84657326)
  • 设计模式讲一下;建造者模式特点,有什么优点(一个复杂对象的建立,一些基本部件不会变,而其组合经常变化。
    优点:建造者独立,易扩展。 便于控制细节风险。
    缺点:产品必须有共同点,范围有限制。 如果内部变化复杂,会有很多的建造类。
    使用场景:需要生成的对象具有复杂的内部结构,需要生成的对象内部属性本身相互依赖)
  • 单例模式有哪些实现方法(饿汉式、懒汉式、双检索、内部类、枚举) 饿汉式与懒汉式有什么区别,用在什么场景。(https://blog.csdn.net/nsw911439370/article/details/50456231)
  • Activity启动模式。 说一下SingleTask; A是standard模式,用它启动B(SingleTask)发生什么;(如果B需要的任务栈是A所在的,那么B进入A的任务栈。否则新建一个任务栈)
  • ActivityA启动B的生命周期改变(A.onPause-B.onCreate-B.onStart-B.onResume-A.onStop-A.onDestroy)
  • handler说一下,它的post与send区别(区别就是调用post方法的消息是在post传递的Runnable对象的run方法中处理,而调用sendMessage方法需要重写handleMessage方法或者给handler设置callback,在callback的handleMessage中处理并返回true)
    https://www.jianshu.com/p/43d6cd7b06f1
  • 还使用过什么多线程通信(runOnUithread、AsyncTask)
  • 事件分发机制讲一下。
  • RecyclerView和ListView区别。(提到了ViewHolder那么说一下他是干什么的)(ViewHolder造成图片加载混乱(https://blog.csdn.net/lililijunwhy/article/details/79869491))
  • 算法:链表找环怎么实现?(快慢指针实现)
  • 写算法:判断树的子树。(递归实现。有一些边界判断瑕疵,函数定义忘写返回值,main函数写了返回值。。。)
//== 基本数据类型判断值相等 引用类型判断引用相等(内存地址)
    //equals() Integer重写了Object的equals()方法,直接比较的具体值是否相等
    public static void main(String[] args) {
        int a = 1;//存在常量池中
        Integer b = 1;//也是在常量池,因为拆箱所以和a是同一个东西。
        // 内存分析:首先从常量池找有没有该数据,有则返回引用,无则在常量池中创建该数据再返回引用
        Integer c = new Integer(1); //内存分析:首先找常量池有没有该数据,如果没有则先在栈内存创建该引用c
        //然后在堆内存创建具体对象(new Integer(1)),并且在常量池中创建该对象,返回栈内存的引用;如果有则直接返回栈内存地址的引用
        System.out.println(a==b); //true 非new Integer拆箱后是基本数据类型(Integer里面是一个int),都存在常量池,值相等
        System.out.println(a==c); //true new Integer与int比较,这个特殊需要注意。他会强制把new Integer拆箱成为int再进行比较
                                  //所以这里还是从常量池中比较
        System.out.println(b==c); //false 非new Integer与new Integer比较。 因为常量池引用与栈内存引用不同
    }
    //jvm 1.7之前常量池存在方法区,1.7存在永久代,1.7以后存在元空间,就是pc直接内存(因为1.8删除了永久代)
    //object的equals方法默认是==,String重写了equals判断值是否相等
    public boolean equals(Object obj) {
        return (this == obj);
    }
    //默认的,Object 类的hashCode()方法返回这个对象存储的内存地址的 hash 值。
#网易有道##面经##校招##安卓工程师#
全部评论
加油!!!
点赞 回复 分享
发布于 2020-04-19 16:00

相关推荐

评论
4
14
分享
牛客网
牛客企业服务