JAVA基础部分

1、面向对象的特点。
     面向对象是一种常见思想,可以使复杂的东西变的简单,由执行者变指挥者。
    它有三大特征:
(1)继承:属于创建类的过程,继承是从已有的类得到继承的信息,提高代码的复用性;
(2)抽象:是将一类对象的共同特征总结出来构建类的过程,抽象又分为行为抽象和数据抽象,                                                           抽象只关心对象有哪些属性和行为,并不关注这些行为的细节是什么;
(3)封装:封装主要是为了隐藏内部的实现细节,然后对外提供可以操作的方法;
(4)多态性:多态是指允许不同的子类的对象对同一消息做出不同的响应,
         简单来说就是:对象调用了同样的方法,但是做了不同的事情;

 (5)重载和重写有什么区别

         重载指同一个类中的同名方法,要求方法名相同,参数列表不同,与返回值类型、访问修饰符无关。

         重写指的是子类和父类之间的同名方法,要求方法名相同、参数列表相同、返回值类型相同(或是其子类),

        访问修饰符不能严于父类。

2、JDK和JRE的区别是什么?
  (1)JDK是Java的开发工具,它不仅提供了Java程序运行所需的运行环境JRE,还提供了一系列的编译,运行等工具,如                   javac,java,javaw等。
 (2)JRE只是Java程序的运行环境,它最核心的内容就是JVM(Java虚拟机)及核心类库

3、什么是堆 什么是栈

         Java 把内存划分成两种:一种是栈内存,另一种是堆内存。
 (1)栈 :  在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。   
                 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,
                Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。   
 (2)堆 :堆内存用来存放由new创建的对象和数组。  
          在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。   
          在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,
          让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。   
          引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。   

4、什么是Java虚拟机

     Java虚拟机(Java Virtual Machine,简称 JVM)
      它主要用来对java 代码的解析以及运行,

5、Java有几种基本数据类型?

  Java的数据类型可以分为四类八种

  (1) 四类整数类型 (byte、short、int、long) 默认是类型 int,byte 保留 8位 short 16位 int 32位 long 64

  (2) 两种浮点类型(float、double) float 单精度32 位、double 双精度 64位

  (3) 字符类型 (char)  char 类型是一个单一的16位 unicde 字段

  (4) 布尔类型(boolean)  true OR false

6、Integer和int有什么区别
   Integer 是java 为int 提供的封装类,int默认值是0,而Integer默认值是NULL

7、==和 equals 的区别 ?

  (1) == 判断 变量或实例是不是指向同一个内存空间(相等)

  (2) equals 判断 变量或实例指向内存的值是不是相同

8、&&和&区别,||和|区别?

  a) &&和||是短路与,短路或,当左边的表达式能判断当前结果

  ,则不判断右边的表达式。

   b) 而& 和|则将两边的表达式都运算完毕后,再算结果。

9、String 的线程是安全的吗?

     String是 final类,所以是线程安全的

10、String类为什么是final的?

     首先,先得清楚 final 这个关键字。 
        final的出现就是为了为了不想改变,而不想改变的理由有两点:设计(安全)或者效率。

        final 修饰的类是不被能继承的,所以 final 修饰的类是不能被篡改的。 

      (1)主要是为了“效率” 和 “安全性” 的缘故。若 String允许被继承, 由于它的高度被使用率, 

            可能会降低程序的性能,所以String    被定义成final。

      (2)不允许其他类继承。这个应该不是最终原因,但这里权且也当成是一个原因。

      (3) String类中的成员属性也几乎都设计成了private final的,这样String就被设计成一个不变类,

        这样有助于共享,提高性能。可以将字符串对象保存在字符串常量池中以供与字面值相同字符串对象共享,

        如果String对象是可变的,那就不能这样共享,因为一旦对某一个String类型变量引用的对象值改变,

        将同时改变一起共享字符串对象的其他 String类型变量所引用的对象的值。

      (4)String被设计为不变类,其中的offset,value[]都被设计成private final的,这样在多线程时,

        对String对象的访问是可以保证安全的。java程序语言的许多特性依赖于不可变的String对象。

11、String str=new String("abc"); 创建了几个对象?

      创建了两个对象  一个是new  String 创建的一个新的对象,一个是常量“abc”对象的内容创建出的一个新的String对象;

