java面试题知识点总结

 

8.15

一.关于servlet service

1.不管是post还是get方法提交过来的连接,都会在service中操作,.service判断请求类型,决定是调用doGet()还是doPost()方法

2,service是在javax.servlet.Servlet接口中定义的

3doget dopost与HTTP协议有关,是在java.servlet.HttpServlet中实现的

 

 

4.GenericServlet抽象类给出设计servlet的一些骨架,定义了servlet的生命周期,还有一些得到名字,配置,初始化参数的方法,其设计的是和应用层协议无关的

5.service方法是在service生命周期中的服务期,根据HTTP请求方法(GET.POST等)将请求发送到doGet,doPost

默认在HttpServlet类中

6.所有的请求都由service方法处理,

javax.servlet.GenericServlet接口实现了 javax.servlet.Servlet接口,

并且javax.servlet.http.HttpServlet是javax.servlet.GenericServlet的子类

 

二.关于sql语句

 

statement每次执行sql语句,数据库都要执行sql语句的编译

statment 对象用于将sql语句发送到数据库中

实际上有三种statment对象,他们都作为在给定连接上执行sql语句的包容器:

  .statment   .PreparedStatment(它从statment中继承而来)  .CallableStatment(它从PreparedStatment中继承而来)

他们都专用于发送特定类型的SQL语句

(1)  .statment对象用于执行不带参数的简单SQL 语句,提供了执行语句和获取结果的基本方法

(2).PreparedStatment 对象用于执行带或不带参数的预编译SQL语句,添加了处理IN参数的方法

(3).CallableStatment对象用于执行对数据库已存储过程的调用,添加了处理OUT参数的方法

 

三.关于线程

1.定义线程

(1)扩展java.lang.Thread类

//方式1 继承
public class test1 {

	public static void main(String[]args) {
		MyThread m=new MyThread();
		MyThread m2=new MyThread();
		//m.run()
		//不要直接调用run方法,否则run方法会立即被执行,而在run方法返回之前其他线程
		//无法并发执行,也就是,系统吧线程对象当成普通对象.run方法当成普通方法,而不是线程执行体
		//程序执行的结果只有一个主程序
		//调用了run方法后,该线程已经不再处于新建状态,因此不能再调用start()
		m.start();
		//调用start方法来启动线程,系统会把run方法当成线程执行体来处理
		m2.start();
	}
}

//如果电脑只有一个cup则任何时刻只有一个线程被执行
//不能对同一个线程对象多次调用start

(2)实现java.lang.Runnable接口

package a_ThreadDemo;
//加入睡眠
public class MyRunnable implements Runnable {

	
	@Override
	public void run() {
		for(int i=0;i<67;i++) {
		try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName()+" "+i);
		}
		//用Tread类来获取当前线程对象比较简单,直接用this就可以
		//用Runnable接口就需要使用Tread.currentThread()
		
		//继承方式,直接创建Thread子类对象
		//实现Runnable接口创建的对象只能作为线程对象的target

	}

}
//方式2 实现接口
public class test2 {

	public static void main(String[]args) {
		MyRunnable m=new MyRunnable();
		
		Thread t1=new Thread(m,"thread1");
		Thread t2=new Thread(m,"thread2");
		
		t1.start();
		t2.start();
		
	}
}

 

2.实例化线程 

(1)如果是展了java.lang.Thread类的线程,则直接new完即可

(2)如果是实现了java.lang.Runnable 接口,则用Tread的构造方法

Thread(Runnable target)

Thread(Runnable target,String name)

3.启动线程

在Thread对象上调用start()方法,而不是run()或是其他方法

 

线程可以驱动程序,这可以由Runnable 接口提供,把你想要任务执行的命令写到run()方法中,

当从Runnable 中导出一个类,他必须具有run()方法,但是这个方法不会产生任何内在的线程能力,

要实现线程行为,就要将任务显示附着到线程上

传统方式是将对象交给一个Thread构造器

调用Thread对象的start()方法是将该线程执行所必须的初始化操作

然后调用Runnable 的run()方法.以便在这个新线程中启动该任务

 

 

8.17

1.关于访问控制级别

which keyword can protect a class in a package from accessibility by the classes outside the package but not package inside?

default

defualt同类,同包下可以访问,子类不可以

protected 它的子类是可以访问的,如果它的子类和它不在一个包下,仍可以访问

 

2.servletconfig接口默认哪里实现的?

 

 

 

8.19

1.java语言中,按照一定格式生成程序的文档是   javadoc

jar     将许多文件组合成一个jar文件

javac    编译

Javadoc   它从程序源代码中抽取类,方法,成员等注释成一个和源代码配套的API帮助文档

javah把java代码声明的JNI方法转换为c/c++头文件

 

2.  int i=0;

    i=i++;

System.out.println(i);

输出结果应为0,这里的i=i++相当于i++

System.out.println(i++);

先输出结果再自增

 

3.一个以.java为后缀名的源文件,只能有一个与文件名相同的类,可以包含其他类

 

4.

public class hello {

 

    public static void add(Byte b){

        b=b++;

    }

    public static void main(String[]args){

        Byte a=127;

        Byte b=127;

        add(++a);

        System.out.println(a);

        add(b);

        System.out.println(b);

    }

}

a=-128    b=127

++a超出范围,变为-128,Byte类型范围-128-127

进行运算时,自动拆箱,成byte类型,所以add函数不能实现自增功能

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值