Java基础题01

1 。面向对象的特征有哪些方面 三大特性:继承,封装,多态

      a 抽象: Java是面向对象,对象用类来描述,一个类没有完全包含对象的属性为抽象。

抽象不能实例化对象,只能继承。

      b继承: 新类从一个原始类派生出来称为继承,新类具有原始类的方法属性,也可    以自己根据需要添加方法。

      c封装: 将对象的属性和操作结合成一个整体,并尽可能的隐藏对象内部的实现细    节。

  d多态: 字面为多种状态的意思,就是同一个接口使用不同的实例而有不同的操作。

               实现多态的三个条件:继承(覆盖),重载,父类引用指向子类。

   继承(覆盖): 一个子类继承一个父类并在子类中重新实现父类的方法,称为覆盖。

   重载:        在同一个类中函数名相同但是参数不同(之间毫无关系)。

e接口:是一个抽象类型,是抽象接口的集合,一个类可以实现(implement)多个接口。

 

接口和抽象类的区别:

1子类可以实现多个接口,子类继承抽象类只能单继承;

2抽象类有默认方法实现,接口没有;

3抽象类有构造器,接口没有;

4抽象类可以有main方法,接口没有;

5抽象类可以用public,protect,default修饰符,接口只 能用public;

6给抽象类添加新方法,有默认的构造方法,所以不用改其他 代码,接口就必须改变实现该接口的类的方法。

2 。Interger和int的区别

A.interger是int的实现类,int是基本数据类型;

B.interget初始值是null,int是0;

C.interger的使用需要实例化,int不用;

D.interger是对象的引用,指向new的对象,而int是直接存储;

3。String,StringBuffer,Stringbuilder区别

String是不可变对象,是一个final类,不能被继承,它一旦被创建就无法改变他的值, 只能重新new一个对象将新的值放进去;

StringBuffer是可变对象,要改变他的值得通过append()方法,通过构造函数来 建立对象,不能通过赋值符号赋值,对象被建立后会在内存中分配一块空间,初始 值为null;是线程安全的可变字符序列;

StringBuilder方法与StringBuffer没有很大区别,但是他是非线程安全的可变字符 序列,StringBuffer允许多线程进行字符操作,而StringBuilder的效率则较高;

4。ArrayList,vector,LinkedList

ArrayList底层是数组实现的,LinkedList是链表实现的

Vector(可实现自动增长的对象数组)与ArrayList一样都是数组实现的,但是Vector 是线程安全的,所以效率没有ArrayList高

5.hashMap,hashTable区别

都实现 map接口,hashmap不是线程安全,所以效率更高,hashtable是线程安全的,hashmap把hashtable的contains方法去掉,改成containsvalue和containskey,hashmap允许将null作为一个entry的key或者value

6.BeanHandler,BeanListHandler,MapHandler,MapListHandler,ScalarHandler

BeanHandler将结果集返回一个Bean对象

BeanListHandler将结果集返回一个Bean对象的集合

MapHandler将结果集返回一个map对象,

MapListHandler将结果集返回一个map对象的集合

ScalarHandler将单个值进行封装

7.==和equals()的区别

1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

    如果作用于引用类型的变量,则比较的是所指向的对象的地址

2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量

    如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

    诸如String、Dateset等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

 

8.字节流,字符流,字符,字符串区别

先明白什么是输入流什么是输出流:一个文件和一个内存,输入流和输出流都是相当于内存来说的,输入流就是从文件读出来(输入内存),输出流就是写东西进文件(从内存输出)

字节流:用来处理二进制数据表

字符流:用来处理文本数据

字符:char

字符串:String

字符串常见的操作方法:

字符串比较  equals(比较两个对象的内容是否一样)==(比较两个对象 的实例地址指向是否一样)

字符串的截取  subString(0,4)截取字符串前4个

