android mvvm框架搭建_1-3年Android开发工程师面试经验分享

本篇文章给大家分享一下笔者面试的一些感受和经验,因为笔者目前不到两年的工作经验,所以本篇文章定位为1-3年的Android开发工程师。当然本篇也适用于校招,但3年以上估计面试要求会更高一些。

笔者从前期准备到所有面试结束,花费了差不多3个月的时间。真可谓“面试造火箭,工作拧螺丝”,面试过程真的很累很辛苦。

笔者面了很多公司,最终拿下了知乎、网易和快手的offer,最后选择了知乎。有人可能会问为什么不选择快手?的确快手的工资很高,福利待遇也很好。不过我觉得目前我还是应该更以技术成长为主。在与知乎的面试官交流时,发现他们的技术相对来说更新颖一些,包括KotlinFlutterJetpack,都有一些实践,也都是我想学习的东西,这边的业务也更感兴趣一些。另外,在谈offer时也被他们满满的诚意打动了。还有,建议大家工作未满3年时还是更以技术成长为主,不要把薪资放在首位。

好了,闲话少说,下面就来给大家带来满满的干货,教大家如何准备简历和准备面试。

1. 简历

简历不用准备得太花哨,以前我总喜欢找一些漂亮的模板,后来经人指点后改成了用Markdown书写。面试官不在意你的简历有多好看,他更在意的是你的简历内容。

推荐一个开源项目给大家:https://github.com/geekcompany/ResumeSample

这个项目里就有标准的Android程序员简历模板,大家参照着写就行,各种注意的东西都写的很清楚,这里我就不赘述了。

另外大家可以使用冷熊简历去书写简历,然后通过这个网站去生成PDF文件,这样的简历也比较好看。

2. 面试

写完简历就可以投递了,一般可以找朋友内推或拉钩网、Boss直聘直接投递,这样比较快一些。

一般的面试安排都是3轮技术面和1轮HR面,部分公司可能会有增减。

2.1 技术面试

技术面试一般会先做个自我介绍,然后问问你做的项目,考察一下基础,之后再写个算法,最后可能问问你有什么想问的么。

2.1.1 自我介绍

自我介绍一般主要说一下你在哪就职,目前的工作情况,工作经验有多久,都做过哪些东西,尤其要突出一下你的亮点。这个大家提前准备一下就好。

2.1.2 项目经历

自我介绍完之后,面试官就会看你的工作经历,挑一些问你,或者直接让你介绍做过的最好的东西。

大家写到工作经历的东西,负责的部分一定要特别熟,经得起面试官的拷问,如果只是参与的,也要尽量弄熟,否则就不要往上写。

每个人的经历不同,做过的东西都不一样,所以我就不给大家整理了。

2.1.3 基础

问完项目,就该考察考察候选人的基础了,一般包括Android基础、Java基础、Android常用的开源框架、设计模式和网络基础等等。下面我来列举一下常见的考察点:

Java相关

  • Java基础
    • HashMap1.7和1.8的实现原理
    • final关键字,为什么匿名内部类使用局部引用要用final
  • Java多线程
    • 线程池的使用和原理
    • 锁机制:synchronizedLock
    • volatile关键字
    • ThreadLocal原理
  • JVM
    • Java内存结构
    • Java垃圾回收机制
    • Java类加载过程

Android相关

  • Android基础
    • Handler通信机制
    • 跨进程通信方式
    • Activity启动模式
    • 内存优化、布局优化
    • View的绘制流程
    • Android事件分发机制
    • 动画的分类及其原理
    • MVC、MVP和MVVM模式
    • SparseArray原理
  • Android开源框架
    • Android网络库:VolleyOkHttpRetrofit的使用、原理和对比
    • Android图片库:GlidePicasso的使用、原理和对比
    • EventBus的使用和原理
    • RxJava的使用和原理
    • Router的使用和原理

网络基础

  • HTTP相关:包括HTTP2.0、HTTPS等
  • TCP相关:三次握手、四次挥手等

设计模式

  • 单例模式
  • 代理模式:静态代理和动态代理
  • 观察者模式

这些基础知识一方面大家可以直接阅读源码,一方面可以去网上搜索相关文章去学习,我这里也做了一些整理,参看文集Android开发者必会,遇到好的文章我还会收集,欢迎大家关注。

在这个文集里我收集了大部分Android开发者要会的东西,大部分文章来自于Carson_Ho,真的很感谢这位大佬,他的文章逻辑很清楚,可以学到很多东西,真的给我带来很大帮助。

另外,腾讯面试真的很喜欢问原理,而且问得比较细,可能我面的岗位要求比较资深,一面就挂了。。。以后还是要加强对原理的研究。

