最后
简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。
选定你想去的几家公司后,先去一些小的公司练练,学习下面试技巧,总结下,也算是熟悉下面试氛围,平时和同事或者产品PK时可以讲得头头是道,思路清晰至极,到了现场真的不一样,怎么描述你所做的一切,这绝对是个学术性问题!
面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到offer后就是你选择他了。
金九银十面试季,跳槽季,整理面试题已经成了我多年的习惯!在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
三、简单封装我们的Retrofit
我这里只是简单封装我们的Retrofit。本文终极篇demo RxJava + Retrofit联网(如果不熟悉,请看我另一篇解读)RxJava + Retrofit + MVP(看完还不明白,吐槽我。适合初学者,VIP版MVP框架!!)
其中封装包括的内容有:
- 支持所有网络请求类型,get,post,put…(废话了!!Retrofit已经干了所有事情)
- 支持上传文件并监听上传进度
- 支持下载文件和断点下载并监听下载进度
- 有网络时,支持在线缓存(连接网络时的有效期)
- 断开网络,支持离线缓存(离线缓存有效期)
- 多次请求同一url,在网络还在请求时,是否只请求一次
- 支持网络请求失败,自动重连
- 支持取消网络请求
Retrofit的接口如下:
public interface RetrofitApiService {
//wanAndroid的banner
@GET(“banner/json”)
Observable<ResponModel<List>> getBanner();
}
简单封装如下,封装一个单例的RetrofitManager:
public class RetrofitManager {
private static RetrofitManager retrofitManager;
private Retrofit retrofit;
private RetrofitApiService retrofitApiService;
private RetrofitManager() {
initRetrofit();
}
public static RetrofitManager getInstance() {
if (retrofitManager == null) {
synchronized (RetrofitManager.class) {
if (retrofitManager == null) {
retrofitManager = new RetrofitManager();
}
}
}
return retrofitManager;
}
public static RetrofitApiService getApiService() {
return retrofitManager.retrofitApiService;
}
private void initRetrofit() {
retrofit = new Retrofit.Builder()
.baseUrl(SystemConst.DEFAULT_SERVER)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
retrofitApiService = retrofit.create(RetrofitApiService.class);
}
}
四、实现我们的功能
4.1 创建MainViewModel
首先是创建我们的MainViewModel,并添加,加载banner接口。(Repository数据层,也可以说是model层,放在后一篇)如下:
public class MainViewModel extends BaseViewModel {
public MainViewModel(@NonNull Application application) {
super(application);
}
@Override
protected void onCleared() {
super.onCleared();
}
public MutableLiveData<List> getBanners(){
//因为用到LiveData,我觉得都不需要切换到主线程了。LiveData可以帮我们做
//调用接口,返回我们的MutableLiveData<List>
final MutableLiveData<List> liveData = new MutableLiveData<>();
RetrofitManager.getInstance().getApiService().getBanner()
.subscribeOn(Schedulers.io())
.subscribe(new Consumer<ResponModel<List>>() {
@Override
public void accept(ResponModel<List> listResponModel) throws Exception {
liveData.postValue(listResponModel.getData());
}
}, new Consumer() {
@Override
public void accept(Throwable throwable) throws Exception {
}
});
return liveData;
}
}
4.2 MainActivity里
- 首先把xml改成我们的DataBinding布局
- 添加一个按钮,点击去请求我们的接口
- 增加第三方Banner去展示我们的数据
xml如下:
<com.youth.banner.Banner
android:id=“@+id/banner”
android:layout_width=“match_parent”
android:layout_height=“180dp”
/>
MainActivity继承我们的BaseActivity,并指明我们的 ViewModel 和DataBinding。
public class MainActivity extends BaseActivity<MainViewModel, ActivityMainBinding> {
@Override
protected int getContentViewId() {
return R.layout.activity_main;
}
@Override
protected void processLogic() {
initBanner();
binding.btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getBanner();
}
});
}
private void getBanner() {
mViewModel.getBanners().observe(this, new Observer<List>() {
@Override
public void onChanged(List bannerBeans) {
updateBanner(bannerBeans);
}
});
}
private void initBanner() {
binding.banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE);
//这是给banner添加图片加载器
binding.banner.setImageLoader(new GlideImageLoader());
}
private void updateBanner(List data) {
if (data == null || data.size() <= 0) {
return;
}
List urls = new ArrayList<>();
List titles = new ArrayList<>();
for (int i = 0; i < data.size(); i++) {
urls.add(data.get(i).getImagePath());
titles.add(data.get(i).getTitle());
}
binding.banner.setBannerTitles(titles);
binding.banner.setImages(urls);
binding.banner.start();
}
}
跟着项目走,你会跑通一个简单的MVVM项目。下一篇,将是最后终结篇。如果MVVM系列能帮到你的话,请帮楼主点个赞吧。谢谢
因为跟本文走,简单的MVVM会跑通。我这里就不贴demo链接了。下一篇,终结篇,将会放上终结篇demo链接。
最终运行的效果:
本文还涉及到的类有:
ResponModel
public class ResponModel implements Serializable {
public static final int RESULT_SUCCESS = 0;
private T data;
private int errorCode;
private String errorMsg;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public int getErrorCode() {
return errorCode;
}
public void setErrorCode(int errorCode) {
this.errorCode = errorCode;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
public boolean isSuccess(){
return RESULT_SUCCESS == errorCode;
}
}
BannerBean:
public class BannerBean implements Serializable {
/**
- desc : Android高级进阶直播课免费学习
- id : 23
- imagePath : https://wanandroid.com/blogimgs/67c28e8c-2716-4b78-95d3-22cbde65d924.jpeg
- isVisible : 1
- order : 0
- title : Android高级进阶直播课免费学习
- type : 0
- url : https://url.163.com/4bj
*/
private String desc;
private int id;
private String imagePath;
private int isVisible;
private int order;
private String title;
private int type;
private String url;
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
最后
考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了PDF文档
喜欢的朋友可以关注、转发、点赞 感谢!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
kTv6-1715590363024)]
[外链图片转存中…(img-gSQ9uFxc-1715590363024)]
喜欢的朋友可以关注、转发、点赞 感谢!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!