2021-面试准备

Java

Java基础

  • 一、数据类型
    • [基本类型](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#基本类型)
    • [包装类型](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#包装类型)
    • [缓存池](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#缓存池)
  • 二、String
    • [概览](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#概览)
    • [不可变的好处](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#不可变的好处)
    • [String, StringBuffer and StringBuilder](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#string-stringbuffer-and-stringbuilder)
    • [String Pool](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#string-pool)
    • [new String(“abc”)](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#new-stringabc)
  • 三、运算
    • [参数传递](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#参数传递)
    • [float 与 double](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#float-与-double)
    • [隐式类型转换](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#隐式类型转换)
    • [switch](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#switch)
  • 四、关键字
    • [final](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#final)
    • [static](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#static)
  • 五、Object 通用方法
    • [概览](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#概览)
    • [equals()](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#equals)
    • [hashCode()](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#hashcode)
    • [toString()](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#tostring)
    • [clone()](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#clone)
  • 六、继承
    • [访问权限](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#访问权限)
    • [抽象类与接口](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#抽象类与接口)
    • [super](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#super)
    • [重写与重载](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#重写与重载)
  • [七、反射](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#七反射)
  • [八、异常](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#八异常)
  • [九、泛型](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#九泛型)
  • [十、注解](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 基础.md#十注解)

JAVA 容器

[Java 容器](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 容器.md#java-容器)

  • 一、概览
    • [Collection](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 容器.md#collection)
    • [Map](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 容器.md#map)
  • 二、容器中的设计模式
    • [迭代器模式](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 容器.md#迭代器模式)
    • [适配器模式](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 容器.md#适配器模式)
  • 三、源码分析
    • [ArrayList](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 容器.md#arraylist)
    • [Vector](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 容器.md#vector)
    • [CopyOnWriteArrayList](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 容器.md#copyonwritearraylist)
    • [LinkedList](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 容器.md#linkedlist)
    • [HashMap](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 容器.md#hashmap)
    • [ConcurrentHashMap](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 容器.md#concurrenthashmap)
    • [LinkedHashMap](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 容器.md#linkedhashmap)
    • [WeakHashMap](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 容器.md#weakhashmap)

JAVA并发

[Java 并发](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#java-并发)

  • 一、使用线程
    • [实现 Runnable 接口](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#实现-runnable-接口)
    • [实现 Callable 接口](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#实现-callable-接口)
    • [继承 Thread 类](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#继承-thread-类)
    • [实现接口 VS 继承 Thread](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#实现接口-vs-继承-thread)
  • 二、基础线程机制
    • [Executor](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#executor)
    • [Daemon](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#daemon)
    • [sleep()](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#sleep)
    • [yield()](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#yield)
  • 三、中断
    • [InterruptedException](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#interruptedexception)
    • [interrupted()](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#interrupted)
    • [Executor 的中断操作](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#executor-的中断操作)
  • 四、互斥同步
    • [synchronized](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#synchronized)
    • [ReentrantLock](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#reentrantlock)
    • [比较](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#比较)
    • [使用选择](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#使用选择)
  • 五、线程之间的协作
    • [join()](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#join)
    • [wait() notify() notifyAll()](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#wait-notify-notifyall)
    • [await() signal() signalAll()](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#await-signal-signalall)
  • 六、线程状态
    • [新建(NEW)](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#新建new)
    • [可运行(RUNABLE)](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#可运行runable)
    • [阻塞(BLOCKED)](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#阻塞blocked)
    • [无限期等待(WAITING)](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#无限期等待waiting)
    • [限期等待(TIMED_WAITING)](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#限期等待timed_waiting)
    • [死亡(TERMINATED)](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#死亡terminated)
  • 七、J.U.C - AQS
    • [CountDownLatch](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#countdownlatch)
    • [CyclicBarrier](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#cyclicbarrier)
    • [Semaphore](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#semaphore)
  • 八、J.U.C - 其它组件
    • [FutureTask](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#futuretask)
    • [BlockingQueue](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#blockingqueue)
    • [ForkJoin](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#forkjoin)
  • [九、线程不安全示例](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#九线程不安全示例)
  • 十、Java 内存模型
    • [主内存与工作内存](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#主内存与工作内存)
    • [内存间交互操作](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#内存间交互操作)
    • [内存模型三大特性](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#内存模型三大特性)
    • [先行发生原则](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#先行发生原则)
  • 十一、线程安全
    • [不可变](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#不可变)
    • [互斥同步](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#互斥同步)
    • [非阻塞同步](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#非阻塞同步)
    • [无同步方案](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#无同步方案)
  • 十二、锁优化
    • [自旋锁](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#自旋锁)
    • [锁消除](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#锁消除)
    • [锁粗化](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#锁粗化)
    • [轻量级锁](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#轻量级锁)
    • [偏向锁](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 并发.md#偏向锁)

JAVA虚拟机

[Java 虚拟机](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#java-虚拟机)

  • 一、运行时数据区域
    • [程序计数器](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#程序计数器)
    • [Java 虚拟机栈](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#java-虚拟机栈)
    • [本地方法栈](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#本地方法栈)
    • [堆](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#堆)
    • [方法区](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#方法区)
    • [运行时常量池](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#运行时常量池)
    • [直接内存](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#直接内存)
  • 二、垃圾收集
    • [判断一个对象是否可被回收](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#判断一个对象是否可被回收)
    • [引用类型](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#引用类型)
    • [垃圾收集算法](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#垃圾收集算法)
    • [垃圾收集器](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#垃圾收集器)
  • 三、内存分配与回收策略
    • [Minor GC 和 Full GC](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#minor-gc-和-full-gc)
    • [内存分配策略](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#内存分配策略)
    • [Full GC 的触发条件](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#full-gc-的触发条件)
  • 四、类加载机制
    • [类的生命周期](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#类的生命周期)
    • [类加载过程](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#类加载过程)
    • [类初始化时机](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#类初始化时机)
    • [类与类加载器](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#类与类加载器)
    • [类加载器分类](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#类加载器分类)
    • [双亲委派模型](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#双亲委派模型)
    • [自定义类加载器实现](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java 虚拟机.md#自定义类加载器实现)

JAVA I/O

[Java IO](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#java-io)

  • [一、概览](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#一概览)
  • [二、磁盘操作](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#二磁盘操作)
  • 三、字节操作
    • [实现文件复制](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#实现文件复制)
    • [装饰者模式](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#装饰者模式)
  • 四、字符操作
    • [编码与解码](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#编码与解码)
    • [String 的编码方式](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#string-的编码方式)
    • [Reader 与 Writer](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#reader-与-writer)
    • [实现逐行输出文本文件的内容](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#实现逐行输出文本文件的内容)
  • 五、对象操作
    • [序列化](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#序列化)
    • [Serializable](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#serializable)
    • [transient](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#transient)
  • 六、网络操作
    • [InetAddress](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#inetaddress)
    • [URL](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#url)
    • [Sockets](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#sockets)
    • [Datagram](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#datagram)
  • 七、NIO
    • [流与块](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#流与块)
    • [通道与缓冲区](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#通道与缓冲区)
    • [缓冲区状态变量](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#缓冲区状态变量)
    • [文件 NIO 实例](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#文件-nio-实例)
    • [选择器](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#选择器)
    • [套接字 NIO 实例](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#套接字-nio-实例)
    • [内存映射文件](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#内存映射文件)
    • [对比](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java IO.md#对比)

Android知识

Android 系统启动流程

loader(引导程序加载到RAM)-> kenerl初始化(start_kener和reset_kener),启动initi进程->init fork一个zygote进程,管理所有的java进程->zygote fork SystemServer,管理AMS,PMS,WMS;

APP启动流程

在这里插入图片描述

  • 获取AMS的引用,startActivity ->socket发送信息,zygote fork创建进程->ActivityThread main 创建application

  • 用Socket原因是,怕父进程binder线程有锁,然后子进程的主线程一直在等其子线程(从父进程拷贝过来的子进程)的资源,但是其实父进程的子进程并没有被拷贝过来,造成死锁,所以fork不允许存在多线程。而非常巧的是Binder通讯偏偏就是多线程,所以干脆父进程(Zgote)这个时候就不使用binder线程

PMS

  • 管理安装包,安装APK,管理APK;
  • 扫描app,获取AndroidManifest.xml,解析Manifest,加载入口activty(AMS查)

为什么要PMS

  • 每次开启app需要遍历/data/app ,跳转的app;
  • I/O操作获取AndroidManifest.xml;
  • dom解析Manifest,Activity标签(找到入口activity);
  • 加载入口Activity;

Handler

①先说handler导致activity内存泄露的原因: handler发送的消息在当前handler的消息队列中,如果此时activity finish掉了,那么消息队列的消息依旧会由handler进行处理,若此时handler声明为内部类(非静态内部类),我们知道内部类天然持有外部类的实例引用,那么就会导致activity无法回收,进而导致activity泄露。 ②为何handler要定义为static? 因为静态内部类不持有外部类的引用,所以使用静态的handler不会导致activity的泄露 ③为何handler要定义为static的同时,还要用WeakReference 包裹外部类的对象? 这是因为我们需要使用外部类的成员,可以通过"activity. "获取变量方法等,如果直接使用强引用,显然会导致activity泄露。

BroadcastReceiver

  • 不能做耗时操作(ANR),也不能用子线程完成耗时操作,因为一旦广播结束,在进程中很容易优先被杀死,此时工作线程也会被杀死,只能在onreceive内开启Service,交给service处理;

Android系统启动流程

android的启动流程是从底层开始进行的,具体如下所示:

Android是基于Linux内核的系统,Android的启动过程主要分为两个阶段,首先是Linux内核的启动,然后是Android框架的启动。

可以将Andorid系统的启动流程分为以下五个层进行展开,分别是Loader层,Kernel层,Native层,Framework层,Application层。

Loader层
1.首先按开机键后,引导芯片将引导程序从ROM中加载到RAM中
2.引导程序(Bootloader)的主要作用就是将操作系统映像文件拷贝到RAM中
Kernel层
3.接着通过start_kernel函数和reset_kernel函数完成对kernel的初始化操作,同时启动用户空间的init进程
4.init进程是是一个十分重要的祖先进程,linux中的所有进程都是由init进程直接或者间接fork出来的,init进程一启动时就会读取init.rc脚本文件
Native层(包括利用surfaceflinger创建动画,孵化zygote进程,以及用户守护进程)
5.init进程创建后,会fork出一个zygote进程,这个进程是所有Java进程的父进程,所有的服务都会向其进行请求来fork出java进程
6.init还会创建servicemanager进程,它是Binder IPC通信过程中的守护进程,并会集中管理系统内的所有服务

Framework层
7.由zygote进程通过startSystemServer()方法fork出SystemServer进程,该进程同样是Andorid系统内重要的进程,AMS,PMS,WMS等多个进程都是由Systemserver进程fork出来的,SystemServer包含了startBootstrapServices(),startCoreServices(),startOtherServices()创建服务的方法:具体见wiki:

猜你喜欢

转载自blog.csdn.net/Grekit_Sun/article/details/113630035