2.1.4 算法

问完基础就可以写算法了,通过我的面试经历来看,算法的难度不是很大,基本刷过《剑指Offer》就足以应对面试了。

大家刷《剑指Offer》的时候,每道题一定要自己先做一遍,这些题基本牛客网上都有,大家可以直接在那上面敲代码。做完之后看看书上的解题思路,如果发现自己的方法不是很好,可以按照书上的思路自己实现一遍,再和书上的代码对比一下,这样印象才深刻。

记住,我们刷《剑指Offer》并不是去记每道题,而是记每种解题的思路,自己有个总结,这样以后在遇到没见过的题目时,才会应对自如。

我在准备的过程中已经把《剑指Offer》所有的题目都用Java实现了一遍,大家可以参考剑指Offer Java版官方题解汇总。

2.1.5 其它

除了上面以外,面试官也可能会问问跳槽原因,我一般还是以个人技术成长的角度回答的,具体我就不详述了。

最后,面试官还可能会问问你有什么要问的,一般我们要问问技术、项目相关的东西,比如你们使用的技术栈是怎样的、团队的规模怎么样、我来了之后会做些什么工作等等。

2.2 HR面

如果你能进到HR面,那么恭喜你拿offer就很有希望了。

一般HR会问你生活的方方面面,大家如实回答就好。当HR问我们对薪资的诉求时,我一般还是以现公司总包的基础上涨30%要求薪资,这样起码也会给你到20%-30%。当然有些公司比较例外,比如快手可能给的会高一些。

最后HR会再问问你有什么要问的,这时候可以问问公司的薪资待遇等情况,比如有多少年终奖、评级制度怎样的、多久晋升和普调一次、普调的幅度多少、有哪些福利待遇、有多少年假等等。

另外,一定要问问后续还有什么流程,是否要做背调、什么时候做背调。之前在脉脉上看到说有的公司早早做了背调,导致候选人还没提离职,同事就全知道了。也是好可怕。所以大家一定要求HR在你提完离职之后再做背调。

3. 最后

写到这里好不容易啊!如果大家觉得文章还不错,麻烦点个赞呗!后续我还会更新更多优质的文章,分享一些干货给大家,希望大家关注一下啦~

除了知乎以外,大家还可以通过以下方式找到我哦:

  • CSDN:
https://jimmysun.blog.csdn.net/​jimmysun.blog.csdn.net
  • 简书:
孙强Jimmy - 简书​www.jianshu.com
771c00a65c3bce2b49c786ae36f61711.png
  • GitHub:
jimmysuncpt - Overview​github.com
d1e0914a43692dd80c856a0841a636ff.png
  • 微博:
Sina Visitor System​weibo.com
  • 掘金:
JimmySun 的个人主页 - 掘金​juejin.im
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建Android应用的MVVM架构时,你可以按照以下步骤进行操作: 1. 配置项目依赖:在项目的 `build.gradle` 文件中,添加以下依赖项: ```groovy dependencies { implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1' } ``` 2. 创建数据模型(Model):创建用于存储应用数据的类。这些类应该是独立于UI的,通常包含与数据源进行交互的方法。 ```kotlin data class User(val id: String, val name: String) ``` 3. 创建视图模型(ViewModel):创建负责管理UI相关逻辑和数据的ViewModel类。ViewModel从数据源(如Repository)获取数据,并通过LiveData或其他观察者模式通知View层更新。 ```kotlin class UserViewModel : ViewModel() { private val userRepository = UserRepository() private val _user = MutableLiveData<User>() val user: LiveData<User> get() = _user fun getUser(userId: String) { viewModelScope.launch { val user = userRepository.getUser(userId) _user.postValue(user) } } } ``` 4. 创建视图层(View):创建Activity、Fragment或自定义View等作为View层。在View层中,使用ViewModel的实例,并观察LiveData以更新UI。 ```kotlin class MainActivity : AppCompatActivity() { private val viewModel: UserViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) viewModel.user.observe(this, { user -> // 更新UI textView.text = user.name }) viewModel.getUser("123") } } ``` 5. 创建数据源(Repository):创建负责从数据源(如网络或数据库)获取数据的Repository类。在Repository中,可以使用Retrofit、Room等库来进行数据访问。 ```kotlin class UserRepository { suspend fun getUser(userId: String): User { // 从数据源获取用户数据的逻辑 // 可以使用Retrofit、Room等库 return User(userId, "John Doe") } } ``` 这是一个简单的MVVM框架搭建代码示例,你可以根据实际需求进行调整和扩展。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值