Java模拟面试题二

1.常见的HTTP协议状态码有哪些?

常见的状态码有:
1xx代表服务器端已经接受了请求。
2xx代表请求已经被服务器端成功接收,最常见的有200、201状态码。
3xx代表路径被服务器端重定向到了一个新的URL,最常见的有301、302状态码。
4xx代表客户端的请求发生了错误,最常见的有401、404状态码。
5xx代表服务器端的响应出现了错误。

2.创建线程有哪几种方式

1.继承Thread类创建线程:

  • 定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法成为执行体
  • 创建Thread子类的实例也就是创建了线程对象
  • 调用线程对象的start()方法来启动线程

2.通过Runnable接口创建线程类:

  • 定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体
  • 创建Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象
  • 调用线程对象的start()方法来启动该线程

3.通过Callable和Future创建对象:

  • 创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程的执行体,并且有返回值
  • 创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutrueTask对象封装了该Callable对象的call()方法的返回值
  • 使用FutureTask对象作为Thread对象的target创建并启动新线程
  • 调用FutureTask对象的get()方法来获得子线程执行结束后的返回值

4.利用线程池创建

3.说一说你对双亲委派模型的理解

一言概之,双亲委派模型,其实就是一种类加载器的层次关系

  1. 工作过程
    如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此。
    因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去加载。
  2. 好处
    使得 Java 类随着它的类加载器一起具有一种带有优先级的层次关系,从而使得基础类得到统一。 例如 java.lang.Object 存放在 rt.jar 中,如果编写另外一个 java.lang.Object 并放到 ClassPath 中,程序可以编译通过。由于双亲委派模型的存在,所以在 rt.jar 中的 Object 比在 ClassPath 中的 Object 优先级更高,这是因为 rt.jar 中的 Object 使用的是启动类加载器,而 ClassPath 中的 Object 使用的是应用程序类加载器。rt.jar 中的 Object 优先级更高,那么程序中所有的 Object 都是这个 Object。
    避免了多份同样字节码的加载,内存是宝贵的,没必要保存相同的两份 Class 对象,例如 System.out.println() ,实际我们需要一个 System 的 Class 对象,并且只需要一份,如果不使用委托机制,而是自己加载自己的,那么类 A 打印的时候就会加载一份 System 字节码,类 B 打印的时候又会加载一份 System 字节码。而使用委托机制就可以有效的避免这个问题。

4.说说你对Spring Boot的理解

Spring Boot:用于快速构建基于spring的应用程序。可以开箱即用,也可以按需改动。提供各种非功能特性。快速生成代码,没有xml配置,简化开发。

5.给你一个文本串 T ,一个非空模板串 S ,问 S 在 T 中出现了多少次

kmp算法好难,还没完全掌握

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值