面试题8

这份面试题包含了 19 个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 等。

1、JS中”==”与“===”的区别?(详细链接

           == equality 等同,=== identity 恒等。 
           ==, 两边值类型不同的时候,要先进行类型转换,再比较。 
           ===,不做类型转换,类型不同的一定不等。

           一言以蔽之:==先转换类型再比较,===先判断类型,如果不是同一类型直接为false。

2、final 在 java 中有什么作用?(链接

           final作为Java中的关键字可以用于三个地方。用于修饰类、类属性和类方法。

                    特征:凡是引用final关键字的地方皆不可修改!

                   (1)修饰类:表示该类不能被继承;

                   (2)修饰方法:表示方法不能被重写;

                   (3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。

3、java 中操作字符串都有哪些类?它们之间有什么区别?  

                String、StringBuffer、StringBuilder

              区别:  String : final修饰,String类的方法都是返回new String。即对String对象的任何改变都不影响到原对象,对字符                                           串的修改操作都会生成新的对象。
                           StringBuffer : 对字符串的操作的方法都加了synchronized,保证线程安全。
                           StringBuilder : 不保证线程安全,在方法体内需要进行字符串的修改操作,可以new StringBuilder对象,调用                                            StringBuilder对象的append、replace、delete等方法修改字符串。

4、对作用域上下文和this的理解。(https://blog.csdn.net/sinat_36414515/article/details/81303492

             this是函数运行时候才能确定的,和函数怎么定义无关。如果是对象打点调用,this就是对象。如果是圆括号直接调用就        是window对象,就是全局变量。

5、Js中的prototype是什么?具体怎么用?(https://zhidao.baidu.com/question/1638319571453900380.html

              prototype是原型的意思,也就是JS对象的原型,一般用来扩展原型的时候用.

              prototype是一个属性,所有的函数都有,这个属性引用了一个对象 . prototype对象是实现面向对象的一个重要机制.每个函         数都是一个对象,它们对应的类就是function,每个函数对象都具有一个子对象prototype,prototype表示了该函数的原型.

6、使用jquery如何找到所有的HTML select标签中的选中项。

<body>
    <select name="n_select" class="c_select" id="i_select1">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3" selected>3</option>
        <option value="4">4</option>
        <option value="5">5</option>
    </select>
    <select name="n_select" class="c_select" id="i_select2">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4" selected >4</option>
        <option value="5">5</option>
    </select>
</body>

          以下就是js的部分:

<script type="text/javascript">
 
    JQ:
    获取所有选中的项(获取所有的select的选中项需遍历载具体取相应的值)
    $('[name=n_select] :selected');
    $('.c_select option:selected');
    $('.c_select').find('option:selected');
    
    获取select 选中的值(只返回第一个select )
    $('[name=n_select] :selected').text();                     // 获取select选中项的文本 
    $('[name=n_select] :selected').val();                      // 获取select选中项的值 
    
    $('.c_select option:selected').text();                     // 获取select选中项的文本
    $('.c_select option:selected').val();                      // 获取select选中项的值
    
    $('.c_select').find('option:selected').text();             // 获取select选中项的文本
    $('.c_select').find('option:selected').val();              // 获取select选中项的值
    
    
    JS:
    // 兼容至IE9+
    var tag_select = document.getElementsByClassName('c_select');    // 获取所有select 
    // 至少兼容值IE7,IE6没测试
    var tag_select = document.getElementsByTagName('select');        // 获取所有select
    // 至少兼容值IE7,IE6没测试 
    var tag_select = document.getElementsByName('n_select');         // 获取所有select
    
    // 至少兼容值IE7,IE6没测试 (下面索引1只是随便举例,可遍历 tag_select 获取所有的)
    var tag_sValue = tag_select[1].value;                            // 获取某个select选中项的值
    var tag_sIndex = tag_select[1].selectedIndex;                    // 获取某个select选中项的索引
    var tag_oValue = tag_select[1].options[tag_sIndex].value;        // 获取某个select选中项的值
    var tag_oTexts = tag_select[1].options[tag_sIndex].text;         // 获取某个select选中项的文本 .text 或者 .innerText 都可以获取
    
</script>

7、Jquery.ajax()的异步请求与同步请求使用时有什么区别?

同步请求 

 发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。

用户填写所有信息后,提交给服务器,等待服务器的回应(检验数据),是一次性的。信息错误又要重新填写!

异步请求

发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

当用户填写完一条信息后,该信息会自动向服务器提交,然后服务器响应客户端,在此过程中,用户依然在填写表格的信息,即向服务器请求多次,节省了用户的时间,提高了用户的体验。

 

 

 

 

 

 

8、Ajax请求的时候get和post方式的区别?

         get请求不安全,post安全 
         get请求数据有限制(不能大于2KB),post无限制 
         get请求参数会在url中显示,容易被他人窃取,post在请求体中,不会被窃取 
         post需要设置请求头

9、CSS中margin、padding的作用、以及单参、双参、四参数在方向上的顺序。

          margin是对外元素的距离,用来控制元素本身的浮动位置;

          padding是对内元素,用来控制元素内部元素的位置;  

          padding:1px2px3px4px;    margin:5px6px7px8px;     上右下左

10、mybatis 中 #{}和 ${}的区别是什么?        

         1)      #和$都可以充当占位符,

                  #的底层是通过PreparedStament实现的,$的底层是通过Stament实现的

          2)     只有传入数据库对象时才会使用到$

                          2.1按照某个表进行查询时输入表名

                          2.2按照表中的某一列进行排序时,输入类名

          3)      在传入非数据使用库对象时最好不要使用$

          4)   #是先编译sql语句在传值,传入的值加上双引号

                  $是直接拼接字符串,不会给传入的值加上双引号

          5)     #会防止sql注入,$不会

