Mark的私人博客

数风流人物,还看今朝

原文链接 程序员小乐

以下是(2016、2017 、阿里、腾讯、百度、华为、京东、搜狗和滴滴面试题汇集)

Android基础

1、什么是ANR 如何避免它?

ANR 就是一个无响应的对话框,主要原因就是在主线程做了耗时操作。

全称为Application Not Responding。在Android 中,如果你的应用程序有一段时间没有响应,系统会向用户显示一个对话框,这个对话框称作应用程序无响应对话框。
不同的组件发生ANR 的时间不一样,

  • 主线程(Activity)是5 秒;
  • BroadCastReceiver 是10 秒;
  • Service:20 秒(均为前台),Service 在20 秒内无法处理完成。

解决方案:

  • 将所有耗时操作,比如访问网络,Socket 通信,查询大量SQL 语句,复杂逻辑计算等都放在子线程中去,然后通过handler.sendMessage、runonUITread、AsyncTask 等方式更新UI,以确保用户界面操作的流畅度.
  • 如果耗时操作需要让用户等待,那么可以在界面上显示进度条。
  • 避免在activity里面做耗时操作,oncreate & onresume
  • 避免在onReceiver里面做过多操作
  • 避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。

2、View的绘制流程;自定义View如何考虑机型适配;自定义View的事件

View的绘制流程:OnMeasure()——>OnLayout()——>OnDraw()
组合控件、继承原有的控件、继承原有的控件

  • 第一步:OnMeasure():测量视图大小。从顶层父View到子View递归调用measure方法,measure方法又回调OnMeasure。
  • 第二步:OnLayout():确定View位置,进行页面布局。从顶层父View向子View的递归调用view.layout方法的过程,即父View根据上一步measure子View所得到的布局大小和布局参数,将子View放在合适的位置上。
  • 第三步:OnDraw():绘制视图。ViewRoot创建一个Canvas对象,然后调用OnDraw()。六个步骤:绘制视图的背景、保存画布的图层(Layer)、绘制View的内容、绘制View子视图、还原图层(Layer)、绘制滚动条(如果没有就不用);

3、分发机制;View和ViewGroup分别有哪些事件分发相关的回调方法;自定义View如何提供获取View属性的接口;

基本会遵从 Activity => ViewGroup => View 的顺序进行事件分发,然后通过调用 onTouchEvent() 方法进行事件的处理。我们在项目中一般会对 MotionEvent.ACTION_DOWN,MotionEvent.ACTION_UP,MotionEvent.ACTION_MOVE,MotionEvent.ACTION_CANCEL 分情况进行操作。

阅读全文 »

在使用retrofit作为项目的网络请求库时,接口定义如下:

1
2
@GET(ACT_GET_NEW_STAFF)
Call<TaskEn> reqGetNewStaff();

接口从服务端获取了数据,通过GsonConverterFactory将服务端相应内容解析成对应的实体类。在接口正常响应时(有数据返回),并没有什么异常发生,但当接口请求的数据为空,我们的服务端人员并不是返回理论意义上的空,null或者[](数据集合空),而是返回没有响应体body,只有响应头header,content-length为0的Response

这时候GsonConverterFactory就解析异常了,并抛出如下异常:

阅读全文 »

原文来自

1
2
3
4
5
6
7
8
9
10
11
GlideUrl glideUrl = new GlideUrl(url, new Headers() {
@Override
public Map<String, String> getHeaders() {
Map<String, String> header = new HashMap<>();
//不一定都要添加,具体看原站的请求信息
header.put("Referer", "http://www.baidu.com");
return header;
}
});

Glide.with(context).load(url).into(imageView);

安装vue


官方文档
我才用的是通过 npm 进行安装穿件vue项目的,首先切换到项目根目录下,终端先后执行如下:

阅读全文 »

Git 的安装就不再次啰嗦了:
sudo apt-get install git

1.创建代码仓库

Step 1:先配置下身份,这样在提交代码的时候Git就可以知道是谁提交的,命令如下:

1
2
git config --global user.name "MarkCHYL"
git config --global user.email "2285581945@qq.com"

检查下配置是否成功:

阅读全文 »

android studio 进行真机安装时失败,报错:

Installation did not succeed.
The application could not be installed: INSTALL_FAILED_TEST_ONLY
Installation failed due to: ‘null’

解决办法

gradle.properties 文件中添加

android.injected.testOnly=false

1.缓存

名称 描述
DiskLruCache Java实现基于LRU的磁盘缓存

2.图片加载

名称 描述
Android Universal Image Loader 一个强大的加载,缓存,展示图片的库
Picasso 一个强大的图片下载与缓存的库
Fresco 一个用于管理图像和他们使用的内存的库
Glide 一个图片加载和缓存的库
阅读全文 »