技术学习总结
学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。
最后面试分享
大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!
还好在今年月初通过内推,拿到了腾讯offer,年薪40w+, 解决了我的燃眉之急,所以真的如果有和我有相同经历的朋友,真的别放弃!可能机会下一秒就到了!
在此把我的经历写出来,也是希望能激励大家!一起共同进步吧!
程序员的压力
一名来自阿里的中年程序员在互联网匿名社区感慨压力颇大,其称自己35岁,现在在阿里的级别是P7,也是985名校出来的硕士,但是毕业前几年一直混迹于国企和外企,感慨错过了互联网高速发展的时间,现在在北京背着200万的房贷压力颇大。
确实错过国内互联网高速那几年,北京小200万还算压力?深圳五百万压力了解一下;其实最难受的是和一帮比自己小很多岁的人一起干活,还没人家熟练,经常被白眼;混的好失败,每个月还快2万贷款,还得养孩子,压力山大啊;我也是一开始混外企。都怪当时外企工资高,另外因为互联网企业加班,没有在互联网起来的时候转型。
面试题
一面:
面试官看起来很年轻,感觉是一个刚毕业不久的小伙汁,声音很青涩哈哈哈哈
开始面试的时候把我给问懵了,当时刚午觉睡醒,还没缓过神
计算机网络部分:
1.http的一套流程是什么?
2.https发起连接的流程是什么?
3.http请求的请求头中包含哪些字段?(这里忘了不少字段,只说了三四个,呜呜呜)
4.一次http请求的结构是什么样的?(这里因为网络的问题,听了三遍,终于弄懂了面试官的意思,呜呜呜)
操作系统:
1.能简单说说线程和进程间的区别吗?
2.进程间通讯的方式你知道有哪些吗?
3.听说过Messenger吗?(知道,但是底层还是使用的AIDL+Handler的形式,AIDL底层还是使用的Binder驱动)
数据库:
1.能简单说一下数据库如何修改一张表中的数据吗?
2.给一张表增加一个字段该用什么关键字?
Java:
1.能简单说说Lock,synchronize,CAS之间的关系,以及具体实用的场景吗?
2.能详细说一下CAS是什么吗?AtomicInteger是怎么实现线程安全的?
3.具体的锁升级机制能简单讲讲吗?
4.能简单说说代理模式吗?动态代理和静态代理有什么区别?
Android:
1.能简单说一下事件分发机制吗?
2.MeasureSpec.UNSPECIFIED是什么意思?如果外层的ViewGroup的模式是AT_MOST,内层是match_parent,那么最终传递到内层的模式是什么?(AT_MOST) ps:这个问题没啥意义
(听你说了View中有scrollTo,scrollBy,那么我们分析一个场景题)
3.场景题:首先有一个FrameLayout,其中嵌套着两层View,我们在进行重写onTouchEvent的时候,如何让上层View滑动并且暴露出下层的View?(这里有一个坑,面试官说的scrollTo、scrollBy,我就在这俩上面思考怎么暴露出下层的View,最后突然想到可以通过事件来调整整个View的布局位置)
源码:
1.看过那些优秀的开源框架源码吗?
2.知道那些源码相关的设计模式呢?
3.HashMap简单说一下原理吧
二面:
二面是一个女面试官,年龄可能在40岁左右
设计模式:
1.熟悉那些设计模式呢?
2.动态代理底层是如何实现的?
3.讲讲Retrofit的动态代理吧
Java:
1.能简单说说JVM内存模型的目的以及在内存中区分为哪些区域吗?
2.内存回收机制大致讲讲呗?
3.类加载机制完整细致的描述一下把
4.类加载器的双亲委派原则说一下吧?(这里有一个疑问,我说父子类加载器不是继承关系,然后面试官说不太对,这里我有一点点疑问,还请大家告知一下)
5.能说一下Java .class文件的结构吗?
6.线程池的基本机制有了解吗?非核心线程如何保证延迟结束?
7.为什么内部类会默认持有外部类的引用?
Android:
1.Handler消息机制简单说一下吧(延时的消息是如何发送的?以及通过Looper.loop()是如何处理延时消息的?)
2.为什么Handler会出现内存泄漏?
3.View中的post和handler的post有什么区别?(我说view中的handler是经过重写的,会处理关于View的相关绘制事件,然后面试官说只回答对了一部分,我有些疑问,还有其他的区别吗?)
4.有用到什么内存泄漏检测的框架吗?知道原理吗?(就是上面所说的JVM内存回收机制)
5.知道关于性能优化相关的吗?能简单讲一下吗?(布局,异步,过渡绘制)
6.能讲一下Activity的启动流程吗?
7.听你讲到了进程间通讯,PackageManagerService和ActivityManagerService进行通信的方式是什么?
8.Binder驱动底层原理了解吗?(mmap的内存地址映射)
9.Serializable和Parcable有什么区别?如何使用?
10.听你说到了sp(SharedPreference),你知道sp能跨进程通讯吗?
如何逆袭
1. 面试方面的一些经验
总共大概面试了八家,基本上每一家都到了终面,4 家给了 offer, 2 家因为薪资超预算没有录用,2 家挂掉。整个面试过程与我所预想的有比较大的差异。
因为疫情原因,今年面试流程比较长,除非现场面试,否则多数要一周多才能给到最终结果。
善用脉脉、看准网等网站了解公司内部情况,某些小公司槽点比较多。有些问题不便在面试中直接问,脉脉、看准网上有不少值得参考的评论,可以帮助大家避免不少坑。然而“尽信不如不信”,有些评价还是需要大家客观看待。
频繁换工作对求职的影响远超你的想象。 当你想要离职时,一定要想清楚是什么原因让你不得不离职。即使你想到无数的理由让你离职,请跳出自己的视角,站在一个 hr 的角度重新审视一遍你的离职理由,有些原因你自己觉得很有道理,但从 hr 的角度会有非常不同的理解。总结来说,对于离职原因的陈述既要坦诚又要客观、合理。
2 不与面试官交流
如果觉得编程题目有问题,最好是和面试官谈一下。即使不知道问题的答案,比起呆坐在那里,还不如诚实的承认自己的错误,还可以和面试官谈谈其他方面的话题,要与编程相关的话题,表明自己在这个领域个擅长。
3 代码凌乱
要注意代码规范。不管自己代码知识多么丰富,多么具有创造力,要记住面试官是在考察你的编程技巧。他为你定下任何结论的时候,都需要读懂你的代码,如果你的代码很凌乱,那么面试官根本都不想看。而且,规范代码有助于写出正确的程序。
4 不要死记代码
很多毕业生都会背一些常见的代码,但没有多少人知道这个代码真正做了什么,又是如何完成这程序任务的。死记程序语言不是面试的最佳途径,即使通过面试,在实际工作中,还是会遇到编程的其他问题。你还是会有被OUT的概率。面试其实就是考察了解这门编程语言的程度而已。
5 不谈自己的思路
最后我们该如何学习?
1、看视频进行系统学习
这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频资料躺在网盘里,有需要的我也可以分享给你:
2、读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
Spring源码深度解析:
Mybatis 3源码深度解析:
Redis学习笔记:
Spring Boot核心技术-笔记:
3、面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。
人生短暂,别稀里糊涂的活一辈子,不要将就。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
[外链图片转存中…(img-5mDBWuhd-1715789832847)]
只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。
人生短暂,别稀里糊涂的活一辈子,不要将就。