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,也就是下面这个问题的延伸。
今天我再详细的聊一聊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程序员都会,标配。