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、Date,set等类对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
- sql的多表查询:
- 内连接:
- 隐式内连接:
- 显式内连接:(inner join)
- 外连接
- 左外连接:左边表的全部和左边表与右边表的相同部分
- 右外连接:右边表的全部和右边表和左边表的相同部分
- 内连接: