美文网首页
Android面试题记录

Android面试题记录

作者: 城南一霸賈十七 | 来源:发表于2018-08-25 15:35 被阅读9次

注:以下问题答案都是自己在网上找的一些答案,如若存在问题,请指正,感谢。

Java相关

问:SocketHttp有什么关联

答:Socket本身并不是协议,而是一个调用接口APISocket是对Tcp/Ip协议(传输层协议)的封装和应用。所以SocketTcp/Ip协议没有必然的联系。Socket出现使得程序员更方便的使用Tcp/Ip协议栈。另位:Socket是传输层和网络层的。
Http是应用层协议,位于Tcp/Ip协议(传输层协议)上层。Http最显著的特点是客户端发送的每次请求都需要服务器响应,请求结束之后会主动释放链接,从建立连接到关闭连接的过程称为“一次连接”
综上:Http要基于Socket实现,发出一个http请求就相当于建立一个socket通信的过程。*

拓展Http协议传输的数据都是未加密的,也就是明文的。为了保证这些隐私数据能加密传输,于是网景公司设计了 SSL(Secure Sockets Layer)协议对http协议传输的数据进行加密。从而诞生了Https。实际上现在的Https都是采用TSL协议。

问: Https加密如何实现:

答:Https在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。

问:String的值可变吗;String StringBuilder StringBuffer区别

答:String由final修饰,所以不可变;
StringBuilder StringBuffer的值可变。StringBuilder线程不安全,StringBuffer线程安全。
运行速度:StringBuilder > StringBuffer>String

问:如有线程1,线程2,线程3 等3个线程,现如线程1或者线程2执行完任务,如何通知线程3执行任务?

答:

常见的单例模式有哪些写法?请手写一种单例模式。

答:

面向对象的特征有哪些,多态如何体现?

答:

问:GetPost的区别

答:

问:创建线程有哪些方式?

答:java创建线程的三种方式及其对比

问:谈谈对wait和notify关键字的理解?

答:面试题总结(四)线程,多线程,线程池

问:Java 中 fail-fastfail-safe 的区别?

答:当多个线程对同一个集合


Android 篇

问:能否在ActivityOnCreate()方法中进行控件宽高测量,如不能有哪些方式可以进行测量?OnResume()能否进行测量?

答:OnCreate()OnResume()都不能进行测量。我自己找到的具体测量方法目前有三:
方法一:

// 设置监听
tv.viewTreeObserver.addOnGlobalLayoutListener(this)

@RequiresApi(Build.VERSION_CODES.JELLY_BEAN)
    override fun onGlobalLayout() {
        if (tv.viewTreeObserver.isAlive) {
            tv.viewTreeObserver.removeOnGlobalLayoutListener(this)
        }
        Log.d(TAG,"onGlobalLayout ---> width:" + tv.width + "  height:" + tv.height)
    }

方法二:

tv.viewTreeObserver.addOnPreDrawListener(this)

override fun onPreDraw(): Boolean {
        if (tv.viewTreeObserver.isAlive) {
            tv.viewTreeObserver.removeOnPreDrawListener(this)
        }
        Log.d(TAG,"onPreDraw ---> width:" + tv.width + "  height:" + tv.height)
        return true
    }

方法三:

override fun onWindowFocusChanged(hasFocus: Boolean) {
        super.onWindowFocusChanged(hasFocus)
        Log.d(TAG,"onWindowFocusChanged ---> width:" + tv.width + "  height:" + tv.height)
    }
image.png

问:常见的ActivityIntent Flag

答:

问:如何实现自定义view ;自定义view绘制过程;UI刷新重绘方法中,invalidate() 、postInvalidate()、requestLayout() 区别。

答:
invalidate、postInvalidate和requestLayout区别

问:如何实现数据库中数据迁移

答:

问:使用glide碰到的问题

答:

问:简单介绍一下 android性能优化。

答:

  1. 布局优化

    • 采用<include>标签,<merge>标签,ViewStub。
    • 避免多度绘制
  2. 绘制优化:避免onDraw执行大量操作

    • onDraw中不要创建新的局部对象。
    • onDraw方法中不要做耗时的任务,也不能执行成千上万次的循环操作
  3. 内存泄漏优化

    • 通过LeakCanary来检测内存泄漏
  4. 响应速度优化:避免在主线程中做耗时操作 ,或者轻微的耗时操作。

    • Activity如果5秒钟之内无法响应屏幕触摸事件或者键盘输入事件就会出现ANR;BroadcastReceiver如果10秒钟之内还未执行完操作也会出现ANR
  5. ListView/RecycleView及Bitmap优化

    • 采用ViewHolder模式来提高效率
    • ListView/RecycleView的滑动时停止加载和分页加载
    • Bitmap优化 对加载图片进行压缩,避免加载图片多大导致OOM出现。
  6. 线程优化

  7. 其他性能优化建议

问:说一下Retrofit

答:Retrofitokhttp的加强版,底层是使用okhttp封装的。网络请求本质还是okhttp,而Retrofit仅负责网络请求接口的封装。
使用:

  1. 定义请求接口:
public interface ServiceAPI {

    public String API_URL = "";
    @GET("/test/news")
    Call<News> getNews(
            @Path("time") String time,
            @Path("name") String name
    );
}
  1. 通过Retrofit生成接口实现类,使用的是动态代理
Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(ServiceAPI.API_URL)
                .addConverterFactory(...)
                .client(httpClient)  // 注释 1
                .build();

注释1:如果不设置.client(httpClient),则会默认new一个OkHttpClient,请看源码.

public Retrofit build() {
      if (baseUrl == null) {
        throw new IllegalStateException("Base URL required.");
      }

      okhttp3.Call.Factory callFactory = this.callFactory;
      if (callFactory == null) {
        callFactory = new OkHttpClient();
      }
      ...
}

如果设置的话,需要初始化一个httpClient。

OkHttpClient httpClient = new OkHttpClient.Builder()
                .addInterceptor(...)
                .connectTimeout(...)
                .build();

继续以上,通过接口实现类,进行网络请求:

// 通过retrofit 生成一个接口实现类,使用的是动态代理 
        ServiceAPI serviceAPI = retrofit.create(ServiceAPI.class);// 注释2

        Call<News> contributors = serviceAPI.getNews("time", "name");

Retrofit原理浅析
注释2:生成动态代理实例

public <T> T create(final Class<T> service) {
    Utils.validateServiceInterface(service);
    if (validateEagerly) {
      eagerlyValidateMethods(service);
    }
    return (T) Proxy.newProxyInstance(service.getClassLoader(), new Class<?>[] { service },
        new InvocationHandler() {
          private final Platform platform = Platform.get();

          @Override public Object invoke(Object proxy, Method method, @Nullable Object[] args)
              throws Throwable {
            // If the method is a method from Object then defer to normal invocation.
            if (method.getDeclaringClass() == Object.class) {
              return method.invoke(this, args);
            }
            if (platform.isDefaultMethod(method)) {
              return platform.invokeDefaultMethod(method, service, proxy, args);
            }
            ServiceMethod<Object, Object> serviceMethod =
                (ServiceMethod<Object, Object>) loadServiceMethod(method);
            OkHttpCall<Object> okHttpCall = new OkHttpCall<>(serviceMethod, args);
            return serviceMethod.adapt(okHttpCall);
          }
        });
  }

// ServiceMethod 中的adapt方法
 T adapt(Call<R> call) {
    return callAdapter.adapt(call);
  }

可以看到,通过反射拿到了method,并为每个method创建了ServiceMethod,然后通过serviceMethod对象创建了OkHttpCall实例,最后通过serviceMethod的实例调用callAdapter来调用okhttpCall并返回结果。

相关文章

  • Android面试题

    Android面试必备: (一)、Java面试题 (二)、Android面试题 (三)、Android高级面试题

  • 面试题

    关注的面试题文集 Android面试题整理 Android工程师面试题大全 Android 面试题总结之Andro...

  • Android面试总结二

    参考文章 40个Android面试题Java面试题集Android名企面试题及知识点整理Android面试题收集较...

  • Android 面试题(重点2)

    掘金官网Android面试题 Android 动画 Android 动画Android面试题 算法和数据结构 设计...

  • Android主流框架面试准备

    MVP Android MVP架构搭建史上最全的Android MVP模式架构面试题集锦Android面试题-架构...

  • Android面试题汇总

    面试题汇总 Android复习资料——Android知识点汇总(一) 史上最全的Android面试题集锦 ForA...

  • Android 面试题汇总

    一、Android面试题 Android面试题包括Android基础,还有一些源码级别的、原理这些等。所以想去大公...

  • Android面试

    [toc] Android面试题 Android面试题除了Android基础之外,更多的问的是一些源码级别的、原理...

  • Android面试题

    二、Android面试题 Android面试题包括Android基础,还有一些源码级别的、原理这些等。所以想去大公...

  • 2017 Android 面试题分享整理

    第174期:2017 Android 面试题分享整理 深度讨论 2017 Android 面试题分享整理 (欢迎评...

网友评论

      本文标题:Android面试题记录

      本文链接:https://www.haomeiwen.com/subject/bfmwiftx.html