三年java经验面试总结

【点击领取】阿里云代金券 | 阿里云优惠券 |阿里云优惠码|云服务器|阿里云|阿里云代金券 – 限时领取1888元阿里云代金券
css

【3折购买ECS服务器入口】html

【9块9云服务 学生计划】https://promotion.aliyun.com/ntms/act/campus2018.html?userCode=g6nivc1vjava



1. java中wait和sleep有什么区别?多线程条件下如何保证数据安全? jquery

答:最大区别是等待时wait会释放锁,而sleep会一直持有锁,wait一般用于线程时交,互,sleep一般被用于暂停执行。 
linux

2. java中volatile和synchronized有什么区别? 

  1. volatile本质是在告诉jvm当前变量在寄存器(工做内存)中的值是不肯定的,须要从主存中读取;synchronized则是锁定当前变量,只有当前线程能够访问该变量,其余线程被阻塞住。 
  2. volatile仅能使用在变量级别;synchronized则可使用在变量、方法、和类级别的。 
  3. volatile仅能实现变量的修改可见性,并不能保证原子性;而synchronized则能够保证变量的修改可见性和原子性。 
  4. volatile不会形成线程的阻塞;synchronized可能会形成线程的阻塞。 
  5. volatile标记的变量不会被编译器优化;synchronized标记的变量能够被编译器优化。 

3. 有了解java的原子类?实现原理是什么? 

答:采用硬件提供原子操做指令实现的,即CAS。每次调用都会先判断预期的值是否符合,才进行写操做,保证数据安全。 web

4. spring主要使用了哪些?IOC实现原理是什么?AOP实现原理是什么? 

答:spring主要功能有IOC,AOP,MVC等,IOC实现原理:先反射生成实例,而后调用时主动注入。AOP原理:主要使用java动态代理, redis

5. mybatis有了解吗?它与hibernate有什么区别?项目中,你会选哪一个? 

答:二者都是轻量级ORM框架,hibernate实现功能比较多,经过HQL操做数据库,比较简单方便,但hibernate自动生成的sql相长,不利测试和查找缘由。复杂sql时,编写比较困难,同时性能也会下降。mybatis是半自动化,手动编写SQL语句,同时提供丰富的参数判断功能。sql语句较清晰,能够直接进行测试,性能也较好,操做起来很是简单。同时hibernate容易产生n+1问题。hibernate学习成本较mybatis高。国内一些大公司基本上使用mybatis 算法

6. 缓存框架有使用过哪些?memcache和redis有什么区别?项目中,怎么去选择? 

答:缓存有:ehcache,memcache和redis等 spring

区别: sql

  1. Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过 memcache还可用于缓存其余东西,例如图片、视频等等。 
  2. Redis不只仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的 存储。 
  3. 虚拟内存--Redis当物理内存用完时,能够将一些好久没用到的value 交换到磁盘 
  4. 过时策略--memcache在set时就指定,例如set key1 0 0 8,即永不过时。Redis能够通 过例如expire 设定,例如expire name 10 
  5. 分布式--设定memcache集群,利用magent作一主多从;redis能够作一主多从。都 能够一主一从 
  6. 存储数据安全--memcache挂掉后,数据没了;redis能够按期保存到磁盘(持久化) 
  7. 灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后能够经过aof恢复 
  8. Redis支持数据的备份,即master-slave模式的数据备份。 

项目使用选择: 

      redis是单线程实现,若须要使用控制某些并发状态时,可使用redis.项目中须要使用 复杂的list,set操做时,同时能够对数据进行持久化。 

      当存储数据较大时,如100k以上,那memcache性能较好,在多核上,memcache较 好 

7. 说说数据库性能优化有哪些方法? 

答:使用explain进行优化,查看sql是否充分使用索引。避免使用in,用exist替代,字段值尽量使用更小的值,任何对列的操做都将致使表扫描,它包括数据库函数、计算表达式等等,查询时要尽量将操做移至等号右边。使用链接查询(join)代替子查询。  

在表的多列字段上创建一个索引,但只有在查询这些字段的第一个字段时,索引才会被使用。

