没有合适的资源?快使用搜索试试~ 我知道了~
2019年VIPKID Java工程师一面1
需积分: 0 0 下载量 38 浏览量
2022-08-08
23:05:31
上传
评论
收藏 243KB DOCX 举报
温馨提示
试读
17页
(2)初始化(调用init方式,进行初始化)实例化后,Servlet容器将调用Servlet的init()方法进行初始化(一些准备工作或资源预加载工作) (3)
资源详情
资源评论
资源推荐
线程的创建方式?
1)继承 Thread 类;
2)实现 Runnable 接口,无返回值;new thread(new Runnable(){...}).start();
3)实现 Callable 接口,通过 Future 对象获取结果;
4)构建线程池;pool.execute(()->{...})
线程让步(yield,一时没想起来)sleep、yeild、join
1)yeild 方法,进入就绪状态,把 CPU 资源让给比它权限更大的进程
2)Sleep 方法,进入堵塞状态,释放 cpu 资源,不会释放锁
3)Join 方法,进入堵塞状态, 只有调用的当前线程执行完毕之后,才执行后面
的程序代码!!
4)Wait 方法,释放 cpu,同时也释放锁
5)Interrupt 方法中断线程 、 interrupted、isInterrupted
守护线程的作用?
Java 中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程);
用户线程即运行在前台的线程,而守护线程是运行在后台的线程。 守护线程作用是为其他前台线程
的运行提供服务和支持,而且仅在非守护线程仍然运行时才需要,比如垃圾回收线程就是一个守护线
程。
总结:线程分为 用户线程和守护线程 , 其中守护线程主要作用就是:为用户线程的正确运行,提
供支持和服务的,比如垃圾回收线程 gc
6)IO 操作有哪些类?主要涉及了两类设计模式
1、适配器模式(比如字符流和字节流的转换)
2、使用 filterInputstream 实现装饰着模式(继承这个类,重写里面的功能方法,
增加额外功能)
字符流:FileReader、FileWriter(指定编码集或者追加内容)、BufferedReader、
BufferedWriter、InputStreamReader、OutputStreamWriter
字节流: FileInputStream、FileOutputStream、
BufferedReader br = new BufferedReader(new fileReader(file))
String st = Br.readLine();
7)异常体系?
Throwable 接口:Error(StackOverflowError 重复递归地调用、 outOfMemoryError
重复地产生新的大的对象)和 Exception(检查和非检查)
Throws 在方法上面 Throw new Exeception();
运行时 exeception:比如空指针异常、数组越界、类型转换错误、类没有找到、
算术错误、字符串越界等待等 ; 在编译的时候,可以正常编译通过
非运行时 exeception:比如 IO、Sql 异常,值得是:在编译的时候,需要使用 try
catch 异常捕获机制处理,不然编译不能通过的异常
get 和 post 的区别
1)get 方式,提交的数据会在地址栏显示,?前是 url 地址,?后是传输数据
2)Get 方式提交数据大小限制在 1kb
3)Get 方式数据明文传输,不安全
session 和 cookie 的区别?
1)cookie 保存在浏览器端,session 数据保存在客户端
2)Cookie 只能存储 String 类型对象,session 可以存储任何 Java 对象
3)cookie 的话本身是只能保存 string 类型的信息的,这就需要先序列化,然后
接收的页面反序列化后形成对象调用
4)Cookie 不够安全,在浏览器缓存在,能够拿到数据
5)Session 存储在服务器端,数据多时,会影响到服务器的性能
6)Cooke 只能存放 4kb 大小的数据
spring 创建 bean 的方式?
1.调用构造器创建 Bean
使用构造器来创建 Bean 是最常见的情况,如果是构造注入,则通过配置构造函数来实现创建 Bean,如果是设值注入,
Spring 底层会调用 Bean 类的无参数构造器来创建实例。
2.调用静态工厂方法创建 Bean
所谓静态工厂方法就是建立一个工厂类,工厂类有个静态工厂方法,让产品的实例化在工厂类的静态工厂方法中进行,
让整个过程都面向接口编程。
需要配置 beans.xml 的配置:
package handle;
public interface Being {
public void testBeing();
}
public class Dog implements Being {}
public class Cat implements Being {}
public class BeingFactory {
//返回 Being 实例的静态工厂方法
public static Being getBeing(String arg)
{
//调用次静态方法的参数是 dog,则返回 Dog 实例
if(arg.equalsIgnoreCase("dog"))
{
return new Dog();
}
else
{
return new Cat();
}
}
}
3.调用实例工厂方法创建 Bean
调用实例工厂方法与调用静态工厂方法类似,只是工厂类中的工厂方法有无 static 之分,以及配置上内容稍有差异,为
便于区分,仍然使用调用静态工厂方法的示例。
需要配置 beans.xml 的配置:
public interface Being {
public void testBeing();
}
public class Dog implements Being {}
public class Cat implements Being {}
public class BeingFactory {
//返回 Being 实例的静态工厂方法
public Being getBeing(String arg)
{
//调用次静态方法的参数是 dog,则返回 Dog 实例
if(arg.equalsIgnoreCase("dog"))
{
return new Dog();
}
else
{
return new Cat();
}
}
}
总结:1、依赖注入三种方式:set 注入、构造注入、注解注入
2、spring 实例化 Bean 三种方式:构造函数方式、通过静态工厂方
法、通过实例工厂方式
Spring 之依赖注入(设值注入、构造注入、注解注入)
两者区别
设值注入:解决循环依赖
a)与传统的 Javabean 的写法更相似,通过 setter 方法设定依赖关系显得更加直观自然
b)对于复杂的依赖关系,如果采用构造注入,会导致构造器过于臃肿;多参数情况下使得构造器变得
更加笨重
构造注入:
建议采用以设值注入为主,构造注入为辅的注入策略。对于依赖关系无须变化的注入,尽量采用构造注入;而其它依赖
关系的注入,则考虑设置注入。
总结:1、set 注入方式可以解决单例作用域的循环依赖问题 2、当依赖关系比较复杂的时候,采用构造注入方式,会
使得构造器过于臃肿,最好采用 set 注入 ,构造注入无法解决循环依赖问题 3、当参数比较多的时候,采用构造注入,
比较麻烦
Spring 如何解决循环依赖
Spring 容器循环依赖包括构造器循环依赖和 setter 循环依赖
实例:比如 testA 用到 TestB , TestB 用到了 TestC , TestC 用到了 TestA,造成循环依
赖
1.构造器循环依赖(无法解决,抛出异常)
如在创建 TestA 类时,构造器需要 TestB 类,那将去创建 TestB,在创建 TestB 类时又发
现需要 TestC 类,则又去创建 TestC,最终在创建 TestC 时发现又需要 TestA,从而形成
一个环,没办法创建。
2.setter 循环依赖(可以解决单例作用域的循环依赖问题,通过提前暴露正在创建中的 bea
n 来实现) spring 容器对单例 bean 进行缓存,可以提前暴露
表示通过 setter 注入方式构成的循环依赖。对于 setter 注入造成的依赖是通过 Spring 容器
提前暴露刚完成构造器注入但未完成其他步骤(如 setter 注入)的 bean 来完成的,而且只
能解决单例作用域的 bean 循环依赖。通过提前暴露一个单例工厂方法,从而使其他 bean
能引用到该 bean
剩余16页未读,继续阅读
养生的控制人
- 粉丝: 18
- 资源: 333
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0