java核心概况面试题

1.java的基本数据类型

八个
分别是byte(8), short(16), int(32), long(64), char(16), float(32), double(64), boolean(1).

其中:

整型:byte, short, int, long

字符型:char

浮点型:float, double

布尔型:boolean

2.java面向对象的特征?

1封装、2继承、3多态,4抽象
1、每一个类中都会有属性和方法,封装指的就是把属性和方法隐藏起来,只保留一些对外的接口和外部进行交互。
2、继承就是子类继承父类的特征和行为,使得子类对象具有父类的非private属性和方法。
3、多态就是同一个接口,使用不同的实现,而执行不同的操作。
4、抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象,数据抽象指的是属性,行为抽象指的是方法。

3.java 的装箱和拆箱

装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。

java ==和equals的区别

1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

如果作用于引用类型的变量,则比较的是所指向的对象的地址

2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量

如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

4.java string和StringBuillder 的区别(final)? StringBuffer和StringBuillder的区别?

1.String是不可变的字符串因为底层使用的是 private final char value[];

StringBuillder和StringBuffer都是可变的底层没有使用final

2.执行速度上StringBuilder>StringBuffer>String?

StringBuffer里面的方法都是使用synchronized修饰,
没有线程安全问题,但执行效率就低了点

而StringBuilder线程不安全,多以速度快

在单个字符串拼接的时候可以使用string,
但是在复杂的字符串和大量拼接?比如sql语句的时候依然使用StringBuilder更快。

原因是在stirng?在大量拼接的时候会new StringBuilder和toString()?这样会导致资源浪费?
个人建议使用StringBuilder

5.java 中的集合
java中的集合分为value,key-vale(Conllection Map)两种。
List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口

Set下有HashSet,LinkedHashSet,TreeSet

List下有ArrayList,Vector,LinkedList

Map下有Hashtable,LinkedHashMap,HashMap,TreeMap

Collection接口下还有个Queue接口,有PriorityQueue类

Connection接口:

— List 有序,可重复
ArrayList
优点: 底层数据结构是数组,查询快,增删慢。

缺点: 线程不安全,效率高
Vector
优点: 底层数据结构是数组,查询快,增删慢。

        缺点: 线程安全,效率低

LinkedList
优点: 底层数据结构是链表,查询慢,增删快。

             缺点: 线程不安全,效率高

—Set 无序,唯一

HashSet
底层数据结构是哈希表。(无序,唯一)

如何来保证元素唯一性?

1.依赖两个方法:hashCode()和equals()

LinkedHashSet
底层数据结构是链表和哈希表。(FIFO插入有序,唯一)

1.由链表保证元素有序

2.由哈希表保证元素唯一

TreeSet
底层数据结构是红黑树。(唯一,有序)

  1. 如何保证元素排序的呢?

自然排序

比较器排序

2.如何保证元素唯一性的呢?

根据比较的返回值是否是0来决定

Map接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable。

TreeMap是有序的,HashMap和HashTable是无序的。

Hashtable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别。

Hashtable是线程安全的,HashMap不是线程安全的。

HashMap效率较高,Hashtable效率较低。

如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap。
查看Hashtable的源代码就可以发现,除构造函数外,

Hashtable的所有 public 方法声明中都有 synchronized关键字,而HashMap的源码中则没有。

Hashtable不允许null值,HashMap允许null值(key和value都允许)

父类不同:Hashtable的父类是Dictionary,HashMap的父类是AbstractMap

TreeSet, LinkedHashSet and HashSet 的区别
TreeSet 的主要功能用于排序
LinkedHashSet 的主要功能用于保证FIFO即有序的集合(先进先出)
HashSet 只是通用的存储数据的集合

6.实现一个拷贝文件的工具类使用字节流还是字符流?
拷贝的文件不确定是只包含字符流,有可以能有字节流(图片,声音,图像等),为考虑通用性,要使用字节流。

7,java 线程的实现方式,怎么启动线程怎么区分线程?

  1. 什么是线程?
    线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。

  2. 线程和进程有什么区别?
    线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。
    不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。
    别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。

