zoukankan      html  css  js  c++  java
  • 面试题复习记录(二)

       今天终于又有了一晚上的时间可以写博客了,那就把前两天剩下的的东西学习完吧!要不然整天惦记着,真心难受啊。
    这是既面试题复习记录(一)的学习记录。【此表文章 是在学习了传智播客的 董鹏老师的 Java程序员之从菜鸟到职场高手的必看之面试题学习而来(http://bbs.itcast.cn/thread-20484-1-1.html
     
    *** 面试题六:short s1 = 1;  s1 = s1 + 1;有什么错? 

                                  short s1 = 1;  s1 += 1;有什么错?

            刚看到这个题时,根本不知道有什么错,一点思路都没有,的确很菜!就只能老老实实的去看老师的讲解了:
                对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型(byte,short,char 这三种类型在参与运算时,会自动转换成int类型),所以最后的结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误(因为int类型转换成short类型可能会损失精度,计算机只要认为可能出错,这哥们就会提示给我们,它还是比较尽职的)。


              对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,也就是类型自动提升,因此可以正确编译。

             对于这个问题,自己真心是不知道,而且看了也不知道怎么理解,那就发挥学习英语的方法吧:死记硬背!0.0
     面试题七: char型变量中能不能存贮一个中文汉字?为什么?
                     char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。
                  对于这个问题,我们首先要知道unicode编码:unicode码是扩展自ASCII,unicode只有一个字符集,中、日、韩的三种文字占用了Unicode中0x3000到0x9FFF的部分 Unicode目前普遍采用的是UCS-2,它用两个字节来编码一个字符,UCS-2用两个字节来编码字符,两个字节就是16位二进制, 2的16次方等于65536,所以UCS-2最多能编码65536个字符。对于汉字的编码,事实上Unicode对汉字支持不怎么好,这也是没办法的, 简体和繁体总共有六七万个汉字,而UCS-2最多能表示65536个,才六万 多个,所以Unicode只能排除一些几乎不用的汉字,好在常用的简体汉字 也不过七千多个,为了能表示所有汉字,Unicode也有UCS-4规范,就是用 4个字节来编码字符(摘自百度百科 http://baike.baidu.com/link?url=zq98_pkKXsGRb8-zm-oMOdPielp3vF_MyFMegT6Ahv3XyzdHlmATXDC1ADk07LGXLb5MUNOgvH03YDASm52L_q
     
    ***面试题七:使用final关键字修饰一个变量时,是引用变量不能变,还是引用的对象的内容不能变?
                先解释下, 什么是引用变量不能变?什么是对象的内容不能变?例如下面的代码:
    final  StringBuffer  sb = new StringBuffer("Hello");
          sb = new StingBuffer("World");//这就是引用改变.sb指向了新的引用.
          sb.append("Itcast");//此时sb中的内容为 "HelloItcast",这就是对象改变了.
          那么在上面的代码中, 到底哪个是对的呢?
          sb.append("Itcast"); 这句代码是对的,可以编译通过. 而
           sb = new StingBuffer("World"); 这句代码会编译报错.
    /*
      错误: 无法为最终变量sb分配值
      sb = new StringBuffer("World");
    */
          所以说,被final关键字修饰的变量,是引用变量不能变,但是引用变量的对象中的内容是可以改变的.
        final  StringBuffer  sb = new StringBuffer("Hello");
                这句代码中的 new StringBuffer("Hello");  申请一个存储空间,里面放的是:hello
                然后 用一个定义为StringBuffer的sb来指向这个空间 前面的final 是程序知道 sb指向的这个空间是不能改变的,
             当new StingBuffer("World") 时又申请了一个新的空间,这是已经定义为final的sb是不能重新指向这个空间的。
    但是我们可以改变sb中存放的内容,当然我们要找到合适的方法, sb.append("Itcast") 这句代码就是向sb指向的空间追加一个存储内容。
    好吧,我想我只是用我自己的话又来描述了一遍老师讲的,不过,就权当记录吧!只要给自己的思维中加入一个这样的意识就算是收获吧。
     
    *** 面试题八:静态变量和实例变量的区别?在java语法中,静态变量前要加static关键字,而实例变量前则不加。这一点大家先要搞清楚,那么加了static后,到底二者有什么区别呢?
            首先,写出我当初学习java时对这个问题的记忆:
                                                                    1在java语法中,静态变量前要加static关键字,而实例变量前则不加;
                                                                    2,静态变量可以被所有的方法访问,无论他是不是静态的方法,所以静态变量又称类变量;
                                                                    3,实例变量不能被静态方法访问,只能被非静态方法访问;
         这些就是能想到的,其实当时觉得已经记住了,可是突然看到这个问题,还是想了好久,特别有一点我混乱了:静态变量不能被子类访问?
    这个让我纠结了一下,不过想了想前几天复习(面试题复习一http://www.cnblogs.com/wxb0328/p/wxb.html)的继承中没有说静态变量不能被子类访问这个点,我就知道我混乱了。
            好了,不扯了 ,看看老师的讲解:
            在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。
    静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。
    总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
            我觉得我们要记住的是:1.实例变量属于某个对象的属性;2.静态变量不属于某个实例对象,而是属于类,所以也称为类变量;3.实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
     
    *** 面试题九:是否可以从一个static方法内部发出对非static方法的调用?
          对于这个问题,我感觉是不可以,因为总是感觉:一个static方法中发出一个非static方法调用,怪怪的!
     
    答案: 不可以调用,因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用.
    static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部可以发出对非static方法的调用。
    嗯 简洁明了!
    *** 面试题十:Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
         对于Math中的几个方法 ceil、floor、round
    我们先看看这几个单词的意思:
    ceil        
     
    floor    
     
    round    
     有了这几个红线的意思,我们应该能猜到了,
    ceil是向上取:
    返回大于等于其数字参数的最小整数。
    floor是向下取:返回小于等于其数值参数的最大整数。
    round是取它周围的最接近他的:返回与给出的(数值表达式)最接近的整数(如果 number 的小数部分大于等于 0.5,返回值是大于 number 的最小整数。否则,round 返回小于等于 number 的最大整数。也就是我们学过的“四舍五入”)。
    Math.round(11.5)=12
    Math.round(-11.5)=-11,        注意:小数部分的是0.5  看上面的定义,返回大于-11.5的最小整数:大于-11.5 是-11吧!
    *** 面试题十一:请说出作用域public,private,protected,以及不写时的区别?
    说明:如果在修饰的元素上面没有写任何访问修饰符,则表示 默认不写。
                     这四个作用域的可见范围如下表所示。
     
      作用域     当前类   同一package   子孙类       其他package
           public             √             √                √             √ 
      protected       √             √               √              × 
      默认不写         √             √               ×              × 
      private           √             ×               ×              ×
     
     
     
     
     
    至此,此基础面试题学习完毕,仅仅是想整理一下自己学过的东西,便于以后查阅、回忆。
    如有错误,欢迎批评指正,
     
     
     
     
    A dwarf on a giant's shoulder sees the farther of the two. 站在巨人肩上的矮子看得比巨人远。 --A dwarf on a giant's shoulders
  • 相关阅读:
    5 Things Every Manager Should Know about Microsoft SharePoint 关于微软SharePoint每个经理应该知道的五件事
    Microsoft SharePoint 2010, is it a true Document Management System? 微软SharePoint 2010,它是真正的文档管理系统吗?
    You think you use SharePoint but you really don't 你认为你使用了SharePoint,但是实际上不是
    Introducing Document Management in SharePoint 2010 介绍SharePoint 2010中的文档管理
    Creating Your Own Document Management System With SharePoint 使用SharePoint创建你自己的文档管理系统
    MVP模式介绍
    权重初始化的选择
    机器学习中线性模型和非线性的区别
    神经网络激励函数的作用是什么
    深度学习中,交叉熵损失函数为什么优于均方差损失函数
  • 原文地址:https://www.cnblogs.com/wxb0328/p/3411565.html
Copyright © 2011-2022 走看看