1 知乎
1 编程
1 计算逆波兰表达式的结果
2 现在有一截楼梯,根据你的腿长,你一次能走 1 级或 2 级楼梯,已知你要走 n 级楼梯才能走到你的目的楼层,请实现一个方法,计算你走到目的楼层的方案数。
3 给定一个ip地址,判断是否是属于局域网 ip。
2 选择
image.pngimage.png
image.png
image.png
image.png
3 简答
image.png image.png image.png2 享物说
其他的题目还好,编程题要求各种排序较多。
常用排序算法以及算法复杂度
https://blog.csdn.net/xiangzhihong8/article/details/51547835
3 上海跬智信息技术有限公司
这个是我参加的第一次现场笔试,题目是全英文的,分为:选择、简答和编程。感觉运气不错,考的是Java语言。
1 选择题除的10题都比较基础。
10题问的是acid特性
2 简答题
(1) 说一下 thread local variable。当时真不知道这个是什么?考完问了下周围武大的学生很多也不知道。。。
ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。
(2) wait和sleep的区别(只答了2点)
(1)两个方法来自不同的类;
(2)最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法;
(3)wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用;
(4)sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常;
(3) hashcode是干嘛的?和equals的联系?存在两个变量:equals不相等,但hashcode相等吗?
hashcode是干嘛的?
在Java中,哈希码代表对象的特征。
(1)HashCode的存在主要是为了查找的快捷性,HashCode是用来在散列存储结构中确定对象的存储地址的;
(2)如果两个对象equals相等,那么这两个对象的HashCode一定也相同;
(3)如果对象的equals方法被重写,那么对象的HashCode方法也尽量重写;
(4)如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这两个对象在散列存储结构中,存放于同一个位置。
和equals的联系?
hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致。
equal()既然已经能实现对比的功能了,为什么还要hashCode()呢?
因为重写的equal()里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高。
hashCode()既然效率这么高为什么还要equal()呢?
因为hashCode()并不是完全可靠,有时候不同的对象他们生成的hashcode也会一样(生成hash值得公式可能存在的问题),所以hashCode()只能说是大部分时候可靠,并不是绝对可靠。
- equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。
- hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。
所有对于需要大量并且快速的对比的话如果都用equal()去做显然效率太低,所以解决方式是,每当需要对比的时候,首先用hashCode()去对比,如果hashCode()不一样,则表示这两个对象肯定不相等(也就是不必再用equal()去再对比了),如果hashCode()相同,此时再对比他们的equal(),如果equal()也相同,则表示这两个对象是真的相同了,这样既能大大提高了效率也保证了对比的绝对正确性!
1、equals方法用于比较对象的内容是否相等(覆盖以后)
2、hashcode方法只有在集合中用到
3、当覆盖了equals方法时,比较对象是否相等将通过覆盖后的equals方法进行比较(判断对象的内容是否相等)。
4、将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,如果不相等直接将该对象放入集合中。如果hashcode值相等,然后再通过equals方法判断要放入对象与集合中的任意一个对象是否相等,如果equals判断不相等,直接将该元素放入到集合中,否则不放入。
5、将元素放入集合的流程图:
image.png
https://www.cnblogs.com/keyi/p/7119825.html
(4) 说说final,finlinize,finally。
1.final:如果一个类被final修饰,意味着该类不能派生出新的子类,不能作为父类被继承。因此一个类不能被声明为abstract,又被声明为final。将变量或方法声明为final。可以保证他们在使用的时候不被改变。其初始化可以在两个地方:一是其定义的地方,也就是在final变量在定义的时候就对其赋值;二是在构造函数中。这两个地方只能选其中的一个,要么在定义的时候给值,要么在构造函数中给值。被声明为final的方法也只能使用,不能重写。
2.finally:在异常处理的时候,提供finally块来执行任何的清除操作。如果抛出一个异常,那么相匹配的catch字句就会执行,然后控制就会进入finally块,前提是有finally块。
3.finalize:finalize是方法名,java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是在垃圾收集器确认一个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此,所有的类都继承了它。子类覆盖finalize()方法已整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
3 编程题
(1)用stack集成Java的stack,实现pop,push,pull,Empty,getMin,getMax方法。
(2)输入list,一个k,假如:list = [1,2,3,4,5,6]。
若k=2,则输出: [2,1,3,4,5,6]
若k=3,则输出: [3,2,1,4,5,6]
若k=4,则输出: [4,3,2,1,5,6]
...
(3)数组source = [1,1,-1,1,-1,-1],排序,使得-1在前面,1在后面。
(4)二叉树,输入n层的二叉树,返回二叉树中最大的节点。
题目除了第1个简答题完全不知道,其他的多少都打出来了一下,现在自己主要的问题在:1 基础算法;2 基础数据结构;3 数据库相关知识。要赶紧补补补啊!!!
就这么多,纯靠记忆。
网易
选择(20)
简答(20)
(1)详述继承和实现。
https://www.cnblogs.com/ibalintha/p/3897821.html
(2)说说clone和serialization,为什么集合类没有clonable和serialization接口。
https://blog.csdn.net/qq_18433441/article/details/78222335?locationNum=10&fps=1
https://blog.csdn.net/dragon901/article/details/79919965
编程(60)
(1)一个字符串,只有b和w,统计连续的b和w的个数
public static int calWhiteAndBlack(String inputArray){
int count = 0;
for (int i=0;i<inputArray.length();i++){
if(i == inputArray.length()-1){
if(inputArray.charAt(i-1) == 'b' && inputArray.charAt(i) == 'w'
|| inputArray.charAt(i-1) == 'w' && inputArray.charAt(i) == 'b'){
if(inputArray.charAt(i) == 'b'||inputArray.charAt(i) == 'w'){
count++;
}
}
}else{
if(inputArray.charAt(i) == 'b' && inputArray.charAt(i+1) == 'w'
|| inputArray.charAt(i) == 'w' && inputArray.charAt(i+1) == 'b'){
if(inputArray.charAt(i) == 'b'||inputArray.charAt(i) == 'w'){
count++;
}
}
}
}
return count;
}
网友评论