11、mybatis 有几种分页方式?(https://www.cnblogs.com/aeolian/p/9229149.html

        Mybatis四种分页方式数组分页、sql limit分页、拦截器分页、RowBounds分页

12、说一下 mybatis 的一级缓存和二级缓存?

Mybatis的一级缓存

一级缓存是指Session缓存。

一级缓存的作用域默认是一个SqlSession。Mybatis默认开启一级缓存。也就是在同一个SqlSession中,执行相同的查询SQL,第一次会去数据库进行查询,并写到缓存中;第二次以后是直接去缓存中取。

当执行SQL查询中间发生了增删改的操作,MyBatis会把SqlSession的缓存清空。

Mybatis的二级缓存

Mybatis的二级缓存是指mapper映射文件。二级缓存的作用域是同一个namespace下的mapper映射文件内容,多个SqlSession共享。Mybatis需要手动设置启动二级缓存。

二级缓存是默认启用的(要生效需要对每个Mapper进行配置),如想取消,则可以通过Mybatis配置文件中的元素下的子元素来指定cacheEnabled为false。

13、mybatis 动态sql标签中循环标签中有哪些属性,各自的作用。

          foreach标签主要用于构建in条件,他可以在sql中对集合进行迭代。如下:

foreach标签主要用于构建in条件,他可以在sql中对集合进行迭代。如下:

  <delete id="deleteBatch"> 

    delete from user where id in

    <foreach collection="array" item="id" index="index" open="(" close=")" separator=",">

      #{id}

    </foreach>

  </delete>

  我们假如说参数为----  int[] ids = {1,2,3,4,5}  ----那么打印之后的SQL如下:

  delete form user where id in (1,2,3,4,5)

  释义:

    collection :collection属性的值有三个分别是list、array、map三种,分别对应的参数类型为:List、数组、map集合,我在上面传的参数为数组,所以值为array

    item : 表示在迭代过程中每一个元素的别名

    index :表示在迭代过程中每次迭代到的位置(下标)

    open :前缀

    close :后缀

    separator :分隔符,表示迭代时每个元素之间以什么分隔

我们通常可以将之用到批量删除、添加等操作中。

14、mybatis 动态sql中使用<where>标签与直接写where关键字有什么区别?

          where标签为MyBatis的动态语句。

<select id="selectByParams" parameterType="map" resultType="user">
select * from user
<where>
<if test="id != null ">id=#{id}</if>
<if test="name != null and name.length()>0">
and name=#{name}
</if>
<if test="gender != null and gender.length()>0">
and gender = #{gender}
</if>
</where>
</select>     

          上述代码中若where标签里的if全不成立,则不走where语句。
          若第一个if标签里ID的值为null的话,那么打印出来的SQL为:select * from user where name=”xx” and gender=”xx”
    会把AND/OR自动忽略掉。
          若直接用where子句的话可能会导致sql语法错误,查询失败。

15、请说明filter和inteceptor的区别。(https://blog.csdn.net/testcs_dn/article/details/80279578

  • Filter是基于函数回调的,而Interceptor则是基于Java反射的。
  • Filter依赖于Servlet容器,而Interceptor不依赖于Servlet容器。
  • Filter对几乎所有的请求起作用,而Interceptor只能对action请求起作用。
  • Interceptor可以访问Action的上下文,值栈里的对象,而Filter不能。
  • 在action的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。
  • Filter和Interceptor的执行顺序: 过滤前-拦截前-action执行-拦截后-过滤后

16、Spring MVC中@requestMapping六个属性value\method\consumes\produces\params\headers的作用。                                             (https://www.cnblogs.com/JunLoveHua/p/10790614.html

        1)、 value, method;

                  value:     指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);

                  method:  指定请求的method类型, GET、POST、PUT、DELETE等;

         2)、 consumes,produces;

                   consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

                   produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

         3)、 params,headers;

                   params: 指定request中必须包含某些参数值是,才让该方法处理。

                   headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

