面试题

面试题

1.JRE和JDK的区别?
-jre是java的运行时环境,是使用java语言编写的程序运行所需的软件环境,是提供给想运行java程序的用户使用的
-jdk是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的
2.switch是否支持byte,long,string?
-jdk1.5版本之前;支持byte,short,int,char
-jdk1.5版本之后:支持枚举
-jdk1.7版本之后:支持String
-不可能支持long:switch底层是int实现的,即使是枚举和String也是先转换成int类型再做判断的。由于long的表示范围比int的大,所以不可能支持long
3.==和equals的区别?
-==比较的是两个对象的地址
-equals比较的是两个对象的内容,但object中equals方法默认比较是地址,所以我们自己使用的时候要重写equals,重写equals就必须重写hashcode
4.java中操作字符串有哪些类?它们之间有什么区别?
-String、StringBuffer、StringBuilder
-String是不可变对象,每次对String类型操作都会生成一个新的对象;StringBuffer和StringBuilder是可以改变对象的
-对于操作效率:StringBuilder>StringBuffer>String
-对于线程安全:StringBuffer线程安全,可用于多线程;StringBuilder线程不安全,可用于单线程
5.如何将字符串反转?
-转换成字符数组,用for循环,第一个元素和最后一个元素换,第二个元素和倒数第二个元素换
-new StringBuffer(s).reverse()
-用split("")方法把字符串转成String类型的数组,Arrays.asList(s)转换成list集合,再用Collections调用reverse()实现反转
6.String类的常用方法有哪些?
-和长度有关:
int length() 返回字符串长度
-和数组有关:
char toCharArray[] 将字符串改为字符数组
String[] split() 将字符串按照指定内容切割成String类型数组
-和判断有关:
boolean equals() 判断两个字符串内容是否相等
boolean equalsIsIgnoreCase() 忽略大小写,比较两个字符串是否相等
boolean contains() 判断字符串是否包含指定内容
boolean endsWith() 判断字符串是否以指定内容结尾
boolean startsWith() 判断字符串是否以指定内容开头
-和位置有关:
char charAt() 返回指定下标对应的字符串
int indexOf() 返回指定内容第一次出现时的下标
int lastIndexOf() 返回指定内容最后一次出现时的下标
-和改变内容有关:
String toLowCase() 转成小写
String toUpperCase() 转成大写
String replace(x,y) 将某个内容全部替换为指定内容
String replaceFirst() 将第一次出现的某个内容替换为指定内容
String subString(x) 按指定下标截取到字符串的最后
String subString(x,y) 从x下标截取到y-1下标
String trim() 去除字符串前后空格
7.抽象类和普通类的区别?
-抽象类虽然有构造函数,但是不能被直接实例化。(名义上是不可以被实例化,但当其子类创建对象的时候,子类构造器会默认调用父类构造器,实际上就把父类给实例化了)
-抽象类可以有抽象方法,并且不能声明为静态
-子类继承抽象类就必须实现父类中的所有抽象方法,否则子类也必须声明为抽象的
8.接口和抽象类的区别?
-接口没有构造函数,抽象类有
-接口中1.8以前只能有抽象方法,而抽象类既可以抽象方法也可以非抽象方法
-接口中的变量必须声明为公共静态的常量,抽象类中的变量是普通变量(接口没有构造器)
-接口是设计的结果,抽象类是重构的结果
9.error和exception的区别?
-error一般是指与虚拟机相关的问题,如系统崩溃、虚拟机错误、内存空间不足、方法调用栈溢出等(仅靠程序无法恢复和预防)
-exception一般是指可以处理的异常,可以捕获且可能恢复
10.throws和throw的区别?
-throws在方法体外使用;throw在方法体内使用
-throws是声明这个方法可能抛出的异常类型,调用者必须处理(捕获或者继续抛出),否则编译不能通过;throw是具体向外抛的动作,所以它抛出的是异常的实例
-throws可以单独使用,然后再由处理异常的方法捕获;throw不可以单独使用,必须和try-catch-finally或者throws配合使用
11.运行时异常和检查性异常的区别?
-运行时异常有算术异常、空指针异常、数组下表越界异常等,不建议使用异常处理机制(程序员水平不够)
-检查性异常有Ioexception等,必须使用异常处理机制
12.List、Set和Map的区别?
-List中元素有放入顺序,元素可重复
-Set中元素无放入顺序,元素不可重复(虽然没有放入顺序,但元素在set中的位置是有hashcode值决定的)
-Map元素按键值对存储,key可以重复,value不可重复
13.Collections和Collection的区别?
-Collection是集合类的顶级接口,其派生了两个子接口Set和List
-Collections是集合类的一个工具类/帮助类,其中提供了一系列静态方法,
用于对集合中元素进行排序,搜索,以及线程安全等各种操作
14.ArrayList和Vector的区别?
-ArrayList和Vector默认大小都是10,但ArrayList每次增长原来的一半,Vector每次增长原来的一倍
-ArrayList线程不安全;vector线程安全,支持线程同步
-ArrayList的性能比vector好
15.ArrayList和LinkedList的区别?
-ArrayList是数组实现;LinkedList是链表实现
-ArrayList查询快(利用index直接返回元素),修改慢(插入和删除元素位置之后的元素位置都需要移动);LinkedList查询慢(需要在双向链表中找到index后才能返回元素),修改快(不需要改变元素位置)
16.Hashmap和Hashtable的区别?
-hashmap的默认大小是16,增长方式为old2;hashtable的默认大小是11,增长方式为old2+1
-hashmap线程不安全,性能强一点;hashtable线程安全,支持线程同步
-hashmap支持null值;hashtable不支持null
-hashmap中没有contains()方法,改成了containsKey()和containsValue();hashtable中有contains()
17.如何决定使用hashmap还是treemap?
-treemap会对键进行排序,如果想要按自然顺序或者自定义顺序存储或遍历,treemap会是更好的选择
-hashmap可以根据键取值,访问速度快,在map中插入、删除和定位元素,hashmap会是更好的选择
18.什么是迭代器?
-提供一种访问一个集合对象各个元素的途径,同时又不暴露该对象的内部细节(迭代器以内部类的形式存在于每个集合类的内部)
-对Collection进行迭代的类,称其为迭代器。迭代器就是专门取出集合元素的对象。但是该对象比较特殊,不能直接创建对象,该对象是以内部类的形式存在于每个集合类的内部
19.并发和并行的区别?
-并发在单核和多核中都可存在,就是在同一时间有多个可以执行的进程,但是在单核中同一时刻只有一个进程获得CPU,虽然宏观
上你认为有多个进程在执行
-并行是指同一时间多个进程在微观上都在真正的执行,这就只有在多核的情况下了
20.线程的生命周期?
-新生态:New 一个线程实例化完成,但是还没有任何操作
-就绪态:Ready 一个线程已经被开启,已经开始争抢CPU时间片
-运行态:Run 一个线程抢到CPU时间片,开始执行这个线程中的逻辑
-阻塞态:interrput 一个线程在运行的过程中,受某些操作的影响,放弃了已经获取的CPU时间片,并且不在参与CPU时间片争抢
-死亡态:Dead 此时线程处于挂起状态
阻塞态分三种形式:1.等待阻塞:运行状态的线程执行wait()方法,使本线程进入等待阻塞状态
2.同步阻塞:线程获取sychronized同步锁失败(由于锁被占用,进入锁池),它会进入同步阻塞状态
3.通过执行sleep()或join()或输入请求时,线程会进入阻塞状态
//只能在同步方法或者同步块中调用wait()方法
21.final、finally、finalize的区别?
-final:
final修饰的类不能被继承
final修饰的方法不能被重写
final修饰的变量不能被二次赋值
-finally:
finally是在处理异常时提供的finally块执行任何清除操作。不管有没有抛出或者捕获异常都必须执行,所以在代码逻辑中有无论如何都必须执行的代码可以放到finally块中
-finalize:
是方法名,finalize()方法是在垃圾回收器将对象从内存中清除出去之前,做必要的清理工作。这个方法是垃圾回收器确定此对象没有引用时,对此对象调用的。
22.java中io流分为哪几种?
-按数据的传输方向分:输入流(Reader,Input)/输出流(Writer,Output)
-按数据的传输内容分:字节流(putStream)/字符流(Reader,Writer)
-按流的等级分:基础流/高级流

