先说一下个人情况吧,毕业安徽省内一所二流的普通本科院校,就这都是使出洪荒之力,集日月之精华,收天地之灵气,方得硕果,真是汗颜。没有211,985的名校光环,没有可以纨绔霍霍的家庭背景,也没有经天纬地的大脑,更没有迷倒千万少女的盖世容颜,有的是一张蜜汁自信的脸庞,和一个健康壮硕的身体,如何变现,苦无良路。
杭飘江湖狗一枚,不咬人的那种,哈哈,在北京待过,为帝都空气净化出过力,11月23入职杭州,已过几载,终日游荡,异常,优化,撸代码,早出晚归,砖石青瓦之间,业务熟练的同时,日子也变得悠闲起来。自己也考虑到以后的发展和更好的工作还有未来,整天处于焦虑和烦恼的状态,就是这么多愁善感,忧郁心俗的少年。目前在这家公司工作多年,会写代码,看过源码,大多数是Api接口阶段,大多数框架源码,原理,设计思想没有过多涉及,有感时代变化之多彩,技术更新之快速,庸人于我,缝入这世俗红尘中,也想要美好生活,不敢奢望香车美女大豪宅,只想寄情于山水人家,小桥流水即可,嘿嘿,想的倒挺美,所以为了改变这局面,打算下海试试水。同时,希望把我的面试经历和过程分享给你,也是个人总结,感谢你的鼓励,一起加油,努力,为了人民币。(^-^)V
面试是一个双向选择,不仅是公司在选人,我们同样在选公司,所以有一个正确的心态很重要,而投递简历主要几个渠道,无外乎内推,招聘网站,公司网站,自荐,这里推荐几个,纯属参考,不是建议。猎聘(猎头较多,自己参考)、Boss直聘(直通公司)、脉脉(职场社交)、大佬,同学,熟人内推(最为靠谱)、内推网站等。
公司选人,选的是能力,潜力,忠诚,价值,性格,学历(这个真的很有影响哦,但又不是必须,不好说)等。选公司,选的是背景,发展,规模,福利,薪资,技术氛围,交通等。
首先对找的公司有一个定位,不建议盲目海投,也需要对自己有一个清晰的认知,从能力,性格,思想,规划,说白了就是,我会什么,我能干什么,我想要什么。从公司定位,期望薪资等考虑。当然,你有姣好吸人的颜值,帅气逼人的皮囊,请忽略,美女帅哥还是会受到优待的,毕竟现阶段还没达到思想决定上层建筑的阶段(大部分)。还有,你是有全国重点和名校光环,傲人履历,大厂经验,能力超群的大佬请忽略,多多提携小弟,瑟瑟发抖。
个人技能关键字:知识准备,面试心态,开发方向,选择能力
(1)岗位必备知识点
(2)高质量简历(这点小弟就很差劲,语粗话糙,总结的不是很好)
(3)面试邀请的前提准备
(3)面试心态,表现自己
(4)面试结束后的思考和总结,选择offer
(5)面试问题总结
Android开发岗位必备知识:
java: 堆栈、反射、注解、泛型、线程池/并发线程、类锁/对象锁/自旋锁/分段锁、Volatile、原子性/可见性、Socket、常见数据结构、类加载器 、Dalvik/ART/Dex、HTTPS/HTTP/HTTP2.0、TCP/UDP以及常见加密原理、GC、JVM、冒泡排序、选择排序、快速排序、归并排序、时间复杂度、内存泄漏/内存溢出、设计模式、MVC/MVP/MVVM、AOP/IOC。
Android:Window、Context、ContentProvider、Fragment、Service、AIDL、Binder、Activity、Broadcast、WebView安全漏洞以及和js交互、Handler、AsyncTask、IntentService、HandlerThread、View的绘制原理、事件分发、SurfaceView、ListView/RecycleView、Android编译打包、 git、 Proguard混淆、帧动画,补间动画,属性动画、 Gradle、Lint检测、LeakCanary、HttpClient,HttpUrlConnetion、(Retrofit、Okhttp、Volley、Glide、Fresco、Dagger2、Butterknife、RxJava、EventBus、DataBinding)源码和原理、JNI、Android性能优化、观察者模式、动态代理、单例、构造者模式等、SharedPreferences,插件化原理,热修复原理、模块化开发了解,单元测试了解、进程保活,推送、Kotlin了解、Android6.0/7.0/8.0/9.0特性。
工作经验,项目经验总结
算法这个真的玩不动,如果你行,真的是需要膜拜d=====( ̄▽ ̄*)厉害
上面总结的很零散,未成系统,层次未分明,基础性知识较多,深度和广度还不够,看公司要求,有的需要对jvm了解多一些,比如内存分区,原理,新生代和老年代,收集算法等等吧,还有的公司要求更全面,需要你掌握混合开发,比如RN,Weex,js,css,Vue.js等前端知识,还有很多,需要自己总结,俗话说的好,临阵磨枪,不快也光。
同时不建议裸辞,真心不建议,现在的行情,你懂得。想要裸辞在家,专心复习,得了吧,兄弟,都是不自觉的人,最好的状态就是快乐工作,努力挣钱,分心学习。比如,下班路上、公交车上、晚上、周末去学习。
建议看的书《java编程思想》、《java并发编程艺术》、《第一行代码》、《Android开发艺术探索》,《深入理解java虚拟机》(看的头疼,脑流量不够用,我基本没看),算法自己找吧,我自己不咋地,实话实说/(ㄒoㄒ)/~~还有其他书,我没看过,推荐一下,《大话设计模式》、《Android群英传》、《Android源码设计模式》、《java编程实战》、《剑指offer》、《Android进阶之光》、《高性能Android开发》
高质量简历:
说真的,简历这块不知道咋说,因为我的经验也不多,总结的也不好,就我理解的总结一下吧!首先说HR重点看的部分,姓名、年龄、经验、教育经历、工作经历,一定要排版干净,一目了然,简明扼要。需要注意的是,那些已婚,未婚不要写了,又不是相亲,还有党员、团员啥,亲,这是互联网公司,不是国企,永远跟党走,心中记得党就行了。
项目经验,这块要感谢目前所在公司的新哥,也是当时的面试官,他的建议是,工作过程中,用了哪些技术,解决了什么问题,做了哪些优化,用了哪些框架(写了,一定要看源码,了解原理),切记简洁突出,谨慎冗长繁复。有GitHub,博客,这些肯定是加分项了,没有实质内容,还是不要贴了吧,GitHub没有多少star也就别贴了。模板啥的,网上一箩筐,搜搜看。
面试邀请的前提准备
在期待,焦虑,心急的等待中,接到一个陌生的电话,通知你面试,眼眶发红,心头一颤,宝宝心里苦啊!终于等到你了。
我一般首先了解面试公司的JD要求,打开公司官网,查看公司介绍,企业文化,了解公司主营业务,下载公司App,了解产品,上手操作。看看是金融类,电商类,音视频类等,定点着重复习一下。
面试心态,表现自己
着装礼仪,干净大方就行,干程序员这行,也没啥好装的。但是,"大裤衩","拖鞋",不管是哪行,肯定是行业大忌,不管是谁,在第一次见陌生人,肯定会"以貌取人",快速建立第一印象。面试前后,握个爪爪,来个肉体接触,哇哦,说不定会触电,嘿嘿。(纯属个人建议,谨慎尝试✧(≖ ◡ ≖✿)),回答问题时,要自信,尽量保持镇定,我有几次紧张到心跳加速,大脑发蒙,前后逻辑全忘,就是这么尴尬/(ㄒoㄒ)/~~,尽量拓展到自己熟悉的知识点,小心挖坑,回答不出来的,尽量给出解决思路,实在不知道,如实回答就行(当然,我是这样想的)
一些技术加情商的问题,比如
1 自我介绍
2 为什么离职?
3 你了解我们公司吗?
4 你的职业规划?
5 你工作中遇到的最大问题,如何解决的?
6 你最擅长的是什么?
7 你一般怎么学习的?
8 你有什么需要问我的吗?
这些得靠自己,事前也需要准备,毕竟大部分人都是话不暖,语不温,不容易答出优势。
面试结束后的思考和总结以及选择offer
面试好几轮后,没有面到HR,谈薪资,让回去等通知。千万不要傻乎乎想好多天了,怎么还没有通知,结果怎么样,心里没点...数吗?就当一次免费学习了,找到自己的不足,查缺补漏。
面试完成后的思考,回忆面的问题,回答的怎么样,怎么说最好,哪些知识点遗忘了,或者根本没了解过,公司环境怎么样,面试官水平。
我面试过程中答的不好或者不会的问题,会赶紧查资料看看,同时用有道笔记记录总结一下。有了几个offer后,如何选择,不是公司规模越大越好,承诺的如何如何,我是俗人,相信你也是,都是接地气的凡人。一般从月薪和年终奖金,平台,五险一金(有的是六险),技术氛围,工作内容,晋升和调薪,年假,企业打车,交通等考虑,前面两点会自动过滤大部分的。目前热门也就是汽车,金融,电商,音视频,智能硬件,尽量选择有发展前景的平台,B轮以上或者不需要融资,技术氛围浓厚的,以平台为依托,以经济为导向,以提升自己为基础,以未来为希望。
面试问题总结
因为有些是重复的,所以将所有面试的题目进行汇总
1 跨进程通信的几种方式(Intent、ContentProvider、Broadcast、AIDL)
2 Binder,AIDL原理,实现方式
3 wait和sleep的区别(方法所属类,是否释放锁)
4 启动模式,应用场景
5 View和SurfaceView的区别(独立线程,双缓冲机制)
6 常见的shell命令(比如ls,cd,cp,rm,touch...,常用Mac,Linux系统了解要多一些)
7 接手一个老项目,如何快速定位到一个Activity(全局搜索(根据标题栏),日志打印,查看文档,逻辑梳理,请教老同学)
8 String,StringBuffer,StringBuilder区别(执行效率,线程安全方面)
9 View的绘制原理(从基本三大方法原理总结,到三个绘制模式,View和ViewGroup绘制)
10 JNI理解(上下两层,上层native方法和下层C、C++分析,上下层关联)
11 TCP协议,UDP协议,Socket
12 D-Bus(真心不知道,回去查了,D-bus是Linux下的一种高级的进程间通信机制)
13 音视频相关的类(VideoView、MediaPlayer+SurfaceView,MediaCodec,MediaRecoder...)
14 SIP协议(回去查了,会话初始协议)
15 线程与进程,线程的五种状态,进程的五种状态
16 常见的内存泄漏,如何解决
17 View的分发机制,滑动冲突解决
18 RecycleView和ListView的区别
19 RecycleView和ListView的缓存原理
20 RecycleView卡顿的原因,如何解决
21 手写快速排序,时间复杂度
22 MVC ,MVP,MVVM
23 dagger2的实现方式
24 Android性能优化
25 Handler消息原理,能否创建多个Handler和Looper
26 如何用Handler实现子线程向主线程传递消息和主线程向子线程传递消息
27 Message是如何获取的,Looper是如何从消息队列获取消息的
28 在子线程中new Handler为什么发生异常(还有其他,记不清了,仔细看过Handler源码,这些都不是问题)
29 Java注解的理解
30 动态代理和静态代理
31 synchronized(对象锁 类锁),二者区别
32 SharedPreference跨进程使用会怎么样?如何保证跨进程使用安全?
33 Volatile关键字(保证可见性)原子性和可见性(i = 1原子操作,线程调度器不能打断,i++不是原子操作,因为i = i+ 1 两步操作)
34 Volley源码和原理,为什么是轻量的(适合数据量不大但网络请求频繁的场景使用,NetWorkDispatcher数组,数组的长度是4,默认开启的线程是4个)
35 HashMap原理,冲突解决,自动扩容,手画数据结构,为什么加载因子是0,75,和1.8的区别。
36 如何保证HashMap线程安全(CurrentHashMap,Collections.synchronizedMap())
37 CurrentHashMap如何保证线程安全的和1.8的区别
38 链表和数组的区别,为什么
39 requestLayout,invalidate,postInvalidate区别
40 Websocket
41 模块化和组件化开发(只是看过博客,了解,以前的公司没用过)
42 推送到达率的问题
43 React Native 或者 Weex了解吗
44 Fragment与Activity之间的交互
45 http 报文格式
46 多个线程访问一个文件,怎么保证线程安全?
47 自旋锁的作用
48 ART和Dalvik区别
49 Broadcast注册方式与区别,使用场景
50 进程保活的方式
51 如何知道一张图片所占的内存?Bitmap四种格式,分别占多少字节
52 单例模式(懒汉,饿汉,double check,静态写法)
53 屏幕分辨率的适配
54 Service有几种启动方式?他们的生命周期又如何?Service和Activity通信方式
56 java的四种线程池分别是什么,使用场景
57 Glide的源码,缓存原理,LruCache算法缓存原理
58 LinkHashMap为什么能够实现LruCache算法
59 数据库怎么升级版本
60 OkHttp源码,几种拦截器,有什么作用、Retrofit原理,动态代理的实现方式,
61 垃圾回收机制,及其回收原理
62 垃圾回收器机制中的根搜索法什么对象可以作为根对象
63 GC线程会造成卡顿吗,为什么,如何解决
64 GC收集方式(标记清除,标记整理,复制算法)
65 RecyclerView不使用第三方框架,如何解决图片错乱和闪烁问题
(滑出屏幕外的图片,在onViewRecycled回调方法中取消图片的加载。
对ImageView设置tag标记,这个tag可以设置为图片的url地址。
如果这个tag标记被更改了,那么旧线程加载好的图片不再设置到imageView中)
66 Rxjava实现方式,各种操作符,如何解决背压为题(使用flowable,生产者的速度大于消费者的速度带来的问题)
67 热修复原理,阿里的andfix和腾讯的tinker的区别(前者基于二进制,后者基于java加载机制)
68 EventBus的原理
69 WebView和JS交互,WebView的漏洞,JS调原生的方法的实现方式(addJavaScriptInterface,WebViewClient和WebChromeClient回调方法拦截url)
79 常见的设计模式
71 IOC,AOP在 Android 开发中的应用
72 App加壳,反编译(只知道通过第三方加固,混淆,数据加密,没做过)
73 HTTP 2.0,多路复用技术好处
74 Http和TCP/UDP分别在七层中哪一层,两者是如何关联的。
75 Android开发整体框架的搭建
还有其他的,也记不清了,有些题都回答不上来,有些地方不够深入,有些也没有听过。 从七月开始到八月,面的也不多,可能是在职状态,差不多7家左右吧,有些表现不好,有些自我感觉良好吧,嘿嘿。给的建议是面对面试官要面带微笑,有礼貌,谦逊,毕竟生杀大权掌握在对方手里,即使不想去,也要做到基本礼貌,俗话说的好,买卖不在仁义在嘛。
说一下收到的意向offer吧,现在都是打电话谈薪资,询问意向,不会直接发offer的,如果不是这样,得看看是否是靠谱的公司了。在杭州我拒绝去的地方是江干区,萧山区,临平,所以公司基本上在余杭,西湖,滨江,总共收到四家吧!
同花顺 在余杭,做股票金融类的,薪资可以,公司环境,工作业务内容不是我喜欢的。
海康威视 在滨江,做视频监控,安防,比较牛,国企,福利待遇很好。
个推 在西湖区,做大数据,云服务,推送,公司内部环境真的美丽,福利待遇很好。
要出发,周边游 在滨江,做电商的,公司环境不错,薪资没谈。
涂鸦智能 在西湖区,做智能硬件,公司环境不错,发展前景不错,福利待遇很好。
考虑上下班,从薪资,技术,平台,公司环境,发展前景考虑,自己曾经也涉及过嵌入式,串口通信,也画过PCB面板,最终选择涂鸦,相信自己的选择。
这就是面试的经验,趁着中秋,花了两天时间写完了,希望能对你有所帮助,让我们一起加油_,有帮助点个关注呗。