Java常见基础题

String相关

177.String s=new String(“abc”);创建了几个String对象。

两个或一个,”abc”对应一个对象,这个对象放在字符串常量缓冲区,常量”abc”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它一句那个常量”abc”对象的内容来创建出一个新String对象。如果以前就用过’abc’,这句代表就不会创建”abc”自己了,直接从缓冲区拿。

187.String 和StringBuilder、StringBuffer 的区别?

相同点:

它们都可以存储和操作字符串,同时三者都使用final修饰,都属于终结类不能派生子类。

不同点:

string是只读字符串,也意味着string引用的字符串内容不能改变,而string buffer和string builder表示字符串对象可以进行修改,在修改的同时地址值不会发生改变。

线程

194.Vector和ArrayList的区别和联系

相同点:

底层都使用了数组

实习增删改的方法相似

都是长度可变的数组

都实现了list接口

不同点

vector线程安全,array list线程不安全

196.HashMap和Hashtable的区别和联系

相同点:

实现原理相同,功能相同,底层都是哈希表结构,查询速度很快

不同的:

1.hashtables 和Hash table继承和实现不同的类

2.hashtables线程安全,hashmap线程不安全

3.hashtables不允许null。而hashmap可以

204.List,Set,Map各有什么特点

  1. list是有序(插入顺序)对象

  2. set接口存储一组唯一,无序的对象

  3. Map接口存储一组键值对象,提供key——value的映射。

    225.说明类java.lang.ThreadLocal的作用和原理。

  4. Threadlocal类中有一个Map,用于存储每一个线程的变量的副本

229.在多线程编程里,wait方法的调用方式是怎样的?

wait方法必须使用(synchronized)上锁的对象的对象调用,从而持有该对象的锁进入线程等待状态,直到使用该上锁的对象调用notify或者notifyAll方法,以释放持有的锁。

230.Java线程的几种状态

1.新建

​ 当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)

例如:Thread t1=new Thread();

2.就绪

​ 线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。例如:t1.start();

3.运行

线程获得CPU资源正在执行任务(run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。

4.死亡

​ 当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。

​ 自然终止:正常运行run()方法后终止

​ 异常终止:调用stop()方法让一个线程终止运行

5.堵塞

由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。

正在睡眠:用sleep(long t) 方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。

正在等待:调用wait()方法。(调用motify()方法回到就绪状态)

被另一个线程所阻塞:调用suspend()方法。(调用resume()方法恢复)

239.Java线程中,sleep()和wait()区别

1.sleep是线程类(thread)的方法,作用是导致此线程暂停执行时间,给执行机会给其他线程,但是依然保持,到时会自动恢复;调用sleep方法不会释放对象锁。

2.wait方法是Object类的方法,对此调用此方法导致本线程放弃对象锁,进入等待此对象的等待锁定池。只有此对象发出notify后本线程才进入对象锁定池,准备获取对象锁进行运行状态。

242.sleep()和yield()有什么区别?

1.线程执行sleep方法后转入阻塞状态,而执行yield方法转入就绪状态

2.sleep方法声明会抛出相应的异常,而yield没有抛出声明的异常

3.sleep方法比yield方法具有更好的移植性

250.简述synchronized 和java.util.concurrent.locks.Lock的异同?

相同点:Locak能完成synchronized 的所有功能

不同点:

  1. lock比synchronized 更精准的线程语义和更好的性能

  2. synchronized 会自动释放锁,而Locak一定要求程序员手工释放

    web方面

293.简单描述一下Servlet与JSP的的相同点和区别点。

  1. jsp是在HTML代码中写Java代码,框架是HTML;而servlet反过来。
  2. jsp使人们把显示和逻辑分隔成为可能,而servlet并没有把两者分开。
  3. servlet需要在web.xml配置,而jsp无需配置
  4. jsp主要用在视图层,而servlet只要用在控制层,负责调度。

351.Servlet API中forward() 与redirect()的区别

1.forward:是服务器内部的重定向,服务器直接访问目标地址的url的响应的内容读取出来,

而客户端并不知道,因此客户端浏览器的地址栏不会显示跳转之后的地址。由于重定向的过程中是同一个request,所以forward会把request的信息带到被定向jsp或者servlet中使用。

2.redirect:是客户端的重定向,是完全跳转,即客户端浏览器会获得跳转之后的地址,然后重新发送请求,因此浏览器会显示跳转后的地址。

352.Session域和request域什么区别?

相同之处:存放数据,传递数据

区别:

1.HTTPserveltRequest:

​ 声明周期:一次请求之间

​ 作用范围:所有被请求转发过来的servlet都能获取到

2.HTTPSession

​ 生命周期:一次会话

​ 作用范围:所有servlet都可以获取到

3.ervletContex:

​ 生命周期:从项目开始运行到服务器关闭

​ 作用范围:所有的servlet都可以获取到

402.JSP中的四种作用域?

1.page代表与一个页面相关的对象和属性

2.request 一个请求可能跨越多个页面,涉及多个web组件;需要在页面显示的临时数据可以置于此作用域

3.session代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中

4.application代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值