三级缓存框架问题你都了解了吗?论程序员成长的正确姿势

258 阅读6分钟

前言

转眼间,2020 年已过去一大半了,2020 年很难,各企业裁员的消息蛮多的,降职,不发年终奖等等。2020 年确实是艰难的一年。然而生活总是要继续,时间不给你丧的机会!如果我们能坚持下来,不断提高自己,说不定会有新的机会。

面试中,网络(http, https, tcp, udp), jvm, 类加载机制等这些基础的知识点是高频出现的,每个程序员都能说上好多。但不一定说到重点,以及理解背后的原理。

我在面试的过程中也经常被问到,于是总结记录了下来。千万不要小瞧这些基础,有时候,你算法,项目经验都过了,但是基础答得不太好。结果可能会通过,但这肯定会影响你的评级,这是特别吃亏的。所以,不如花点时间背一下,理解一下背后的原理。

举一个简单的例子, https 连接过程是怎样的,使用了了哪种加密方式,可以抓包吗,怎样防止抓包,你是否能够对答如下。

废话不多说,开始进入正文。

技术面

具体哪面问的忘了,就统一写一起了,具体的顺序也是随便写的。

Java相关

  1. String、StringBuffer、StringBuilder的比较。好,那你给我说个需要使用StringBuffer的场景(囧),还真没想出来。。。
  2. finalize知道吧?不知道,但是我知道final和finally,好,那try catch finally之间的关系说一下,然后面试官在纸上写了段代码,让我判断输出是啥。因为涉及到return,就问我Java里的return机制。面完后查的:return语句并不是函数的最终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在里面,等待finally执行后再返回)
  3. 说一下this,知道多少说多少
  4. hashcode和equals方法,在实际的项目开发中,什么情景需要我们去手动重写?
  5. 我看你用到了单例模式,那你写一个”完美的“单例模式的实现吧。。。然后抠细节
  6. 用过Redis?那还知道其他的分布式缓存吗?说一下和Mem***d有啥区别
  7. 知道异常吧?平时遇到过哪些?
  8. 说说软引用和弱引用的不同
  9. HashMap的put原理?和Hashtable的不同
  10. 可能还有。。。记不起来了

Android相关

  1. Activity A启动Activity B(可能为透明的)的过程,说一下生命周期函数回调的顺序
  2. Activity的生命周期函数是谁调用的?
  3. 说一下Fragment的生命周期?它的生命周期函数又是谁调用的?
  4. 知道视图绘制吧?说一下View的绘制原理。那重绘invalidate呢?说一下从调用invalidate到onDraw的过程。
  5. 我看你用了几个框架:说一下LeakCanary的原理?怎么判断内存泄露发生的?ButterKnife的注入原理?它的bind方法是怎么找到对应的xml文件及将控件进行绑定的?
  6. 你用了Litepal框架,还了解过其他的吗?为什么选择用Litepal而不用那些?
  7. SQLite也属于关系型数据库,说一下关系型数据库使用过程中的一些优化手段吧
  8. 说一下Android的事件分发机制,就是怎么进行传递的
  9. 用过RecyclerView吗?那ListView呢?好,说一下ListView的一些优化技巧。
  10. Android线程间通信的方式有哪些?好,那说一下Handler的原理吧
  11. 学过Kotlin?恩,说说你知道的关于Kotlin的东西,最后和面试官聊得时候,才知道快手已经在使用Kotlin开发app了,哈哈,感觉自己有点幸运,面试官一看我Kotlin掌握的还可以,说对我印象挺好。然而,下面的算法题,没能用Kotlin写出来,,还是用的Java。。。
  12. 可能还有。。。记不起来了

计算机网络相关

  1. UDP与TCP的区别
  2. 提到拥塞控制了,说说TCP是怎么实现拥塞控制的?怎么判断当前网络发生了拥塞?
  3. HTTPS与HTTP的区别?客户端通过HTTPs的url访问服务端,说一下整个过程
  4. 你说TCP的首部有固定20个字节,都包含哪些内容?
  5. 说一下三次握手、四次挥手(详细点)?为什么握手需要三次,而挥手却需要四次?
  6. 可能还有。。。记不起来了

算法

1、一个多线程的问题,用五个线程,顺序打印数字1~无穷大,其中每5个数字为1组,如下:其中id代表线程的id

id   1   2   3   4   5
no   1   2   3   4   5
no   6   7   8   9   10
no   11  12  13  14  15
no   ..  ..  ..  ..  ..

具体思路及代码实现,当然包括一个类似的问题,已整理到博客:欢迎交流

面试题:常见的多线程实战手撕代码(顺序打印数字、字母)

2、判断链表是否有环?并确定环的入口。

剑指Offer原题:

链表环的入口节点

HR面

家是哪的?父母做什么的?我看你是通信专业的,为什么想做客户端开发?保研还尝试过哪些学校?为什么最后选择北邮?还有别的Offer吗,薪资是多少?等等。。。期间小姐姐一直在讲快手的产品、日活特别大,公司得技术氛围好、提供免费的午晚餐、健身房等等。哈哈,反正聊得很愉快。

写在最后

能拿到快手的实习Offer,感觉自己很幸运,3月初才开始准备,身边的同学早就拿到了理想的offer,唉,尚未成功,同志仍需努力啊,实习的同时,也得准备9月的秋招啊。

最后

总之啊,家里没矿的同学们,如果你们想以后的日子过得好一些,多想想你们的业余时间怎么安排吧;

技术方面的提升肯定是重中之重,但是技术外的一些“软实力”也不能完全忽视,很多时候升职确实是因为你的技术足够强,但也与你的“软实力”密切相关

在这我也分享一份大佬自己收录整理的 Android学习PDF+架构视频+面试文档+源码笔记 ,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅并给下属员工学习的精品资料。在脑图中,每个知识点专题都配有相对应的实战项目,可以有效的帮助大家掌握知识点。

总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习

如果你有需要的话,可以点击获取

相信自己,没有做不到的,只有想不到的