首页 课程 师资 教程 报名

Java三年经验面试题总结,值得参考

  • 2019-12-13 14:56:54
  • 2047次 动力节点

 

Java三年经验面试题总结,值得参考.jpg

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

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

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

  1.volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。

  2.volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的。

  3.volatile仅能实现变量的修改可见性,并不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性。

  4.volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。

  5.volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化。

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

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

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

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

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

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

Java三年经验面试题总结,值得参考.jpg

 

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

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

  区别:

  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)对堆内存不断分析,这些优化是一个过程,需要不断地进行观察和维护。

 

Java三年经验面试题总结,值得参考

      以上就是动力节点Java培训机构小编介绍的“Java三年经验面试题总结,值得参考”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

 

相关推荐

最新最全java面试题及答案(初级到高级)

史上最全的中高级JAVA工程师面试题及答案汇总

Java高级开发工程师面试题

2019史上最全java面试题题库大全800题

哪有资深java工程师面试题

 

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交