java开发2年半面试问题整理

最近一直在面试,所以稍微整理了下,作下记录,有需要的小伙伴也可参考下。其实多数答案都可以自己查到,我这里主要是提供下面试大概会被问到哪些问题,公司都是苏州的。

这里想说下个人感受吧,之前也是半路转行做的这个,两年半的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[] table;// 使用transient修饰的属性是不会被序列化的。

回答没有看过

【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,# $区别,缓存一级二级

 

你可能感兴趣的:(java开发2年半面试问题整理)