I.常用类型与编码类问题:
        1.Java中的基本类型有什么?
            byte、short、int、long、float、double、chart、boolean这八种,这八种也挺好记,表示数字类型的有5种{整数三种[(短)short、(中)int、(长)long]、小数两种[(单精度)float、(双精度)double]},还有三种非数字类型{(表示真假)boolean、(表示字节)byte、(表示字符)char},如果实在记不住,你就记住凡是生命对象可以用小写直接声明的就是基本类型。
        2.byte、short、int、long、float、double、char以及一个string类型数据占用的字节数量?
            这是一道很基础的题,byte本身表示的就是字节,所以byte就占用一个字节;char表示一个字符占用2个字节;short表示一个短整型数据占用2个字节;int表示整型数据占用4个字节;long表示长整型数据占用8字节;float表示浮点型数据占用4个字节;double表示双精度浮点型占用8个字节;string类型的一个字符根据编码协议而定(一般没有人问),常见的编码协议有一些几种:Unicode(中文占用4字节,英文占用4字节,数字占用4字节)、UTF-8(中文占用3字节,英文占用1字节,数字占用1字节)GBK(中文占用2字节,英文占用1字节,数字占用1字节)GB2312(中文占用2字节,英文占用1字节,数字占用一字节)。[注]:byte和bit的区别?bit表示的是位,1byte=8bit,更不用担心有人问boolean类型的长度,在JDK文档中明确说了boolean的大小没有精确定义,但经过测试int类型是它的3.5倍左右,所以我们一般更倾向于占一个字节(这个就更没有人敢问了)。
        2<a>.在Java中为什么char占用两个字节?而一个字符串类型的却占4个字节?
            因为这个现象我觉的很有趣单独写成了一篇博客,见:https://www.cnblogs.com/ben-mario/p/10458318.html
        2<b>.我们都知道Java中long类型占用8个字节,float占用4个字节,为什么float表示的数字范围比long表示的范围大?
            long类型是使用二进制直接保存数据,也就是long的表示范围大小是2^64-1,float是使用类科学计数方式计数的表达方式:V=(-1)^s * M * 2^E,其中V是最终表示结果值,s(1位)表示符号位,M(23位)表示小数域范围[0,1),[1,2),E(8位)表示指数域,所以float的的表示范围:一3.403E38~3.403E38。
        2<c>.float单精度和double双精度有什么区别?
            首先内存占用不同,float是4字节,double是8字节;其次精度不同,float是单精度有效数字占8位,double是双精度有效数字占16位;然后是处理速度不同,一般来说但进度的处理速度比双精度的处理速度快。因为表示方法相同,double占用内存比float大,所以很定是表示的范围更大。
        3.String类型的创建过程是什么样的?
            直接使用String str=“test”;创建的String经过两个过程,检查String常量池,如果没有则创建一个新的String在常量池,在stack(栈)创建对象引用,引用String常量池中的常量地址。如果是使用String str = new String("test");创建String经过三个过程,检查String常量池,如果没有则创建一个新的String在String在常量池,在heak(堆)中创建一个String对象,在stack(栈)中创建一个引用对象指向堆中String对象地址。
        3<a>.在String类型中,“+”的连接是怎么实现的?“==”和String的equals方法有什么区别?
            我们都知道String类型时声明时创建的String常量,所以在String中的+将两个字符串连接,其实在底层是使用了StringBuilder的append()方法将两个String连接起来的,其最底层是byte数组扩展的,每次增加16个长度,用UFT-16字符集。在Object中其实equals方法和==是相同的,都是对比两个对象是否为同一引用,但String类中重写了equals方法,只字符串内容是否相同。

II.不太常用的运算
        1.i++、++i(i--和--i等)的区别?
            讲真的这个问题是一个很无聊的问题,我们都知道i++是先赋值,后加1;++i是先加1,后赋值。其实i++本身是等价于i=i+1;同样的如果是++i呢?本质上也是等价于i=i+1;怎样证明呢这两个是一样的呢?我猜这个表达式你最多的是用在for循环中吧,那就使用for(int i=0;i<10;++i){System.out.println("++i:"+i);}和for(int i=0;i<10;i++){System.out.println("i++:"+i);},显然打印结果是一样的,之所以会说先赋值还是后赋值的问题是源于这样的运算:i=1;j=i++;结果是j=1;i=2;(j=i;i=i+1),i=1;j=++i;(i=i+1;j=i;),所以我们当然也可以这样理解:i++和++i的实现过程是创建临时变量temp,temp=i;i=temp+1;其中i++输出temp的值,++i输出i的值。
        2.移位运算的是什么?
            简单来说计算机中是以二进制补码存储的,以int类型为例,占4字节32位,移位有左移位和右移位两种。左移位就是将二进制数值整体向左移动n位,永远补0,在不溢出的情况下new_value=value*2^n;同样的右移就是讲二进制数值整体向右移动n位,不同的是如果是正数右移补0,负数右移补1,在不溢出的情况下new_value=value*2^n。注意移动负数位(n)时,移动方向不变,实际移动位数new_n=32+n。
        (这一块真的不怎么用得到,实际应用还需要自己先计算一遍所以没必要,理论又太偏底层计算机原理所以一般也不会问)

