java基础面试题部分

  • 数据类型数据类型

  • 字符串字符串

  • String str = "i"与 String str = new String(“i”)

内存分配不同,str=“i”,存于常量池,new是对象,存于堆。

  • HashMap与HashTable

hashmap去掉了hashtable的contains方法,但是加上了conrainsValue()和containsKey()方法。
hashtable同步的,hashmap非同步的,效率上hashmap高。
hashmap允许空键值对,hashtanle不允许。

  • 多线程创建

    • 继承Thread类,重新run()
    • 定义Runnable接口的实现类,重新run()

    run()方法的返回值是void,

    • 创建Callable接口的实现类,并实现call()

    call()方法是有返回值的,返回值是泛型,和Future,FutureTask配合可以用来获取异步执行的结果。

  • 线程池创建

    • newFixedThreadPool(int nThreads)固定长度,当线程发生未预期的错误而结束时,线程池会补充一个新的线程。
    • newCachedThreadPool()可缓存的线程池,若线程池规模超过了处理需求,自动回收空闲线程,当需求增加,自动添加新线程,线程池规模不受任何限制。
    • newSingleThreadExecutor()单线程的Executor,他创建单个工作线程来执行任务,若线程异常结束,会创建一个新的线程代替,特定时确保任务在队列中顺序串行执行。
    • newScheduledThreadPool(int corePoolSize)固定长度的线程池,而且以延迟或定时的方式来执行任务,类似于Timer。
  • 死锁四个必要条件

    • 互斥条件
    • 请求和保持条件
    • 不可剥夺条件
    • 环路等待条件
  • synchronized

    • 可保证方法或代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时还保证贡献变量的内存可见性,java每个对象都可作为锁,这是synchronized实现同步的基础;普通同步锁当前实例对象;静态同步方法锁当前类的class对象;同步方法块锁括号里的对象。
    • synchronized与volatile

    volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可访问该变量,其他线程被阻塞。
    volatile仅能使用在变量级别:synchronized可使用在变量、方法和类级别
    volatile仅能实现变量的修改可见性;不能保证原子性;synchronized可保证变量的修改可见性和原子性。
    volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。
    volatile编辑的变量不会被编译器优化;synchronized标记的变量可以被编译器优化。

    • synchronized与Lock

    首先synchronized是java关键字,Lock是java类;
    synchronized无法判断是否获取锁的状态;Lock可判断是否获取到锁;
    synchronized会自动释放锁(a、线程执行完同步代码会释放锁b、线程执行过程中发生异常会释放锁)Lock需要在finally中手动释放(unlock())容易造成线程死锁。
    synchronized锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平;

  • jsp与servlet

    jsp经编译后就变成了Servlet(jsp本质就是Servlet,JVM只能识别java类,不能识别jsp的代码,web容器将jsp的代码编译成jvm能够识别的java类。)
    Servlet没有内置对象,jsp的内置对象都是必须通过HttpServletRequests对象,HttpServletResponse对象以及HttpServlet对象得到。

  • JSP

    • 9个内置对象
    • request:封装客户端的请求;
    • response:封装服务器对客户的响应;
    • pageContext通过该对象可获取其他对象;
    • session:封装用户会话的对象;
    • application:封装服务器运行环境的对象;
    • out:输出服务器响应的输出流对象;
    • config:Web应用的配置对象;
    • page:JSP页面本身(相当于java的this);
    • exception:封装页面抛出异常的对象;
  • 4作用域

    • page:与一个页面相关的对象和属性;
    • request:与web客户端发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个web组件:需要在页面显示的临时数据可以置于此作用域;
    • session:与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据影噶放在用户自己的session中。
    • application:与整个web应用程序相关的对象和属性,它实质是跨越整个web应用程序,包括多个页面、请求和会话的一个全局作用域。
  • 静态变量与实例变量的

    • 静态变量tatic修饰又称类变量,是属于类的,不是属于对象的,不管一个类创建多少对象,静态变量在内存中有且只有一个拷贝;静态变量可以实现让多个对象共享内存。
    • 实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值