zoukankan      html  css  js  c++  java
  • (一)常问基础小点

    1、&与&&,|与||

    &与&&:只有两边都是true时,结果才是true;

    不同之处:&两边都要运算,&&先算左侧,左侧false则右侧不计算;

    |与||与上述类似,当两边计算结果至少有一个是true时,结果才是true;

    不同之处:|两边都要运算,||先算左侧,左侧true则右侧不计算;

    2、最有效计算2乘以8

    原理:位运算时CPU直接支持的,效率高

    8是2的3次方,2*8 == 2<<3

    1 //常见的JDK源码⾥⾯HashMap的默认容量16
    2 //1<<4,就相当于 1 * 2的4次方,1*16
    3 int DEFAULT_INITIAL_CAPACITY = 1 << 4; 

    3、两个int值互换

    面试官考察:+-和异或

    方法一:加减法,求和后相互做差;

         System.out.printf("a=%d, b=%d",a,b);
         a = a + b;
         b = a - b ;
         a = a - b;
         System.out.printf("
    a=%d, b=%d",a,b);
     }

    方法二:异或,⼀个数 与另一数 异或两次 是本身,与本身异或是0;

         System.out.printf("a=%d, b=%d",a,b);
         a = a^b; //a1 = a^b
         b = b^a; //b = b^a^b 是a
         a = a^b; //a = a1^b = a^b^a
         System.out.printf("
    a=%d, b=%d",a,b);
     }

    4、java语言的基础类型(1 个字节 8 位)

    基础数据类型:byte、short、int、long、float、double、char、boolean

    除上述,其他均是引用类型(String,Enum)

    数据类型 名称 字节 默认值 位数 取值范围
    byte 1 0 8  -2^7 - 2^7-1
    short 短整型 2 0 16 -2^15 - 2^15-1
    int 整型 4 0 32 -2^31 - 2^31-1
    long 长整型 8 0 64 -2^63 - 2^63-1
    float 单精度 4 0.0 32 -2^31 - 2^31-1
    double 双精度 8 0.0 64 -2^63 - 2^63-1
    char 字符 2 16 -2^15 - 2^15-1
    boolean 布尔 1 false 8 true/false

    5、自增/自减运算符

    int i = 5;
    return i++; 
    // 先返回,再操作 5
    
    return ++i;
    // 先操作,再返回 6

    6、try-catch-finally 

    try {
         //...
     } catch (ArithmeticException e) {
         a = 3;
         return a;
     } finally {
         a = 4;
     }
    //返回结果是3
    
    try {
         //...
     } catch (ArithmeticException e) {
         a = 3;
         return a;
     } finally {
         a = 4;
        return a;
     }
    //返回结果是4

    如果存在finally代码,先执行finally中的代码 后执行catch中代码;

    如果finally有return,则会执行finally中的return,如果finally中无但之前有,则会先确定返回值,而后再执行finally中的代码;

    即:finally代码是必执行,finally语句比catch语句先执行,finally的return优先级更高,但若执行catch中的return则会先确定返回值;

    7、try-witch-resource

    try()中定义的资源,在try-catch结束后会自动关闭,JDK1.7后实现了java.lang.AutoCloseable;

     1 // txt文件拷贝代码
     2 try (
     3     FileInputStream fis = new FileInputStream("/Users/xdclass/Desktop/test.txt");
     4     BufferedInputStream bis = new BufferedInputStream(fis);
     5     FileOutputStream fos = new FileOutputStream("/Users/xdclass/Desktop/copy.txt");
     7     BufferedOutputStream bos = new BufferedOutputStream(fos);
     8  ) {
     9      int size;
    10      byte[] buf = new byte[1024];
    11      while ((size = bis.read(buf)) != -1) {
    12          bos.write(buf, 0, size);
    13      }
    14  } catch (Exception e) {
    15      e.printStackTrace();
    16  }    

    8、文件与目录

    //找出某⽬录下的所有⼦⽬录以及⼦⽂件并打印到控制台上
    public static void main(String[] args) {
        List<String> paths = new ArrayList<>();
        getAllFilePaths(new File("/Users/xdclass/Desktop/demo"),paths);
         for(String path : paths){
             System.out.println(path);
         }
     }
     
    private static void getAllFilePaths(File filePath, List<String> paths) {
        File[] files = filePath.listFiles();
        if(files == null){
            return;
        }
        for(File f : files){
            if(f.isDirectory()){
                paths.add(f.getPath());
                getAllFilePaths(f,paths);
            }else{
               paths.add(f.getPath());
            }
        }
    }

    非递归方式:把目录放到list中,while集合不是空时 是文件就打印删除,是目录就打印获取下级放入集合;但是就无序了; 

    9、字符串

    String str = new String("test123"); 创建了1/2个对象

    str保存在栈中;

    如果常量池中存在字符串“test123”,则只在堆中创建一个对象;--1个

    如果常量池中不存在字符串“test123”,则常量池和堆中会分别各创建一个对象;--2个

    String s1 = "sclass";//常量,常量池地址
    String s2 = s1 + ".net"; //变量 + 常量 = 来⾃堆地址
    String s3 = "sclass" + ".net"; //常量 + 常量 = 来⾃常量池地址
    final String s4 = "sclass";//常量,常量池地址
    String s5 = s4 + ".net"; //常量 + 常量 = 来⾃常量池地址
    
    System.out.println(s2 == "sclass.net");//false
    System.out.println(s3 == "sclass.net");//true
    System.out.println(s5 == "sclass.net");//true

    常量地址 取自 常量池,变量地址 取自 堆;final修饰的变量也是常量;

    String方法:
    substring截取字符,start位置开始包含,end位置结束,不含end;0开始计数;
    indexOf 字符出现第一个位置,0开始计数;从某位置开始第一次出现位置,包含这个位置,且从头计数;

    10、字符串相关构建类

    String、StringBuffer与StringBuilder

    三者都是:char[]字符数组实现,都是final class 不允许被继承;

    不同之处:String是定长,其他两个是可变长度;其中StringBuffer的append/length/setlength/charat方法等都加了synchronized,线程安全;

    少量操作使用String;单线程下使用StringBuilder效率更快,因为它不需要加锁,不具备多线程安全;

    11、面向对象的思想

    ⾯向对象思想OOP,⾯向对象的四⼤特性:抽象、封装、继承、多态

    抽象:关键词abstract声明的类叫作抽象类;抽象类中至少有一个抽象方法;抽象方法只声明,无方法体;把一类事物的共同特征抽取出来,组装成一个类;

    封装:把数据属性封装到一个类中,通过接口方法实现对属性的访问;隐藏数据属性,控制对数据的修改和访问;

    继承:子类继承父类/基类的属性和方法;

    多态:继承+重写

    12、Overload和Override

    重载Overload:同一个类中,有 多个方法 名称相同 但是 入参参数类型或者个数不同 的方法; 

    重写Override:子类中定义了和父类 名称相同且参数完全相同 的方法;

    13、接口与类

     一个类只能继承一个类 ⽤extends关键字,可以实行多个接口 用implements关键字;

    接口可以继承多个接口 ⽤extends关键字,接口中只能有抽象方法;

    JDK8新特性:

    接口可以有static⽅法且必须有实现体,方法仅属于接口,且通过接口名.方法名 调用;新增加了default关键字修饰的⽅法,可以被子类继承和重写;

    14、异常类

    Error与Exception都是继承Throwable;异常可以处理 规避,错误无法处理必须修改或调整;

    Error:编译错误或系统错误,虚拟机自身或虚拟机试图执行程序时;

    runtime异常:无法预知,运行时发生的;NPE空指针;

    IO异常:可以预测的,可以合理解决的;

     

    15、int与Integer区别

    int:基础数据类型;  Integer:包装类;

    int:不需要实例化,默认是0;  Integer:需要实例化,默认是null;

    取值范围相同 4字节32位  -(2^31)   2^31-1 :有一位是代表正负数,首位0剩余全1为(0111111* = 2^31-1 )故而如此,-128--127是已初始化好的常量,效率高;

    16、==与equals区别

    ==:判断两个变量或实例是否是指向同一个内存空间,引用是否相同,对内存地址比较;

    equals:判断两个变量或实例对应的内存空间的值是否相同,内容是否相同,对值比较;

    17、静态代码块、构造函数、父类等加载执行顺序

    无继承关系:静态代码块 > 普通构造代码块 > 构造函数 > 方法代码块,且多次创建对象 静态代码块仅执行一次

    存在继承关系:父类静态块 > 子类静态块 > 父类普通构造代码块 > 父类构造函数 > 子类普通构造代码块 > 子类构造函数 > 正常方法代码块

    18、内部类

    内部类好处:封装隐藏内部类,外部类提供获取内部类对象接口;封装内部类,相当于外部类实现了多继承;

    内部类:需使用外部类对象来实现实例化;

    静态内部类:无指向外部对象的引用,仅外部类类名来实现实例化;

    匿名内部类:仅使用一次,无法使用外部除final的变量;

  • 相关阅读:
    Office Web Apps Server 2013与PDF(一)
    关于EF Unit of Work Repository的简单用法
    从3层开始
    使用ms owin 搭建oauth2 server
    让自己的程序支持livewriter
    angularjs 从外部改变controller内的数据
    vs2013 update 2 cordova(phonegap) 环境
    asp.net web api 跨域,带cookie
    c#与IronPython Clojure-clr的调用
    Mvc Moq HttpContext
  • 原文地址:https://www.cnblogs.com/huasky/p/14663376.html
Copyright © 2011-2022 走看看