Java 刷题11-7

HashMap 1.8之前是头插,1.8之后是尾插

 

面头条之前我刷了头条所有的LeetCode,并且几乎所有题都能自己AC,自认为头条面试题不会太难。

正题:

手写单例模式?单例模式是啥不会,这个确实不会

懒汉式和饿汉式,懒汉式要求线程完全,双重校验

hashmap问的非常底层,没答好

数组加链表,hashcode 和位置计算

无序数组取中位数,没答好

数组长度为奇数

思路2) 
          2.1)将前(n+1)/2个元素调整为一个小顶堆,
          2.2)对后续的每一个元素,和堆顶比较,如果小于等于堆顶,丢弃之,取下一个元素。 如果大于堆顶,用该元素取代堆顶,调整堆,取下一元素。重复2.2步           
          2.3)  当遍历完所有元素之后,堆顶即是中位数。

 

快排思路

快速排序之所以得名"快排",绝非浪得虚名!因为快排就是一种分治排序法!
            同样,找中位数也可以用快排分治的思想。具体如下:
            任意挑一个元素,以改元素为支点,划分集合为两部分,如果左侧集合长度恰为 (n-1)/2,那么支点恰为中位数。如果左侧长度<(n-1)/2, 那么中位点在右侧,反之,中位数在左侧。 进入相应的一侧继续寻找中位点。
            这种方法很快,但是在最坏的情况下时间复杂度为O(N^2), 不过平均时间复杂度好像是O(N)。

 

以上3个基本没答上好或者没答上来之后,面试官也没啥兴趣了,我心态有点崩,这是我20+次面试唯一的一次这样的崩

我最不能忍得是最后一个2个array merge成一个array没过?????这大一就能随便乱写的题,居然没过,菜不找借口

然后草草结束了面试

 

 

1,TCP的三次握手,为什么是三次握手,不是二次,四次

2,ArrayList 和 LinkedList之间的区别,在并发的情况下,增删改查有什么问题出现

3,反转链表代码

4,数据库的explain,然后还有一些不太懂的

5,GC的几种垃圾收集算法,彼此之间有什么异同

6,sping的ioc,aop这些

........

最后问了一个博弈论,不太懂,就是那种谁先走,谁后走,每次走多少步那种,要想A赢该怎么走

面试官其实问了很多,他拿了一张纸,把每个问题都写下来了,回答的不是很满意的就画个框,写了满满一页。一面总体来说还是比较简单,偏基础。

 

二面,二面的面试官其实人还是不错的,但是菜是原罪,操作系统这块我不好,然后刚好都是问了***作系统的知识,所以气氛有点尴尬,但是面试官真的不错,他说了一句,放心,你有下一面的。我还给自己挖坑过,说可以聊聊数据库,又很尴尬。后面,自救了一波,聊JAVA内容,到这边回答的应该还可以了。主要还是并发那一块的知识,再加上JAVA锁优化,说了一下偏向锁,自旋锁这些内容,就12.30了,面试官就带我吃饭去了。有赞楼下的吃饭地方还是蛮好的,放的竟然都是霉霉的歌曲,心情瞬间好很多了。

 

三面,HR面,比如你有几个offer,碰到的最大挫折,最大收获这种。

 

四面,我以为三面完了就可以走了,没想到还有四面,四面说是业务面,也不懂是什么意思。主要还是问了项目,把项目介绍了一下,然后自己在嘉兴做的一些偏硬件相关的内容。最后问了一下有什么要问他的,早上他有讲PPT,里面有个问题不懂,我就问了一下他,其实答案我也没有人在听了,因为能感觉到大家都很累了,嘴巴都说干了感觉。哦对了,我的项目就是牛客网的中级课程,谢谢叶神。

 

 

作者:胡萝卜君嘿嘿
链接:https://www.nowcoder.com/discuss/334682?type=2&order=0&pos=30&page=1
来源:牛客网
 

