最近一直在面试,所以稍微整理了下,作下记录,有需要的小伙伴也可参考下。其实多数答案都可以自己查到,我这里主要是提供下面试大概会被问到哪些问题,公司都是苏州的。
这里想说下个人感受吧,之前也是半路转行做的这个,两年半的java经验,面试总体感觉自己有很多的不足,首先搭一个稳定的框架的能力欠缺(前后端都包含),其次好多公司对于三年左右经验的喜欢问源码,比如jdk,spring,mybatis源码,我个人是没有看过源码,感觉框架,组件,业务已经挺多内容。不过通过这次机会,又复习了一遍基础,也不错,比如spring一般就会问aop原理,实际中有用到过没,其次设计模式一般都会问,最好熟悉几个,单例和工厂常见的,代理模式最好熟悉,其它的设计模式多多益善。
面试一个是检查应聘者的基础,另外实际项目经验,是指宽度,针对某一点有可能会深入问,那么就是想知道应聘者是知其然还是知其所以然,另外可能还会问一些新的知识,想知道应聘者对前沿关不关注。我个人面试会的多说点,不会的就说不会,现在已经面试到一家,工资尚可。希望其他跳槽的同学们也可以顺顺利利~,其实多面试几家也没关系的,我现在还没去新公司报道,仍然在面试,哈哈~
详细如下
【1】:http请求方式
1、opions 返回服务器针对特定资源所支持的HTML请求方法 或web服务器发送*测试服务器功 能(允许客户端查看服务器性能)
2、Get 向特定资源发出请求(请求指定页面信息,并返回实体主体)
3、Post 向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建 立或原有资源的修改
4、Put 向指定资源位置上上传其最新内容(从客户端向服务器传送的数据取代指定文档的内容)
5、Head 与服务器索与get请求一致的相应,响应体不会返回,获取包含在小消息头中的原信息 (与get请求类似,返回的响应中没有具体内容,用于获取报头)
6、Delete 请求服务器删除request-URL所标示的资源*(请求服务器删除页面)
7、Trace 回显服务器收到的请求,用于测试和诊断
8、Connect HTTP/1.1协议中能够将连接改为管道方式的代理服务器
http服务器至少能实现get、head、post方法,其他都是可选的
restfull风格请求需要了解
【2】:响应的状态码
常见的就是成功响应状态码200了, 这表明该请求被成功地完成,所请求的资源发送回客户端
302 重定向
304 代表上次的文档已经被缓存了, 还可以继续使用
400 Bad Request 客户端请求与语法错误,不能被服务器所理解
403 Forbidden 服务器收到请求,但是拒绝提供服务
404 Not Found
500 Internal Server Error 服务器发生了不可预期的错误
503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常
【3】:jdk HashMap源码
transient Node
回答没有看过
【4】:spring和springboot的区别
1、省去繁杂的xml配置
2、内嵌tomcat
3、Spring boot对第三方技术进行了很好的封装和整合,提供了大量第三方接口
【5】:ngnix转发机制。
ip_hash,session保持
ngnix涉及session共享,需要了解
【6】:多线程
线程实现方式,有三种,继承thread,实现runnable,callable
线程安全问题
threadlocal了解原理
【7】:设计模式
常用单例模式,工厂模式,代理模式,需要理解
【8】;aop理解
【9】:线程间通信和进程间通信
线程共享内存,进程可以通过rpc通信
【1】:ThreadLocal
同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之间进行通信的有效方式;而ThreadLocal是隔离多个线程的数据共享,从根本上就不在多个线程之间共享资源(变量),这样当然不 需要对多个线程进行同步了。所以,如果你需要进行多个线程之间进行通信,则使用同步机制;如果需要隔离多个线程之间的共享冲突,可以使用ThreadLocal
【2】:事务传播机制
一个service调用另一个service,两个service都有事务,怎样保证内层service事务不受外层事务的影响
【3】:http请求头重 contenttype
【4】:乐观锁和悲观锁
【5】:springcloud中用到那些
没有做过springcloud项目,自己看视频写的demo学习,了解其中组件,当然这样回答肯定不会让面试官满意,能答出多少就说多少吧
eureka,ribbon,zuul,fein
【1】:springboot 后台接收参数的方式
1、加到url中/{}形式,@pathvariable方式接收
2、demo/{id}?name=张三. 此时id的获取还是@pathvariable(name=“id”)方式获取,name获取方式@RequestParam(name = "name") ,这种url方式后台用HttpServletRequest.getParameter(“”)方 式获取
3、对象方式接收
【2】:mvc流程,前台是如何把参数传递到后台,数据是放在哪里传递过来的
【3】:validate和synchronized的区别
同下一个问题
【4】:单例双重验证,为什么需要双重验证
因为volatile关键字的一个重要作用是禁止指令重排序,即保证不会出现内存分配、返回对象引用、初始化这样的顺序,从而使得双重检测真正发挥作用
volatile+ synchronized才保证双重验证是安全的
【5】:代理模式,说到aop,aop应用场景,aop实现哪个接口,详细说下原理
代理:静态代理,动态代理(jdk动态代理),cglib
当时回答出了静态代理和动态代理的原理,并描述了具体的实现,其实很简单,直接百度好了
【6】:接口安全性问题,(后来理解成数据一致性问题,就是根据当前登陆人去获取相应的数据)
一般简历中出现前后端分离项目的容易被问到这个
token识别,用到jwt
【7】:mongodb中document指的是什么,collection
【8】:mybatis源码,mybatis缓存
一级缓存:MyBatis 默认开启了一级缓存,一级缓存是在SqlSession 层面进行缓存的。即,同一个SqlSession ,多次调用同一个Mapper和同一个方法的同一个参数,只会进行一次数据库查询,然后把数 据缓存到缓冲中,以后直接先从缓存中取出数据,不会直接去查数据库。
但是不同的SqlSession对象,因为不用的SqlSession都是相互隔离的,所以相同的Mapper、参数和方法,他还是会再次发送到SQL到数据库去执行,返回结果。
二级缓存:
自定义缓存:
【9】:jdk的动态代理
【10】:mybatis xml中resultType和resultMap的区别
resultType是类型resultMap是在xml里面配置的对象
【11】:拦截器
HandlerInterceptor WebMvcConfigurerAdapter
实现HandlerInterceptor接口,这里完成请求前、中、后所需要完成动作
继承WebMvcConfigurerAdapter,添加拦截器,可以指定在那些路径进行拦截
【12】:git和svn的区别
1、最核心的区别Git是分布式的,而Svn不是分布的,Git更倾向于分布式开发,因为每一个开发人员的电脑上都有一个Local Repository,所以即使没有网络也一样可以Commit,查看历史版本记录,创建项 目分支等操作,等网络再次连接上Push到Server端
2、Git把内容按元数据方式存储,而SVN是按文件
3、Git没有一个全局版本号,而SVN有:目前为止这是跟SVN相比Git缺少的最大的一个特征
【1】:git如何处理合并?
这个问题我不知道,实际工作中没用过,所以没有解决过git冲突问题,面试结束我问了面试的人,说是开发push到远程仓库时有冲突会push不上去,这个我还没搞清楚
【2】:docker容器关闭和打开的区别
【3】:序列化和反序列化
简单说了些,之前有理解过,答案百度即可
【4】:spring事务传播机制和隔离机制
通过注解,设置不同参数
当时问的是一个实例,一个service调用另一个service,外层有事务,内层无事务会怎样,外层有事务而不想内层service受外层的影响
【1】:前后端分离用户验证
token,token是放在哪里的? 查看jwt验证token
【2】:模版
freemaker,thymeleaf
【3】:分页插件
pagehelper
【4】:redis
jedis
【5】:mabatis相关
generate,xml里面的parameterType,resultMap,# $区别,缓存一级二级