1.7面试

上午的话小型公司就写个面试题,跟那个hr聊了晓得她不知道技术之后疯狂跟她谈技术,看到她脸色变了我才停下,哇草面试题一堆都不会在小会议室里百度她貌似发现了,不过也不重要。啧。这尼玛这个公司ssh的项目,boss专门是做开发的,神奇。

  1. ajax是什么?如何创建一个ajax?
    答:一种创建交互式网页应用的网页开发技术。
    step1. 创建XMLHttpRequest对象,也就是创建一个异步调用对象;
    step2. 创建一个新的HTTP请求,并指定改HTTP请求的方法、URL以及验证信息;
    step3. 设置响应HTTP状态变化的函数;
    step4. 发送HTTP请求;
    step5. 获取异步调用返回的数据;
    step6. 使用javascript和DOM实现局部刷新;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <script>
    var xmlhttp;
    function createXMLHttpRequest(){
    xmlhttp=null;
    if (window.XMLHttpRequest){
    xmlhttp=new xmlHttpRequest(); //Netscape浏览器中的创建方式
    }else if(window.ActiveXObject){
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");//IE浏览器的创建方式
    }

    //异步调用服务器段数据
    if(xmlhttp!=null){
    xmlhttp.open("GET/POST",url,true); //创建HTTP请求
    xmlhttp.onreadystatechange=httpStateChange;//设置HTTP请求状态变化的函数
    xmlhttp.send(null); //发送请求
    }else{
    alert("不支持XHR")
    }
    }

    //响应HTTP请求状态变化的函数
    function httpStateChange(){//判断异步调用是否完成
    if(xmlhttp.readyState==4){//readyState==4表示后台处理完成了
    if(xmlhttp.status==200||(xmlhttp.status==0){//状态码为0是本地响应成果,200表示处理的结果是ok的
    //判断异步调用是否成功,如果成功开始局部更新数据
    //code...
    }else{
    alert("出错状态码:"+xmlhttp.status+"出错信息:"+xmlhttp.statusText);
    }
    }
    }
    </script>

    选择的记一下步骤,这他妈还是主要记这个

    1
    $.ajax({url,data,type,error(),success()});

    还有load,post,get方法,不一一题,直接写原生态的ajax这谁顶得住。

  2. struts2常用标签
    if-eles if-else 、iterator、date、debug、property struts有使用过这个标签库基本用一次就没继续想了,struts2我学的很烂.

  3. request的常用方法
    getAttribute、setAttribute、getParameter。这三个是真正用的很多的。

  4. 附加题java闭包
    java闭包

  5. ssh项目的工作流程
    jsp—>struts2接收请求—》struts2的action调用业务逻辑,业务逻辑调用业务组件—>使spring注入ioc,aop—>业务组件根据hibernate映射关系去查询数据库,struts2根据结果返回页面
    就是通过jsp页面的url点击产生请求,struts2接受请求,运行具体方法,spring注入ioc、aop,struts2的执行代码中,调用hibernate的方法,hibernate根据映射关系查询数据库,struts2接受数据返回jsp页面;

  6. ssm项目的工作流程
    jsp —》dispacherServlvet—查找》handerMapping—》找到controller的请求–》
      controller 调用业务逻辑—》业务逻辑处理后返回modelandview
      dispacherServlet-查询视图解析器–》找到modelandview对应到视图返回到页面

    通过jsp页面的url点击产生请求,dispacherServler(分发器)接受请求,查询HanderMapping,找到处理请求的controller,执行controller的方法代码,调用service层的具体业务逻辑(代码),service层调用dao层mapper文件的各种sql语句映射,返回数据到modelandview,并将数据展示到modelandview指定的视图。

    下午是华为总部某附属公司的一个面试,那个公司好像是搭建不久,面我的是一个四十多的程序员.

  7. 说一说你项目里索引失效的情况

     like查询是以%开头(以%结尾没有事),如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
    
  8. Springmvc的controller是属于单例还是多例,以及controller是否能有局部变量

      [这里就有很好的解释](https://blog.csdn.net/qq_27026603/article/details/67953879)
    

    总的来说,可以单例或者多例,单例推荐使用更加安全,

    如果要定义局部变量,那么需要给controller添加注解@Scope(“prototype”)改为多例。

  9. maven里的profile有什么用
    答:profile文件是maven用于支持项目更换不同环境。profile学习

  10. 项目里有用到多线程吗
    ps:之前被问到过,这次我用上次找的答案,他听到回答后跳过了。
    答:我这种javaweb项目基本没用到多线程,而且有多线程的操作一般都已经被开发框架实现了,一般涉及网络应用才会有多线程,但我只是指定模块进行开发.

  11. 讲一讲spring aop具体如何使用

    先看下aop设计

    1. 每个 Bean 都会被 JDK 或者 Cglib 代理。取决于是否有接口。
    2. 每个 Bean 会有多个“方法拦截器”。注意:拦截器分为两层,外层由 Spring 内核控制流程,内层拦截器是用户设置,也就是 AOP。
    3. 当代理方法被调用时,先经过外层拦截器,外层拦截器根据方法的各种信息判断该方法应该执行哪些“内层拦截器”。内层拦截器的设计就是职责连的设计。

    aop的问题基本使用这两点去扯

    第一:代理的创建;

    创建代理工厂时,默认会在拦截器数组尾部再增加一个默认拦截器 —— 用于最终的调用目标方法。
    当调用 getProxy 方法的时候,会根据接口数量大余 0 条件返回一个代理对象(JDK or Cglib)。
    注意:创建代理对象时,同时会创建一个外层拦截器,这个拦截器就是 Spring 内核的拦截器。用于控制整个 AOP 的流程。
    

    第二:代理的调用。
    ​ 当对代理对象进行调用时,就会触发外层拦截器。
    外层拦截器根据代理配置信息,创建内层拦截器链。创建的过程中,会根据表达式判断当前拦截是否匹配这个拦截器。而这个拦截器链设计模式就是职责链模式。
    当整个链条执行到最后时,就会触发创建代理时那个尾部的默认拦截器,从而调用目标方法。最后返回。

    啊啊啊不行不行,实在抽象,我现在就只能理解是aop是spring的一个组件,spring的每个bean都有方法拦截器,一层属于spring内部控制,一层属于aop我们自己配置的。当方法拦截器调用时触发外层spring控制的拦截器,然后会对这个调用是否匹配内层配置的拦截器。

  1. mysql的问的挺多
    大概就是这样,这个老男人真牛皮

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!