此内容偏中高级,适合有三年经验者。

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

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

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

区别:

1、 Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过        memcache还可用于缓存其他东西,例如图片、视频等等。

2、Redis不仅仅支持简单的k/v类型的数据,同时还提供包括string(字符串)、 list(链表)、set(集合)、zset(sorted set --有序集合)对象对应一个cores分数 默认通过分数排序  和hashs(哈希类型)等数据结构的   存储。

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|grep tomcat

查看负载: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实现类及abstractc lass的子类都必须要实现已经声明的抽象方法。

不同点:

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(){

})

面试题:3年工作经验 已看1 有用 memcache和redis有什么区别的更多相关文章

  1. 面试题: 数据库笔试 sql操作 已看 上课的练习题50sql

    2018/5/31 oracle数据库面试笔试试题总结http://www.yjbys.com/qiuzhizhinan/show-308759.html 1/4Oracle数据库1.基础测试选择在部 ...

  2. JS jquery ajax 已看1 有用

    4.form中的input可以设置为readonly和disable,请问2者有什么区别? readonly不可编辑,但可以选择和复制:值可以传递到后台 disabled不能编辑,不能复制,不能选择: ...

  3. 一年iOS工作经验,如何一举拿下百度、美团、快手等Offer面经(附面试题)

    前言: 先简单说说我最近的面试经历吧.面试的公司很多,大部分最后都能得到令人满意的结果,我将这些体会记录下来,面了这么多公司,如果不留下什么,那岂不是太浪费了.对于我来说,这也是一次自我检查,在这次面 ...

  4. java面试题(一年工作经验)的心得

    看面试题 正常人第一步肯定都会看面试题,我也不例外,在看的过程中,我发现有些文章写的不错,对我帮助不小值得推荐,如下: Java面试题全集(上) 很多基础的东西,建议先看. 各大公司Java后端开发面 ...

  5. 一年半前端工作经验试水杭州:我是如何拿下网易、阿里和滴滴 offer 的

    前言 笔者毕业于东北大学,大学毕业社招进入环球网,前端开发工程师一职.技术栈:React+node,Github 地址 成果 来到杭州的目标非常的明确,大厂.其实就是网易.阿里和滴滴.好在基本三家都拿 ...

  6. 2020软件测试工程师面试题汇总(内含答案)-看完BATJ面试官对你竖起大拇指!

    测试技术面试题 1.什么是兼容性测试?兼容性测试侧重哪些方面? 参考答案: 兼容测试主要是检查软件在不同的硬件平台.软件平台上是否可以正常的运行,即是通常说的软件的可移植性. 兼容的类型,如果细分的话 ...

  7. 2年Java开发工作经验面试总结

    最近换了个公司,从三月底开始面,面到四月底,面了有快二十家公司.我是一个喜欢总结经验的人,每经过一场面试,我在回来的路上都会仔细回想今天哪些问题可以答的更好,或者哪些问题是自己之前没遇到过的,或者是哪 ...

  8. 教你写Makefile(很全,含有工作经验的)

    Makefile 值得一提的是,在Makefile中的命令,必须要以[Tab]键开始. 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了 ...

  9. 转:一位10年Java工作经验的架构师聊Java和工作经验

    黄勇( 博客),从事近十年的 JavaEE 应用开发工作,现任阿里巴巴公司系统架构师.对分布式服务架构与大数据技术有深入研究,具有丰富的 B/S 架构开发经验与项目实战经验,擅长敏捷开发模式.国内开源 ...

随机推荐

  1. element-ui dialog组件添加可拖拽位置 可拖拽宽高

    edge浏览器下作的gifhttp://www.lanourteam.com/%E6... 有几个点需要注意一下 每个弹窗都要有唯一dom可操作 指令可以做到 拖拽时要添加可拖拽区块 header 由 ...

  2. Idea_学习_09_Idea 方法自动生成参数默认名

    一.方法 1.快捷键 生成方法后,还空着参数,可以使用 ctrl + alt + 空格 ,列出参数,然后选择参数即可. 2.使用插件 二.参考资料 1.Intellij Idea 方法自动生成参数默认 ...

  3. 轮廓Outline|表格Table实例

    1.使用outline属性在元素周围画一条线. border:red solid thin; outline:#00ff00 dotted thick; outline-style:dotted|da ...

  4. hdoj-1046-Gridland(规律题)

    题目链接 #include <algorithm> #include <iostream> using namespace std; int main() { int t; c ...

  5. python究竟要不要使用多线程

    在总结concurrent.futures库之前先来弄明白三个问题: (1)python多线程究竟有没有用? (2)python虚拟机机制如何控制代码的执行? (3)python中多进程处理原理是怎么 ...

  6. Centos7 安装 MongoDB4.0

    目录 安装包下载 MongoDB安装 启动数据库 补充 小结 诚邀访问我的个人博客:我在马路边 更好的阅读体验点击查看原文:Centos7安装MongoDB4.0 原创博客,转载请注明出处 @ 由于项 ...

  7. vmem驱动设备

    vmem是内存多字符设备.包含vfs的open.read.write.ioctl.poll.fasync和release函数,device文件的读写. virtual_mem.c #include & ...

  8. JSF页面中的JS取得受管bean的数据(受管bean发送数据到页面)

    JSF中引入jsf.js文件之后,可以拦截jsf.ajax.request请求.一直希望有一种方法可以像jquery的ajax一样,能在js中异步取得服务器端发送的数据.无奈标准JSF并没有提供这样的 ...

  9. Cache-Control头

    介绍 Cache-Control头在HTTP中有一定的难度,第一它既可以用于请求头,也可以用于响应头(这里主要将响应缓存).第二,它控制着两个缓存,本地缓存:指客户端本地及其中的缓存(大多指浏览器缓存 ...

  10. java代码equals方法

    package com.bc; public class Test_6 { // 我们知道java中的每个类都继承自Object类,equals是Object方法之一 String name; int ...