Java常见面试题:java面试笔记
1、基本数据类型有哪些?
创新互联公司长期为成百上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为武宁企业提供专业的成都网站设计、成都网站制作、外贸网站建设,武宁网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。
基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类。
2、get和post的区别
get是从服务器上获取数据,post是向服务器传递数据;
get传送的数据量小,不能大于2KB,post传送的数据量较大;
get安全性低,传递的参数都显示在地址栏,post高,但是执行效率上get好一些;
在进行文件上传的时候,只能使用post而不能使用get
3、string stringbuffer stringbuilder 区别及选用
String字符串常量,Stringbuffer与Stringbuilder是字符串变量
String长度不可变,Stringbuffer与Stringbuilder长度可变。因为String类中使用final关键字字符数组保存字符串,private final char value[],所以String不可变
String使用字符串拼接的时候是两个不同的空间,Stringbuffer与Stringbuilder则是直接在字符串后面追加,所以大数据量上不用string
StringBuffer线程安全,StringBuilder线程不安全,是因为StringBuffer对方法加了同步锁
执行效率上StringBuilder>StringBuffer>String
总结:对于操作少量的数据用String,大量的数据,单线程用StringBuiler,多线程用StringBuffer
4、HashMap与Hashtable区别
HashMap非线程安全,HashTable线程安全,因为HashTable内部的方法都经过synchronized修饰
HashMap允许null的键/值,HashTable不允许
HashMap性能优于Hashtable
初始容量Hashtable默认11,每次扩充,容量变为原来的2n+1。HashMap默认16,每次扩充,容量变为原来的2倍
底层数据结构不同,jdk1.8之后,当链表长度大于阈值(默认为8)时,将链表转换为红黑树,来减少搜索时间,Hashtable没有这样的机制,Hashtable基本被淘汰了,少用。
5、Spring MVC和Spring boot有啥区别
1、springMVC是Spring的一个模式,是一个Web框架,提供了一个轻度耦合的方式来开发Web应用;
2、SpringBoot是习惯优于配置,降低了项目搭建的难度(约定大于配置,可以简化spring的配置流程);
3、springMVC需要适用到TomCat服务器,而springboot内置服务器容器,通过@SpringBootApplication中注解类中main函数启动即可;
6、session和cookie的区别
区别:
1、cookie数据存放在客户端,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑性能应当使用cookie。
4、不同浏览器对cookie的数据大小限制不同,个数限制也不相同。
5、可以考虑将登陆信息等重要信息存放为session,不重要的信息可以放在cookie中。
联系:
1、都是用来记录用户的信息,以便让服务器分辨不同的用户。 2、可以搭配使用,但都有自己的使用局限,要考虑到安全和性能的问题。
7、JDK、JRE、JVM的联系与区别
三者联系:
JVM不能单独搞定class的执行,解释class的时候JVM需要调用解释所需要的类库lib。在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。JVM+Lib=JRE。总体来说就是,我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。
三者区别:
1.JDK和JRE区别:在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将java文件编译成class文件的,这是开发者需要的,而用户(只需要运行的人)是不需要的。JDK还有jar.exe, javadoc.exe等等用于开发的可执行指令文件。这也证实了一个是开发环境,一个是运行环境。
2.JRE和JVM区别:JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。
8、&和&&区别
9、ArrayList和Vector的区别?
10、List 和 Map 区别?Set呢?
11、ArrayList,Vector, LinkedList的存储性能和特性?
12、char类型的变量能不能存储一个中文?为什么?
13、在HashMap中是如何比较“key”的值的
在HashMap比较两个key值时,首先使用equals进行比较两个key的值,如果不同则认为是两个不同的key;如果相同,再比较两个key的hashcode,如果不同,则认为是两个不同的key;如果相同则认为是两个相同的key,此时的value2会覆盖value1的值
14、如果main方法被声明为private会怎样?
15、char类型的变量能不能存储一个中文?为什么
答案是可以的,但是两个中文不行。因为char占两个字节,一个中文也占两个字节,所以是可以存储的。
16、九大内置对象是哪些?
request:用户端请求,此请求会包含来自GET/POST请求的参数(表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie,header, 和session数据的有用的方法。)
response:网页传回用户端的回应(表示HttpServletResponse对象,并提供了几个用于设置送回
浏览器的响应的方法(如cookies,头信息等))
page:JSP网页本身(表示从该页面产生的一个servlet实例)
pageContext:网页的属性是在这里管理(表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。)
session:与请求有关的会话期(表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息)
application:servlet正在执行的内容(表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息)
out:用来传送回应的输出(是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器推送输出结果。)
config:servlet的构架部件(表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。)
exception:针对错误网页,未捕捉的例外
17、Servlet生命周期和执行流程?
Servlet的生命周期可以分为四个阶段:装载类及创建实例阶段,初始化阶段,服务阶段,实例销毁阶段
1、初始化阶段调用init()方法。
2、响应客户请求阶段。调用service()方法,由service()方法根据提交的方式选择执行doGet()或者doPost()方法。
3、终止阶段调用destroy()方法。
执行流程:浏览器向服务器请求时,服务器不会直接执行我们的类,而是到web.xml里寻找路径名
第一步,浏览器输入访问路径后,携带了请求行,头,体
第二步,根据访问路径找到已注册的servlet名称,既图中的demo
第三步,根据映射找到对应的servlet名
第四步,根据根据servlet名找到我们全限定类名,既我们自己写的类
18、JVM简述java垃圾回收机制?
在java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。
19、JVM简述java类加载机制? 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的java类型。
当前名称:Java常见面试题:java面试笔记
本文URL:http://azwzsj.com/article/gjipjd.html