Java面试常见问题整理(项目阶段 附答案)

1、日志文件的管理,你们是怎么做的?

场景:记录每个人在项目中的动作。

在Java开发中日志的管理有很多种。我一般会使用过滤器,或者是spring的拦截器进行日志的处理。如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个方法的调用。然后进行日志记录。使用过滤器的好处是可以自己选择性的对某一些方法进行过滤,记录日志。但是实现起来有点麻烦。

另外一种就是使用Spring的AOP了。这种方式实现起来非常简单,不用修改原来的代码,只要配置一下配置文件就可以了。可是这种方式会拦截下所有的对action的每个操作。使得效率比较低。不过想做详细日志这个方法还是非常好的。

2、你觉得分布式开发的缺点是什么?

1、分布式优点

1、增大系统容量。我们的业务量越来越大,而要能应对越来越大的业务量,一台机器的性能已经无法满足了,我们需要多台机器才能应对大规模的应用场景。所以,我们需要垂直或是水平拆分业务系统,让其变成一个分布式的架构。

2、加强系统可用。我们的业务越来越关键,需要提高整个系统架构的可用性,这就意味着架构中不能存在单点故障。这样,整个系统不会因为一台机器出故障而导致整体不可用。所以,需要通过分布式架构来冗余系统以消除单点故障,从而提高系统的可用性。

3、因为模块化,所以系统模块重用度更高

4、因为软件服务模块被拆分,开发和发布速度可以并行而变得更快

5、系统扩展性更高

6、团队协作流程也会得到改善

7、然后来对比一下单体应用和分布式架构的优缺点:
 

2、分布式缺点

1、架构设计变得复杂(尤其是其中的分布式事务)

2、部署单个服务会比较快,但是如果一次部署需要多个服务,部署会变得复杂

3、系统的吞吐量会变大,但是响应时间会变长

4、运维复杂度会因为服务变多而变得很复杂

5、架构复杂导致学习曲线变大

6、测试和查错的复杂度增大

7、技术可以很多样,这会带来维护和运维的复杂度

8、管理分布式系统中的服务和调度变得困难和复杂
 

3、支付接口是怎么做的?

 

一、首先目前的现状是:

支付宝和微信早已不再支持个人接入即时到账收款接口!

二、解决措施:

使用我们的接口,您只需拥有支付宝、微信个人账户,就可以完成即时到账收款接口,并能实时通知到您的自定义网址。

三、如何操作:

1.收款人需要1台安卓手机就能实现收款,安装的收款APP,无需Root,安装我们的APP,付款人不需要装App。

2.确保您资金账户安全。无需在我们APP中登录支付宝、微信,只要您手机里安装了支付宝、微信APP即可。

四、实现原理:

也是支付宝/微信收款通知,从而识别收款,合情合理合法。支付流程顺畅。网速正常情况下,从用户付款到您后台收到收款通知,过程不到1秒。


4、redis为什么可以做缓存?

Redis为什么适合做缓存?

Redis 基于内存提供了高性能的数据存取功能。

缓存中的数据量也是有限的,存储的数据超过缓存容量之后,缓存中的数据需要按一定规则淘汰出去,Redis 本身是支持按一定规则淘汰数据的,这也是 Redis 适合用作缓存的一个重要原因。
Redis 缓存处理请求的两种情况

把 Redis 用作缓存时,我们会把 Redis 部署在数据库的前端,业务应用在访问数据时,会先查询 Redis 中是否保存了相应的数据。此时,根据数据是否存在缓存中,会有两种情况。

    缓存命中:Redis 中有相应数据,就直接读取 Redis,性能非常快。
    缓存缺失:Redis 中没有保存相应数据,就从后端数据库中读取数据,性能就会变慢。而且,一旦发生缓存缺失,为了让后续请求能从缓存中读取到数据,我们需要把缺失的数据写入 Redis,这个过程叫作缓存更新。

 5、token校验的过程?

1、用户向服务器发送用户名和密码。

2、服务端收到请求,验证用户名和密码。

3、验证成功后,服务端会签发一个token,并将这个token发送到客户端。

4、客户端收到token后将token存储起来,存在cookie或者localStorage里。

5、用户之后的每次请求都将token发送到服务器。

6、服务端收到请求,验证token,如果一致,返回客户端请求的数据。

6、springboot、springcloud等微服务的概念和使用?

7、SpringDataJPA怎样使用?

 

按照我的理解,SpringData JPA约等于hibernate,也就是下面这个问题的延伸。

为什么90%的开发者放弃使用Hibernate,而选择MyBatis?21 赞同 · 8 评论回答26 赞同 · 8 评论回答

今天我再详细的聊一聊SpringData JPA和mybatis。

一、先从概念走起。

Jpa(Java Persistence API)是sun官方提出的java持久化规范。它为java开发人员提供了一种对象/关联映射工具,来管理java应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在hibernate、toplink、jdo等ORM框架各自为营的局面。

值得注意的是,Jpa是在充分吸收了现有ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点。从目前的开发社区的反应上看,Jpa受到了极大的支持和赞扬,其中就包括了spring和EJB的开发团队。

注意:Jpa 是一套规范,不是一套产品,那么像 Hibernate,TopLink,JDO 他们是一套产品,如果说这些产品实现了这个 Jpa 规范,那么我们就可以叫他们为 Jpa 的实现产品。

Spring Data Jpa是Spring基于ORM框架、JPA规范的基础上封装的一套Jpa应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用Spring Data Jpa可以极大提高开发效率。

MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。Mybatis:着力于POJO与SQL之间的映射关系。

二、再谈一谈性能。

​ 由于 Hibernate 比 MyBatis 抽象封装的程度更高,理论上单个语句之心的性能会低一点(所有的框架都是一样,排除算法上的差异,越是底层,执行效率越高)。 但 Hibernate 会设置缓存,对于重复查询有一定的优化。所以,从整体的角度来看性能的话,其实两者不能完全说谁胜谁劣。

三、学习成本

Hibernate的开发难度要大于Mybatis。主要是由于Hibernate封装了完整的对象关系映射机制,以至于内部的实现比较复杂、庞大,学习周期较长。

Mybatis 主要依赖于SQL的编写与ResultMap的映射,学习成本较低,市场占有率大,也就是,Java程序员都会,标配。

  • 3
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周周学Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值