Bomb云demo,腾讯字节等大厂面试真题汇总

如果用户在每次打开你的应用程序时都要登录,这将会直接影响到你应用的用户体验。为了避免这种情况,你可以使用缓存的CurrentUser对象。缓存的用户有效期为1年。

每当你应用的用户注册成功或是第一次登录成功,都会在本地磁盘中有一个缓存的用户对象,这样,你可以通过获取这个缓存的用户对象来进行登录:

BmobUser bmobUser = BmobUser.getCurrentUser(); if(bmobUser != null){ // 允许用户使用应用 }else{ //缓存用户对象为空时, 可打开用户注册界面… }

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

在扩展了用户类的情况下获取当前登录用户,可以使用如下的示例代码(MyUser类可参看上面):

UserBean userInfo = BmobUser.getCurrentUser(UserBean .class);

  • 1

获取userbean中的某个字段的内容:

//BmobUser中的特定属性 String username = (String) userInfo .getObjectByKey("username"); //MyUser中的扩展属性 Integer age = (Integer) userInfo .getObjectByKey("age"); Boolean sex = (Boolean) userInfo .getObjectByKey("sex");

  • 1

  • 2

  • 3

  • 4

  • 5

3 我们根据条件查询一个人的信息:

这是我们用用户名,手机号码,邮箱 共同来验证,匹配此内容的用户会返回,不匹配返回的List的size 为0 , 出错了会有e的返回。

BmobQuery<UserBean> query = new BmobQuery<>(); query.addWhereEqualTo("username", username).addWhereEqualTo("mobilePhoneNumber", tel).addWhereEqualTo("email", email); query.findObjects(new FindListener<UserBean>() { @Override public void done(List<UserBean> object, BmobException e) { if (e == null) { // toast("查询用户成功:"+object.size()); listener.onSuccess(); } else { // toast("更新用户信息失败:" + e.getMessage()); listener.onFailed(e.getErrorCode()); } } });

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

我们试着查询了一条信息,发现返回的信息就是我们注册的信息,只是不会给我们返回密码(password)的那个字段的值。

我们本来是想着根据几个信息查询出用户的所有信息,然后我们从里面取出来旧密码,然后就可以调用SDK的方法去修改密码来实现用户忘记密码的事件。但是发现行不通了。

通过旧密码来修改密码的方法为:

BmobUser.updateCurrentUserPassword("旧密码", "新密码", new UpdateListener() { @Override public void done(BmobException e) { if(e==null){ toast("密码修改成功,可以用新密码进行登录啦"); }else{ toast("失败:" + e.getMessage()); } } });

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

所以只能暂时改为 短信通知管理员 去在后台更改密码了。流程还是先根据条件去查询,查询成功后,让其输入一个新密码,然后弹出对话框询问是否将此内容发送给管理员,让其去帮助修改密码,修改成功后会有短信回复来通知用户。

4 退出登录

BmobUser.logOut(); //清除缓存用户对象 BmobUser currentUser = BmobUser.getCurrentUser(); // 现在的currentUser是null了

  • 1

  • 2

方向指示

====================================================================

我们要实现一个指南针的功能。而这种。利用手机的Sensor就可以简单的实现了。

  1. 我们先在布局中放置一张图片:这里写图片描述

  2. 布局代码为:

<TextView android:id="@+id/tvCompass" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_margin="10dp" android:background="@mipmap/comp" />

  1. 获取手机的Sensor 并且实现对应的监听

//方向传感器的使用。指北针 SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); Sensor mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); Sensor mMagneticField = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); mSensorManager.registerListener(this, mMagneticField, SensorManager.SENSOR_DELAY_NORMAL);

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

并且我们的Activity要 implements SensorEventListener

4 在 onSensorChanged 方法处理改变了的Sensor内容。

5 设置动画旋转图片。

6 指南针完整的代码下载地址点我

高德地图的使用

=======================================================================

高德控制台创建项目


  1. http://lbs.amap.com/ 高德LBS官网。

  2. 然后去创建一个号,然后登录。

  3. 点击头像旁边的控制台进入后台管理

  4. 进入后台管理之后,然后点击右上角创建新应用

  5. 弹出

这里写图片描述

  1. 上面的随便填。然后点击创建。

  2. 创建成功后就有了我们刚才创建的一条信息,最后面有个“添加新key”,点之。

  3. 弹出

这里写图片描述填写弹出框中的内容,然后勾选同意条款,然后点“提交”,就可以了。

  1. 这就是我们创建成功之后的key

这里写图片描述

  1. 至此,我们创建这一步就完成了。至于如何获取sha1,点吧

集成高德到项目中


  1. 从这里去下载sdk

  2. 在AS里面调整项目到project文件形式

这里写图片描述

  1. 将我们下载的sdk复制到 app下的lib文件夹中

这里写图片描述

  1. 然后右键上图的sdk,选择Add as library 选项。然后会出来如上图示的可以展开的小三角箭头。

  2. 添加我们下载的so文件到我们的项目中,复制粘贴呗,如果项目中没有jniLibs文件夹,我们需要先自己创建。然后将我们下载的so全部复制进去

这里写图片描述

  1. 配置key:

<application android:icon="@drawable/icon" android:label="@string/app_name" > <meta-data android:name="com.amap.api.v2.apikey" android:value="请输入您的用户Key"/> …… </application>

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

7 需要的权限:

//地图包、搜索包需要的基础权限 <!--允许程序打开网络套接字--> <uses-permission android:name="android.permission.INTERNET" /> <!--允许程序设置内置sd卡的写权限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--允许程序获取网络状态--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!--允许程序访问WiFi网络信息--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!--允许程序读写手机状态和身份--> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!--允许程序访问CellID或WiFi热点来获取粗略的位置--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

简单使用


  1. 再我们的布局中添加地图控件:

<com.amap.api.maps.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" />

  • 1

  • 2

  • 3

  • 4

  1. 在Activity中:

//声明 MapView mMapView = null; AMap aMap; //在onCreate方法中 mMapView.onCreate(savedInstanceState); if (aMap == null) { aMap = mMapView.getMap(); } initView(); //initView方法 MyLocationStyle myLocationStyle; myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE);//定位一次、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。 myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。 myLocationStyle.radiusFillColor(R.color.colorAccent); aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。 aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。 // 其他的生命周期方法 @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图 mMapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制 mMapView.onPause(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态 mMapView.onSaveInstanceState(outState); }

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

总结

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的14套腾讯、字节跳动、阿里、百度等2020面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。

2020面试真题解析
腾讯面试真题解析

阿里巴巴面试真题解析

字节跳动面试真题解析
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

…(img-oDBCH1nv-1711382966433)]

总结

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的14套腾讯、字节跳动、阿里、百度等2020面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。

[外链图片转存中…(img-sQJxaQvi-1711382966433)]
[外链图片转存中…(img-zAi0aByR-1711382966433)]

[外链图片转存中…(img-8hheMqow-1711382966434)]

[外链图片转存中…(img-kCptPOM3-1711382966434)]
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

[外链图片转存中…(img-laKy4j4g-1711382966435)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值