23.重载、重写、覆盖是相同的概念吗?
不同
-重载:是在同一个类中,函数名相同,形参的类型和个数不同
-重写:是在子类和父类中,子类重写父类的方法,函数名相同,返回值类型相同,形参的类型和个数相同(子类的方法的权限控制符必须大于等
于父类的)
-覆盖:子类和父类中有同名的属性,子类对象调用此名称的属性时,会用子类自己的。
24.原型链:函数对象的的prototype属性指向一个普通对象,对象本身有一个constructor属性指向了function函数本身。这个函数作为构造函数new
的所有对象默认有一个__proto__属性,并且指向了对应构造函数的原型对象。因为默认的原型对象本身也是一个对象所以也有__proto__属性,并且指向了object的prototype属性,因此可以获得object的prototype属性上的所有方法
(__proto__隐式,prototype显式)
25.数据类型有哪几种?
有基本数据类型和引用数据类型
基本数据类型有:
整数型:byte、short、int、long
浮点型:float、double
布尔型:boolean
字符型:char

引用数据类型有:数组、类、接口
26.jsp和Servlet有什么区别?
-jsp经编译后就成了Servlet(jsp的本质就是Servlet,JVM只能识别Java类,不能识别Jsp代码,Web容器将Jsp代码编译成JVM能识别的Java类)
-jsp更擅长于页面显示,Servlet更擅长于逻辑控制
-Servlet中没有内置对象,Jsp中的内置对象都是通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到
27.session和cookie的区别?
-session存储在服务器端,cookie存储在浏览器端
-session安全,cookie不安全(在浏览器存储,可以被伪造和修改)
-session内容无限制,cookie内容有限制
-session如果如果被禁用cookie可以通过response.encodeURL来解决,cookie被禁用不能使用
-session保存文本,cookie保存对象
28.说一下session的工作原理?
-session的工作原理是客户端登录完成之后,服务器会创建对应的session,session创建完之后,会把session的id发送给客户端,
客户端再存储到浏览器中。这样客户端每次访问服务器时,都会带着session id,服务器拿到session id之后, 在内存找到与之对应的session这样就可以正常工作了
29.如果客户端禁止cookie能实现session还能用吗?
-能实现,session只是依赖cookie存储session id,如果cookie被禁用了,可以使用url中添加session id的方式保证session能正常使用
30.forward和redirect的区别?(请求转发和重定向的区别)
问题 forward redirect
跳转方式 服务器 浏览器
请求几次 1次 2次以上
Servlet可以共享request吗 可以 不可以
地址栏是否发生改变 不改变 改变
浏览器地址栏显示那一次访问地址 第一次 最后一次
可以跳转到什么资源 项目内部 任意资源
性能 强 弱
31.OSI的七层模型有哪些?
物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输
数据链路层:负责建立和管理节点间的链路
网络层:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径
传输层:向用户提供可靠地端到端的差错和流量控制,保证报文的正确传输
会话层:向两个表示层提供建立和使用连接的方法
表示层:处理用户信息的表示问题,如编码、数据格式转换和加密解密等
应用层:直接向用户提供服务,完成用户希望在网络上完成的各种工作
32.简述tcp和udp的区别?
tcp和udp是OSI模型中的传输层中的协议。tcp提供可靠的通信传输,为udp则常被用于广播和细节控制借给应用的通信传输
-tcp面向连接,udp非面向连接(发送数据前不需要建立连接)
-tcp提供可靠的服务,udp无法保证
-tcp数据传输较慢,udp数据传输较快
33.get和post的区别?
-get参数通过URL传递,post放在Request body 中
-get参数有长度限制,而post无长度限制
-get只接受ASCII字符,而post无限制
-get不安全,post相对安全(get参数直接暴露在URL上,所以不能用来传递敏感信息)
HTTP的底层是TCP/IP,所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP连接。

HTTP和tcp的关系:http是在tcp之上,它负责在发送端"生成针对目标Web服务器的HTTP请求报文"和在接收端"对Web服务器请求的内容进行处理"
传输功能是TCP完成的,HTTP只是为传输做好前期准备

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值