Java面试必背

11 篇文章 0 订阅
4 篇文章 0 订阅
Integer与int的区别
  • int是Java提供的8种原始数据类型之一。Integer是Java为int提供的封装类。
  • int的默认值为0,而Integer的默认值为null;
  • Integer与new Integer不会相等。不会经历拆箱过程,new出来的对象存放在堆,而非new的Integer常量则在常量池(在方法区),他们的内存地址不一样,所以为false。
  • 两个都是非new出来的Integer,如果数在-128到127之间,则为true,否则为false。因为Java在编译Integer i2=128的时候,被翻译成:Integer i2=Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存。
  • 两个都是new出来的,都为false。还是内存地址不一样。
  • int和Integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比。
Java值传递和引用传递区别
  1. 值传递:
    方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,而实际参数和形式参数,后面方法中的操作都是对形参这个值的修改,不影响实际参数的值。(简单理解:副本传递)
  2. 引用传递:
    也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址;
    在方法执行中,形参与实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象。(简单理解:内存地址传递)
如何让多个线程按顺序执行
  • 通过主线程Join()
    线程1 t1=new线程1();
    线程2 t2=new线程2();
    线程3 t3=new线程3();
    t1.start();
    t1.join();
    t2.start();
    t2.join();
    t3.start();
  • 通过线程执行时Join()
    只是把join();run方法里面罢了,
  • 共享对象锁,可以保证每个方法只能同时有一个线程进入,配合wait和notifyall方法,可以启动或者唤醒线程。
  • 设置线程的优先级(不太推荐,如果优先级数离得近并不会按顺序执行)
start()和run()方法有什么区别?

start()方法被用来启动新创建的线程,而且start()内部调用了run()方法,这和直接调用run()方法的效果不一样。当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动

string和stringbuffer和stringbuilder的区别
  • 因为string是不可变的(通过ide的debugger可以发现其属性大都为final类型),因此每次对其操作改变其变量值,其实是生成一个新的对象,然后将变量引用指向新对象;因此速度慢。
  • stringbuffer则不同,对其操作即直接操作对象指向的引用,无需产生新对象,速度很快;他是线程安全的,在维护多线程的同步等也会消耗一点性能。
  • stringbuilder是jdk5之后新增的,其用法与stringbuffer完全一致,但他是线程不安全的,在单线程中最佳,因为其不需要维护线程的安全,因此是最快的。
list.map.set的存储特点?
  • list以特定次序来持有元素,可有重复元素
  • map保存key-value值,value可多值
  • set无法拥有重复元素,内部排序
ArrayList和linkedlist
  • ArrayList采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦
  • linkedlist采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引 但是缺点就是查找非常麻烦要从第一个索引开始
Hashtable和HashMap区别

Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现

了解过的设计模式
  • 生产消费者设计模式
  1. 生产者制造数据
  2. 生产者把数据放入缓冲区
  3. 消费者把数据取出缓冲区
  4. 消费者处理数据
  • 外观设计模式
    加以自己的了解,进行介绍
堆和栈区别

堆:先进先出
栈:先进后出
堆主要用来存放对象的,栈主要是用来执行程序的
堆:内存用来存放由new创建的对象和数组
在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理

抽象类和接口区别
  • 抽象类可以有构造方法,接口不可以
  • 抽象类可以有普通成员变量,接口不可以
  • 抽象类可以包含静态方法,接口不可以
  • 抽象类可以包含单继承,接口为多接口
拦截器和过滤器
  • 拦截器是基于Java的反射机制(Java反射简单理解为任意调用、任意访问,就是调用的)的,而过滤器是基于函数回调(简单理解就是把Java方法的路径调用)。
  • 拦截器不依赖于servlet容器,过滤器依赖于servlet容器。
  • 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
  • 拦截器可以访问控制层上下文、值栈里的对象,而过滤器不能访问
  • 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
转发与重定向的区别
  • 转发在服务器端完成的;重定向是在客户端完成的
  • 转发的速度快;重定向速度慢
  • 转发的是同一次请求;重定向是两次不同请求
  • 转发不会执行转发后的代码;重定向会执行重定向之后的代码
  • 转发地址栏没有变化;重定向地址栏有变化
  • 转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成
  • 还有一个大的区别就是,重定向可以访问自己web应用以外的资源
jsp九大内置对象
  • request 请求对象
  • response 响应对象
  • page 页面对象
  • application 应用程序对象
  • out 输出对象
  • exception 例外对象(异常)
  • pagecontext 页面上下文对象
  • session 会话对象
  • config 配置对象
servlet生命周期

servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由Javax.servlet。Servlet接口的init,service和destroy方法表达。

页面间对象传递的方法

request session application cookie等

Spring的优点和缺点
  • 优点:有效组织中间层对象,消除在许多工程中使用的单态模式,非入侵试,不需要过多依赖Spring框架,Spring构建的应用程序易于完成单元测试
  • 缺点:频繁的使用配置过多的配置文件
Spring的aop的作用

aop 就是扩展第三方服务。比如:日志、持久性、事务等

Springmvc工作流程
  1. 用户发送请求至前端控制器DispatcherServlet
  2. DispatcherServlet收到请求后调用HandlerMapping处理器映射器
  3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一同返回给DispatcherServlet
  4. DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
  5. 执行处理器(Controller,也叫后端控制器)
  6. Controller执行完成返回ModelAndView
  7. HandlerAdapter将Controller执行结果ModelAndView返回DispatcherServlet
  8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器
  9. ViewReslover解析后返回具体View
  10. DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
  11. DispatcherServlet响应用户
MyBatis工作流程
  1. 加载配置文件
  2. 生成SqlSessionFactory
  3. 建立SqlSession
  4. 调用MyBatis提供的API
  5. 查询Map配置文件
  6. 返回结果
  7. 关闭SqlSession

什么是控制反转、依赖注入、以及依赖注入的方式

  • 控制反转就是本来你该做的事情,你不去做了,让系统去做。比如,你获取一个对象的时候,往往需要new出实例来,如果用了控制反转,那这件事情就不需要你做了,你只需要在配置文件xml中配置好,系统就帮你new了。
  • 控制反转也叫依赖注入,就是把该用到的东西提前注入进去,下次直接用,而不是每次都new
  • 依赖注入方式:构造器依赖注入和Setter方法注入

码巢带你对标阿里P6
想获取更多知识,可扫码进入群聊、关注我们的微信公众号
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值