背景
我的个人背景非常简单,也可以说丝毫没有亮点。
学历普通,计算机专业专科毕业,甚至还被亲戚嘲笑说这个专业毕业出去之后就是去修电脑的,没啥出息。
其实说的也没错,毕业后出来就一直在一家小公司,岁月如梭细,算了下至今从事Android开发已经5年了,也crud了五年,每天就是抄代码,毫无新意,甚至一度的怀疑人生。
其实很久之前就已经对自己不满了,每次都在想鼓起勇气想去打破困境,去改变自己,然而因为游戏因为玩耍一次又一次的破功;直到这次公司优化,强有力的给了我当头一棒。是的,我失业了。这时候才真正的体会到什么叫做人无远虑,必有近忧。
失业之后疯狂的去找面经,去海投简历(都是一些小的不能再小的公司有回复),去找老朋友,去找同学;但是在当下根本找到合适的工作,我也冷静下来了,准备好好的调整下心态,整理下自己;
在这期间也七七八八的接到一些电话面试;这时候给了我个新的启示——可以去投一些小公司的简历,去面试扫盲,看看哪些东西不会,欠缺哪些知识,然后慢慢的做面试复盘。并且通过这些面试给自己查漏补缺;
也许我的运气没有坏到极限吧,在恶补了三个月知识之后,我朋友给我打来了电话,说是有个腾讯事业部的内推;
幸运女神往往会眷顾努力的人,所以当好运降临到我头上,我并不诧异,目前拿到了腾讯25K的offer,下文也不说废话,主要分享我这次“面试经历”和“这段时间的学习方法”,希望能帮助到你们。
面试经历
腾讯一面
- 自我介绍
- 进程和线程的区别
- 进程间的通信方式有哪些
- 输入一个url会经过哪些过程
- http和https的区别
- get和post的区别
- java里的访问修饰符有哪些
- 重载和重写的区别
- 抽象类和接口的区别
- 对于安卓开发你了解什么
- 详细讲讲你觉得最有难度的项目
- 如果有多个上传任务,其中有一个上传失败了,下一次只上传失败的任务要怎么做
- 线程池的好处是什么
- 设计模式你了解哪些
- 什么是中介者模式
- 其他的设计模式还了解哪些(手写了一下单例)
- 算法题:删除排序链表中的重复元素(力扣82)
- 反问
腾讯二面
- struct和class有什么区别?
- 说一下单例模式?
- 懒汉式的单例模式存在什么问题?
- 说一下.cpp和.h文件的区别?
- 如果直接在.h文件实现函数会有什么影响?
- 单继承和多继承的差异?
- 字节溢出有了解过吗?
- 两个int相乘数值溢出的原因?
- 可以在一个头文件里面定义多个类?
- define的作用?
- ifdefine endif在编译的时候作用?
- c++的编译过程?
- vector底层实现?
- lambda表达式的参数是如何捕获的?
- malloc、free 和new、 delete 的关系
- new、 delete 什么时候调用构造函数,什么时候调用析构函数?
- 有接触过字节对齐吗?bool+int的字节大小是多少? 一个结构体是bool+int的大小是多少?
- java中concurrenthash_map底层是如何实现线程安全的
- 讲一下hash冲突?解决hash冲突的方法有哪些?
- 讲一下一致性hash?
- 链表的查找时间复杂度,最差,最优,平均?
- 红黑树的查找时间复杂度,最差,最优,平均?
- 红黑树在最差的场景下会退化成什么?
- avl树、b+树有了解过吗?
- 如果读数据比较多用什么树比较好,如果写数据比较多用什么树比较好?
- 讲讲c++中的友元?
- c++ sort中排序时指定排序方法时,返回的类型有哪些,分别有什么用?
- 在形参中使用const有什么好处?
- 讲讲const指针?
学习方法
1、进行系统梳理知识,提升储备
客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
系统学习方向:
-
架构师筑基必备技能:深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO
-
Android高级UI与FrameWork源码:高级UI晋升+Framework内核解析+Android组件内核+数据持久化
-
360°全方面性能调优:设计思想与代码质量优化+程序性能优化+开发效率优化
-
解读开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack
-
NDK模块开发:NDK基础知识体系+底层图片处理+音视频开发
-
微信小程序:小程序介绍+UI开发+API操作+微信对接
-
Flutter:Flutter入门+Flutter进阶
-
Kotlin: Kotlin入门教程 +Kotlin 实战避坑指南 +项目实战《Kotlin Jetpack 实战》
2、读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
3、面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也整理了一套系统的面试题,帮助你举一反三:
以上资料均已整理打包成PDF文档,有需要的朋友扫描下方二维码即可领取
同时这里还搭建了一个基于chatGPT的微信群聊机器人,24小时为大家解答疑难技术问题。
微信扫码拉你进群体验ChatGPT风采
总结
只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。