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
底层数据结构是红黑树。(唯一,有序)
- 如何保证元素排序的呢?
自然排序
比较器排序
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、通过继承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。