①实现方式
1、通过继承Thread类实现一个线程
2、通过实现Runable接口实现一个线程
继承扩展性不强,java总只支持单继承,如果一个类继承Thread就不能继承其他的类了。

②怎么启动?
Thread thread = new Thread(继承了Thread的对象/实现了Runnable的对象)

thread.setName(“设置一个线程名称”);

thread.start();

启动线程使用start方法,而启动了以后执行的是run方法。

③怎么区分线程?在一个系统中有很多线程,每个线程都会打印日志,我想区分是哪个线程打印的怎么办?
thread.setName(“设置一个线程名称”); 这是一种规范,在创建线程完成后,都需要设置名称。

线程并发库
JDK5中增加了Doug Lea的并发库,
这一引进给Java线程的管理和使用提供了强大的便利性。
java.util.current包中提供了对线程优化、管理的各项操作,使得线程的使用变得的心应手。
该包提供了线程的运行,线程池的创建,线程生命周期的控制.

创建线程池?
Java通过Executors提供四个静态方法创建四种线程池,
分别为:

newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

(最重要记得的)
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。

newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行

线程池的作用?
1、限定线程的个数,不会导致由于线程过多导致系统运行缓慢或崩溃
2、线程池不需要每次都去创建或销毁,节约了资源、
3、线程池不需要每次都去创建,响应时间更快。

8、java 什么是设计模式?常用的设计模式有哪些?
设计模式就是经过前人无数次的实践总结出来的,设计过程中可以反复使用的,可以解决待定问题的设计方法。

单例:
饱汉模式

饥汉模式

1、构造方法私有化,让除了自己类中能创建外其他地方都不能创建
2、在自己的类中创建一个单实列(饱汉模式是一出来就创建单实例,而饥汉模式需要的时候才创建)
3、提供一个方法获取该实例对象(创建时需要进行方法同步)

工厂模式:Spring IOC 就是使用了工厂模式。
对象的创建交给一个工厂去创建。

代理模式:Spring AOP 就是使用的动态代理。

9、 java http协议中 get和post 请求的区别?

二者主要区别:
1、GET从服务其获取数据;POST上传数据.
2、GET将表单中的数据按照variable=value的形式,添加到action所指向的URL后面.
并且两者使用了"?“连接,个个变量之间用”?"连接;
POST将表单中数据放在from 的数据体中,按照变量和指相对应的方式,传递到action所指向的URL;
3、GET是不安全的.,因为传输过程中数据被放在请求URl中;POST对所有用户来说都是不可见的.
4、GET传输数据量小,主要是受URL长度的限制;POST可以传送大量数据,所以上传文件只能用POST.
5、GET限制From表单数据集必须是ASCII字符,而POST支持整个ISO10646字符集。
6、GET是From的默认方法。

10、java 说说对Servlet的理解或者 servlet 是什么?
Servlet就是一个Java类。类就会有一系列的属性和方法。

Servlet全称Java Servlet,是用Java编写的服务器端程序。而这些Servlet都要实现Servlet这个接口。
其主要功能在于交互式的浏览和修改数据,生成动态Web内容。
Servlet运行于支持Java的应用服务器中。

HttpServlet 重写doGet 和 doPost 方法或者你也可以重写service方法完成对get和post请求响应。

Servlet的通俗理解?
Servlet是一个运行了面向请求/ 响应服务器中的网络模块。

请求是客户的一个调用,可能是远程的。

请求包含了客户要发送给服务器的数据。

响应是服务器返回给客户的回答该请求的数据。Servlet是一个JAVA对象,他以请求为输入,分析其数据,执行一些逻辑运算,并给客户发回一个响应。
另一方面,Servlet作为驻留在服务器端HTTP明白的中间层,它们知道怎样在HTTP中通过RMI或IIOP在EJB和客户之间进行通信。

11、java Servlet的生命周期?
servlet的生命周期就是从servlet出现到销毁的全过程。主要分为以下几个阶段:

加载类—>实例化(为对象分配空间)—>初始化(为对象的属性赋值)—>请求处理(服务阶段)—>销毁

