(java扫地僧)面试宝典,每日一练———基础篇01

1.HashMap的数据结构是怎样的?

A: 数组

B:链表

C:数组+链表

D:二叉树

解析:C
数组:常见的集合结构的有:
       ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高
       Vector:查询快,增删慢,线程安全,效率低
链表:常见的链表结构的有:
        LinkedList:查询慢,增删快,线程不安全,效率高
二叉树:TreeSet底层实现是TreeMap。
HashMap:在jdk1.7是采用的数组+链表的形式,在jdk1.8之后采用了数组+链表+红黑树。关于HashMap的底层有兴趣的小伙伴可以看我之前的学习记录的文章:深入理解HashMap的底层原理(一)深入理解HashMap的底层原理(二)

2.下面的代码返回为

Integer a = 1;
Integer b = 1;
Integer c = 500;
Integer d = 500;
System.out.print(a==b);
System.out.print(c == d);

A:true、true
B:true、false
C:false、true
D:false、false

解析:B
Integer类型在-128–>127范围之间是被缓存了的(一个byte类型的取值范围),也就是每个对象的内存地址是相同的,赋值就直接从缓存中取,不会有新的对象产生,而大于这个范围,将会重新创建一个Integer对象,也就是new一个对象出来,当然地址就不同了。

3.以下结论正确的是:
A:如果两个对象的hashcode相同,那么它们作为同一个HashMap的key时,必然返回同样的值
B:如果a,b的hashcode相同,那么a.equals(b)必须返回true
C:对于一个类,其所有对象的hashcode必须不同
D:如果a.equals(b)返回true,那么a,b两个对象的hashcode必须相同

解析 D
hashCode()方法和equals()方法的作用其实是一样的,在Java里都是用来对比两个对象是否相等一致。
问题1:
既然equals()已经能实现功能的对比,那为什么还需要HashCode()呢?
答:因为equals()方法的重写里面一般比较的比较全面也就是比较复杂也就是效率会低。而HasCode()只需要将hash值进行对象即可,效率比较高。
问题2:那为什么HashCode()效率这么高,我们为啥还需要equals()呢?
答:因为hashCode()方法是不完全可靠的,也就是说不同的对象可能会产生相同的hash值(也就是hash碰撞)。
以上结论:
1.equals()相等的两个对象他们的hashCode()肯定相等,也就是用equals()对比是绝对可靠的。
2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。
所以对于需要大量对比数据的时候equals()去做显然效率太低,一般首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等,如果hashCode()相同,此时再对比他们的equals(),如果equals()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!

4.下列程序,说法正确的是:

 class StaticStuff
{
     static int x = 10;

     static { x += 5; }

 public static void main(String args[])
 {
     System.out.println(“x =+ StaticStuff .x);
 }
    static
     {x /= 3; }
}

A:第12 行不能编译,因为只能有一个static初始化块。
B:代码编译并执行,输出结果x = 10.
C:代码编译并执行,输出结果 x = 5.
D:代码编译并执行,输出结果 x = 15.

解析:C
本道理考察的静态代码块,静态代码块和静态变量都是随着类的初次加载进行一次初始化,静态代码块和静态变量的执行顺序是自上而下来执行的因此:
x=5-》x=15-》x=5

5.在异常处理中,如释放资源,关闭数据库、关闭文件应由( )语句来完成。
A:try子句
B:catch子句
C:finally子句
D:throw子句

解析 C
try:可能发生异常的语句
catch:捕获,并处理异常(printStackTrace()用来跟踪异常事件发生时执行堆栈的内容)
throw:方法内部抛异常
throws:声明方法异常
finally:代码中无论是否有异常都会执行,清除资源。

6.关于容器下面说法正确的是? ( )
A:列表(List)和集合(Set)存放的元素都是可重复的。
B:列表(List)和集合(Set)存放的元素都是不可重复的。
C:映射(Map)<key,value>中key是可以重复的。
D:映射(Map)<key,value>中value是可以重复的。

解析 D
列表(List)的元素是有 序、可重复 的;
集合(Set)的元素是无序、不可重复的。
map的key不可重复,value是可以重复的

7.在java中重写方法应遵循规则的包括(多选)
A:访问修饰符的限制一定要大于被重写方法的访问修饰符
B:可以有不同的访问修饰符
C:参数列表必须完全与被重写的方法相同
D:必须具有不同的参数列表