字符串的拆分  split(#)根据字符串中的#进行拆分

字符串的替换  replace(a,b)将字符串的a换成b

字符串的反转  reverse()

9.final,finally,finalize区别

Final    一个类被final修饰时,无法被继承,也无法改变,他的初始化只能再两个地方,一个final变量定义的时候,一个是在构造函数中,只能使用,不能重写

Finally  在异常处理中提供finally块来执行任何清除操作

Finalize 垃圾收集器将对象从内存中清理出去之前调用,判断这个对象是否还被引用

10.Collection 和 Collections的区别

Collection是集合类的一个上级接口,继承他的有set,list类

Collections是针对集合类的帮助接口,提供一系列的静态方法实现对集合的搜索,排序和线程安全等操作

11. &和&&的区别

&是位运算符,表示按位与运算&&是逻辑运算符,表示逻辑与(and既串联的效果

9&8就是1001&1000,结果为1000

9&&8结果就是1(要两边是1才是1)

12.sleep() 和 wait() 有什么区别

sleep()是线程类的方法,调用该方法使线程暂停指定的时间,把执行机会给其他线程,但是监控状态依然保持,到时后自动恢复,不会释放对象锁;

wait()是对象类方法,调用该方法使线程放弃对象锁,进入等待该对象的等待锁定池,只有对该对象发出notify()后线程才进入对象锁定池,准备获得对象锁进入运行状态

13.线程的生命周期

新建(new thread):创建一个新线程(new thread类,实现runnable接口)

就绪(runnable):线程已经启动,正在等待被分配给CPU时间片 star();开启线程    的方法 star();

运行(running):线程获得CPU资源正在运行(run();)除非线程自动放弃cpu资源或者有优先级更高的线程进入,否则线程一直运行到结束

死亡(dead):线程执行完毕或被其他线程杀死

自然终止:运行完run()方法

异常终止:调用stop()

堵塞(blocked):由于某种原因正在运行的线程让出cpu并暂停自己的执行

正在睡眠:调用sleep();

正在等待:调用wait();

调用suspend()使线程被堵塞,恢复用resume();

14.Overload和Override的区别

Overload重载,一个类中多态的表现(同名参数不同)

Override重写,父类与子类多态的表现(继承后重写父类某个方法)

15.error和exception有什么区别

Error:表示一种恢复很困难的严重问题,比如内存溢出,不能指望程序可以处理这种    问题;

Exception:表示一种设计或者实现的问题,也就是说如果程序正常是不会出现这个问 题的

16.同步和异步有何异同使用场合

同步:发送一个请求,需要等待返回才能发送下一个请求,有 一个等待过程(线程中共享数据的同步存取)

异步:发送一个请求不需要等待就可以发送下一个请求(很多情况使用)

17.stack和heap有什么区别

Stack()其添加和删除数据在同一时段完成,按照先进后出(后进先出),例子:薯片是机器 一个一个放进去的,你吃的第一个薯片肯定是最后放进去的;

Heap是stack的一个组成元素

18.EJB与JAVA BEAN的区别

理论上讲一个普通Java类就是一个JavaBean

EJB是指运行在EJB容器中的JavaBean

19.JSP中动态INCLUDE与静态INCLUDE的区别

动态:用jsp:include实现,总是检查所含文件的变化,各个文件先编译再组成一个文

静态:用jsp的伪码实现,不坚持文件的变化,各个文件先组成一个文件再编译

20.GC是什么

垃圾收集的意思,gc可以自动检测对象是否超过作用域从而达到自动回收内存的目的

Java没有提供 释放已分配内存的显示操作方法

21.启动一个线程是用run()还是start()区别

Strat();start是让一个线程启动就绪,等待获得cpu时间片;

run是让一个线程获得cpu资源开始运行;除非线程自动放弃cpu或者有优先级更高的资源插入进来,或者直到运行结束

22.List, Set, Map是否继承自Collection接口区别

List,set是,map不是;

List:可以允许有多个null对象

 可以允许有多个重复

是一个有序容器,输出的顺序就是插入的顺序

Set:只能一个null

不能重复

是一个无序容器,无法保证每个元素的存储顺序

Map:是一个接口,每一个entry都有两个对象,一个键,一个值

可以有多个null值但是只有一个null键

23. .List、Map、Set三个接口,存取元素时,各有什么特点

List是一个有序容器,存元素的顺序与取元素的顺序一致;(arraylist)

Set是一个无序容器,无法保证元素的存取顺序;(hashset)

Map存取元素以键值对的形式存取(hashmap,hashtable)

24.说出数据连接池的工作机制是什么

J2ee服务器启动会建立一定数量的池连接,并一直维持不少于这个数目的池连接,当客户端程序需要一个链接的时候,就会返回一个池连接并将其标记为忙,用完后池连接会被标记为闲并返回给数据连接池,其他调用就可以使用这个连接

25.数组有没有length()这个方法? String有没有length()这个方法

数组没有length()这个方法但是有length属性;String有这个方法

26.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别

用iterator();

==判断引用类型的所指向的对象的地址

Equals()则判断值是否相等

 

27.Java中的异常处理机制的简单原理和应用

当Java程序违反Java语义规则的时候,Java虚拟器就会将错误表示为一个异常输出,异常有两类,一类是Java自定义的异常检查(访问null对象引发nullpointerexception),另一类是程序员根据需要自定义的异常检查,并决定在何时用throws抛出异常

28.垃圾回收的优点和原理。并考虑2种回收机制

可以有效的防止内存泄漏,让程序员可以不用再考虑内存管理

垃圾回收是一个低级别的单线程,将内存堆中长期没有使用或者已经死亡的对象清除和 回收;

代复制垃圾回收和标记垃圾回收

29.请说出你所知道的线程同步的方法

Sleep()让一个线程进入规定时间的睡眠状态,不会释放对象锁

Wait()让一个线程进入等待状态,会释放对象锁

Notify()唤醒一个处于等待状态的线程,注意不能确定唤醒哪一个,由jvm确定唤醒 哪一个

30.描述一下JVM加载class文件的原理机制

类的装载由classloader和他的子类完成,Java classloader是一个重要的系统组件,负责在运行的时候查找和转载类

31.多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? stop()和 suspend()方法为何不推荐使用

两种(继承thread类和实现runnable接口);

两种(synchronized,wait和notify)

Stop():因为它不安全,会解除由线程获得的所有锁定

Suspend():容易发生死锁;

所以用wait和notify来指出线程应该活动或者挂起

32.Servlet执行时一般实现哪几个方法

Public void init()

Public servletconfig getservletconfig()

Public void servicet()

Public void destory()

33.说明工厂模式和单例模式

工厂模式:在创建对象不会对客户暴露创建逻辑,定义一个接口,让其子类自己决定实   例化那个工厂类,比如您需要一辆汽车,可以直接从工厂里面提货,而不用去            管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现

单例模式:单例类只有一个模式,必须自己创建自己唯一的实例

34.JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

通过面向对象的方法处理异常,当一个方法出现异常后便抛出一个异常对象,该对象包含异常信息,调用该对象的方法可以捕获到异常并进行处理;

Throw;明确抛出一个异常

Throws:标明一个成员函数可能出现的各种异常

Try:指定一块可能出现各种异常的代码

Catch:指定想要捕获到的异常的类型

Finally:确保一段代码不管有没有异常都会你执行

35.java.中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类

字节流,继承于inputstream和outputstream

字符流,继承于inputstreamreader和outputstreamwriter

36.垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收

对于gc来说,当程序员创建一个对象后,gc就开始监控这个对象,当gc确定这个对象不被引用,就回收这些对象的内存空间;可以通过system.gc()通知gc运行,但Java并不保证gc一定会执行

37.什么是java序列化

就是一种用来处理对象流的机制;

38.说出Servlet的生命周期

Servlet被服务器实例化后,容器先运行其的init()方法,请求到达时再运行service()方法,service方法自动运行与请求对应的doget/dopost方法,等到服务器要将实例销毁的时候就调用destory方法

39.sql语句的查询顺序:查询组合字段select 连表(from) 查询条件(where) 分组(groud by) 分组条件(havaing) 排序(order by)

我们希望查找订单总金额少于 2000 的客户并按照降序排列

SELECT Customer,SUM(OrderPrice) FROM Orders

GROUP BY Customer

HAVING SUM(OrderPrice)<2000

Order by orderprice desc

40.driverclass写法com.mysql.cj.jdbc.driverclass

jdbcurl写法:jdbc:mysql://locallhost:3306/store?charaterEncoding=utf8&useSSL=false&serverTimezone=GMT

  1. sql的多表查询:
    1. 内连接:
      • 隐式内连接:
      • 显式内连接:(inner join)
    2. 外连接
      • 左外连接:左边表的全部和左边表与右边表的相同部分
      • 右外连接:右边表的全部和右边表和左边表的相同部分
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值