整体感觉比较难。技术挖掘的很深入。

  • 正则表达式,考察十分基础的内容
  • HTTPS原理,这一点很多公司都考过。属于重点基础知识
  • 1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    public class Test {

     

        private String name = "小明";

     

        public static void main(String[] args) {

            Test test = new Test();

            test.print();

        }

     

        public void print(){

            String name = "小红";

            System.out.println(name);

        }

    }

    代码输出结果是什么?从JVM的角度,进行解释。
    仅供参考的答案(不一定完全正确):输出【小红】。变量优先从局部变量中寻找,所以打印方法中的name变量。
  • 聊一聊Java的多态。

    本人建议分为编译期多态和运行期多态阐述,并且从JVM角度,深入解释原理。

     

  • HashMap的数据结构
    考察HashMap几乎是每个公司都会涉及到的。回答时建议多说一点,把知道的内容全部讲出来,主动表现自己的知识面。我给出我自己的思路,仅供参考:
    1.HashMap是一种非线程安全的集合类。利用空间换时间的思想+哈希来实现。
    2.本质是数组+链表的结构。强烈建议在纸上面画出来。
    3.put的大致过程。涉及到resize操作
    4.新版JDK中,链表长度到8,转为红黑树
    5.线程不安全情况举例。多线程,同时扩容,形成循环链表,导致死循环。
    6.这里说一个非常细节的问题,HashMap内部是如何判断一个链表上两个元素是否相等?
    如果这里直接说是通过equals来判断,那么就可能上当了。这里附上JDK源码:

    1

    2

    if (p.hash == hash &&

        ((k = p.key) == key || (key != null && key.equals(k))))

    源码不是单纯的使用equals作为判断依据。因为equals的实现往往稍微复杂耗时一点(相对于用 == 比较hashcode和key而言),所以源码的实现可以提高比较效率。
    优先比较hash值,因为两个对象的hashcode相等,则equals必须返回true。
    其次再用==比较对象的地址,是否相等。
    最后才使用equals进行判断。
    本人理解了这里的源码为什么这么写之后,更深刻的理解到,JDK的源码是多么的注重细节和实现效率,考虑的真的非常细致。赞~
    HashMap可以讲很久,面试中根据面试官的反应,点到为止。讲出自己的知识深度即可。
    编程题:

        修改HashMap中的put函数,要求保留原有的特性,并且使得底层的每个链表是有序的(value升序)。

 


 

滴滴(3轮技术)

滴滴的面试挺有趣的,很多情景题。

  • 操作系统。解释一下 用户态,内核态。一次文件读取中,哪些操作对应了什么状态。
  • 一个手机内存很小,需要设计一份电话黑名单功能。用什么数据结构,和思路。
    答案是:两次HashMap。参考布隆过滤器的实现思路。方案优点在于,占用空间很小,效率比较高。
  • 两个文件,找到其中的交集。谈一谈自己的策略。【抱歉,这一题,我不会。】
  • 设计一个流水号生成器。谈谈思路。
    参考FaceBook的雪花算法。
  • 算法题:动态规划。二维迷宫,每次可以向右或者向下走一步。问:左上角走到右下角一共几种走法。
    比较简单的动态规划。思路就是,每个格子的方法数=上面相邻格子方案数+左边相邻格子方案数。注意边界情况和初始化,即可。

腾讯(3轮技术+HR)

腾讯也很有自己的特点。问了许多智力题,很看重个人的逻辑能力。

  • 了解哪些开源框架,会从你的回答中,进一步考察一下框架的原理。
  • 学习遇到的问题,问的比较深入。
  • socket的select模型和epoll模型。
  • 智力题1:1到1000中,多少个数字包含8。例如:118,888,583其中某一位包含了8.
  • 智力题2:64匹马,8个赛道。最少经过多少次比赛,可以得出前4匹最快的马。

 

秋招准备和面试建议

算法题推荐《剑指offer》。

  1. 大家一定要用手在IDE上敲一下,不要觉得自己弄懂了思路,看懂了源码,就不写了。一定要亲手独立敲一遍。最好先用自己的思路敲一遍,再看答案。如果你没有思路,你就设想,这是正在面试,你该如何用另外的方法写出来。即使是暴力法,也要比写不出来要好。亲自敲一遍,才能知道自己敲代码的速度还是很慢,才知道自己调用函数时忘记函数名有多尴尬,才知道自己忘记在最开始写参数校验了。。。。。。务必要,亲自敲一下。
  2. 关于知识点,网上有很多知识点总结,大家自行找吧,主要是要总结,自己整理一份文档,让自己复习看的方便。
  3. 多和身边的同学交流,一方面消息流通,不要错过了公司的投递。一方面,多交流知识的理解,互相提升
  4. 和面试官交流,最好画出自己的思路。用画图的方式表述思路,更清晰。优秀的交流能力,是面试评价的一项;
  5. 对于代码题,不要着急写。先想思路,然后交流。注意,一定要主动交流自己的思路,最好还能分析思路好在哪里,复杂度是多少。面试官同意后,再开始写代码。给面试官留下好印象,有几次,我说出了自己的思路后,面试官直接就表示可以不用写了,可能是觉得我太厉害了,相信我没问题了吧。哈哈哈哈,请允许我自恋一下。

 

 

最后,请大家放平心态。面试中,自己最多能控制80%。还有其他的不可抗力因素,比如:HC已经没了,面试官心情不好,过于苛刻的面试官....比如我调整过一次面试时间,然后就没有后续了。。。。没有了。。。。没了。。。。卒

再啰嗦一下哈,大家不要放弃任何一个机会。不要觉得自己水平有限,肯定通过不了某某公司的面试的。最后直接放弃了面试,或者就不去投递简历。我自己秋招也从来没有想过最后能拿到现在的offer。不去试一试,你怎么会知道结果呢。勇敢一点,又不会死。梦想还是要有,万一成了呢?

 

现在是2019年11月4日,晚上八点。祝已经拿到offer的同学,顺利签约;祝还在一线奋斗的小伙伴,OC快来。

希望这份经验,可以帮到大家一点点吧。

还愿结束,拜拜啦~

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值