解析:B C
方法的重写遵循两同两小一大原则:
1)方法名和参数类型要相同。
2)子类返回类型小于等于父类方法返回类型
3)子类抛出异常小于等于父类方法抛出异常
4)子类访问权限大于等于父类方法访问权限
同时也需要注意以下几点:
1)返回类型必须完全与被重写方法的返回类型相同
2)声明为final的方法不能被重写
3)声明为static的方法不能被重写,但是能够被再次声明
4)构造方法不能被重写
5)类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法
6)子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法

8.在java的多态调用中,new的是哪一个类就是调用的哪个类的方法。
A:对
B:错

解析:B
1.成员变量:编译和运行都参考左边。
2.成员函数(非静态):编译看左边,运行看右边
3.静态函数:编译和运行都看左边。
只有非静态方法运行才看右边

9.以下关于集合类ArrayList、LinkedList、HashMap描述错误的是()
A:HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值
B:ArrayList和LinkedList均实现了List接口
C:添加和删除元素时,ArrayList的表现更佳
D:ArrayList的访问速度比LinkedList快

解析:C
1. List 是一个有序集合,可以存放重复的数据 (有序:存进是什么顺序,取出时还是什么顺序)
       (1).ArrayList 底层是数组适合查询,不适合增删元素。
       (2).LiskedList 底层是双向链表适合增删元素,不适合查询操作。
       (3).Vector 底层和ArrayList相同,但是Vector是线程安全的,效率较低很少使用
2.Set 是一个无序集合,不允许放重复的数据 (无序不可重复,存进和取出的顺序不一样)
       (1).HashSet 底层是哈希表/散列表
      (2).TreeSet 继承sartedSet接口(无需不可重复,但存进去的元素可以按照元素的大小自动排序)
3.Map 是一个无序集合,以键值对的方式存放数据,键对象不允许重复,值对象可以重复。
       (1).HashMap实现不同步,线程不安全。 HashTable线程安全
       (2).HashMap中的key-value都是存储在Entry中的。
       (3).HashMap可以存null键和null值,不保证元素的顺序恒久不变,它的底层使用的是数组和链表,通过hashCode()方法和equals方法保证键的唯一性

10.事务隔离级别是由谁实现的?
A:Java应用程序
B:Hibernate
C:数据库系统
D:JDBC驱动程序

解析:C
A,我们写java程序的时候只是设定事物的隔离级别,而不是去实现它
B,Hibernate是一个java的数据持久化框架,方便数据库的访问
C,事物隔离级别由数据库系统实现,是数据库系统本身的一个功能
D,JDBC是java database connector,也就是java访问数据库的驱动

如有不正确,还请马上指正,再次感谢!

你会的越多,不会的越多,知识的积累会有一个质的飞跃。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
遗传算法是一种基于生物进化理论的优化方法,在优化问题中广泛应用。扫地机器人路径规划作为一种优化问题,可以利用遗传算法来寻找最优路径。首先,我们需要定义适应度函数,该函数用来评估每条路径的优劣,例如路径长度、避开障碍物的能力等。然后,我们随机生成一组初始路径作为种群,再利用遗传算法的选择、交叉和变异操作来不断优化这些路径,直到达到一定迭代次数或者满足优化条件为止。 以下是一个简单的扫地机器人路径规划的遗传算法优化的MATLAB代码: ```matlab % 遗传算法参数设置 popSize = 50; % 种群大小 maxGen = 100; % 最大迭代次数 pc = 0.8; % 交叉概率 pm = 0.1; % 变异概率 % 初始化种群 population = initPopulation(popSize); for gen = 1:maxGen % 评估种群适应度 fitness = evaluateFitness(population); % 选择操作 selected = selection(population, fitness); % 交叉操作 offsprings = crossover(selected, pc); % 变异操作 offsprings = mutation(offsprings, pm); % 更新种群 population = updatePopulation(population, offsprings); end % 找到最优路径 bestPath = findBestPath(population, fitness); % 输出最优路径 disp(['最优路径为:', num2str(bestPath)]); ``` 以上就是一个基本的遗传算法优化扫地机器人路径规划的MATLAB代码,通过不断迭代和优化,最终可以得到最优的路径规划方案。这种方法可以有效解决扫地机器人在复杂环境中的路径规划问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈橙橙丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值