12、String和StringBuilder、StringBuffer的区别

   (1)首先说运行速度
      在这方面运行速度快慢为:StringBuilder > StringBuffer > String
  (2) 再来说线程安全
      在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
   (3) 总结
        String:适用于少量的字符串操作的情况
   StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
   StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

13、什么是实例?什么是引用?

      (1)实例是指基于某个类的对象实现.这一过程被称为实例化.(类是抽象的,实例是具体的)

14、i++和++i是否为原子操作

(1)原子操作是不可分割的,在执行完毕之前不会被任何其它任务或事件中断。

一.i++

   i++的操作分三步:

   (1)栈中取出i

   (2)i自增1

   (3)将i存到栈

    所以i++不是原子操作,上面的三个步骤中任何一个步骤同时操作,都可能导致i的值不正确自增

 二.++i

   在多核的机器上,cpu在读取内存i时也会可能发生同时读取到同一值,这就导致两次自增,实际只增加了一次。

   综上,我认为i++和++i都不是原子操作。

15、抽象类和接口的区别

 (1)抽象类只能被继承,只能被单继承,接口可以多实现,需要被实现。

 (2)抽象类可以有抽象方法,非抽象方法,子类继承后可以使用,

           接口只能定义抽象方法,须由子类完成。

 (3)抽象类继承是isa 关系,定义内容的共性内容 isa 关系组成

 (4)抽象方法不能使用private 

16、静态变量和实例的区别?

  (1)静态变量需要加关键字 static,实例变量不加

  (2)实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量,才会被分配空间,

  (3)静态变量不属于某个实例对象,而是属于类,所以也被称为类变量

  (4)实例变量必须创建对象后才可以通过这个对象来使用

  (5)静态变量属于类,可以通过类型直接使用引用

17、请说出作用域public,private,protected,以及不写时的区别

    public:可以被所有其他类所访问

    private:只能被自己访问

    protected:自身、子类及同一个包中类可以访问

    default:同一包中的类可以访问,声明时没有加修饰符,认为friendly。

18、简述什么是数组?

  1) 数组是相同类型的数据按顺序组成的一种复合数据类型。通过数组名加数组下标,

      来使用数组中的数据。下标从 0 开始排序。

19、创建数组是否需要指定数组长度,如何求数组长度?

 1) 必须指定数组长度,数组调用 .length来获取数组长度。

20、什么是GC?为什么有GC?

 a) GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。

21、请写出5个常见的 Exception

 (1)空指针异常:NullPointerException (2)类型强制转换异常:classCastExcePtion

 (3)数据库操作异常:SQLException  (4)输出输入异常:IoException

 (5)数值越界:ArrayIndexException   (6)文件没有找到:FileNot Exceotion

 (6)类没有找到: ClassNotFoundException

22、说说你对泛型的了解
   泛型是为了能够明确的操作数据,保证内部元素的数据类型统一。

23、说说你对Java反射的理解

   简单说,反射机制指得是程序在运行时能够获取自身的信息。

   在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。

   原理:要正确的使用反射机制,就要要java.lang.Class这个类;

   它是反射机制的起源,当一个类被加载后,java虚拟机就会自动产生一个Class对象,

  通过这个Class对象我们就能获得加载虚拟机当中的这个Class对象对应的方法,成员以及构方法的声明和定义等信息。

24、在一台电脑上配置java环境,path起什么作用?如何配置?

  a) 答:path的作用是在DOS环境下,能在任意位置使用JDK目录中bin文件夹中的可执行程序,来编译执行java程序

25、内存泄漏出现在什么情况

  对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着,

  站着内存空间,慢慢的就满了。

解决方法在tomcat 里catalina.sh文件

合理的分配内存空间

  JAVA_OPTS=-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m

26、单点登录实现思路

(1)在用户登录的时候会生产一个Token 令牌,token 是唯一的,客户每次发送请求的时候都要携带这个token;

(2)当次账号在别其他的设备登录时,首先提示用户当前账号已经登录了,是否要继续登录,

        继续登录者需要验证用户的身份,这时会发送一个验证码,确认是否是本人操作,如果是本人操作,会重新生成一个token

        之前登录的token就失效了,在之前登录的用户在操作的时候,会提示它当前此号已在别出进行登录,请重新登录,

       这样就实现了,一个简单的单点登录。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值