Android 面试Android 面试专辑android面试

Android面试看完这篇文章就可以了

2018-10-16  本文已影响69人  fengcz

Android学习 Android知识总结 Android面试 面试准备 程序员找工作

Github传送门

Java基础篇

类型 字节数 bit数 取值范围
byte 1 8 -128-127
boolean 1 8 true、false
short 2 2*8 -32768 - 32767
char 2 2*8 0 - 65535(无负数)
int 4 4*8 -2147483648 - 2147483647
float 4 4*8 -3.4E38 - 3.4E38
long 8 8*8 -9223372036854775808 - 9223372036854775807
double 8 8*8 -1.7E308 - 1.7E308

总结:byte=boolean(1)<char=short(2)<int =float(4)<long=double(8)
每个类型所占bit数=字节*8(bit) 1byte=8bit

区别:
1、sleep()不会释放同步资源对象锁,wait()会释放对象锁
2、sleep()可以在任何地方使用,wait()只能在同步方法或代码块使用(synchronized)
3、sleep()是Thread类中的方法(调用时会暂停此线程指定的时间,监控依旧,不会释放对象锁,到时自动恢复),
wait()是Object类中的方法(调用会放弃对象锁,进入等待队列,待调用notify()/notifyAll()唤醒指定的线程或者所有线程,才会进入锁池,
不再次获得对象锁才会进入运行状态)
1、equals 是方法,而 == 是操作符(基本数据类型比较只能用==来判断)
2、equals()方法是用来判断其他的对象是否和该对象相等(equals方法没有被重写时比较的是它们在内存中的存放地址,若重写了则按自定义的规则来判断)

线程

1、通过继承Thead类并重写写run()函数的方式
2、通过实现Runnable接口的方法
方式1:
 public class CreateThreadOne extends Thread {
        @Override
        public void run() {
            super.run();
        }
    }
 方式2:
    public class CreateThreadTwo implements Runnable {

        @Override
        public void run() {

        }
    }
用法:
new CreateThreadOne().start();
new CreateThreadTwo();
阻塞状态分类
等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态;
同步阻塞:线程在获取synchronized同步锁失败(因为锁被其它线程占用),它会进入到同步阻塞状态;
其他阻塞:通过调用线程的sleep()或join()或发出I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
1、使用synchronized关键字 
2、wait和notify
3、使用特殊域变量volatile实现线程同步
4、使用重入锁实现线程同步
5、使用局部变量来实现线程同步
6、使用阻塞队列实现线程同步
7、使用原子变量实现线程同步
Condition conditionObj=ticketLock.newCondition();//创建
当我们了解在什么情况下会产生死锁,以及什么是死锁的时候,我们在写代码的时候应该尽量的去避免这个误区.产生死锁必须同时满足以下四个条件,只要其中任一条件不成立,死锁就不会发生.
1、 互斥条件:线程要求对所分配的资源进行排他性控制,即在一段时间内某 资源仅为一个进程所占有.此时若有其他进程请求该资源.则请求进程只能等待.
2、不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的线程自己来释放(只能是主动释放).
3、请求和保持条件:线程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他线程占有,此时请求线程被阻塞,但对自己已获得的资源保持不放.
4、循环等待条件:存在一种线程资源的循环等待链,链中每一个线程已获得的资源同时被链中下一个线程所请求。

进程

设计模式

三个分类 摘自博客

网络编程

算法

Android篇

public class ThreadDemo extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();
    }

    MyHandler handler = new MyHandler();

    private static class MyHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //接收消息处理
            //do something
        }
    }

    private void initData() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                SystemClock.sleep(1000);
                //发送消息
                handler.sendEmptyMessage(0);

            }
        }).start();
    }
}
  new Thread(new Runnable() {
            @Override
            public void run() {
                Looper.prepare();
                Handler myHandler = new Handler(){
                    @Override
                    public void handleMessage(Message msg) {
                        super.handleMessage(msg);
                        
                    }
                };
                myHandler.sendEmptyMessage(1);
                Looper.loop();

            }
        }).start();

架构模式

版本控制-Git

Android面试之性能优化

面试之HR and**对话

(仅供参考)
 1、公司目前的业务是做什么的?(大体了解)
 2、公司目前的项目面临的最大困难是什么?(如果面试成功,这很有可能是你要面对的了;还有就是很多面试官也会问你同样的问题,哈哈....相信很多人都被问过吧)
 3、如果能进入公司,主要工作是做什么?(了解工作内容看是否能够胜任吧)
 4、通过这次面试,您觉得我还有哪些不足?能给点建议和指导吗?(成长)
 5、对于离职率大的公司,问:您觉得离职率这么大的主要原因是什么呢?(更一步了解)

大话职业规划

源码

Github传送门-逐步完善中,欢迎大家一起来共同完善~

上一篇下一篇

猜你喜欢

热点阅读