加载Servlet的class—>实例化Servlet—>调用Servlet的init完成初始化—>响应请求(Servlet的service的方法)—>Servlet容器关闭时(Servlet的destroy方法)

12、java Forward和Redirect的区别?
Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。
直接转发方式(Forward),客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于一个每个信息资源是共享的。

间接转发方式(Redirect)实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。

1、forward是服务器端的转向而redirect是客户端的跳转。
2、使用forward浏览器的地址不会发生改变,而redirect会发生改变
3、forward是一次请求中完成。而redirect是重新发起请求。
4、forward是在服务器端完成。而不用客户端重新发起请求,效率较高。

13、jsp和Servlet的相同点和不同点?

相同点:

它们本质上都是java类?

不同点:

1、JSP经编译后变成Servlet

2、jsp更擅长表现于页面显示,Servlet更擅长于逻辑控制

3、Servlet的应用逻辑是在java文件中,并且完全从表现层中的HTML里分离开来。
而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。

?

联系:

JSP是Servlet技术的扩展,本质上是Servlet的简易方式。

14、 java jsp有哪些内置对象?作用分别是什么?四大作用域和页面传值?

九种对象
1、out对象:用于向客户端、浏览器输出数据。

2、request对象:封装了来自客户端、浏览器的各种信息。
3、response对象:封装了服务器的响应信息。
4、exception对象:封装了jsp程序执行过程中发生的异常和错误信息。
5、config对象:封装了应用程序的配置信息。
6、page对象:指向了当前jsp程序本身。

7、session对象:用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数

8、application对象:代表了当前应用程序的上下文。可以在不同的用户之间共享信息。

9、pageContext对象:提供了对jsp页面所有对象以及命名空间的访问。

jsp四大作用域:
page范围:只在一个页面保留数据(javax.servlet.jsp.PageContext(抽象类))

request范围:只在一个请求中保存数据(javax.servlet.httpServletRequest)

Session范围:在一次会话中保存数据,仅供单个用户使用(javax.servlet.http.HttpSession)

Application范围:在整个服务器中保存数据,全部用户共享(javax.servlet.ServletContext)

jsp 传递值 request、session、application、cookie 也能传值。

15、java Session 和Cookie的区别?
session和cookie的共同点:都是用来保存用户状态信息的机制。都是会话跟踪技术

访问过程:客户第一次向服务器发送请求,服务器端会产生一个sessionId,而通过cookie返回给客户端。

区别:
1.存储区域不同:session存放于服务端,cookie存放于客户端

2.保存内容不同:session能够存取任何类型的数据,cookie只能保存ASCII字符串;同时cookie保存内容比session小,session大小没有限制。

3.有效期不同:cookie有效期比session长,关闭浏览器后session就会失效。如果需要长期保存用户信息则需要将cookie过期时间设大一些,由于session依赖于名为JSESSIONID的Cookie,当cookie失效时,session不能正常作用,session时长设大后容易内存溢出。

4.服务器压力不同:由于session在服务器端,并发访问用户多时,产生大量session占用内存;而cookie在客户端,不占服务器资源。

5.浏览器支持不同:cookie需要浏览器客户端支持,如果不支持,只能采用session+url地址重写来实现

16、 java MVC的各个部分都有哪些技术来实现,如何实现?
MVC: model(模型), view(视图), controller(控制器)

model:应用的业务逻辑(如:数据库的操作),通过JavaBean实现
(hibernate、mybatis、ibatis)

view:视图层,用于与用户的交互,主要由jsp页面产生。
(jsp、FreeMarker、tails、taglib、EL、Velocity )

controller:处理过程控制,一般是一个servlet。
它可以分派用户的请求并选择恰当的视图以用于显示
同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。
(severlet、struts、spring、action)

jsp+Servlet +java bean最经典的MVC模式,实际上就是model2 的实现方式,就是把视图和逻辑隔离开了。

Model1的方式 jsp+servlce+dao
Model2的方式jsp+servlce+Servlet+dao

使用seeruts和springmvc这样的框架后,jsp+核心控制器+action+javabean。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值