美文网首页
2020-07-07 准备腾讯客户端开发面试

2020-07-07 准备腾讯客户端开发面试

作者: 七昂的技术之旅 | 来源:发表于2020-07-08 10:37 被阅读0次
    1. 什么是BLE,以及BLE的应用场景是什么?
      答:BLE是Bluetooth Low Energy,低功耗蓝牙。BLE主要应用在短距离设备通信,距离限制在0-50m左右。

    2. 利用i++聊聊线程安全问题,如何解决线程安全?
      答:线程间共享内存,导致多线程下i的数值被多个线程控制,造成线程不安全,可以使用synchronized关键字避免。

    3. Android系统里的消息传递机制 Handler

    • handler是android线程之间的消息机制,主要的作用是将一个任务切换到指定的线程中去执行,android系统中的一个例子就是主线程中的所有操作都是通过主线程中的handler去处理的。
    • Handler的运行需要底层的 messagequeue和 looper做支撑。
    • Handler机制可以简述为:Handler将Message发送到Looper的消息队列中,即MessageQueue,等待Looper的循环读取Message,处理Message,然后调用Message的target,即附属的Handler的dispatchMessage()方法,将该消息回调到handleMessage()方法中,然后完成更新UI操作。


      image.png
    1. 简述Android中的ANR,以及为什么会出现ANR?
      ANR就是Application Not Responding ,即应用程序未响应,之所以会造成这种异常是因为Android是在主线程即UI线程中更新界面的,但是如果在UI线程中进行过多的耗时操作就会堵塞主线程从而造成ANR,具体造成ANR的原因有三个:
      以下四个条件都可以造成ANR发生:
    • InputDispatching Timeout:5秒内无法响应屏幕触摸事件或键盘输入事件
    • BroadcastQueue Timeout :在执行前台广播(BroadcastReceiver)的onReceive()函数时10秒没有处理完成,后台为60秒。
    • Service Timeout :前台服务20秒内,后台服务在200秒内没有执行完毕。
    • ContentProvider Timeout :ContentProvider的publish在10s内没进行完。
    1. Java 单例模式
    • 意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。
    • 主要解决:一个全局使用的类频繁地创建与销毁。
    • 缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。
    • 何时使用:当您想控制实例数目,节省系统资源的时候。
    • 如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
    • 关键代码:构造函数是私有的。
    • 懒汉式:线程安全;效率低
    public class Singleton{
        private static Singleton instance;
        private Singleton();
        private static synchronized Singleton getInstance(){
        if(instance == null){
           instance = new Singleton();
       }
        return instance;
    }
    }
    
    • 饿汉式:无锁,效率高,线程安全;类加载时初始化,浪费内存,容易产生垃圾对象。
    public class Singleton{
        private static Singleton instance =  new Singleton();
        private Singleton(){};
        private static Singleton getInstance(){
            return instance;
        }
    }
    
    1. java 内存泄漏:不再会被使用的对象的内存不能被回收。
    • 静态集合类,如HashMap、LinkedList等等。如果这些容器为静态的,那么它们的生命周期与程序一致,则容器中的对象在程序结束之前将不能被释放,从而造成内存泄漏。
    • 各种有close()方法的连接,如数据库连接、网络连接和IO连接等。
    • 一个变量的定义的作用范围大于其使用范围
    • 缓存泄漏
    • 监听器和其他回调
    1. java 异常处理:Java所有异常类都是 Throwable的子类。它包括Java异常处理的两个重要子类:Error和Exception.
    • Error是指程序无法处理的错误,多指系统内部比较严重的错误。大多数这类错误与开发人员无关
    • Exception:运行时异常和非运行时异常。运行时异常多指程序逻辑上出现问题(也就是我们自己写代码逻辑出了问题),常见的错误包括ClassCastException:类型转换异常NullPointerException:空指针异常IndexOutOfBoundsException:越界异常 ..
    • 在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。

    ① 抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。

    ② 捕捉异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。

    • 抛出异常的方法:

    ① throws:通常被用在声明方法时,用来指定方法可能抛出的异常,多个异常可使用逗号分隔。throws关键字将异常抛给上一级,如果不想处理该异常,可以继续向上抛出,但最终要有能够处理该异常的代码。

    ② throw:通常用在方法体中或者用来抛出用户自定义异常,并且抛出一个异常对象。程序在执行到throw语句时立即停止,如果要捕捉throw抛出的异常,则必须使用try-catch语句块或者try-catch-finally语句。

    相关文章

      网友评论

          本文标题:2020-07-07 准备腾讯客户端开发面试

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