西安面试第一天面试问题总结

struts2运行原理

          1、tomcat 启动的时候会加载 web.xml 、核心控制器 (老版)FilterDispatcher、(新版)StrutsPrepareAndExecuteFilter                 会加载并解析 struts.xml

          2、客户端会发送一个请求到 action 、StrutsPrepareAndExecuteFilter(新版)  会根据后缀名进行拦截

          3、FilterDispatcher根据 struts.xml  的配置文件信息 找到 某个action 对应的某个类里的指定方法

         4、执行相关的业务逻辑最后返回 一个String

         5、<action/> 里配置 <result/> name的属性值与返回的String 进行匹配,跳转到指定的jsp 页面

 mybatis # $ 区别

       1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那               么      解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id"  
       2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by                   user_id,  如果传入的值是id,则解析成的sql为order by id.
       3. #方式能够很大程度防止sql注入。
       4.$方式无法防止Sql注入
       5.$方式一般用于传入数据库对象,例如传入表名
       6.一般能用#的就别用$

       MyBatis排序时使用order by 动态参数时需要注意,用$而不是#

redis数据如何更新的

mybatis项目中怎么查询,怎么配置,怎么整合

         1.导入mybatis的pom节点

         2.配置数据源

         3.spring配置文件中配置扫描mapper层xml位置

         4.编写xml里面的sql

         5.把接口层查询跟xml文件中每个mybatis标签的id属性值保持一致,然后调用查询

mongodb介绍          

          1.   我们主要用mongodb来存储我们项目里面的操作日志(银行的付款转账记录,角色权限的变动日志),我们主要是结               合aop来使用的,首先我们来配置一个aop的切面类,再给aop的使用规则,哪个类里面的哪个方法使用当前切面类,利              用后置通  知类获取当前方法的操作日志,将操作日志存储到mongodb,然后进行分类管理查看。利用后置通知传到数据              库。

            2.   我们在项目中使用它来存储电商产品详情页的评论信息(评论id,商品id,标题,评分,内容,评论人信息,评论的发布                时间,评论标签组)并且为了提高可用性和高并发用了3台服务器做了mongodb的副本集,其中一台作为主节点,另外              两台作为副本节点,这样在任何一台mongodb服务器宕机时就会自动进行故障转移,不会影响应用程序对mongodb的操                作,为了减轻主节点的读写压力过大的问题,我还对mongodb副本集做了读写分离,使写操作在主节点进行,读取操作              在副本节点进行。为了控制 留言,我们留言的界面设置在了订单状态,只有状态为5,也就是交易成功收货后才能评                   论, 并在评论成功后将订单状态改为6

【补充:如果问到副本集是怎么搭建的,就说我们有专门的运维人员来负责搭建,我只负责用Java程序去进行操作】

Spring和mongodb整合步骤:

1.   添加依赖的jar包

要想整合Spring和Mongodb必须下载相应的jar,这里主要是用到两种jar一种是spring-data-document和spring-data-commons两种类型的jar

2.定义实体类

3.Spring配置

新建application.xml配置文件

这个必须要的引入mongodb标签xmlns:mongo="http://www.springframework.org/schema/data/mongo"

在配置文件中加入链接mongodb客服端

<mongo:mongo host="localhost" port="27017">  

</mongo:mongo>

注入mogondb的bean对象

   <bean id="mongoTemplate" class="org.springframework.data.document.mongodb.MongoTemp"> 

      <constructor-arg ref="mongo"/> 

      <constructor-arg name="databaseName" value="db"/> 

      <constructor-arg name="defaultCollectionName" value="person" /> 

   </bean> 

   <bean id="personRepository" class="com.mongo.repository.PersonRepository"> 

        <property name="mongoTemplate" ref="mongoTemplate"></property> 

  </bean> 

4.然后编写操作mongodb增删查改的接口

      public interface AbstractRepository { 

      public void insert(Person person); 

      public Person findOne(String id); 

      public List<Person> findAll(); 

      public List<Person> findByRegex(String regex); 

      public void removeOne(String id); 

      public void removeAll(); 

      public void findAndModify(String id); 

  } 

再写对应接口的实现类:

  import java.util.List; 

  import java.util.regex.Pattern; 

   

  import org.springframework.data.document.mongodb.MongoTemplate; 

  import org.springframework.data.document.mongodb.query.Criteria; 

  import org.springframework.data.document.mongodb.query.Query; 

  import org.springframework.data.document.mongodb.query.Update; 

   

  import com.mongo.entity.Person; 

 import com.mongo.intf.AbstractRepository; 

   

  public class PersonRepository implements AbstractRepository{ 

     private MongoTemplate mongoTemplate; 

      @Override 

      public List<Person> findAll() { 

          return getMongoTemplate().find(new Query(), Person.class); 

      } 

   

     @Override 

     public void findAndModify(String id) {  

       getMongoTemplate().updateFirst(new Query(Criteria.where("id").is(id)), nw Update().inc("age", 3));

      } 

       @Override 

      public List<Person> findByRegex(String regex) { 

          Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE); 

          Criteria criteria = new Criteria("name").regex(pattern.toString());            return getMongoTemplate().find(new Query(criteria), Person.class);        } 

       @Override 

      public Person findOne(String id) { 

          return getMongoTemplate().findOne(new Query(Cri

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值