2020年今日头条外派的面试题(记录面试过程)

其实一直有想离开原环境的问题,因为不想和一帮不奋进,也没有一个技术领导团队模式的情况下工作,苦于没有找到机会,直到今年疫情来临,想试试水,投出的简历基本没回(没有大面积投,就看着差不多的投了),加上疫情严重,就让这条路更加难走了,然后呢都是外派主动找我,我也奔着试一试的心态就参加了这场面试,微信语音面试,然后说是面的是高级开发的岗位,就会是高级开发的面试,没有时间不聊项目,只聊技术,然后被虐的啊,那就正式开始被虐的旅程把!

1.Synchronize和ReentrantLock的区别?

心里os:哈,难道不是要讲项目什么的么,哎,有点慌张,我只是大概了解啊

答:我就知道Synchronize不用手动释放锁,ReentrantLock需要手动释放锁,面试官说还有么,我就说没了,os:我还是之前学习多线程视频大概记得好像是这样的演示,然后应该是对了

我就说Synchronize之前的版本比较重量级,后来进行了改善,会从轻量级锁可能就会偏重量级等。

Synchronize和ReentrantLock的区别答案:

  • Synchronize竞争锁的时候会一直等待,ReentrantLock可以尝试获取锁,并得到获取结果
  • Synchronize获取锁无法设置超时,ReentrantLock可以设置获取锁的超时时间
  • Synchronize无法实现公平锁,ReentrantLock 可以满足公平锁,即先等待先获取到锁
  • synchronized 控制等待和唤醒需要结合加锁的对象wait()和notify(),notifyAll();ReentrantLock 控制等待和唤醒需要结合加锁的Condition的await() 和 signal()、signalAll() 方法
  • synchronized 是jvm层面的,ReentrantLock 是 JDK 代码层面实现
  • synchronized 在加锁代码块执行完或出现异常,自动释放锁;ReentrantLock不会自动释放锁,需要在 finally{} 代码块显示释放
  • 都可以做到同一线程,同一把锁,可重入代码块。
     

  2.那你描述一下锁膨胀的过程把!

   心里os:完了完了,真的不知道是什么,可能之前大概了解过也忘了

   就对面试官说,我对锁这块不算很熟,这块不知道

   锁膨胀的过程的博客地址

   https://www.jianshu.com/p/8bd25f680257

   https://blog.csdn.net/xueba8/article/details/88753443

3. 说一下线程池如何创建的,创建的参数是哪些?

    Executors,我不记得参数有哪些了!

    关于线程创建以及参数查看以下博客

    https://www.cnblogs.com/zz-ksw/p/12426940.html

4.你们使用中肯定HashMap经常使用,说一下hashMap的put的过程把

 HashMap采用数组和链表结构的,在进行存储的时候会把key进行hash算法,然后value值直接存储

详情请看以下博客,写的非常不错!生动有趣带你看JDK1.8-HashMap的put源码,看完直呼原来这么简单!

5.你说的太简单了,哈希碰撞什么的都没说

 哦哦,哈希碰撞在数组里只有有限的空间,但是key可以是无数个,hash以后的值就容易出现存储一个位置的情况,就会出现哈   希碰撞,所以加了链表,当碰撞了以后就会存储链表后面

6.为什么hashmap初始化是16?

 应该是作者探索以后发现这个数最符合把,巴拉巴拉,(哎,具体的我也不知道)

 hashMap详情请看下面链接

 https://juejin.im/post/5dee6f54f265da33ba5a79c8#heading-0

7.为什么hashmap线程不安全?那ConcurrentHashMap呢?

因为hashmap为了性能没有加同步,而ConcurrentHashMap有加锁操作,在之前是分段锁,只锁一部分那样其他线程来了还可以访问另一段,但是之后的ConcurrentHashMap放弃了分段锁的概念,该用cas方式,但是我这样说了以后,面试官说ConcurrentHashMap后面并没有用cas方式,但是我怎么记得是有呢

ConcurrentHashMap介绍请看这篇:

生动有趣带你看JDK1.8-ConcurrentHashMap的put源码

8.那再来讲一下IO把,能说一下IO么

你说的是AIO,NIO,BIO么,还是说fileIputStram,outStream啊,

9.不是AIO,就是你说的File那些,但是你有系统的了解IO么

没有

10.那你能说一下AIO,BIO,NIO区别么?

我知道NIO比较高效其他的就不清楚了

BIO、NIO、AIO等IO模式详解(图文、代码示例解说)

11.嗯,框架部分你有深入了解么,如果你觉得你都了解那么接下来可以进行面试,如果不了解也可以结束面试

没有太深入的了解,还停留在会用的阶段

12.嗯,这次还行吧,回去多准备面试题把,感觉准备的不充分啊,还有有的词说的不专业

好的,我还会再努力的,谢谢

13.那就加油!这次面试就先这样。

哎,被虐的,我确实基本没准备面试题,不是因为懒,而是我觉得准备的面试题不懂的化都是靠背的,因为背是不懂什么意思的,也会导致很快就忘,甚至如果在深入一步的化只能什么也不会,都不会懂面试官说什么,所以我不愿意这样准备面试

我之所以有些东西能稍微达出来或者说是知道面试官说什么基本都是靠平时看看视频,还有搜索自己了解的知识,才记下的,但你知道的还是很多不懂,所以才会说不出来,只是有大概模糊的印象

本来想试试,结果又再一次发现自己学习的不足,如果按我自己所说不用背去知道去了解的去说的化,我知道这个工作量,因为后台知识太多,每一模块都有无穷无尽的知识。

我以我目前的经验来说想要深入的学习,一定不是看两篇博客,买几个视频就可以的,视频讲的都是让你快速面对应付面试,一小块一小块的让你作为了解而已,所以真的是很难,感觉应该看那种比较好点,专业的书籍,专业讲解某个模块,就像Mysql你买个3,4本,你基本就把mysql了解差不多了

以上就是全部内容!

猜你喜欢

转载自blog.csdn.net/dfBeautifulLive/article/details/105068591
今日推荐