17、Spring mvc @ResponseBody什么时候使用、@PathVariable怎么用?(https://blog.csdn.net/u013025649/article/details/84230828

@RequestBody 

 (通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。实质上接受的是一个JSON的字符串)

 1) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;

 2) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。

@ResponseBodyController层为控制视图层,当网页端一个请求发送到后台时,后台的控制视图层通过@RequestMapping映射相应的视图方法,如果在视图方法上用注解@ResponseBody标识后,方法执行完后返回的内容会返回到请求页面的body上,直接显示在网页上。
@PathVariable

XXXController包括了常用的Get、Post、Put、Delete请求,并使用注解的方式说明了请求路径

路径中的{id}元素是路径参数,可以通过@PathVariable注解获取

18、Spring @ Resource 和Autowired有什么区别?(https://www.jb51.net/article/107375.htm

                  注解 @Resource 的作用相当于 @Autowired,

@Resource

@Resource 则默认按 byName 自动注入。

@Resource 有两个属性是比较重要的,分别是 name 和 type,Spring 将 @Resource 注解的 name 属性解析为 bean 的名字,而 type 属性则解析为 bean 的类型。因此,如果使用 name 属性,则使用 byName 的自动注入策略,而使用 type 属性时则使用 byType 自动注入策略。如果既不指定 name 也不指定 type 属性,这时将通过反射机制使用 byName 自动注入策略。

@Autowired@Autowired 按 byType 自动注入

19、Aop 中切面的切入时机有哪些、切点表达式的几种写法。

        Aop切点表达式:execution(*com.aptech.jb.epet.dao.hibimpl.*.*(..))

          第一个*代表所有的返回值类型

          第二个*代表所有的类

          第三个*代表类所有方法

          最后一个..代表所有的参数。

20、为什么要使用 spring?

        1).方便解耦,便于开发(Spring就是一个大工厂,可以将所有对象的创建和依赖关系维护都交给spring管理)

        2).spring支持aop编程(spring提供面向切面编程,可以很方便的实现对程序进行权限拦截和运行监控等功能)

        3).声明式事务的支持(通过配置就完成对事务的支持,不需要手动编程)

        4).方便程序的测试,spring 对junit4支持,可以通过注解方便的测试spring 程序

        5).方便集成各种优秀的框架()

        6).降低javaEE API的使用难度(Spring 对javaEE开发中非常难用的一些API 例如JDBC,javaMail,远程调用等,都提供了                   封装,是这些API应用难度大大降低)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值