配色: 字号:
Java面试整理.docx
2019-08-05 | 阅:  转:  |  分享 
  
Java工程师面试知识点整理Java基础部分&与&&区别?&和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假;但是&&当第一个条件不
成之后,后面的条件都不执行了,而&则还是继续执行,直到整个条件语句执行完为止。使用final关键字修饰一个变量时,是引用不能变
,还是引用的对象不能变?使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
静态变量和实例变量的区别?在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变
量属于某个对象的属性,必须创建了实例对象。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,不用创建任何实例对象。静态变
量使用时,通过类名.名称,实例变量必须要初始化后才能使用。实例变量是实例化后才会分配空间,而静态变量当类加载时会分配空间。是否可以
从一个static方法内部发出对非static方法的调用?不可以。非static方法可以访问static方法。static
方法不能访问非static方法。"=="和equals方法究竟有什么区别?"=="如果判断值类型,是判断内容是否相同。如果判断
引用类型则是判断内存地址是否相同。equals判断值内容是否相等。Integer?与?int?的区别?Integer?是引用类型,
默认值是null。而int是是值类型默认值是0重载与重写区别?重载是同一个类中,方法名称相同,但是参数或个数不同。与返回值没有关
系。重写是在多个类中,产生继承关系。父类与子类的方法和参数都必须相同。接口与抽象类的区别?区别:定义接口的关键字是:interf
ace而定义抽象类的关键字是:abstract。接口中成员不能有私有,抽象类可以。接口中定义的成员,是finlpublic
static类型,抽象类没有。接口中的不能有普通方法,抽象类中可以。http://www.cnblogs.com/yw-a
h/p/5841353.htmlString、StringBuffer与StringBuilder的区别?String字符串常量
。StringBuffer字符串变量(线程安全)。StringBuilder字符串变量(非线程安全)。数组有没有length(
)这个方法?String有没有length()这个方法?数组没有length()这个方法,有length的属性。String有l
ength()这个方法。JavaIO流部分java中有几种类型的IO流?字节流,字符流。字节流继承于?InputStream,O
utputStream。字符流继承于InputStreamReader,OutputStreamWriter。BIO与NIO、AI
O的区别IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。BIO:在JDK1.4出来之前,网络连接
的时候采用BIO模式,服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等
待或者遭到拒绝请求,如果有的话,客户端会线程会等待请求结束后才继续执行。NIO:解决的是BIO的大并发问题。NIO基于Reacto
r,当socket有流可读或可写入socket时,操作系统会相应的通知引用程序进行处理,应用再将流读取到缓冲区或写入操作系统。已经
不是一个连接就要对应一个处理线程了,而是有效的请求,对应一个线程,当连接没有数据时,是没有工作线程来处理的。使用BIO的时候往往会
引入多线程,每个连接一个单独的线程;而NIO则是使用单线程或者只使用少量的多线程,每个连接共用一个线程。请求连接会被注册到多路复用
器上面,所以所有的连接只需要一个线程就可以搞定,在多路复用器进行轮询。AIO:当进行读写操作时,只须直接调用API的read或wr
ite方法即可。read/write方法都是异步的,完成后会主动调用回调函数。Java多线程部分什么是多线程?在一个应用程序中,
同时,有多个不同的执行路径。线程和进程有什么区别?线程是进程的一条执行路径,而进程是线程的集合。什么是线程同步、异步?线程同步表示
,当前线程执行完后下一个线程才继续执行。线程异步表示,??在一个应用程序中,同时,有多个不同的执行路径。例如javawebaj
axandroid线程之间如何同步?线程之间同步使用?synchronized、wait与notify。什么是线程不安全?如
何解决?就是在多个线程共享同一个数据会受到其他线程的干扰。解决:使用线程同步技术,用上锁(synchronized)。让一个线
程执行完了,在让另一个线程执行。不过大量使用锁会造成线程阻塞,可以使用乐观锁对数据的安全进行保障。如何创建一个线程?有几种方法?继
承thread类,重写run方法、实现Runnalbe接口,重写run方法,启动一个线程用start();使用Callable和F
uture创建线程。Callable接口和Runnable接口的区别?Callable接口和Runnable接口相似,区别就是Ca
llable需要实现call方法,而Runnable需要实现run方法;并且call方法还可以返回任何对象,无论是什么对象,JVM
都会当作Object来处理是使用Runnalbe接口好?还是继承Thread类好?是实现Runnalbe接口好,因为实现的接口还可
以继续继承。sleep()和wait()有什么区别?a、sleep是让当前线程指定休眠时间,然后继续工作。?不释放锁b、让当前线程
wait则是等待,直到有线程通知notify()唤醒他才会重新工作。释放锁Java高级部分(集合)ArrayList和Vecto
r有什么区别?都实现了List接口(List接口继承了Collection接口),他们都是有序集合,数据是允许重复的。Vecto
r是线程安全的,也就是线程同步的,而ArrayList是线程不安全的,是线程不同步的。Vector?默认增长为原来两倍,Array
List默认增长原来的1.5倍。HashMap和Hashtable有什么区别?Hashmap是线程不安全的,hashtable是线
程安全的。Hashmap允许有null的键和值,hashtable则不允许有null的键和值。List、Map、Set的区别?li
st:存储:有序的可重复的访问:可以for循环,foreach循环,iterator迭代器迭代。set:存储:无序的不重复的
。访问:可以foreach循环,iterator迭代器迭代。map:存储:存储的是一对一对的映射”key=value“,key值是
无序不重复的。value值可重复访问:可以map中key值转为为set存储,然后迭代这个set,用map.get(key)获取va
lue也可以转换为entry对象用迭代器迭代。Collection和Collections的区别?Collection是集合类的上
级接口,继承于它的接口主要有Set和List。Collections是针对集合类的一个帮助类,它提供了一系列静态方法实现了对各种
集合的排序,搜索和线程安全等操作。HashMap与LinkedHashMap,和TreeMap的区别共同点:HashMap,Lin
kedHashMap,TreeMap都属于Map的实现类。不同点:1.HashMap里面存入的键值对在取出的时候是随机的。2.Tr
eeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。3.LinkedHashM
ap是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现。在List里面怎么去掉
重复的数?通过把List里面的数据放入HashSet可以去除重复。ArrayList集合加入1万条数据,应该怎么提高效率?因为Ar
rayList的底层是数组实现,调用ArrayList的指定容量的构造器方法ArrayList(intsize)。网路通讯部分X
ml与JSON区别是什么?xml是重量级、json是轻量级。xml比较占带宽、json占带宽小,易于压缩。TCP/IP与UDP有什
么区别?udp:?a、是面向无连接,将数据及源的封装成数据包中,不需要建立建立连接?b、每个数据报的大小在限制64k内
c、因无连接,是不可靠协议d、不需要建立连接,速度快tcp:?a、建议连接,形成传输数据的通道.?b、在连接中进行大数据量传
输,以字节流方式?c通过三次握手完成连接,是可靠协议??d必须建立连接m效率会稍低TCP协议的三次握手?1、第一次握手:建
立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。?2、第二次握手:服务器B收
到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进
入SYN_RECV状态。?3、第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此
包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。什么是WebSerivce?WebService就是提
供不同的平台相互通讯,基于Soap协议。SOAP是一种简单基于xml的轻量协议,用户web上交换结构化信息和类型信息。WebSer
vice实现原理是?HTTP协议+XML什么是Http协议?客户端和服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”。
什么是Http协议无状态协议?怎么解决Http协议无状态协议?无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前
面的信息解决办法:通过1、Cookie2、通过Session会话保存。Http协议中302状态是什么?http协议中,返回状态
码302表示重定向。Http协议有什么组成?请求报文包含三部分:a、请求行:包含请求方法、URI、HTTP版本信息b、请求首部字段
c、请求内容实体响应报文包含三部分:a、状态行:包含HTTP版本、状态码、状态码的原因短语b、响应首部字段c、响应内容实体Http
协议中有那些请求方式?GET、POST、PUT、HEAD、DELETE、OPTIONS。Http协议实现原理机制?域名解析进行TC
P的三次握手向服务器发起Http请求服务器响应Http请求浏览器解析返回数据和请求所需资源渲染呈现给用户get与post请求有什么
区别?1、get重点在从服务器上获取资源,post重点在向服务器发送数据;2、get传输数据是通过URL请求,拼接KV数据,并用&
连接,地址栏可见;post传输数据在地址栏不可见。3、Get传输的数据量小,因为受URL长度限制4k,但效率较高;Post可以传输
大量数据,所以上传文件时只能用Post方式;4、get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;post较ge
t安全性较高;常见Http协议状态?200:请求被正常处理204:请求被受理但没有资源可以返回206:客户端只是请求资源的一部分,
服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。301:永久性重定向302:临时重
定向303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上304:发送附
带条件的请求时,条件不满足时返回,与重定向无关307:临时重定向,与302类似,只是强制要求使用POST方法400:请求报文语法有
误,服务器无法识别401:请求需要认证403:请求的对应资源禁止被访问404:服务器无法找到对应资源500:服务器内部错误503:
服务器正忙Http与Https优缺点?1、通信使用明文不加密,内容可能被窃听,也就是被抓包分析。2、不验证通信方身份,可能遭到伪装
3、无法验证报文完整性,可能被篡改HTTPS就是HTTP加上加密处理(一般是SSL安全通信线路)+认证+完整性保护Http协议有那
些特征?1、支持客户/服务器模式;2、简单快速;3、灵活;4、无连接;5、无状态;OSI七层网络协议分别是?应用层表示层会话层传输
层网络层数据链路层物理层JavaWeb部分Servlet的执行流程Servlet的执行流程也就是servlet的生命周期,当服务器
启动的时候生命周期开始,然后通过init()《启动顺序根据web.xml里的startup-on-load确定加载顺序》方法初始化
servlet,再根据不同请求调用doGet或doPost方法,最后再通过destroy()方法进行销毁。doGet和doPost
有什么区别?doGet和doPost都是接受用户请求的方法,doGet处理get请求,doPost处理post请求,doGet用于
地址栏提交,doPost用于表单提交,在提交数据时,get的数据大小有限制4k,post没有限制,get请求提交的数据会在地址栏显
示,post不显示,所以post比get安全.如何处理servlet的线程不安全问题?线程安全就是多线程操作同一个对象不会有问题,
线程同步一般来保护线程安全,所以可以在Servlet的线程里面加上同步方法或同步块。Jsp的重定向和转发的流程有什么区别?1、重定
向是客户端行为,转发是服务器端行为;2、重定向时服务器产生两次请求,转发产生一次请求;3、重定向时可以转发到项目以外的任何网址,转
发只能在当前项目里转发4、重定向会导致request对象信息丢失。转发则不会。5、转发的url不会变,request.getReq
uestDispatch().forward()重定向的url会改变,response.getRedirect();Jsp和ser
vlet有什么区别?jsp的可读性强,容易维护,并且jsp在最后会编译成servlet。Jsp的九大内置对象,三大指令,七大动作的
具体功能JSP九大内置对象:pageContext:只对当前jsp页面有效,里面封装了基本的request和session的对象
Request:对当前请求进行封装Session:浏览器会话对象,浏览器范围内有效Application:应用程序对象,对整
个web工程都有效Out:页面打印对象,在jsp页面打印字符串Response:返回服务器端信息给用户Config:单个se
rvlet的配置对象,相当于servletConfig对象Page:当前页面对象,也就是thisException:错误页面的
exception对象,如果指定的是错误页面,这个就是异常对象三大指令:Page:指令是针对当前页面的指令Include:用于
指定如何包含另一个页面Taglib:用于定义和指定自定义标签七大动作:Forward,执行页面跳转,将请求的处理转发到另一个页面
Param:用于传递参数Include:用于动态引入一个jsp页面Plugin:用于下载javaBean或applet到客户
端执行useBean:使用javaBeansetProperty:修改javaBean实例的属性值getProperty:获
取javaBean实例的属性值获取页面的元素和值有几种方式,分别说一下request.getParameter()?返回客户端的请
求参数与值;request.getParameterNames()?返回所有可用属性名的枚举;request.getParamet
erValues()?返回包含参数的所有值的数组。Cookie和Session的区别?cookie是在客户端保持状态,sessio
n是在服务器端保持状态。cookie容易别窃取,session量大会降低服务器性能。Servlet是安全的吗?是线程不安全的,因为
servlet是单例模式,当多个客户端共同访问的时候线程不安全。Java框架部分什么是Spring?Spring是一个开源的轻量级
Java?EE开发应用框架。Spring的核心是:控制反转(IoC)和面向切面编程(AOP);相当于把每个bean与bean之间的
关系交给第三方容器进行管理。Spring的底层实现机制是什么?使用Demo4j(解析XML)+Java反射机制Demo4j其实就
是解析XML。使用反射机制实例化bean。SpringAOP用到了什么代理?JDK动态代理:对实现了接口的类生成代理。Spring
注入有那些方式?Set注入构造器注入静态工厂的方法注入实例工厂的方法注入Spring有那些注解?@Autowired(按类型注入)
@Service(标示为注入为服务层)@Resource(按名称注入)@Controller(标识控制器beanid)@Req
uestMapping(表示映射URL路径)简述Spring的优缺点?优点:1.降低了组件之间的耦合性2.可以使用容易提供的众多服
务,如事务管理,消息服务等3.容器提供单例模式支持4.容器提供了AOP技术5.容器提供了众多的辅助类,能加快应用的开发6.spri
ng对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等7.spring属于低侵入式设计,代码的污染极低
8.独立于各种应用服务器9.spring的DI机制降低了业务对象替换的复杂性10.Spring的高度开放性,并不强制应用完全依赖于
Spring,开发者可以自由选择spring的部分或全部缺点:使用到了大量反射机制。反射机制非常占内存SpringMVC工程流程1
.用户向服务器发送请求,请求被Spring前端控制ServeltDispatcherServlet捕获;2.?Dispatc
herServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该H
andler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutio
nChain对象的形式返回;3.?DispatcherServlet根据获得的Handler,选择一个合适的HandlerAda
pter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)4.?提
取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。5.?Handler执行完
成后,向DispatcherServlet?返回一个ModelAndView对象;6.?根据返回的ModelAndView,选择
一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherSer
vlet?;7.?ViewResolver结合Model和View,来渲染视图8.将渲染结果返回给客户端。Hibernate部
分什么是Hibernate?hibernate是一个基于ORM持久框架,让程序员以面向对象的思想操作数据库,提高生产效率.什么是O
RM?orm不过是一种思想,对象关系映射。是对象关系模型,如hibernate,让你以面向对象的方式去编程。封装了JDBC.Hib
ernate中get和load有什么不同之处??Load:找不到数据的话会抛出org.hibernate.ObjectNotFou
ndException异常,hibernate会使用延迟加载加载机制get:找不到的话会返回null。get?会返回?null,但
是不会报错,?load?如果查询不到数据,则报错ObjectNotFoundExceptionhibernate的三种状态?在Hi
bernate中,对象有三种状态:临时状态(Transient)、持久状态(Persistent)和游离状态(Detached)。
hibernate的懒加载?有几种禁用方法懒加载也被称为延迟加载,它在查询的时候不会立刻访问数据库,而是返回代理对象,当真正去使用
对象的时候才会访问数据库。1.使用代理对象:Hibernate.initialize("代理对象");2.在需要禁用懒加载的映射文
件中显示的加入lazy="false"3.使用openSessionInView【需要借助于过滤器】需要在web.xml文件
中配置hibernate有几种查询方式?属性查询2、?参数查询、命名参数查询3、?关联查询4、?分页查询5、?统计函数Hib
ernate的优缺点?优点:1、程序更加面向对象;2、提高了生产率;3、方便移植(修改配置文件);4、无侵入性。缺点:1、效率比
JDBC略差;2、不适合批量操作。Hibernate的缓存机制Hibernate缓存包括两大类:Hibernate一级缓存和Hib
ernate二级缓存。Hibernate一级缓存又称为“Session的缓存”。Hibernate二级缓存又称为“SessionF
actory的缓存”。什么是Mybatis?Mybatis是一个持久层的框架,mybatis是以纯sql操作数据。设计模式部分你熟
悉那些设计模式?总共有23种设计模式总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模
式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:
策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。企
业面试的时候,面试官非常喜欢考单例,而且非常喜欢考手写单例。什么是单例?单例有那些写法?单例分类:懒汉式单例、饿汉式单例单例模式有
以下特点:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。懒汉式单例p
ublic?class?Singleton?{???private?Singleton()?{}???private?static
?Singleton?single=null;???//静态工厂方法??public?static?Singleton?getIn
stance()?{???if?(single?==?null)?{?single?=?new?Singleton();???}
?return?single;???}??}??饿汉式单例public?class?Singleton1?{???private?
Singleton1()?{}???private?static?final?Singleton1?single?=?new?Si
ngleton1();???//静态工厂方法??public?static?Singleton1?getInstance()?{?
??return?single;???}??}??懒汉式与饿汉式区别?饿汉式天生就是线程安全的,可以直接用于多线程而不会出现问题饿
汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成,而懒汉式顾名思义,会延迟加载,在第一次使用该单例的时候才会实例化对象出来,第一次调用时要做初始化,如果要做的工作比较多,性能上会有些延迟,之后就和饿汉式一样了。项目相关部分你说说你做的最好的项目?项目是做什么?用到那些技术?整个项目中最大的亮点是?核心部分遇到bug是怎么解决的?你项目遇到bug?怎么查问题?例如:首先遇到了bug,会查询日志,通过日志定位到某个类的行数,判断是否有代码问题。你遇到了什么bug?你是怎么解决?例如我自己项目中,查询量非常大。通过日志发现了堆内存溢出,最后通过优化代码,减轻new和加大堆内存。你们项目人员是怎么分配的?项目分配为:产品经理(负责提需求)UI设计师(负责设计样式文件)Web前端(只做Web页面前端静态文件)Java工程师(写业务逻辑)测试人员(负责测试bug)非技术项目经理(负责项目管理、人员分配)项目架构师(负责架构项目)你们项目是怎么发布的?企业当中项目都是发布在linux环境上小公司:使用maven编译好通过打war包,放入到tomcat的webapps文件下大公司:使用自动部署系统jenkinsjenkins直接关联svn地址自动打包、自动部署等linux常用命令?Cat查看某个文件CP拷贝Ls查看所有列表Pwd查看路径Tail查看日志Grep搜索日志touch创建空文件mv移动或重命名rm删除文件find在文件系统中搜索某文件rmdir删除空目录
献花(0)
+1
(本文系终为始首藏)