2024年最全【Android笔记】Jetpac与MVVM的构建,大厂面试一般几轮

文末

不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊

小编将自己6年以来的面试经验和学习笔记都整理成了一个**937页的PDF,**以及我学习进阶过程中看过的一些优质视频教程。

其实看到身边很多朋友抱怨自己的工资很低,包括笔者也是一样的,其原因是在面试过程中没有给面试官一个很好的答案。所以笔者会持续更新面试过程中遇到的问题,也希望大家和笔者一起进步,一起学习。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

5. 定义Retrofit访问网络

object RetrofitClient {

private const val BASE_URL = “https://api.github.com/”

var retrofit: Retrofit

init {

retrofit =

Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create())

.build()

}

fun getApi(): Api? {

return retrofit.create(Api::class.java)

}

}

6. 定义Application类

class MyApplication : Application() {

companion object {

lateinit var context: Context

}

override fun onCreate() {

super.onCreate()

context = applicationContext

}

}

7. 定义Repository

object UserRepository {

var userDao: UserDao = AppDatabase.getDatabase(MyApplication.context).userDao()

fun getUser(name: String): LiveData {

refresh(name)

return userDao.getUserByName(name)

}

fun refresh(name: String) {

RetrofitClient.getApi()?.getUser(name)?.enqueue(object : Callback {

override fun onResponse(call: Call, response: Response) {

if (response.body() != null) {

insertUser(response.body()!!)

}

}

override fun onFailure(call: Call, t: Throwable) {

Log.d(“UserRepository”, “onFailure$t”)

}

})

}

fun insertUser(user: User) {

thread {

userDao.insertUser(user)

}

}

}

8. 定义ViewModel

class MvvmViewModel : ViewModel() {

val userName = “yaoxin521123”

fun getUser() = UserRepository.getUser(userName)

fun refresh() = UserRepository.refresh(userName)

}

9. 绘制xml

<?xml version="1.0" encoding="utf-8"?>

<variable

name=“user”

type=“com.yx.androidseniorpreparetest.eighth.bean.User” />

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:tools=“http://schemas.android.com/tools”

android:id=“@+id/srl_SwipeRefreshLayout”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

tools:context=“.eighth.MvvmActivity”>

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:orientation=“vertical”>

<de.hdodenhof.circleimageview.CircleImageView

android:layout_width=“95dp”

android:layout_height=“95dp”

android:layout_gravity=“center”

android:layout_marginTop=“20dp”

app:image=“@{user.avatar}” />

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

android:layout_marginTop=“20dp”

android:text=“@{user.name}”

android:textColor=“#000000”

android:textSize=“20sp” />

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

android:layout_marginTop=“20dp”

android:text=“@{user.login}”

android:textColor=“#000000”

android:textSize=“20sp” />

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

android:layout_marginTop=“20dp”

android:text=“@{user.blog}”

android:textColor=“#000000”

android:textSize=“20sp” />

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

android:layout_marginTop=“20dp”

android:text=“@{user.company}”

android:textColor=“#000000”

android:textSize=“20sp” />

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

android:layout_marginTop=“20dp”

android:text=“@{user.bio}”

android:textColor=“#000000”

android:textSize=“20sp” />

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

android:layout_marginTop=“20dp”

android:text=“@{user.location}”

android:textColor=“#000000”

android:textSize=“20sp” />

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“center”

android:layout_marginTop=“20dp”

android:text=“@{user.htmlUrl}”

android:textColor=“#000000”

android:textSize=“20sp” />

</androidx.swiperefreshlayout.widget.SwipeRefreshLayout

10. 在Activity触发事件

class MvvmActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

val binding =

DataBindingUtil.setContentView(this, R.layout.activity_mvvm)

val viewModel = ViewModelProviders.of(this).get(MvvmViewModel::class.java)

viewModel.getUser().observe(this, {

if (it != null) {

binding.user = it

}

})

binding.srlSwipeRefreshLayout.setOnRefreshListener {

viewModel.refresh()

binding.srlSwipeRefreshLayout.isRefreshing = false

}

}

}

11. 定义BindingAapter

class BindingAdapter {

companion object {

@JvmStatic

@BindingAdapter(value = [“image”, “defaultImageResource”], requireAll = false)

如何做好面试突击,规划学习方向?

面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。

学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。

我们搜集整理过这几年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。

img

我们在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

但是如果只通过碎片化的学习,对自己的提升是很慢的。

我们搜集整理过这几年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。

[外链图片转存中…(img-hKnBok1c-1715891064678)]

我们在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值