一、面向对象的特征都有哪些?他们在使用过程中的优势是什么?
(1)对象唯一性 (2)抽象性 (3)继承性 (4)多态性
1、易维护
采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
2、质量高
在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
3、效率高
在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
4、易扩展
由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。
二、ArrayList、Vector和LinkedList的存储性能和特性
ArrayList和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入数据,都允许直接按序号索引元素。
但是插入数据要涉及到数组元素移动等内容操作,所以索引数据块插入数据慢。
Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历
但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
三、多线程几种实现方法?同步有哪些实现方法?
有两种实现方法,分别是继承Thread类和实现Runnable接口
实现同步也有两种方法,一种是用同步方法,一种是用同步块。
同步方法就是在方法返回类型后面加上synchronized,如
public void syncnronized add(){......}
同步块就是直接写synchronized(同步对象){......}
四、数据库连接池工作机制?JDBC如何做事务处理?
J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接,客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其记为忙。如果当前没有空闲连接池,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定,当使用的池连接调用完成后,池驱动程序将此连接标记为空闲,其他调用就可以使用这个连接。
在JDBC的数据库操作中,一项事务是由一条或多条表达式所组成的一个不可分割的工作单元。我们通过提交commit()或是回滚rollback()来结束事务的操作。
在JDBC中,事务操作默认是自动提交。我们可以通过调用setAutoCommit(false)来禁止自动提交。之后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()来进行整体提交。倘若其中一个表达式操作失败,都不会执行到commit(),并且将产生响应的异常。此时就可以在异常捕获时调用rollback()进行回滚。这样做可以保持多次更新操作后,相关数据的一致性。
五、Request对象的主要方法
setAttribute(String name,Object) ;设置名字为name的参数值
getAttribute(String name); 返回由name指定的属性值
getAttributeNames();
getCookies(); 返回客户端的所有cookie对象,结果是一个Cookie数组
getHeader(String name); 获取HTTP协议定义的文件头信息
getParameter(String name); 获得客户端传给服务器的name的属性值
getRequestURL(); 获取发出请求字符串的客户端地址
getSession(Boolean create); 返回和请求相关的Session
getServerName(); 获取服务器的名字
getServerPath(); 获取客户端所请求的路径
六、应用服务器有哪些?
Tomcat、JBoss、BEA的WebLogic、IBM的WebSphere
七、输入一行字符,分别统计其中英文字符,数字,空格和其他字符个数
public class T {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "ab@ C212e *5d% sDf6w";
int a=0,b=0,c=0,d=0; //分别代表英文字母,数字,空格,其他字符
char cStr[] = str.toCharArray();
for(int i=0;i<cStr.length;i++){
if((cStr[i]>='a'&&cStr[i]<='z')||(cStr[i]>='A'&&cStr[i]<='Z')){
a++;
}
else if(cStr[i]>='0'&&cStr[i]<='9'){
b++;
}
/**
* 又学到了一个新知识!
* Character 类在对象中包装一个基本类型 char 的值
* isWhitespace() 判断是否为空白字符
*/
else if(Character.isWhitespace(cStr[i])){
c++;
}else{
d++;
}
}
System.out.println(str.length());
System.out.println("英文字母:"+a);
System.out.println("数字:"+b);
System.out.println("空格:"+c);
System.out.println("其他字符:"+d);
}
}
八、排序都有哪几种方法?用java实现快速排序
稳定的:冒泡排序,插入排序
不稳定的:快速排序,选择排序,希尔排序,组合排序,堆排序
java代码:待续
九、求出100--200之内的素数
public class T {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=100;i<200;i++){
boolean b = true;
for(int j=2;j<i/2;j++){
if(i%j==0){ //如果能被j之中的某一个数整除 则不是素数
b = false;
}
}
if(b){
System.out.print(i+" ");
}
}
}
}
十、用java打印菱形
public class T {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i=1;i<=4;i++){ //外层控制行数
for(int j=1;j<=4-i;j++){ //打印空格
System.out.print(" ");
}
for(int k=1;k<=2*i-1;k++){ //打印星星
System.out.print("*");
}
System.out.println();
}
for(int i=1;i<=3;i++){ //下面的三行
for(int j=1;j<=i;j++){
System.out.print(" ");
}
for(int k=1;k<=7-2*i;k++){
System.out.print("*");
}
System.out.println();
}
}
}