Java面试问题归纳总结

自我介绍()

问了项目,项目原理以及怎么实现,项目难点。

滴滴一面 

前两个是C  后面几个是JAVA

1.       局部变量和全局变量:

在函数内部定义的变量,在本函数内才能引用,在此函数外不能引用;

在函数外部定义的变量,可以在本文件中被其他函数引用;

2.     Static 在C中的作用    static  在Java中的作用

在C中,static用于普通变量和函数,在全局变量前加上static,该变量就被定义为一个静态全局变量:在全局数据区分配内存,静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;未经初始化的静态全局变量会被程序自动初始化为0静态全局变量不能被其它文件所用;其它文件中可以定义相同名字的变量,不会发生冲突;

在Java中,static修饰的静态变量被所有对象所共享,在内存中只有一个副本, static 修饰的静态方法不能访问非静态的成员变量和非静态的成员方法。  static  修饰内部类的实例方法不能访问外部类的实例属性。

3.      HashMap 以及HashMap怎么扩容

Map的底层实现是数组、链表 。Map用于保存具有映射关系的数据,存放键值对,根据键对象 Key找对应的值对象Value 。

HashMap 是线程不安全、效率高;允许null作为key 和value  。

为了在HashMap  中存储对象,用key对象必须实现hashCode()方法和equals()方法

HashMap 当前数组容量不够时,使用新数组代替旧数组,数据长度是原来的2倍,将原数组的值映射到新数组即可。

4.     怎么判断二进制中1的个数

方法1:Flag =1  把n与1相与,然后1左移,再和n做与运算 。

方法2:  n&(n-1)  把一个整数减1,再把原整数做与运算,会把该整数最右边的1

5.     说一种最熟悉的排序算法

希尔排序:缩小增量排序  复杂度O(NlongN)     不稳定    较复杂

希尔排序在数组中采用跳跃式分组策略,直至增量为1,使得整个数组在初始阶段达到宏观上基本有序,小的基本在前,大的基本在后面。

根据增量,把数组进行分组,每组记录采用直接插入排序方法排序。增量选择比较重要:gap = len/3+1;

6.     海量数据中找重复的前10条

方法1:可以用哈希表方法:将海量数据分成若干组,边扫描散列表。

第一次扫描,取首字节、尾字节、中间作为hashcode 插入到hashtable。并记录地址信息和重复次数。

第二次扫描,用线性时间选择可在O(N)完成前10条寻找。分组后每份中的top 10必须保证各不相同,可用hash来保证。也可以直接按hash值的大小来分类。

方法2:从小到大排序。根据经验,除非群发的过节短信,否则字数越少出现的重复率越高。先搜索1个字及重复次数,再搜索2个字及重复次数。对于相同字数的比较长的短信的搜索,可以选择只抽取头、中和尾等几个位置的字符进行粗判,因为此种判断方式是为了加快查找速度但未必能得到真正期望的top10,因此需要做标记;

再可以从各次top10结果中找到备选的top10,如果这top10中有刚才做过标记的,则对其对应的所有短信进行精确搜索以找到真正的top10并在此比较





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值