8. HTTP请求方法get和post有什么区别? 

  1. Post传输数据时,不须要在URL中显示出来,而Get方法要在URL中显示。 
  2. Post传输的数据量大,能够达到2M,而Get方法因为受到URL长度限制,只能 传递大约1024字节. 
  3. Post就是为了将数据传送到服务器段,Get就是为了从服务器段取得数据.而Get 之因此也能传送数据,只是用来设计告诉服务器,你到底须要什么样的数据.Post 的信息做为http请求的内容,而Get是在Http头部传输的。 

9. linux命令熟悉?查看某个线程命令是什么?查看整个机器负载命令?文件内容快速查找命令是什么? 

 查看线程:ps -ef|greptomcat 

 查看负载:top 

 文件内容查找:vi /aa test.txt 或者先打开文件,再查找: vi test.txt /aa 

10. JVM内存模型是如何?垃圾回收机制有哪些?如何对JVM进行调优? 

答:由栈和堆组成,栈是运行时单位,堆内存则分为年轻代、年老代、持久代等,年轻代中的对象通过几回的回收,仍然存在则被移到年老代;持久代主要是保存class,method,filed等对象。 

 sun回收机制:主要对年轻代和年老代中的存活对象进行回收,分为如下:  

年轻代串行(Serial Copying)、年轻代并行(ParNew)、年老代串行(SerialMSC),年老代并行(Parallel Mark Sweep),年老代并发(Concurrent Mark-Sweep GC,即CMS)等等,目前CMS回收算法使用最普遍。 

JVM调优主要是对堆内容和回收算法进行配置,须要对jdk产生的回收日志进行观察,同时经过工具(Jconsole,jProfile,VisualVM)对堆内存不断分析,这些优化是一个过程,须要不断地进行观察和维护。 

11. 如银行内部转帐功能,如何保证数据一致性,即要么同时成功,要么同时失败?高并发时,又如何保证性能和数据正确? 

答:若是是单机内完成这些操做,那使用数据库的事务,便可轻松实现。如果分布式呢?  

12. 有了解分布式事务如何实现? 

答:分布式事务能够采用分布式锁进行实现,目前zookeeper就提供此锁;分布式锁须要牺牲必定性能去实现,若业务支付最终一致性,那此方法是最佳方案。如在京东下订单,过一会才会告诉你订单审核经过,而不是立刻响应订单结果。 

13. java抽象类和接口有什么区别?项目中怎么去使用它们? 

相同点: 

 A. 二者都是抽象类,都不能实例化。 

 B. interface实现类及abstractclass的子类都必需要实现已经声明的抽象方法。 

不一样点: 

 A. interface须要实现,要用implements,而abstractclass须要继承,要用extends。 

 B. 一个类能够实现多个interface,但一个类只能继承一个abstractclass。 

 C. interface强调特定功能的实现,而abstractclass强调所属关系。 

 D. 尽管interface实现类及abstrctclass的子类都必需要实现相应的抽象方法,但实现的 形式不一样。interface中的每个方法都是抽象方法,都只是声明的 (declaration, 没有方 法体),实现类必需要实现。而abstractclass的子类能够有选择地实现。 

使用: 

abstract:在既须要统一的接口,又须要实例变量或缺省的方法的状况下,使用abstract; 

interface:使用: 类与类以前须要特定的接口进行协调,而不在意其如何实现。 做为能 够实现特定功能的标识存在,也能够是什么接口方法都没有的纯粹标识。须要将一组类 视为单一的类,而调用者只经过接口来与这组类发生联系。须要实现特定的多项功能, 而这些功能之间可能彻底没有任何联系。 

14. 对socket熟悉?TCP通信有几回握手?有使用过哪些socket框架? 

 答:3次握手,客户端-->服务端,服务端-->客户端,客户端-->服务端,当这些过程完成以后,才真正创建起通讯。java中比较有名的socket框架有:mina,netty,都是韩国小棒子写的。

15. 了解java反射机制?反射生成类,能访问私有变量? 

 答:即动态生成java的实例,能够 

16. RPC是什么?有使用过哪些RPC框架? 

 答:即远程进程调用,本地机器调用远程的服务,在项目规模大到必定程度,须要使用RPC相关框架进行服务化部署。如:hessian 、webservice等 

17. 熟悉js或css?jquery如何绑定页面某元素的点击事件? 

 答:

$("#btn").click(function(){ 

 }) 

相关文章
相关标签/搜索