美文网首页Android面试准备(遥远的憧憬未来)
Android/Java/移动端(图形图像)/跨平台(RN、Fl

Android/Java/移动端(图形图像)/跨平台(RN、Fl

作者: MonkeyLei | 来源:发表于2020-02-01 17:15 被阅读0次

    目录:

    A. Java基础相关-1-字符串、类、泛型、==、equals等

    B. TODO

    2018年算是互联网的寒冬,一大波公司宣扬裁员,也确实裁掉了一部分,我慌了。像我们这种水平,半灌水响叮当,补Android也一年多了,耍耍哒哒的混了两年,哎!管它寒冬还是肺炎,都加油吧,坚持,过了这个风波,要好好锻炼,保持活力轻松的愉快的精神工作,学习,娱乐,生活。 我们自己也是要加油,逐渐反复重温加深Java基础知识,然后进阶深度,更重要的是要结合实践联系,联想项目反复加深。后期搞点开源实践项目来瞅瞅!!!

    下面根据一些Java面试题(摘自网友的2019的总结篇一,后续也是会从各种面试题去实践验证),然后觉得一些较为难得不常见得,能够提升逼格的一些,其实还是有用的哟,你看那些框架,源码,很多用法你估计没看过吧。。。😳......

    1. Java基础之 - == 、equals

    HelloEquals.java

      package com.test.me;
    
    /**
     * 字符整数等的比较  == 、equals
     * @author hl
     *
     */
    public class HelloEquals {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Integer a = 127;
            Integer b = 127;
            Integer c = 129;
            Integer d = 12;
            // 最好用equals用来做值的比较
            System.out.println("a=b ? " + (a == b));  // -128 - 127之内部的数据,采用的是原生数据类型int值的比较
            System.out.println("a.equals(b) ? " + (a.equals(b)));
            System.out.println("c=d ? " + (c == d)); // -128 - 127之外的数据是地址的比较
            System.out.println("c.equals(d) ? " + (c.equals(d))); //内部是值得比较
    
            // 字符串做值的比较更是要用equals
            String e = "abc";
            String f = e.substring(0, e.length() - 1) + "c"; // 一系列操作之后,将会产生新的字符串对象
            String g = "abc"; // 同一个常量字符串,引用地址相同,值也相同
            System.out.println("e=f ? " + (e == f)); 
            System.out.println("e.equals(f) ? " + (e.equals(f))); 
            System.out.println("e=g ? " + (e == g));
            System.out.println("e.equals(g) ? " + (e.equals(g))); 
    
            // Integer的equals实现, String的要相对复杂些,是循环字符的比较
            //       /**
            //       * Compares this object to the specified object.  The result is
            //       * {@code true} if and only if the argument is not
            //       * {@code null} and is an {@code Integer} object that
            //       * contains the same {@code int} value as this object.
            //       *
            //       * @param   obj   the object to compare with.
            //       * @return  {@code true} if the objects are the same;
            //       *          {@code false} otherwise.
            //       */
            //      public boolean equals(Object obj) {
            //          if (obj instanceof Integer) {
            //              return value == ((Integer)obj).intValue();
            //          }
            //          return false;
            //      }
    
            ///< 结果
            //              a=b ? true
            //              a.equals(b) ? true
            //              c=d ? false
            //              c.equals(d) ? false
            //              e=f ? false
            //              e.equals(f) ? true
            //              e=g ? true
            //              e.equals(g) ? true
    
            // 后续就需要关注jvm堆栈等知识了
        }
    
    }
    
    

    **2. **Java基础之 - 字符串相关

       package com.test.me;
    
    /**
     * 字符串相关
     * @author hl
     *
     */
    public class HelloStringType {
        public static void main(String[] args) {
            // System.identityHashCode能打印真实内存地址,而hashcode可以重写,所以不一定代表内存地址
            String a = "abc";
            System.out.println(System.identityHashCode(a));
            a += "d";
            System.out.println(System.identityHashCode(a));
    
            StringBuffer sb  = new StringBuffer("ff");
            System.out.println(System.identityHashCode(sb));
            sb = sb.append("d");
            System.out.println(System.identityHashCode(sb));
    
            // 这里简单验证下String每次操作都会产生新的内存,效率低,浪费内存;建议采用StringBuffer
            // StringBuffer线程安全,StringBuilder线程不安全
        }
    }
    
    

    3. Java基础之 - 类相关

    package com.test.me;
    
    /**
     * 类相关
     * @author hl
     *
     */
    public class HelloClass {
        static int a = 2;
        int c = 3;
    
        /**
         * 静态内部类
         * @des 外部类的非静态成员变量不能直接访问
         */
        static class Sb{
            void ff(){
                System.out.println(a);
                //System.out.println(c); // 外部类的非静态成员变量不能直接访问
            }
        }
    
        /**
         * 非静态内部类
         * @des 非静态内部类不能定义静态方法或者静态成员变量
         */
        class Sb2{
            int g = 2;
            //static int w = 2;
            void gg() {
                // 局部内部类
                class Gha{
                    int hhah = 2;
                }
                Gha a = new Gha();
            }
            //      /**
            //       * 非静态内部类不能定义静态方法或者静态成员变量
            //       */
            //      static void ww() {
            //          
            //      }
        }
    
        /**
         * 匿名内部类可以采用接口的方式创建并返回,另外也可以有匿名子类(创建父类,重写父类的方法)
         * @des I think. 对独立性比较强的方法,而且单一特别的处理可以考虑采用这种方式,没有必要单独提出来做一个方法实现
         * @return
         */
        public InnerInterface test2()
        {
            return new InnerInterface() {
                String a;
                @Override
                public void printA() {
                    System.out.println(a);
                }
            };
        }
    
        static class Parent{
            public static void testa() {
                System.out.println("父亲");
            }
        }
    
        static class Child extends Parent{
            public static void testa() {
                System.out.println("孩纸");
            }
        }
    
        public static void main(String[] args) {
            // 接口不能直接创建对象,可以以匿名对象的方式创建!
            // 接口内部可以定义非私有变量和静态变量
            InnerInterface intf = new InnerInterface() {
    
                @Override
                public void printA() {
                    // TODO Auto-generated method stub
    
                }
    
            };
            // 成员变量的默认修饰符为:public static final
            System.out.println("a=" + InnerInterface.a);
            System.out.println("b=" + InnerInterface.b);
    
            // 子类可以继承父类的静态成员和方法,但是不能重写。看如下示例...
            Child child = new Child();
            Parent parnet = child; // 此时会隐形转换为父类对象,只会拥有父类的属性和方法;对象还是一个对象,对象地址没有变化
    
            child.testa();
            parnet.testa();
    
            System.out.println(System.identityHashCode(child));
            System.out.println(System.identityHashCode(parnet));
    
            //      结果:
            //          a=2
            //          b=2
            //          孩纸
            //          父亲
            //          366712642
            //          366712642
    
        }
    
    }
    
    

    InnerInterface.java

    package com.test.me;
    
    public interface InnerInterface {
        // 成员变量的默认修饰符为:public static final
        // 所以下面两种都是一样的效果
        int a = 2;
        static int b = 2;
    
        void printA();
    
    }
    
    

    **4. **Java基础之 - 泛型类型 - 困扰多年的Java泛型 extends T> super T>,终于搞清楚了!

    HelloGeneric.java

     package com.test.me;
    
    /**
     * 泛相关 - extends 、 super
     * @extends 上下界、像list就很有参考和学习价值
     * @author Administrator
     *
     */
    class HelloGeneric{
    
        /**
         * 泛型类型
         * @des 可以利用extends、super来限定上下界
         * @author hl
         *
         * @param <T>
         */
        public class Generic<T> {
             private T item;
    
             public Generic(T t) {
                 this.item = t;
             }
    
             public T get() {
                 return item;
             }
    
             public void set(T item) {
                 this.item = item;
             }   
        }
    
        class Gradpa{
            Gradpa(){
                //System.out.println("爷爷!");
            }
            public void sayNo() {
                System.out.println("sayNo  Gradpa!");
            }
        }
    
        class Father extends Gradpa{
            Father(){
                //System.out.println("父亲!");
            }
            public void sayNo() {
                System.out.println("sayNo  Father!");
            }
        }
        class Child extends Father{
            Child(){
                //System.out.println("孩纸!");
            }
            public void sayNo() {
                System.out.println("sayNo纸!");
            }
        }
    
        private void CloseSb() {
            // https://my.oschina.net/u/3990817/blog/3055968
    
            // ? extends Father使得我们可以装入Child类型,否则无法直接转化
            Generic<? extends Father> hgr = new Generic<Child>(new Child());
            Father fa = hgr.get();
            System.out.println(fa);
            Child cld = (Child) hgr.get();
            cld.sayNo();
            // 不能存,只能取
            //hgr.set(new Child());
    
            // super就限定了只能是Father类以及父类
            // 不影响往里存,但往外取只能放在Object对象里,也可以强转滴
            Generic<? super Father> hgrsf = new Generic<Father>(new Father());
            Generic<? super Father> hgrs = new Generic<Gradpa>(new Gradpa());
            //HelloGeneric<? super Father> hgrsc = new HelloGeneric<Child>(new Child());
            System.out.println(hgrsf);
            System.out.println(hgrs);
    
            Gradpa fr = (Gradpa) hgrsf.get();
            fr.sayNo();
            hgrsf.set(new Father());
            fr = (Gradpa) hgrsf.get();
    
            Gradpa gp = (Gradpa) hgrs.get();
            gp.sayNo();
            hgrs.set(new Father());
            gp = (Gradpa) hgrs.get();
    
        }
    
        public static void main(String[] args) {
            new HelloGeneric().CloseSb();
        }
    }
    
    

    不知不觉,以及五点多了。。。休息哈。。过两天要上班了。。。疫情严重,改为在家办公。。。腰疼,缺乏坐姿和锻炼。。。😳😳😳😳😳😳😳

    希望疫情赶快过去,大家都相安无事!自己也加油准备。。。多刷题。。。Leecode也打算连续不间断开始了....

    相关文章

      网友评论

        本文标题:Android/Java/移动端(图形图像)/跨平台(RN、Fl

        本文链接:https://www.haomeiwen.com/subject/njsxxhtx.html