III.关于类型和方法的基本问题
        1.怎样证明创建一个对象时是由类的构造器创建的?
            通常我们定一个类型是不写无参构造方法的,因为JDK会默认为没有写构造方法的类型生成一个无参的构造方法,想要证明创建对象是由构造方法创建的,我们只需要自己写出显示的构造方法并对其生命private级别,很明显我们是不能再使用new关键字创建对象的,所以创建对象是通过类构造器创建的。
        2.java中有了int(double等),为什么还要Integer(Double等)?
            java中有八种基本类型,并且八种类型都分别有自己的封装类,那么有些人会问为什么还要封装类?在面向对象编程的发展过程中,java一直都有一句“万物皆对象”的说法,就是说任何事物在java眼里都是对象,然后有人就问那基本类型是什么?我们对指导在面向对象编程中,只有对象身上才会有属性和方法,所以int没有什么方法,这个时候就有了封装类的概念,就是将基本类型包装成引用类型,这些引用类型身上是有属于各自的基本方法。虽然在存储上没有什么大的区别,但是就使用和概念上区别还是挺大的。
        3.关于类型比较时,“==”和equals()方法有什么区别?
            通常在没有重写equals()方法这两个是相同的,都是比较的对象,因为equals()方法来源于Object类中,在Object类中equals的实现就是用“==”比较的。但java的常用类型如(String、Integer等)基本是重写了equals(),主要是比较对象的值,而且一般重写equals()方法都会重写hashCode()。
        3<a>.为什么一般重写equals()方法是,我们需要写hashCode()方法?
            首先并不是重写equals()方法就一定要重写hashCode()方法。之所以通常情况下我们会重写,是因为我们可能需要在equals()方法中使用“==”比较以提高比较效率。“==”比较的是对象,而不同的对象的区分最直接的就是根据对象的hash值比较的,这就是我们需要重写hashCode()方法最直接的原因。

深入了解JAVA基础(面试)的更多相关文章

  1. Java基础面试系列(一)

    Java基础面试总结(一) 1. 面向对象和面向过程的区别 面向过程 面向对象 性能 高于面向对象 类加载的时候需要实例化,比较消耗资源 三易(易维护,易复用,易扩展) 不如面向对象 具有封装,继承, ...

  2. Java基础——面试、笔试

    网址来源: http://www.nowcoder.com/discuss/5949?type=0&order=0&pos=4&page=2 参考资料:(java方面的一些面试 ...

  3. Java基础面试知识点总结

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  4. Java基础 面试总结(一)

    一.java基础篇-概念 1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网.云计算.智能手机( ...

  5. Java基础面试集合

    1.面向对象的特征有哪些方面? 抽象 封装 继承 多态,多态性是指允许不同子类型的对象对同一消息作出不同的响应.简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情.多态性分为编译时的多态性和 ...

  6. JAVA基础面试(一)

    1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.Java有 ...

  7. java基础面试(二)

    最近有搜了几个面试题,大家一起来探讨一下. 1.Oracle 的分页 --分页查询一 select * from (select a1.*,rownum rn from (select * from ...

  8. Java基础面试相关

    面试相关的问题(下) 四 Linux高级_ 1.Linux机器 变慢,怎么查看? (1)整机的性能 主要查看的是CPU和内存 先查看整机的top,使用命令 top 虚拟机 使用1可以查看哪个核被占用过 ...

  9. JAVA基础面试汇总

    一.基础知识:1.JVM.JRE和JDK的区别:    JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性.                  java ...

  10. 分享18道Java基础面试笔试题(面试实拍)

    上图来自Java技术栈微信群里的群友分享,看起来比较基础,但不一定人人都答得上来. 图片比较模糊,小编把题目进行了文字化. 1.你最常上的两个技术站和最常使用的两个app分別进什么?主要解决你什么需求 ...

随机推荐

  1. php有几种开发语言

    php有几种开发语言? php的启发语言有五种,分别是C.Perl.Java.C++.Python. PHP(全称:PHP:Hypertext Preprocessor,即“PHP:超文本预处理器”) ...

  2. Spring切面编程之AOP

    AOP 是OOP 的延续,是Aspect Oriented Programming 的缩写,意思是面向切面编程.可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种 ...

  3. Windows禅道环境部署

    1.     禅道下载地址,下载解压 http://www.zentao.net/download/80081.html 一键安装包根据本机系统做相应版本下载 2.     解压完打开文件夹xampp ...

  4. js 为false的几种情况

    1: false 2: null 3:undefined 4:"" 空字符串 5:0 6:NaN 如果你的if条件里面会出现 0 或者"",那么这种肯定是为假的 ...

  5. Robot Framework 常见问题处理方式

    1.运行testcase报错error 2解决办法 打开python的scripts目录,看看是否有pybot.bat文件,没有则创建一个 pybot.bat内容: @Echo off python ...

  6. 【转载】Spring bean 中 constructor-arg属性

    转载地址:https://blog.csdn.net/qq_27292113/article/details/78063696 方便以后查阅

  7. Redis和Ehcached的区别

    Redis 属于独立的运行程序,需要单独安装后,使用JAVA中的Jedis来操纵.因为它是独立,所以如果你写个单元测试程序,放一些数据在Redis中,然后又写一个程序去拿数据,那么是可以拿到这个数据的 ...

  8. Elasticsearch单机安装_集群搭建_索引基本操作_Head插件安装与基本操作_ik分词器配置_logstash实现数据同步_教程

    一.Elasticsearch单机安装 1.将es安装包传到服务器上 这是安装包 这里我是用的是WinSCP上传工具,上传到/home/plugins文件下. 进入Xshell,验证一下是否上传成功. ...

  9. xblock架构,链接与加载

    首先,xblock是一个模块,edx即edx-platform,在github.com/edx/edx-platform中,此平台有一个专门加载xblock的模块,定义了所有的接口,可以逐一将模块中的 ...

  10. Sass:Opacity函数-alpha()、opacity()函数

    alphpa() 和 opacity() 函数很简单,与前面介绍的 red(),green() 等函数很类似.这个函数的主要功能是用来获取一个颜色的透明度值.如果颜色没有特别指定透明度,那么这两个函数 ...