在小公司工作3年,从事Android 开发6年了,才发现自己还是处于“初级“水平,是不是该放弃(1)

1、跟现在老东家签约的合同快到期了,想出来看看新机会,有好机会就考虑挪挪窝了;

2、现在外面的市场是个什么样子,求职的人和招聘的人比例;

3、市场对于一个高级/资深开发工程师的要求是什么样子(毕竟纸上得来终觉浅,觉知此事须躬行);

4、年龄到底是不是个坎。

阿里第一次尝试

阿里的面试基本上都是边聊边问,根据你的工作经历以及面试过程中的内容进行展开。

面试官先问,你最擅长Android中的哪个方向呢?

我答了插件化、组件化、热修复、React Native,最近也在钻研Flutter,对flutter有一些自己的理解。(我故意这么讲,希望面试官可以多问一下flutter。)

面试官:插件化和热修复有什么区别吗?

我:插件化是把需要实现的模块或功能独立提取出来,减少宿主的规模,需要相应功能时再去加载相应模块;而热修复则是从修复bug的角度出发,不需要二次安装应用、用户无感知的情况下就可以修复已知bug。(这么基础的问题,回答的时候自信满满…)

面试官:热修复的核心原理是什么?

我:主要是利用Android类加载机制,把需要修复的类打包成dex文件,把这个修复过的dex文件排在dexElements最前面,ClassLoader在修复过的dex文件加载到类之后就不会再去加载错误的类了。(还好面试前有看过)

面试官:类加载为什么要使用双亲委托机制?

我:…(我记得我看过的来着,一下子想不起来了。)

面试官:jvm和dalvik、art的区别是什么?

我:jvm是基于栈的,dalvik和art是基于寄存器的。(这时候我慌得一比,快顶不住了…)

面试官又追问:那什么是基于栈的虚拟机,什么又是基于寄存器的虚拟机?

我说不知道。(那时完全不懂面试官为什么要问这个)

面试官:art加载类的流程和Dalvik有区别吗?

我:有区别吗?不就是ClassLoader吗?(面试官稍微提了一下机器码。)

后续查学习文档笔记才知道,原来art水这么深,7.0以前直接编译为机器码。之后又变成混合aot、jit和解释执行了,加载类底层使用classlinker,先从classtable缓存查找,如果没有再从oat文件查找,否则就解释执行

面试官:那art下,热修复的实现上有什么需要注意的地方?

最后一个问题听完之后直接懵逼了…查学习文档笔记才感觉到面试官其实还是在问:art下类加载的流程。原来aot会生成一个base.art文件,在ClassLoader创建之后就会把base.art中的类注入到缓存中去,所以会导致这些类无法修复。

面试官又问了我遇到的最难的内存优化问题和解决方案;未来三年计划,技术发展纵深的选择。

感觉凉了…

腾讯,第二次小试牛刀

一面:(一小时四十分钟)

  • 自我介绍

介绍你自己的项目,后面大部分问题都会按着你的项目

1.计算机网络HTTP协议

2.为什么是三次握手,四次挥手而不是两次,三次

3.TCP长连接,短连接区别

4.Socket的长连接你是怎么做的

5.数据库的三范式设计原则 , 索引怎么设计有什么影响

6.计算机系统内核态和用户态

7.Java基础:final,finally和finalize有什么区别

8.抽象类和接口的区别以及使用场景

9.java内存模型

10.String,StringBuilder,和StringBuffer的区别

11.HashMap实现源码,以及线程安全的Map

12.线程状态以及线程通信,线程锁

13.怎么保证线程安全

14.synchronized的监视器应该怎么设置

15.volatile关键字会做什么

android相关:

1.activity的生命周期分析(比如按下关机键会发生什么)

2.activity启动模式。每一种的应用场景

3.Service的两种启动方式,比较不同点

4.Binder的原理,为什么是内存拷贝一次,还知道哪些IPC方式

5.读过哪些源码,Handler源码说一下

算法:(1)写一个洗牌功能

(2)手写冒泡算法

总结得不全面,但一面几乎全都把所有知识点都问完了,只要基础复习的全面没什么问题

二面:(一个小时,噩梦的开始…)

已知两条链表都是升序的,合并这两条链表,并保持升序状态(剑指offer原题)

问点java相关的:

1.final用法

2.泛型的擦除讲一下,没答好

3.怎么定位内存泄漏,哪些工具(讲了MAT, LeakCanary,Lint)

4.LeakCanary怎么实现的,如果你要来设计一个工具检测内存泄漏那怎么做。。。蒙了一阵

5.类加载过程过程说一下,为什么要设计成父类委托加载

6.内部类和静态内部类,使用内部类需要注意什么问题,为什么要这么设计

二面基础答了不够,几乎都要问你为什么,怎么去设计,哎真招架不住,估计凉了,接着投其他公司吧。。。。

第二次,虽然也失败了,但是感觉状态越来越好了

字节跳动,第三次直捣黄龙

一面:

  • 自我介绍

1.Java中重写equals方法为什么要重写hashCode方法?

2.JVM的内存模型,堆和栈有什么区别?对象是存在那里的?对象里的属性,方法又是存在哪里的?

3.单例模式的最优写法,为什么最优?

4.计算机网络的五层模型,TCP和UDP的区别?

5.三次握手和四次挥手

6.线程和进程

7.是否了解安卓的四大组件?简历项目中用到了哪些组件?

8.Activity的生命周期和启动模式

9.是否了解Fragment

算法题:手撕快速排序

二叉树中每一层所有节点的和的最大值

二面:

  • 自我介绍

10.简历中的项目的图片加载为什么用Fresco?有什么好处?Fresco的三级缓存策略是怎么样的?

简历中的项目是如何实现无限加载列表的?

11.什么是双亲委派模型?

12.JVM的垃圾回收机制,GC根搜索算法,什么样的对象可以做GC根。

13.死锁发生的四个条件,如何解决死锁?

14.volatile关键字的作用,synchronized锁的是什么?

15.生产者-消费者模型

16.ListView和RecyclerView有什么区别?

17.Service的生命周期,两种启动方式的区别?

18.Http和Https有什么区别?Https是如何保证安全性的?

19.快排最差的情况为什么时间复杂度是O(n2)

算法题

也是一道二叉树题,想不起来了。。。

三面:(第三面的技术问题少一些,主要是针对简历问问题)

  • 自我介绍

简历中项目如何实现前后两个页面的数据一致性的?

20. 算法题:使用堆来实现TopK

在工作的时候遇到过哪些困难,如何解决的

学习交流

群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
用堆来实现TopK

在工作的时候遇到过哪些困难,如何解决的

学习交流

[外链图片转存中…(img-VvdePv0D-1715240410048)]

[外链图片转存中…(img-I9oK1DP4-1715240410050)]

群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值