面试题1:线程的创建方式 线程的五种状态
第一种 extends Thread 类 重写 run()
MyThread m1=new MyThread();
MyThread m2=new MyThread();
m1.start();
m2.start();
第二种创建方式 implements Runnable 接口 重写run ()
MyThreads m3=new MyThreads();
Thread t1=new Thread(m3);
t1.setName(“t1”);
MyThreads m4=new MyThreads();
Thread t2=new Thread(m4);
t2.setName(“t2”);
t1.start();
t2.start(); Run()方法内部代码:
for
(int i=0;i<100;i++){
System.out.println(i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
线程的几种状态:初始化状态—就绪状态—运行状态—阻塞状态—死亡状态
1、新建状态(New):新创建了一个线程对象。
2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中,变得可运行,只等待获取CPU的使用权。即在就绪状态的进程除CPU之外,其它的运行所需资源都已全部获得。
3、运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。
4、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。
阻塞的情况分三种:
(1)、等待阻塞:运行的线程执行wait()方法,该线程会释放占用的所有资源,JVM会把该线程放入“等待池”中。进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒,
(2)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入“锁池”中。
(3)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
5、死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
面试题2:线程并发库 ,线程池的作用
线程并发库 :往java程序中 加入了java.util.current 包, 便于线程的优化,线程池的创建
,线程的生命周期的控制 ,下面是几种线程池 :
程池的作用:
有效的控制了线程的最大数量,不会因为线程过多导致系统缓慢或崩溃
减少了线程的创建和销毁 节约了资源
减少了线程的创建 提高了效率
面试题3
讲一下什么是设计模式,常用的设计模式?
在设计过程中能够反复使用的通过不断验证的 能够解决某些特殊问题的设计方法,类似于模板,不同的方面 可以使用不同的设计模式来解决
提高效率 ;
常见的设计模式:
简单工厂: 对象创建型模式,写一个专门创建对象的工厂,通过用户的具体需求创建返回需要的对象;
工厂方法模式: 比简单工厂多了可扩展性,封装原则,可以不改变方法内部,父类工厂不在创建具体事例,而是其子类工厂创建;
抽象工厂模式:比如 苹果 分为 北方和南方之分,就可以使用,不同的一类 产品类别 ,可分为 北方工厂 和南方工厂 分别创建 属于北方的苹果香蕉 ,南方的苹果香蕉
单例模式 :该类只能有一个实例对象,构造私有化,对象有一个获得该对象的全局方法,可分为懒汉式(先判断是否存在 不存在再创建 节约资源 但线程不安全) 和饿汉式 (一开始就创建 ,浪费资源但是线程安全)
原型模式: 通过实现 cloneable 接口 重写 clone() ,复制已有对象,分为浅度克隆和深度克隆
;
面试题4:说一下http get 和post 请求的不同
相同点 :
都是Http 的请求方式,用户通过不同的请求方式来完成对资源文件url的访问,一般 get,post,put,delete 分别对应着对这个资源的增删改查,一般get对用于查询,post用于更新数据;
不同点:
1.get请求url参数会显示在地址栏后
post则不会
2.get 请求 url参数
的长度有限制 2048 post无限制
3.get请求 url参数
只能是ASSIC符,post也可以是字节码
4.post请求方式 比get请求更安全些;
面试题 5
说一下 jsp与servlet的区别?
Jsp 其实就是简化的servlet,
jvm只能 识别 。java类 ,在我们程序运行的时候,jsp经过编译
就会变为继承Httpservlet 的一个 类,对外提供服务 。
Jsp,主要由java代码
和html代码组成的页面 ,多用于
页面显示
Servlet:主要是用于 交互式浏览和修改数据,生成动态web, 多用于 逻辑控制
6:谈一下你对servlet的理解,什么是servlet?
Server Applet java servlet
主要使用java编写的服务器端程序
主要用于交互式的浏览和修改数据 生成动态的web页面
HttpServlet 通过重写doget()和 dopost() 或者 重写 service方法来完成 get 和post
请求的响应;
面试题7:
谈一下 servlet的生命周期?
生命周期主要包括:加载,实例化,初始化,处理请求 ,服务关闭 ,都是通过 javax.servlet.Servlet
这个接口得init ( ) service( ) destroy( ) 方法 实现的
具体步骤:
加载 servlet的class文件
创建servlet容器的对象
调用 javax.servlet.sevlet的init( )方法 完成初始化
通过 service方法 或者 doget( ),doPost ( )方法 来处理请求
Servlet 的服务关闭 调用 destroy( )方法
面试题 8: 说一下 forward 和redirect 请求的区别 ?
请求转发 ,服务器端转向,执行效率高,可携带作用域数据,跳转后 地址栏不发生变化,还是跳转前的url 有利于隐藏连接
重定向 sendDirect( ) 两次请求 ,客户端请求
,不能携带数据 ,request的作用域是同一次请求
, 跳转后 地址栏是 跳转后的那个页面 。
9: jsp 的九大内置对象
,和四大作用域
Page: 网页本身
pageContext: 网页属性 四大作用域之一
Exception :捕捉异常数据
Response: 数据的响应
Request: 数据的请求
Out : 输出对象
Config : servletConfig 文件对象
Session: 会话对象
Application: 全局 应用
四大作用域:
pageContext : 数据仅限于当前页面
request :仅限于 一次请求
session : 仅限于同一次会话
application: 整个应用 ,全局会话
加油吧 加油吧 坚持把 坚持把