java面试五

来源:互联网 发布:2018志鸿优化设计答案 编辑:程序博客网 时间:2024/05/16 13:05

1.jquery中==和===的区别

先说 ===,这个比较简单。下面的规则用来判断两个值是否===相等:1、如果类型不同,就[不相等]2、如果两个都是数值,并且是同一个值,那么[相等];(!例外)的是,如果其中至少一个是NaN,那么[不相等]。(判断一个值是否是NaN,只能用isNaN()来判断)3、如果两个都是字符串,每个位置的字符都一样,那么[相等];否则[不相等]。4、如果两个值都是true,或者都是false,那么[相等]。5、如果两个值都引用同一个对象或函数,那么[相等];否则[不相等]。6、如果两个值都是null,或者都是undefined,那么[相等]。再说 ==,根据以下规则:1、如果两个值类型相同,进行 === 比较。2、如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较:a、如果一个是null、一个是undefined,那么[相等]。b、如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。c、如果任一值是 true


2.jquery获取parent,children的使用父亲子类用法

$this.parent().children(".update_time ")

<div class="charts">      <h4 class="ITshuma"><a id="110000000" class="firstbangdan110000000" href="http://192.168.1.62:8080/yuda-web/brandRank/brandRank_110000000.htm">书籍</a></h4>      <h3><a href="#tab19" class="">品牌排行</a><a href="#tab20" class="morenTitlt">产品排行</a></h3>      <div class="tablecontent"></div>      <div class="l_see"><a href="http://192.168.1.62:8080/yuda-web/rankList/rankList_110000000_110001000_110001001_16.htm">查看完整榜单</a></div>      <div class="Update_time">该品类本月新增<span>3</span>个品牌,更新时间:2013-10-30</div>  </div>  <script type="text/javascript">            $('.charts h3 a').hover(function () {          var $this = $(this);          $this.parent().parent().children(".Update_time").children("span").text("5");      }); 


3.数据库左联查

select * from customer LEFT OUTER JOIN orders on customer.custId=orders.customer_id;

左连接查询两个外键关联一个主键,查询出来有两条结果;如果有一个为null则不行。



4.Mybitis绑定接口的几种方法:

XML方式:<bean id="menuMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">    <property name="sqlSessionFactory" ref="sqlSessionFactory" />    <property name="mapperInterface" value="cn.vansky.schedule.time.menu.dao.MenuMapper" /></bean>


注解方式:

<bean name="mapperScannerConfigurer_one" class="org.mybatis.spring.mapper.MapperScannerConfigurer">        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />        <property name="basePackage" value="cn.vansky.schedule.time" />        <property name="annotationClass" value="cn.vansky.framework.core.orm.mybatis.annotation.SqlMapper" />        <property name="markerInterface" value="org.mybatis.spring.mapper.MapperFactoryBean" /></bean>

BEAN注入:


JAVA代码里面注入使用注解@Autowired,此注解默认使用类型获取对应的对象。这里类型MenuMapper,而实际类型为MapperFactoryBean,应该会出现类型转换异常呀!MyBatis做了进一步处理,MapperFactoryBean实现FactoryBean,必须实现getObject方法。


5.Mybatis一对多有那几种方式

collection的方法

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.yc.mapper.CustomerMapper">    <resultMap type="com.yc.m.Customer" id="resultCustomerMap">     <id column="id" jdbcType="INTEGER" property="id" />    <result property="address" column="address"/>     <result property="postcode" column="postcode"/>     <result property="sex" column="sex"/>     <result property="cname" column="cname"/>     <collection property="orders" ofType="com.yc.m.Orders">          <id property="id" column="id"/>          <result property="code" column="code"/>    </collection>      </resultMap>       <select id="getCustomer" resultMap="resultCustomerMap" parameterType="int">     SELECT *     FROM t_customer     WHERE id=#{id}   </select>      </mapper>

6.值传递和引用传递

值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

7.Spring的Bean默认是单例,但可以设置为多例

spring生成对象默认是单例的,<bean id="user" class="modle.User" scope="prototype"><property name="service" ref="userservice"></property></bean><bean id="userservice" class="service.userService" ><property name="tool" ref="tool"></property></bean>通过scope属性可以更改为多例。<bean id="tool" class="service.ToolImpl" scope="prototype"></bean>

8.哈希冲突

一)哈希表简介

非哈希表的特点:关键字在表中的位置和它之间不存在一个确定的关系,查找的过程为给定值一次和各个关键字进行比较,查找的效率取决于和给定值进行比较的次数。

    哈希表的特点:关键字在表中位置和它之间存在一种确定的关系。

哈希函数:一般情况下,需要在关键字与它在表中的存储位置之间建立一个函数关系,以f(key)作为关键字为key的记录在表中的位置,通常称这个函数f(key)为哈希函数。

hash : 翻译为“散列”,就是把任意长度的输入,通过散列算法,变成固定长度的输出,该输出就是散列值。

           这种转换是一种压缩映射,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。

           简单的说就是一种将任意长度的消息压缩到莫伊固定长度的消息摘要的函数。

hash冲突:就是根据key即经过一个函数f(key)得到的结果的作为地址去存放当前的key value键值对(这个是hashmap的存值方式),但是却发现算出来的地址上已经有人先来了。就是说这个地方要挤一挤啦。这就是所谓的hash冲突啦

二)哈希函数处理冲突的方法

1)开放定址法:

为产生冲突的地址H(key)求得一个地址序列
H0,H1,H2,H3,。。。。。。
其中H0=H(key)
Hi=(H(key)+di)MOD
i=1,2,。。。。,s

其中 m 为表的长度

对增量di有三种取法:

线性探测再散列   di = 1 , 2 , 3 , ... , m-1

平方探测再散列   di = +1^ 2 , -1^2 , +2^2 , -2^2 , +3^2 , -3^2 , ... ,+ k^2 ,  -k^2

随机探测再散列   di 是一组伪随机数列


我在上面的这个配图底部写的那个红色的12,我当时测试的时候,不知道这个12,也就是上面增量 di 的由来。不知道,限制知道了,那是1的2次方。。。。老师懒得或者说不会给数字打角标。


2)链地址法

3)再Hash法

Hi=RHi(key)i=1,2,。。。,k
产生冲突时
计算另一个哈希函数地址,直到另一个不在冲突为止

就是算hashcode的方法不止一个,一个要是算出来重复啦,再用另一个算法去算。

4)再哈希、建立公共溢出区

建立一个公共溢出区域,就是把冲突的都放在另一个地方,不在表里面。


总结一下的就是下面的四行字:
1.开放定址法(线性探测再散列,二次探测再散列,伪随机探测再散列)
   2.再哈希法
   3.链地址法(Java hashmap就是这么做的)
   4.建立一个公共溢出区



附上手绘图镇楼




1 0
原创粉丝点击