From 0b9671a0e13789b95bd1c6e4fe27d8a72d8d2bf0 Mon Sep 17 00:00:00 2001 From: john Date: Sat, 2 Jan 2021 10:54:53 +0800 Subject: [PATCH 1/9] df --- README.md | 236 +++++++++++++++++++++++++++--------------------------- 1 file changed, 118 insertions(+), 118 deletions(-) diff --git a/README.md b/README.md index 01f9a96..993ad08 100644 --- a/README.md +++ b/README.md @@ -3,40 +3,40 @@ ## 第一部分: -* [Android(安卓)](https://github.com/GeniusVJR/LearningNotes/tree/master/Part1/Android) - - * [Android基础知识](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Android基础知识.md) - * [Android内存泄漏总结](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Android内存泄漏总结.md) - * [Handler内存泄漏分析及解决](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Handler内存泄漏分析及解决.md) - * [Handler、Looper、Message、MessageQueue基础流程分析](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/线程通信基础流程分析.md) - * [Android性能优化](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Android性能优化.md) - * [ListView详解](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Listview详解.md) - * [RecyclerView和ListView的异同](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Recyclerview和Listview的异同.md) - * [AsyncTask源码分析](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Asynctask源码分析.md) - * [插件化技术](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/插件化技术学习.md) - * [自定义控件](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/自定义控件.md) +* [Android(安卓)](https://github.com/BlogForMe/LearningNotes/tree/master/Part1/Android) + + * [Android基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Android基础知识.md) + * [Android内存泄漏总结](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Android内存泄漏总结.md) + * [Handler内存泄漏分析及解决](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Handler内存泄漏分析及解决.md) + * [Handler、Looper、Message、MessageQueue基础流程分析](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/线程通信基础流程分析.md) + * [Android性能优化](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Android性能优化.md) + * [ListView详解](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Listview详解.md) + * [RecyclerView和ListView的异同](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Recyclerview和Listview的异同.md) + * [AsyncTask源码分析](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Asynctask源码分析.md) + * [插件化技术](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/插件化技术学习.md) + * [自定义控件](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/自定义控件.md) * [事件分发机制](http://www.jianshu.com/p/e99b5e8bd67b) - * [ANR问题](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/ANR问题.md) - * [Art和Dalvik的区别](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Art和Dalvik区别.md) - * [Android关于OOM的解决方案](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Android关于oom的解决方案.md) - * [Fragment](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Fragment.md) + * [ANR问题](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/ANR问题.md) + * [Art和Dalvik的区别](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Art和Dalvik区别.md) + * [Android关于OOM的解决方案](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Android关于oom的解决方案.md) + * [Fragment](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Fragment.md) * [Activity&Fragment](https://github.com/xxv/android-lifecycle) - * [SurfaceView](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/SurfaceView.md) - * [Android几种进程](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Android几种进程.md) - * [APP启动过程](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/APP启动过程.md) + * [SurfaceView](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/SurfaceView.md) + * [Android几种进程](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Android几种进程.md) + * [APP启动过程](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/APP启动过程.md) * Activity启动流程以及界面展示过程 - * [图片三级缓存](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Android图片中的三级缓存.md) - * [Bitmap的分析与使用](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Bitmap的分析与使用.md) - * [热修复的原理](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/热修复技术.md) - * [AIDL](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/AIDL.md) - * [Binder机制](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Binder机制.md) - * [Zygote和System进程的启动过程](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Zygote和System进程的启动过程.md) - * [Android中的MVC,MVP和MVVM](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/MVC%2CMVP%2CMVVM的区别.md) - * [MVP](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/MVP.md) - * [Android开机过程](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Android开机过程.md) + * [图片三级缓存](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Android图片中的三级缓存.md) + * [Bitmap的分析与使用](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Bitmap的分析与使用.md) + * [热修复的原理](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/热修复技术.md) + * [AIDL](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/AIDL.md) + * [Binder机制](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Binder机制.md) + * [Zygote和System进程的启动过程](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Zygote和System进程的启动过程.md) + * [Android中的MVC,MVP和MVVM](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/MVC%2CMVP%2CMVVM的区别.md) + * [MVP](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/MVP.md) + * [Android开机过程](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Android开机过程.md) * [Retrofit源码分析](http://www.jianshu.com/p/c1a3a881a144) * [Glide源码分析](http://frodoking.github.io/2015/10/10/android-glide/) - * [EventBus用法详解](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/EventBus用法详解.md) + * [EventBus用法详解](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/EventBus用法详解.md) * [EventBus源码分析](http://p.codekk.com/blogs/detail/54cfab086c4761e5001b2538) * [Android ORM 框架之 greenDAO 使用心得](http://www.open-open.com/lib/view/open1438065400878.html) * [Data Binding(数据绑定)用户指南](http://www.jcodecraeer.com/a/anzhuokaifa/developer/2015/0606/3005.html) @@ -44,40 +44,40 @@ * 设计一套图片异步加载缓存方案 * Android UI适配 * [Gradle](http://wuxiaolong.me/categories/Gradle/) - * [查漏补缺](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/查漏补缺.md) - * [Git操作](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Git操作.md) + * [查漏补缺](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/查漏补缺.md) + * [Git操作](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Git操作.md) --- -* [DesignPattern(设计模式)](https://github.com/GeniusVJR/LearningNotes/tree/master/Part1/DesignPattern) +* [DesignPattern(设计模式)](https://github.com/BlogForMe/LearningNotes/tree/master/Part1/DesignPattern) - * [面向对象六大原则](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/DesignPattern/常见的面向对象设计原则.md) - * [单例模式](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/DesignPattern/单例模式.md) - * [Builder模式](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/DesignPattern/Builder模式.md) - * [原型模式](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/DesignPattern/原型模式.md) - * [简单工厂](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/DesignPattern/简单工厂.md) + * [面向对象六大原则](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/常见的面向对象设计原则.md) + * [单例模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/单例模式.md) + * [Builder模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/Builder模式.md) + * [原型模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/原型模式.md) + * [简单工厂](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/简单工厂.md) * 工厂方法模式 * 抽象工厂模式 - * [策略模式](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/DesignPattern/策略模式.md) + * [策略模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/策略模式.md) * 状态模式 - * [责任链模式](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/DesignPattern/责任链模式.md) + * [责任链模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/责任链模式.md) * 解释器模式 * 命令模式 - * [观察者模式](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/DesignPattern/观察者模式.md) + * [观察者模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/观察者模式.md) * 备忘录模式 * 迭代器模式 * 模板方法模式 * 访问者模式 * 中介者模式 - * [代理模式](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/DesignPattern/代理模式.md) + * [代理模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/代理模式.md) * 组合模式 - * [适配器模式](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/DesignPattern/适配器模式.md) + * [适配器模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/适配器模式.md) * 装饰模式 * 享元模式 - * [外观模式](https://github.com/GeniusVJR/LearningNotes/blob/master/Part1/DesignPattern/外观模式.md) + * [外观模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/外观模式.md) * 桥接模式 @@ -85,46 +85,46 @@ ## 第二部分 -* [JavaSE(Java基础)](https://github.com/GeniusVJR/LearningNotes/tree/master/Part2/JavaSE) - * [Java基础知识](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaSE/Java基础知识.md) - * [Java中的内存泄漏](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaSE/Java中的内存泄漏.md) - * [String源码分析](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaSE/String源码分析.md) - * [Java集合框架](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaSE/Java集合框架.md) - * [ArrayList源码剖析](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaSE/ArrayList源码剖析.md) - * [LinkedList源码剖析](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaSE/LinkedList源码剖析.md) - * [Vector源码剖析](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaSE/Vector源码剖析.md) - * [HashMap源码剖析](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaSE/HashMap源码剖析.md) - * [HashTable源码剖析](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaSE/HashTable源码剖析.md) - * [LinkedHashMap源码剖析](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaSE/LinkedHashMap源码剖析.md) - -* [JVM(Java虚拟机)](https://github.com/GeniusVJR/LearningNotes/tree/master/Part2/JVM) - * [JVM基础知识](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JVM/JVM.md) - * [JVM类加载机制](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JVM/JVM类加载机制.md) - * [Java内存区域与内存溢出](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JVM/Java内存区域与内存溢出.md) - * [垃圾回收算法](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JVM/垃圾回收算法.md) -* [JavaConcurrent(Java并发)](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaConcurrent/Java并发.md) - * [Java并发基础知识](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaConcurrent/Java并发基础知识.md) - * [生产者和消费者问题](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaConcurrent/生产者和消费者问题.md) - * [Thread和Runnable实现多线程的区别](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaConcurrent/Thread和Runnable实现多线程的区别.md) - * [线程中断](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaConcurrent/线程中断.md) - * [守护线程与阻塞线程](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaConcurrent/守护线程与阻塞线程.md) - * [synchronized](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaConcurrent/Synchronized.md) - * [多线程环境中安全使用集合API](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaConcurrent/多线程环境中安全使用集合API.md) - * [实现内存可见的两种方法比较:加锁和volatile变量](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaConcurrent/实现内存可见的两种方法比较:加锁和volatile变量.md) - * [死锁](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaConcurrent/死锁.md) - * [可重入内置锁](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaConcurrent/可重入内置锁.md) - * [使用wait/notify/notifyAll实现线程间通信](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaConcurrent/使用wait:notify:notifyall实现线程间通信.md) - * [NIO](https://github.com/GeniusVJR/LearningNotes/blob/master/Part2/JavaConcurrent/NIO.md) +* [JavaSE(Java基础)](https://github.com/BlogForMe/LearningNotes/tree/master/Part2/JavaSE) + * [Java基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/Java基础知识.md) + * [Java中的内存泄漏](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/Java中的内存泄漏.md) + * [String源码分析](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/String源码分析.md) + * [Java集合框架](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/Java集合框架.md) + * [ArrayList源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/ArrayList源码剖析.md) + * [LinkedList源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/LinkedList源码剖析.md) + * [Vector源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/Vector源码剖析.md) + * [HashMap源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/HashMap源码剖析.md) + * [HashTable源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/HashTable源码剖析.md) + * [LinkedHashMap源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/LinkedHashMap源码剖析.md) + +* [JVM(Java虚拟机)](https://github.com/BlogForMe/LearningNotes/tree/master/Part2/JVM) + * [JVM基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JVM/JVM.md) + * [JVM类加载机制](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JVM/JVM类加载机制.md) + * [Java内存区域与内存溢出](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JVM/Java内存区域与内存溢出.md) + * [垃圾回收算法](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JVM/垃圾回收算法.md) +* [JavaConcurrent(Java并发)](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/Java并发.md) + * [Java并发基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/Java并发基础知识.md) + * [生产者和消费者问题](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/生产者和消费者问题.md) + * [Thread和Runnable实现多线程的区别](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/Thread和Runnable实现多线程的区别.md) + * [线程中断](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/线程中断.md) + * [守护线程与阻塞线程](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/守护线程与阻塞线程.md) + * [synchronized](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/Synchronized.md) + * [多线程环境中安全使用集合API](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/多线程环境中安全使用集合API.md) + * [实现内存可见的两种方法比较:加锁和volatile变量](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/实现内存可见的两种方法比较:加锁和volatile变量.md) + * [死锁](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/死锁.md) + * [可重入内置锁](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/可重入内置锁.md) + * [使用wait/notify/notifyAll实现线程间通信](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/使用wait:notify:notifyall实现线程间通信.md) + * [NIO](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/NIO.md) --- ## 第三部分 -* [DataStructure(数据结构)](https://github.com/GeniusVJR/LearningNotes/tree/master/Part3/DataStructure) - * [数组](https://github.com/GeniusVJR/LearningNotes/blob/master/Part3/DataStructure/数组.md) +* [DataStructure(数据结构)](https://github.com/BlogForMe/LearningNotes/tree/master/Part3/DataStructure) + * [数组](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/DataStructure/数组.md) * 链表 - * [栈和队列](https://github.com/GeniusVJR/LearningNotes/blob/master/Part3/DataStructure/栈和队列.md) + * [栈和队列](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/DataStructure/栈和队列.md) * 字符串 * 树 * 图 @@ -134,35 +134,35 @@ * [冒泡排序](https://github.com/anAngryAnt/LearningNotes/tree/master/Part3/Algorithm/Sort/冒泡排序.md) * [快速排序](https://github.com/anAngryAnt/LearningNotes/tree/master/Part3/Algorithm/Sort/快速排序.md) * [归并排序](https://github.com/anAngryAnt/LearningNotes/tree/master/Part3/Algorithm/Sort/归并排序.md) - * [面试中的十大排序算法总结](https://github.com/GeniusVJR/LearningNotes/blob/master/Part3/Algorithm/Sort/%E9%9D%A2%E8%AF%95%E4%B8%AD%E7%9A%84%2010%20%E5%A4%A7%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E6%80%BB%E7%BB%93.md) + * [面试中的十大排序算法总结](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/Sort/%E9%9D%A2%E8%AF%95%E4%B8%AD%E7%9A%84%2010%20%E5%A4%A7%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E6%80%BB%E7%BB%93.md) * 查找 - * [顺序查找](https://github.com/GeniusVJR/LearningNotes/blob/master/Part3/Algorithm/Lookup/顺序查找.md) - * [折半查找](https://github.com/GeniusVJR/LearningNotes/blob/master/Part3/Algorithm/Lookup/折半查找.md) + * [顺序查找](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/Lookup/顺序查找.md) + * [折半查找](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/Lookup/折半查找.md) * 《剑指Offer》 - * [面试题2:实现Singleton模式](https://github.com/GeniusVJR/LearningNotes/blob/master/Part3/Algorithm/剑指Offer/1.七种方式实现singleton模式.md) - * [面试题6:重建二叉树](https://github.com/GeniusVJR/LearningNotes/blob/master/Part3/Algorithm/剑指Offer/面试题6:重建二叉树.md) - * [面试题11:数值的整数次方](https://github.com/GeniusVJR/LearningNotes/blob/master/Part3/Algorithm/剑指Offer/面试题11:数值的整数次方.md) - * [面试题44:扑克牌的顺子](https://github.com/GeniusVJR/LearningNotes/blob/master/Part3/Algorithm/剑指Offer/面试题44:扑克牌的顺子.md) - * [面试题45:圆圈中最后剩下的数字](https://github.com/GeniusVJR/LearningNotes/blob/master/Part3/Algorithm/剑指Offer/面试题45:圆圈中最后剩下的数字.md) + * [面试题2:实现Singleton模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/剑指Offer/1.七种方式实现singleton模式.md) + * [面试题6:重建二叉树](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/剑指Offer/面试题6:重建二叉树.md) + * [面试题11:数值的整数次方](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/剑指Offer/面试题11:数值的整数次方.md) + * [面试题44:扑克牌的顺子](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/剑指Offer/面试题44:扑克牌的顺子.md) + * [面试题45:圆圈中最后剩下的数字](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/剑指Offer/面试题45:圆圈中最后剩下的数字.md) * 《程序员面试金典》 * 《LeetCode》 - * [two-sum](https://github.com/GeniusVJR/LearningNotes/blob/master/Part3/Algorithm/LeetCode/two-sum.md) + * [two-sum](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/LeetCode/two-sum.md) * 《程序员代码面试指南(左程云)》 - * [1.设计一个有getMin功能的栈](https://github.com/GeniusVJR/LearningNotes/blob/master/Part3/Algorithm/程序员代码面试指南(左程云)/1.设计一个有getMin功能的栈.md) - * [2.由两个栈组成的队列](https://github.com/GeniusVJR/LearningNotes/blob/master/Part3/Algorithm/程序员代码面试指南(左程云)/2.由两个栈组成的队列.md) - * [3.如何仅用递归函数和栈操作逆序一个栈](https://github.com/GeniusVJR/LearningNotes/blob/master/Part3/Algorithm/程序员代码面试指南(左程云)/3.如何仅用递归函数和栈操作逆序一个栈.md) + * [1.设计一个有getMin功能的栈](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/程序员代码面试指南(左程云)/1.设计一个有getMin功能的栈.md) + * [2.由两个栈组成的队列](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/程序员代码面试指南(左程云)/2.由两个栈组成的队列.md) + * [3.如何仅用递归函数和栈操作逆序一个栈](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/程序员代码面试指南(左程云)/3.如何仅用递归函数和栈操作逆序一个栈.md) --- ## 第四部分 -* [Network(网络)](https://github.com/GeniusVJR/LearningNotes/tree/master/Part4/Network) - * [TCP/UDP](https://github.com/GeniusVJR/LearningNotes/blob/master/Part4/Network/TCP与UDP.md) - * [HTTP](https://github.com/GeniusVJR/LearningNotes/blob/master/Part4/Network/Http协议.md) - * [Socket](https://github.com/GeniusVJR/LearningNotes/blob/master/Part4/Network/Socket.md) - * [计算机网络基础汇总](https://github.com/GeniusVJR/LearningNotes/blob/master/Part4/Network/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80%E6%B1%87%E6%80%BB.md) -* [OperatingSystem(操作系统)](https://github.com/GeniusVJR/LearningNotes/blob/master/Part4/OperatingSystem/操作系统.md) - * [Linux系统的IPC](https://github.com/GeniusVJR/LearningNotes/blob/master/Part4/OperatingSystem/Linux系统的IPC.md) +* [Network(网络)](https://github.com/BlogForMe/LearningNotes/tree/master/Part4/Network) + * [TCP/UDP](https://github.com/BlogForMe/LearningNotes/blob/master/Part4/Network/TCP与UDP.md) + * [HTTP](https://github.com/BlogForMe/LearningNotes/blob/master/Part4/Network/Http协议.md) + * [Socket](https://github.com/BlogForMe/LearningNotes/blob/master/Part4/Network/Socket.md) + * [计算机网络基础汇总](https://github.com/BlogForMe/LearningNotes/blob/master/Part4/Network/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80%E6%B1%87%E6%80%BB.md) +* [OperatingSystem(操作系统)](https://github.com/BlogForMe/LearningNotes/blob/master/Part4/OperatingSystem/操作系统.md) + * [Linux系统的IPC](https://github.com/BlogForMe/LearningNotes/blob/master/Part4/OperatingSystem/Linux系统的IPC.md) --- @@ -170,31 +170,31 @@ ## 第五部分 -* [ReadingNotes(读书笔记)](https://github.com/GeniusVJR/LearningNotes/tree/master/Part5/ReadingNotes) - * [《APP研发录》第1章读书笔记](https://github.com/GeniusVJR/LearningNotes/blob/master/Part5/ReadingNotes/《APP研发录》第1章读书笔记.md) - * [《APP研发录》第2章读书笔记](https://github.com/GeniusVJR/LearningNotes/blob/master/Part5/ReadingNotes/《APP研发录》第2章读书笔记.md) - * [《Android开发艺术探索》第一章笔记](https://github.com/GeniusVJR/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第一章笔记.md) - * [《Android开发艺术探索》第二章笔记](https://github.com/GeniusVJR/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第二章笔记.md) - * [《Android开发艺术探索》第三章笔记](https://github.com/GeniusVJR/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第三章笔记.md) - * [《Android开发艺术探索》第四章笔记](https://github.com/GeniusVJR/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第四章笔记.md) - * [《Android开发艺术探索》第八章笔记](https://github.com/GeniusVJR/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第八章笔记.md) - * [《Android开发艺术探索》第十五章笔记](https://github.com/GeniusVJR/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第十五章笔记.md) - * [《深入理解Java虚拟机》第12章](https://github.com/GeniusVJR/LearningNotes/blob/master/Part5/ReadingNotes/《深入理解java虚拟机》第12章.md) - * [《Java编程思想》第一章读书笔记](https://github.com/GeniusVJR/LearningNotes/blob/master/Part5/ReadingNotes/《Java编程思想》第一章读书笔记.md) - * [《Java编程思想》第二章读书笔记](https://github.com/GeniusVJR/LearningNotes/blob/master/Part5/ReadingNotes/《Java编程思想》第二章读书笔记.md) - -* [Project(项目)](https://github.com/GeniusVJR/LearningNotes/tree/master/Part5/Project) - * [项目难点](https://github.com/GeniusVJR/LearningNotes/blob/master/Part5/Project/项目.md) +* [ReadingNotes(读书笔记)](https://github.com/BlogForMe/LearningNotes/tree/master/Part5/ReadingNotes) + * [《APP研发录》第1章读书笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《APP研发录》第1章读书笔记.md) + * [《APP研发录》第2章读书笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《APP研发录》第2章读书笔记.md) + * [《Android开发艺术探索》第一章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第一章笔记.md) + * [《Android开发艺术探索》第二章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第二章笔记.md) + * [《Android开发艺术探索》第三章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第三章笔记.md) + * [《Android开发艺术探索》第四章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第四章笔记.md) + * [《Android开发艺术探索》第八章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第八章笔记.md) + * [《Android开发艺术探索》第十五章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第十五章笔记.md) + * [《深入理解Java虚拟机》第12章](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《深入理解java虚拟机》第12章.md) + * [《Java编程思想》第一章读书笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《Java编程思想》第一章读书笔记.md) + * [《Java编程思想》第二章读书笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《Java编程思想》第二章读书笔记.md) + +* [Project(项目)](https://github.com/BlogForMe/LearningNotes/tree/master/Part5/Project) + * [项目难点](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/Project/项目.md) ## 第六部分 -* [InterviewExperience(面试经验)](https://github.com/GeniusVJR/LearningNotes/tree/master/Part6/InterviewExperience) - * [Alibaba](https://github.com/GeniusVJR/LearningNotes/blob/master/Part6/InterviewExperience/Alibaba.md) - * [美团](https://github.com/GeniusVJR/LearningNotes/blob/master/Part6/InterviewExperience/美团.md) - * [豌豆荚](https://github.com/GeniusVJR/LearningNotes/blob/master/Part6/InterviewExperience/豌豆荚.md) - * [蜻蜓FM](https://github.com/GeniusVJR/LearningNotes/blob/master/Part6/InterviewExperience/蜻蜓FM.md) - * [新浪微博](https://github.com/GeniusVJR/LearningNotes/blob/master/Part6/InterviewExperience/新浪微博.md) - * [网易杭研](https://github.com/GeniusVJR/LearningNotes/blob/master/Part6/InterviewExperience/网易杭研.md) +* [InterviewExperience(面试经验)](https://github.com/BlogForMe/LearningNotes/tree/master/Part6/InterviewExperience) + * [Alibaba](https://github.com/BlogForMe/LearningNotes/blob/master/Part6/InterviewExperience/Alibaba.md) + * [美团](https://github.com/BlogForMe/LearningNotes/blob/master/Part6/InterviewExperience/美团.md) + * [豌豆荚](https://github.com/BlogForMe/LearningNotes/blob/master/Part6/InterviewExperience/豌豆荚.md) + * [蜻蜓FM](https://github.com/BlogForMe/LearningNotes/blob/master/Part6/InterviewExperience/蜻蜓FM.md) + * [新浪微博](https://github.com/BlogForMe/LearningNotes/blob/master/Part6/InterviewExperience/新浪微博.md) + * [网易杭研](https://github.com/BlogForMe/LearningNotes/blob/master/Part6/InterviewExperience/网易杭研.md) --- @@ -204,7 +204,7 @@ --- 有任何问题欢迎联系: -geniusvjr@gmail.com +BlogForMe@gmail.com 欢迎关注我的知乎账号: From 8b913a382338502de823e3ddcf846f95b9697fa0 Mon Sep 17 00:00:00 2001 From: john Date: Sat, 2 Jan 2021 11:13:36 +0800 Subject: [PATCH 2/9] dir change --- .DS_Store | Bin 0 -> 10244 bytes AndroidJob/.DS_Store | Bin 0 -> 8196 bytes {Part1 => AndroidJob}/Android/AIDL.md | 0 .../Android/ANR\351\227\256\351\242\230.md" | 0 ...57\345\212\250\350\277\207\347\250\213.md" | 0 ...13\345\205\250\350\247\243\346\236\220.md" | 0 ...43\345\206\263\346\226\271\346\241\210.md" | 0 ...04\346\274\217\346\200\273\347\273\223.md" | 0 ...40\347\247\215\350\277\233\347\250\213.md" | 0 ...11\347\272\247\347\274\223\345\255\230.md" | 0 ...72\347\241\200\347\237\245\350\257\206.md" | 0 ...00\346\234\272\350\277\207\347\250\213.md" | 0 ...47\350\203\275\344\274\230\345\214\226.md" | 0 ...73\347\273\237\346\234\272\345\210\266.md" | 0 ...\222\214Dalvik\345\214\272\345\210\253.md" | 0 ...20\347\240\201\345\210\206\346\236\220.md" | 0 .../Binder\346\234\272\345\210\266.md" | 0 ...20\344\270\216\344\275\277\347\224\250.md" | 0 ...50\346\263\225\350\257\246\350\247\243.md" | 0 .../Android/FlowchartDiagram.jpg | Bin {Part1 => AndroidJob}/Android/Fragment.md | 0 .../Android/Git\346\223\215\344\275\234.md" | 0 ...20\345\217\212\350\247\243\345\206\263.md" | 0 .../Listview\350\257\246\350\247\243.md" | 0 ...VM\347\232\204\345\214\272\345\210\253.md" | 0 {Part1 => AndroidJob}/Android/MVP.md | 0 ...ew\347\232\204\345\274\202\345\220\214.md" | 0 {Part1 => AndroidJob}/Android/SurfaceView.md | 0 ...57\345\212\250\350\277\207\347\250\213.md" | 0 ...06\345\217\221\346\234\272\345\210\266.md" | 0 ...20\347\240\201\345\210\206\346\236\220.md" | 0 ...00\346\234\257\345\255\246\344\271\240.md" | 0 ...45\346\274\217\350\241\245\347\274\272.md" | 0 ...56\345\244\215\346\212\200\346\234\257.md" | 0 ...01\347\250\213\345\210\206\346\236\220.md" | 0 ...32\344\271\211\346\216\247\344\273\266.md" | 0 .../Builder\346\250\241\345\274\217.md" | 0 ...43\347\220\206\346\250\241\345\274\217.md" | 0 ...25\344\276\213\346\250\241\345\274\217.md" | 0 ...37\345\236\213\346\250\241\345\274\217.md" | 0 ...26\350\247\202\346\250\241\345\274\217.md" | 0 ...76\350\256\241\345\216\237\345\210\231.md" | 0 ...26\347\225\245\346\250\241\345\274\217.md" | 0 ...00\345\215\225\345\267\245\345\216\202.md" | 0 ...37\350\200\205\346\250\241\345\274\217.md" | 0 ...73\351\223\276\346\250\241\345\274\217.md" | 0 ...15\345\231\250\346\250\241\345\274\217.md" | 0 BookNotes/.DS_Store | Bin 0 -> 6148 bytes ...73\344\271\246\347\254\224\350\256\260.md" | 0 ...73\344\271\246\347\254\224\350\256\260.md" | 0 ...00\347\253\240\347\254\224\350\256\260.md" | 0 ...11\347\253\240\347\254\224\350\256\260.md" | 0 ...14\347\253\240\347\254\224\350\256\260.md" | 0 ...53\347\253\240\347\254\224\350\256\260.md" | 0 ...24\347\253\240\347\254\224\350\256\260.md" | 0 ...33\347\253\240\347\254\224\350\256\260.md" | 0 ...73\344\271\246\347\254\224\350\256\260.md" | 0 ...73\344\271\246\347\254\224\350\256\260.md" | 0 ...\343\200\213\347\254\25412\347\253\240.md" | 0 Bussiness/.DS_Store | Bin 0 -> 6148 bytes .../InterviewExperience/Alibaba.md | 0 ...60\346\265\252\345\276\256\345\215\232.md" | 0 ...21\346\230\223\346\235\255\347\240\224.md" | 0 .../\347\276\216\345\233\242.md" | 0 .../\350\234\273\350\234\223FM.md" | 0 .../\350\261\214\350\261\206\350\215\232.md" | 0 CsNetwork/.DS_Store | Bin 0 -> 6148 bytes .../Network/Http\345\215\217\350\256\256.md" | 0 {Part4 => CsNetwork}/Network/Socket.md | 0 .../Network/TCP\344\270\216UDP.md" | 0 ...72\347\241\200\346\261\207\346\200\273.md" | 0 ...347\263\273\347\273\237\347\232\204IPC.md" | 0 ...15\344\275\234\347\263\273\347\273\237.md" | 0 DataAlgorithm/.DS_Store | Bin 0 -> 6148 bytes .../Algorithm/LeetCode/two-sum.md | 0 .../Algorithm/LeetCode/zigzag-conversion.md | 0 ...30\345\215\212\346\237\245\346\211\276.md" | 0 ...72\345\272\217\346\237\245\346\211\276.md" | 0 ...22\346\263\241\346\216\222\345\272\217.md" | 0 ...22\345\271\266\346\216\222\345\272\217.md" | 0 ...53\351\200\237\346\216\222\345\272\217.md" | 0 ...11\346\213\251\346\216\222\345\272\217.md" | 0 ...27\346\263\225\346\200\273\347\273\223.md" | 0 ...6\260singleton\346\250\241\345\274\217.md" | 0 ...55\347\232\204\346\237\245\346\211\276.md" | 0 ...17\347\232\204\351\223\276\350\241\250.md" | 0 ...00\345\260\217\346\225\260\345\255\227.md" | 0 ...64\346\225\260\346\254\241\346\226\271.md" | 0 ...7\347\232\204n\344\275\215\346\225\260.md" | 0 ...14\347\232\204\351\241\272\345\255\220.md" | 0 ...13\347\232\204\346\225\260\345\255\227.md" | 0 ...72\344\272\214\345\217\211\346\240\221.md" | 0 ...37\350\203\275\347\232\204\346\240\210.md" | 0 ...20\347\232\204\351\230\237\345\210\227.md" | 0 ...17\344\270\200\344\270\252\346\240\210.md" | 0 ...\215\256\347\273\223\346\236\204(Java).md" | 0 .../\346\225\260\347\273\204.md" | 0 ...10\345\222\214\351\230\237\345\210\227.md" | 0 ...16\345\272\217\351\201\215\345\216\206.md" | 0 JavaJob/.DS_Store | Bin 0 -> 10244 bytes {Part2 => JavaJob}/JVM/JVM.md | 0 ...40\350\275\275\346\234\272\345\210\266.md" | 0 ...05\345\255\230\346\272\242\345\207\272.md" | 0 ...36\346\224\266\347\256\227\346\263\225.md" | 0 ...72\347\241\200\347\237\245\350\257\206.md" | 0 {Part2 => JavaJob}/JavaConcurrent/NIO.md | 0 .../JavaConcurrent/Synchronized.md | 0 ...13\347\232\204\345\214\272\345\210\253.md" | 0 ...60\345\244\232\347\272\277\347\250\213.md" | 0 ...17\344\277\256\351\245\260\347\254\246.md" | 0 ...13\351\227\264\351\200\232\344\277\241.md" | 0 ...45\345\206\205\347\275\256\351\224\201.md" | 0 ...347\224\250\351\233\206\345\220\210API.md" | 0 ...73\345\241\236\347\272\277\347\250\213.md" | 0 ...22\214volatile\345\217\230\351\207\217.md" | 0 .../\346\255\273\351\224\201.md" | 0 ...71\350\200\205\351\227\256\351\242\230.md" | 0 ...77\347\250\213\344\270\255\346\226\255.md" | 0 ...43\347\241\256\346\226\271\346\263\225.md" | 0 ...60\345\222\214\345\214\272\345\210\253.md" | 0 ...20\347\240\201\345\211\226\346\236\220.md" | 0 {Part2 => JavaJob}/JavaSE/Arraylist.md | 0 ...25\346\211\251\345\256\271\347\255\211.md" | 0 {Part2 => JavaJob}/JavaSE/Collection.md | 0 ...20\347\240\201\345\211\226\346\236\220.md" | 0 ...20\347\240\201\345\211\226\346\236\220.md" | 0 ...04\344\275\234\347\224\250\347\255\211.md" | 0 ...05\345\255\230\346\263\204\346\274\217.md" | 0 ...72\347\241\200\347\237\245\350\257\206.md" | 0 ...06\345\220\210\346\241\206\346\236\266.md" | 0 ...20\347\240\201\345\211\226\346\236\220.md" | 0 ...20\347\240\201\345\211\226\346\236\220.md" | 0 {Part2 => JavaJob}/JavaSE/Linkedlist.md | 0 {Part2 => JavaJob}/JavaSE/List.md | 0 {Part2 => JavaJob}/JavaSE/Queue.md | 0 {Part2 => JavaJob}/JavaSE/Set.md | 0 ...20\347\240\201\345\210\206\346\236\220.md" | 0 ...20\347\240\201\345\211\226\346\236\220.md" | 0 ...04\345\214\272\345\210\253\343\200\202.md" | 0 ...240\201\345\210\206\346\236\220HashMap.md" | 0 ...15\345\260\204\346\234\272\345\210\266.md" | 0 ...12\345\205\266\345\255\220\347\261\273.md" | 0 README.md | 244 +++++++++--------- 143 files changed, 122 insertions(+), 122 deletions(-) create mode 100644 .DS_Store create mode 100644 AndroidJob/.DS_Store rename {Part1 => AndroidJob}/Android/AIDL.md (100%) rename "Part1/Android/ANR\351\227\256\351\242\230.md" => "AndroidJob/Android/ANR\351\227\256\351\242\230.md" (100%) rename "Part1/Android/APP\345\220\257\345\212\250\350\277\207\347\250\213.md" => "AndroidJob/Android/APP\345\220\257\345\212\250\350\277\207\347\250\213.md" (100%) rename "Part1/Android/Activity\345\220\257\345\212\250\350\277\207\347\250\213\345\205\250\350\247\243\346\236\220.md" => "AndroidJob/Android/Activity\345\220\257\345\212\250\350\277\207\347\250\213\345\205\250\350\247\243\346\236\220.md" (100%) rename "Part1/Android/Android\345\205\263\344\272\216oom\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" => "AndroidJob/Android/Android\345\205\263\344\272\216oom\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" (100%) rename "Part1/Android/Android\345\206\205\345\255\230\346\263\204\346\274\217\346\200\273\347\273\223.md" => "AndroidJob/Android/Android\345\206\205\345\255\230\346\263\204\346\274\217\346\200\273\347\273\223.md" (100%) rename "Part1/Android/Android\345\207\240\347\247\215\350\277\233\347\250\213.md" => "AndroidJob/Android/Android\345\207\240\347\247\215\350\277\233\347\250\213.md" (100%) rename "Part1/Android/Android\345\233\276\347\211\207\344\270\255\347\232\204\344\270\211\347\272\247\347\274\223\345\255\230.md" => "AndroidJob/Android/Android\345\233\276\347\211\207\344\270\255\347\232\204\344\270\211\347\272\247\347\274\223\345\255\230.md" (100%) rename "Part1/Android/Android\345\237\272\347\241\200\347\237\245\350\257\206.md" => "AndroidJob/Android/Android\345\237\272\347\241\200\347\237\245\350\257\206.md" (100%) rename "Part1/Android/Android\345\274\200\346\234\272\350\277\207\347\250\213.md" => "AndroidJob/Android/Android\345\274\200\346\234\272\350\277\207\347\250\213.md" (100%) rename "Part1/Android/Android\346\200\247\350\203\275\344\274\230\345\214\226.md" => "AndroidJob/Android/Android\346\200\247\350\203\275\344\274\230\345\214\226.md" (100%) rename "Part1/Android/Android\347\263\273\347\273\237\346\234\272\345\210\266.md" => "AndroidJob/Android/Android\347\263\273\347\273\237\346\234\272\345\210\266.md" (100%) rename "Part1/Android/Art\345\222\214Dalvik\345\214\272\345\210\253.md" => "AndroidJob/Android/Art\345\222\214Dalvik\345\214\272\345\210\253.md" (100%) rename "Part1/Android/Asynctask\346\272\220\347\240\201\345\210\206\346\236\220.md" => "AndroidJob/Android/Asynctask\346\272\220\347\240\201\345\210\206\346\236\220.md" (100%) rename "Part1/Android/Binder\346\234\272\345\210\266.md" => "AndroidJob/Android/Binder\346\234\272\345\210\266.md" (100%) rename "Part1/Android/Bitmap\347\232\204\345\210\206\346\236\220\344\270\216\344\275\277\347\224\250.md" => "AndroidJob/Android/Bitmap\347\232\204\345\210\206\346\236\220\344\270\216\344\275\277\347\224\250.md" (100%) rename "Part1/Android/EventBus\347\224\250\346\263\225\350\257\246\350\247\243.md" => "AndroidJob/Android/EventBus\347\224\250\346\263\225\350\257\246\350\247\243.md" (100%) rename {Part1 => AndroidJob}/Android/FlowchartDiagram.jpg (100%) rename {Part1 => AndroidJob}/Android/Fragment.md (100%) rename "Part1/Android/Git\346\223\215\344\275\234.md" => "AndroidJob/Android/Git\346\223\215\344\275\234.md" (100%) rename "Part1/Android/Handler\345\206\205\345\255\230\346\263\204\346\274\217\345\210\206\346\236\220\345\217\212\350\247\243\345\206\263.md" => "AndroidJob/Android/Handler\345\206\205\345\255\230\346\263\204\346\274\217\345\210\206\346\236\220\345\217\212\350\247\243\345\206\263.md" (100%) rename "Part1/Android/Listview\350\257\246\350\247\243.md" => "AndroidJob/Android/Listview\350\257\246\350\247\243.md" (100%) rename "Part1/Android/MVC,MVP,MVVM\347\232\204\345\214\272\345\210\253.md" => "AndroidJob/Android/MVC,MVP,MVVM\347\232\204\345\214\272\345\210\253.md" (100%) rename {Part1 => AndroidJob}/Android/MVP.md (100%) rename "Part1/Android/Recyclerview\345\222\214Listview\347\232\204\345\274\202\345\220\214.md" => "AndroidJob/Android/Recyclerview\345\222\214Listview\347\232\204\345\274\202\345\220\214.md" (100%) rename {Part1 => AndroidJob}/Android/SurfaceView.md (100%) rename "Part1/Android/Zygote\345\222\214System\350\277\233\347\250\213\347\232\204\345\220\257\345\212\250\350\277\207\347\250\213.md" => "AndroidJob/Android/Zygote\345\222\214System\350\277\233\347\250\213\347\232\204\345\220\257\345\212\250\350\277\207\347\250\213.md" (100%) rename "Part1/Android/\344\272\213\344\273\266\345\210\206\345\217\221\346\234\272\345\210\266.md" => "AndroidJob/Android/\344\272\213\344\273\266\345\210\206\345\217\221\346\234\272\345\210\266.md" (100%) rename "Part1/Android/\345\274\200\346\272\220\346\241\206\346\236\266\346\272\220\347\240\201\345\210\206\346\236\220.md" => "AndroidJob/Android/\345\274\200\346\272\220\346\241\206\346\236\266\346\272\220\347\240\201\345\210\206\346\236\220.md" (100%) rename "Part1/Android/\346\217\222\344\273\266\345\214\226\346\212\200\346\234\257\345\255\246\344\271\240.md" => "AndroidJob/Android/\346\217\222\344\273\266\345\214\226\346\212\200\346\234\257\345\255\246\344\271\240.md" (100%) rename "Part1/Android/\346\237\245\346\274\217\350\241\245\347\274\272.md" => "AndroidJob/Android/\346\237\245\346\274\217\350\241\245\347\274\272.md" (100%) rename "Part1/Android/\347\203\255\344\277\256\345\244\215\346\212\200\346\234\257.md" => "AndroidJob/Android/\347\203\255\344\277\256\345\244\215\346\212\200\346\234\257.md" (100%) rename "Part1/Android/\347\272\277\347\250\213\351\200\232\344\277\241\345\237\272\347\241\200\346\265\201\347\250\213\345\210\206\346\236\220.md" => "AndroidJob/Android/\347\272\277\347\250\213\351\200\232\344\277\241\345\237\272\347\241\200\346\265\201\347\250\213\345\210\206\346\236\220.md" (100%) rename "Part1/Android/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266.md" => "AndroidJob/Android/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266.md" (100%) rename "Part1/DesignPattern/Builder\346\250\241\345\274\217.md" => "AndroidJob/DesignPattern/Builder\346\250\241\345\274\217.md" (100%) rename "Part1/DesignPattern/\344\273\243\347\220\206\346\250\241\345\274\217.md" => "AndroidJob/DesignPattern/\344\273\243\347\220\206\346\250\241\345\274\217.md" (100%) rename "Part1/DesignPattern/\345\215\225\344\276\213\346\250\241\345\274\217.md" => "AndroidJob/DesignPattern/\345\215\225\344\276\213\346\250\241\345\274\217.md" (100%) rename "Part1/DesignPattern/\345\216\237\345\236\213\346\250\241\345\274\217.md" => "AndroidJob/DesignPattern/\345\216\237\345\236\213\346\250\241\345\274\217.md" (100%) rename "Part1/DesignPattern/\345\244\226\350\247\202\346\250\241\345\274\217.md" => "AndroidJob/DesignPattern/\345\244\226\350\247\202\346\250\241\345\274\217.md" (100%) rename "Part1/DesignPattern/\345\270\270\350\247\201\347\232\204\351\235\242\345\220\221\345\257\271\350\261\241\350\256\276\350\256\241\345\216\237\345\210\231.md" => "AndroidJob/DesignPattern/\345\270\270\350\247\201\347\232\204\351\235\242\345\220\221\345\257\271\350\261\241\350\256\276\350\256\241\345\216\237\345\210\231.md" (100%) rename "Part1/DesignPattern/\347\255\226\347\225\245\346\250\241\345\274\217.md" => "AndroidJob/DesignPattern/\347\255\226\347\225\245\346\250\241\345\274\217.md" (100%) rename "Part1/DesignPattern/\347\256\200\345\215\225\345\267\245\345\216\202.md" => "AndroidJob/DesignPattern/\347\256\200\345\215\225\345\267\245\345\216\202.md" (100%) rename "Part1/DesignPattern/\350\247\202\345\257\237\350\200\205\346\250\241\345\274\217.md" => "AndroidJob/DesignPattern/\350\247\202\345\257\237\350\200\205\346\250\241\345\274\217.md" (100%) rename "Part1/DesignPattern/\350\264\243\344\273\273\351\223\276\346\250\241\345\274\217.md" => "AndroidJob/DesignPattern/\350\264\243\344\273\273\351\223\276\346\250\241\345\274\217.md" (100%) rename "Part1/DesignPattern/\351\200\202\351\205\215\345\231\250\346\250\241\345\274\217.md" => "AndroidJob/DesignPattern/\351\200\202\351\205\215\345\231\250\346\250\241\345\274\217.md" (100%) create mode 100644 BookNotes/.DS_Store rename "Part5/ReadingNotes/\343\200\212APP\347\240\224\345\217\221\345\275\225\343\200\213\347\254\2541\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" => "BookNotes/ReadingNotes/\343\200\212APP\347\240\224\345\217\221\345\275\225\343\200\213\347\254\2541\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" (100%) rename "Part5/ReadingNotes/\343\200\212APP\347\240\224\345\217\221\345\275\225\343\200\213\347\254\2542\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" => "BookNotes/ReadingNotes/\343\200\212APP\347\240\224\345\217\221\345\275\225\343\200\213\347\254\2542\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" (100%) rename "Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\270\200\347\253\240\347\254\224\350\256\260.md" => "BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\270\200\347\253\240\347\254\224\350\256\260.md" (100%) rename "Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\270\211\347\253\240\347\254\224\350\256\260.md" => "BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\270\211\347\253\240\347\254\224\350\256\260.md" (100%) rename "Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\272\214\347\253\240\347\254\224\350\256\260.md" => "BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\272\214\347\253\240\347\254\224\350\256\260.md" (100%) rename "Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\205\253\347\253\240\347\254\224\350\256\260.md" => "BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\205\253\347\253\240\347\254\224\350\256\260.md" (100%) rename "Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\215\201\344\272\224\347\253\240\347\254\224\350\256\260.md" => "BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\215\201\344\272\224\347\253\240\347\254\224\350\256\260.md" (100%) rename "Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\233\233\347\253\240\347\254\224\350\256\260.md" => "BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\233\233\347\253\240\347\254\224\350\256\260.md" (100%) rename "Part5/ReadingNotes/\343\200\212Java\347\274\226\347\250\213\346\200\235\346\203\263\343\200\213\347\254\254\344\270\200\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" => "BookNotes/ReadingNotes/\343\200\212Java\347\274\226\347\250\213\346\200\235\346\203\263\343\200\213\347\254\254\344\270\200\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" (100%) rename "Part5/ReadingNotes/\343\200\212Java\347\274\226\347\250\213\346\200\235\346\203\263\343\200\213\347\254\254\344\272\214\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" => "BookNotes/ReadingNotes/\343\200\212Java\347\274\226\347\250\213\346\200\235\346\203\263\343\200\213\347\254\254\344\272\214\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" (100%) rename "Part5/ReadingNotes/\343\200\212\346\267\261\345\205\245\347\220\206\350\247\243java\350\231\232\346\213\237\346\234\272\343\200\213\347\254\25412\347\253\240.md" => "BookNotes/ReadingNotes/\343\200\212\346\267\261\345\205\245\347\220\206\350\247\243java\350\231\232\346\213\237\346\234\272\343\200\213\347\254\25412\347\253\240.md" (100%) create mode 100644 Bussiness/.DS_Store rename {Part6 => Bussiness}/InterviewExperience/Alibaba.md (100%) rename "Part6/InterviewExperience/\346\226\260\346\265\252\345\276\256\345\215\232.md" => "Bussiness/InterviewExperience/\346\226\260\346\265\252\345\276\256\345\215\232.md" (100%) rename "Part6/InterviewExperience/\347\275\221\346\230\223\346\235\255\347\240\224.md" => "Bussiness/InterviewExperience/\347\275\221\346\230\223\346\235\255\347\240\224.md" (100%) rename "Part6/InterviewExperience/\347\276\216\345\233\242.md" => "Bussiness/InterviewExperience/\347\276\216\345\233\242.md" (100%) rename "Part6/InterviewExperience/\350\234\273\350\234\223FM.md" => "Bussiness/InterviewExperience/\350\234\273\350\234\223FM.md" (100%) rename "Part6/InterviewExperience/\350\261\214\350\261\206\350\215\232.md" => "Bussiness/InterviewExperience/\350\261\214\350\261\206\350\215\232.md" (100%) create mode 100644 CsNetwork/.DS_Store rename "Part4/Network/Http\345\215\217\350\256\256.md" => "CsNetwork/Network/Http\345\215\217\350\256\256.md" (100%) rename {Part4 => CsNetwork}/Network/Socket.md (100%) rename "Part4/Network/TCP\344\270\216UDP.md" => "CsNetwork/Network/TCP\344\270\216UDP.md" (100%) rename "Part4/Network/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234\345\237\272\347\241\200\346\261\207\346\200\273.md" => "CsNetwork/Network/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234\345\237\272\347\241\200\346\261\207\346\200\273.md" (100%) rename "Part4/OperatingSystem/Linux\347\263\273\347\273\237\347\232\204IPC.md" => "CsNetwork/OperatingSystem/Linux\347\263\273\347\273\237\347\232\204IPC.md" (100%) rename "Part4/OperatingSystem/\346\223\215\344\275\234\347\263\273\347\273\237.md" => "CsNetwork/OperatingSystem/\346\223\215\344\275\234\347\263\273\347\273\237.md" (100%) create mode 100644 DataAlgorithm/.DS_Store rename {Part3 => DataAlgorithm}/Algorithm/LeetCode/two-sum.md (100%) rename {Part3 => DataAlgorithm}/Algorithm/LeetCode/zigzag-conversion.md (100%) rename "Part3/Algorithm/Lookup/\346\212\230\345\215\212\346\237\245\346\211\276.md" => "DataAlgorithm/Algorithm/Lookup/\346\212\230\345\215\212\346\237\245\346\211\276.md" (100%) rename "Part3/Algorithm/Lookup/\351\241\272\345\272\217\346\237\245\346\211\276.md" => "DataAlgorithm/Algorithm/Lookup/\351\241\272\345\272\217\346\237\245\346\211\276.md" (100%) rename "Part3/Algorithm/Sort/\345\206\222\346\263\241\346\216\222\345\272\217.md" => "DataAlgorithm/Algorithm/Sort/\345\206\222\346\263\241\346\216\222\345\272\217.md" (100%) rename "Part3/Algorithm/Sort/\345\275\222\345\271\266\346\216\222\345\272\217.md" => "DataAlgorithm/Algorithm/Sort/\345\275\222\345\271\266\346\216\222\345\272\217.md" (100%) rename "Part3/Algorithm/Sort/\345\277\253\351\200\237\346\216\222\345\272\217.md" => "DataAlgorithm/Algorithm/Sort/\345\277\253\351\200\237\346\216\222\345\272\217.md" (100%) rename "Part3/Algorithm/Sort/\351\200\211\346\213\251\346\216\222\345\272\217.md" => "DataAlgorithm/Algorithm/Sort/\351\200\211\346\213\251\346\216\222\345\272\217.md" (100%) rename "Part3/Algorithm/Sort/\351\235\242\350\257\225\344\270\255\347\232\204 10 \345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.md" => "DataAlgorithm/Algorithm/Sort/\351\235\242\350\257\225\344\270\255\347\232\204 10 \345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.md" (100%) rename "Part3/Algorithm/\345\211\221\346\214\207Offer/1.\344\270\203\347\247\215\346\226\271\345\274\217\345\256\236\347\216\260singleton\346\250\241\345\274\217.md" => "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/1.\344\270\203\347\247\215\346\226\271\345\274\217\345\256\236\347\216\260singleton\346\250\241\345\274\217.md" (100%) rename "Part3/Algorithm/\345\211\221\346\214\207Offer/2.\344\272\214\347\273\264\346\225\260\347\273\204\344\270\255\347\232\204\346\237\245\346\211\276.md" => "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/2.\344\272\214\347\273\264\346\225\260\347\273\204\344\270\255\347\232\204\346\237\245\346\211\276.md" (100%) rename "Part3/Algorithm/\345\211\221\346\214\207Offer/\345\220\210\345\271\266\344\270\244\344\270\252\346\216\222\345\272\217\347\232\204\351\223\276\350\241\250.md" => "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\345\220\210\345\271\266\344\270\244\344\270\252\346\216\222\345\272\217\347\232\204\351\223\276\350\241\250.md" (100%) rename "Part3/Algorithm/\345\211\221\346\214\207Offer/\346\227\213\350\275\254\346\225\260\347\273\204\347\232\204\346\234\200\345\260\217\346\225\260\345\255\227.md" => "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\346\227\213\350\275\254\346\225\260\347\273\204\347\232\204\346\234\200\345\260\217\346\225\260\345\255\227.md" (100%) rename "Part3/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23011\357\274\232\346\225\260\345\200\274\347\232\204\346\225\264\346\225\260\346\254\241\346\226\271.md" => "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23011\357\274\232\346\225\260\345\200\274\347\232\204\346\225\264\346\225\260\346\254\241\346\226\271.md" (100%) rename "Part3/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23012\357\274\232\346\211\223\345\215\2601\345\210\260\346\234\200\345\244\247\347\232\204n\344\275\215\346\225\260.md" => "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23012\357\274\232\346\211\223\345\215\2601\345\210\260\346\234\200\345\244\247\347\232\204n\344\275\215\346\225\260.md" (100%) rename "Part3/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23044\357\274\232\346\211\221\345\205\213\347\211\214\347\232\204\351\241\272\345\255\220.md" => "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23044\357\274\232\346\211\221\345\205\213\347\211\214\347\232\204\351\241\272\345\255\220.md" (100%) rename "Part3/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23045\357\274\232\345\234\206\345\234\210\344\270\255\346\234\200\345\220\216\345\211\251\344\270\213\347\232\204\346\225\260\345\255\227.md" => "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23045\357\274\232\345\234\206\345\234\210\344\270\255\346\234\200\345\220\216\345\211\251\344\270\213\347\232\204\346\225\260\345\255\227.md" (100%) rename "Part3/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\2306\357\274\232\351\207\215\345\273\272\344\272\214\345\217\211\346\240\221.md" => "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\2306\357\274\232\351\207\215\345\273\272\344\272\214\345\217\211\346\240\221.md" (100%) rename "Part3/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/1.\350\256\276\350\256\241\344\270\200\344\270\252\346\234\211getMin\345\212\237\350\203\275\347\232\204\346\240\210.md" => "DataAlgorithm/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/1.\350\256\276\350\256\241\344\270\200\344\270\252\346\234\211getMin\345\212\237\350\203\275\347\232\204\346\240\210.md" (100%) rename "Part3/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/2.\347\224\261\344\270\244\344\270\252\346\240\210\347\273\204\346\210\220\347\232\204\351\230\237\345\210\227.md" => "DataAlgorithm/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/2.\347\224\261\344\270\244\344\270\252\346\240\210\347\273\204\346\210\220\347\232\204\351\230\237\345\210\227.md" (100%) rename "Part3/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/3.\345\246\202\344\275\225\344\273\205\347\224\250\351\200\222\345\275\222\345\207\275\346\225\260\345\222\214\346\240\210\346\223\215\344\275\234\351\200\206\345\272\217\344\270\200\344\270\252\346\240\210.md" => "DataAlgorithm/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/3.\345\246\202\344\275\225\344\273\205\347\224\250\351\200\222\345\275\222\345\207\275\346\225\260\345\222\214\346\240\210\346\223\215\344\275\234\351\200\206\345\272\217\344\270\200\344\270\252\346\240\210.md" (100%) rename "Part3/DataStructure/\346\225\260\346\215\256\347\273\223\346\236\204(Java).md" => "DataAlgorithm/DataStructure/\346\225\260\346\215\256\347\273\223\346\236\204(Java).md" (100%) rename "Part3/DataStructure/\346\225\260\347\273\204.md" => "DataAlgorithm/DataStructure/\346\225\260\347\273\204.md" (100%) rename "Part3/DataStructure/\346\240\210\345\222\214\351\230\237\345\210\227.md" => "DataAlgorithm/DataStructure/\346\240\210\345\222\214\351\230\237\345\210\227.md" (100%) rename "Part3/DataStructure/\351\200\222\345\275\222\345\222\214\351\235\236\351\200\222\345\275\222\346\226\271\345\274\217\345\256\236\347\216\260\344\272\214\345\217\211\346\240\221\345\205\210\343\200\201\344\270\255\343\200\201\345\220\216\345\272\217\351\201\215\345\216\206.md" => "DataAlgorithm/DataStructure/\351\200\222\345\275\222\345\222\214\351\235\236\351\200\222\345\275\222\346\226\271\345\274\217\345\256\236\347\216\260\344\272\214\345\217\211\346\240\221\345\205\210\343\200\201\344\270\255\343\200\201\345\220\216\345\272\217\351\201\215\345\216\206.md" (100%) create mode 100644 JavaJob/.DS_Store rename {Part2 => JavaJob}/JVM/JVM.md (100%) rename "Part2/JVM/JVM\347\261\273\345\212\240\350\275\275\346\234\272\345\210\266.md" => "JavaJob/JVM/JVM\347\261\273\345\212\240\350\275\275\346\234\272\345\210\266.md" (100%) rename "Part2/JVM/Java\345\206\205\345\255\230\345\214\272\345\237\237\344\270\216\345\206\205\345\255\230\346\272\242\345\207\272.md" => "JavaJob/JVM/Java\345\206\205\345\255\230\345\214\272\345\237\237\344\270\216\345\206\205\345\255\230\346\272\242\345\207\272.md" (100%) rename "Part2/JVM/\345\236\203\345\234\276\345\233\236\346\224\266\347\256\227\346\263\225.md" => "JavaJob/JVM/\345\236\203\345\234\276\345\233\236\346\224\266\347\256\227\346\263\225.md" (100%) rename "Part2/JavaConcurrent/Java\345\271\266\345\217\221\345\237\272\347\241\200\347\237\245\350\257\206.md" => "JavaJob/JavaConcurrent/Java\345\271\266\345\217\221\345\237\272\347\241\200\347\237\245\350\257\206.md" (100%) rename {Part2 => JavaJob}/JavaConcurrent/NIO.md (100%) rename {Part2 => JavaJob}/JavaConcurrent/Synchronized.md (100%) rename "Part2/JavaConcurrent/Thread\345\222\214Runnable\345\256\236\347\216\260\345\244\232\347\272\277\347\250\213\347\232\204\345\214\272\345\210\253.md" => "JavaJob/JavaConcurrent/Thread\345\222\214Runnable\345\256\236\347\216\260\345\244\232\347\272\277\347\250\213\347\232\204\345\214\272\345\210\253.md" (100%) rename "Part2/JavaConcurrent/thread\344\270\216runable\345\246\202\344\275\225\345\256\236\347\216\260\345\244\232\347\272\277\347\250\213.md" => "JavaJob/JavaConcurrent/thread\344\270\216runable\345\246\202\344\275\225\345\256\236\347\216\260\345\244\232\347\272\277\347\250\213.md" (100%) rename "Part2/JavaConcurrent/volatile\345\217\230\351\207\217\344\277\256\351\245\260\347\254\246.md" => "JavaJob/JavaConcurrent/volatile\345\217\230\351\207\217\344\277\256\351\245\260\347\254\246.md" (100%) rename "Part2/JavaConcurrent/\344\275\277\347\224\250wait notify notifyall\345\256\236\347\216\260\347\272\277\347\250\213\351\227\264\351\200\232\344\277\241.md" => "JavaJob/JavaConcurrent/\344\275\277\347\224\250wait notify notifyall\345\256\236\347\216\260\347\272\277\347\250\213\351\227\264\351\200\232\344\277\241.md" (100%) rename "Part2/JavaConcurrent/\345\217\257\351\207\215\345\205\245\345\206\205\347\275\256\351\224\201.md" => "JavaJob/JavaConcurrent/\345\217\257\351\207\215\345\205\245\345\206\205\347\275\256\351\224\201.md" (100%) rename "Part2/JavaConcurrent/\345\244\232\347\272\277\347\250\213\347\216\257\345\242\203\344\270\255\345\256\211\345\205\250\344\275\277\347\224\250\351\233\206\345\220\210API.md" => "JavaJob/JavaConcurrent/\345\244\232\347\272\277\347\250\213\347\216\257\345\242\203\344\270\255\345\256\211\345\205\250\344\275\277\347\224\250\351\233\206\345\220\210API.md" (100%) rename "Part2/JavaConcurrent/\345\256\210\346\212\244\347\272\277\347\250\213\344\270\216\351\230\273\345\241\236\347\272\277\347\250\213.md" => "JavaJob/JavaConcurrent/\345\256\210\346\212\244\347\272\277\347\250\213\344\270\216\351\230\273\345\241\236\347\272\277\347\250\213.md" (100%) rename "Part2/JavaConcurrent/\345\256\236\347\216\260\345\206\205\345\255\230\345\217\257\350\247\201\347\232\204\344\270\244\347\247\215\346\226\271\346\263\225\346\257\224\350\276\203\357\274\232\345\212\240\351\224\201\345\222\214volatile\345\217\230\351\207\217.md" => "JavaJob/JavaConcurrent/\345\256\236\347\216\260\345\206\205\345\255\230\345\217\257\350\247\201\347\232\204\344\270\244\347\247\215\346\226\271\346\263\225\346\257\224\350\276\203\357\274\232\345\212\240\351\224\201\345\222\214volatile\345\217\230\351\207\217.md" (100%) rename "Part2/JavaConcurrent/\346\255\273\351\224\201.md" => "JavaJob/JavaConcurrent/\346\255\273\351\224\201.md" (100%) rename "Part2/JavaConcurrent/\347\224\237\344\272\247\350\200\205\345\222\214\346\266\210\350\264\271\350\200\205\351\227\256\351\242\230.md" => "JavaJob/JavaConcurrent/\347\224\237\344\272\247\350\200\205\345\222\214\346\266\210\350\264\271\350\200\205\351\227\256\351\242\230.md" (100%) rename "Part2/JavaConcurrent/\347\272\277\347\250\213\344\270\255\346\226\255.md" => "JavaJob/JavaConcurrent/\347\272\277\347\250\213\344\270\255\346\226\255.md" (100%) rename "Part2/JavaConcurrent/\347\272\277\347\250\213\346\214\202\350\265\267\343\200\201\346\201\242\345\244\215\344\270\216\347\273\210\346\255\242\347\232\204\346\255\243\347\241\256\346\226\271\346\263\225.md" => "JavaJob/JavaConcurrent/\347\272\277\347\250\213\346\214\202\350\265\267\343\200\201\346\201\242\345\244\215\344\270\216\347\273\210\346\255\242\347\232\204\346\255\243\347\241\256\346\226\271\346\263\225.md" (100%) rename "Part2/JavaSE/ArrayList \343\200\201 LinkedList \343\200\201 Vector \347\232\204\345\272\225\345\261\202\345\256\236\347\216\260\345\222\214\345\214\272\345\210\253.md" => "JavaJob/JavaSE/ArrayList \343\200\201 LinkedList \343\200\201 Vector \347\232\204\345\272\225\345\261\202\345\256\236\347\216\260\345\222\214\345\214\272\345\210\253.md" (100%) rename "Part2/JavaSE/ArrayList\346\272\220\347\240\201\345\211\226\346\236\220.md" => "JavaJob/JavaSE/ArrayList\346\272\220\347\240\201\345\211\226\346\236\220.md" (100%) rename {Part2 => JavaJob}/JavaSE/Arraylist.md (100%) rename "Part2/JavaSE/Arraylist\345\222\214Hashmap\345\246\202\344\275\225\346\211\251\345\256\271\347\255\211.md" => "JavaJob/JavaSE/Arraylist\345\222\214Hashmap\345\246\202\344\275\225\346\211\251\345\256\271\347\255\211.md" (100%) rename {Part2 => JavaJob}/JavaSE/Collection.md (100%) rename "Part2/JavaSE/HashMap\346\272\220\347\240\201\345\211\226\346\236\220.md" => "JavaJob/JavaSE/HashMap\346\272\220\347\240\201\345\211\226\346\236\220.md" (100%) rename "Part2/JavaSE/HashTable\346\272\220\347\240\201\345\211\226\346\236\220.md" => "JavaJob/JavaSE/HashTable\346\272\220\347\240\201\345\211\226\346\236\220.md" (100%) rename "Part2/JavaSE/Hashmap\347\232\204hashcode\347\232\204\344\275\234\347\224\250\347\255\211.md" => "JavaJob/JavaSE/Hashmap\347\232\204hashcode\347\232\204\344\275\234\347\224\250\347\255\211.md" (100%) rename "Part2/JavaSE/Java\344\270\255\347\232\204\345\206\205\345\255\230\346\263\204\346\274\217.md" => "JavaJob/JavaSE/Java\344\270\255\347\232\204\345\206\205\345\255\230\346\263\204\346\274\217.md" (100%) rename "Part2/JavaSE/Java\345\237\272\347\241\200\347\237\245\350\257\206.md" => "JavaJob/JavaSE/Java\345\237\272\347\241\200\347\237\245\350\257\206.md" (100%) rename "Part2/JavaSE/Java\351\233\206\345\220\210\346\241\206\346\236\266.md" => "JavaJob/JavaSE/Java\351\233\206\345\220\210\346\241\206\346\236\266.md" (100%) rename "Part2/JavaSE/LinkedHashMap\346\272\220\347\240\201\345\211\226\346\236\220.md" => "JavaJob/JavaSE/LinkedHashMap\346\272\220\347\240\201\345\211\226\346\236\220.md" (100%) rename "Part2/JavaSE/LinkedList\346\272\220\347\240\201\345\211\226\346\236\220.md" => "JavaJob/JavaSE/LinkedList\346\272\220\347\240\201\345\211\226\346\236\220.md" (100%) rename {Part2 => JavaJob}/JavaSE/Linkedlist.md (100%) rename {Part2 => JavaJob}/JavaSE/List.md (100%) rename {Part2 => JavaJob}/JavaSE/Queue.md (100%) rename {Part2 => JavaJob}/JavaSE/Set.md (100%) rename "Part2/JavaSE/String\346\272\220\347\240\201\345\210\206\346\236\220.md" => "JavaJob/JavaSE/String\346\272\220\347\240\201\345\210\206\346\236\220.md" (100%) rename "Part2/JavaSE/Vector\346\272\220\347\240\201\345\211\226\346\236\220.md" => "JavaJob/JavaSE/Vector\346\272\220\347\240\201\345\211\226\346\236\220.md" (100%) rename "Part2/JavaSE/hashmap\345\222\214hashtable\347\232\204\345\272\225\345\261\202\345\256\236\347\216\260\345\222\214\345\214\272\345\210\253\357\274\214\344\270\244\350\200\205\345\222\214concurrenthashmap\347\232\204\345\214\272\345\210\253\343\200\202.md" => "JavaJob/JavaSE/hashmap\345\222\214hashtable\347\232\204\345\272\225\345\261\202\345\256\236\347\216\260\345\222\214\345\214\272\345\210\253\357\274\214\344\270\244\350\200\205\345\222\214concurrenthashmap\347\232\204\345\214\272\345\210\253\343\200\202.md" (100%) rename "Part2/JavaSE/\344\273\216\346\272\220\347\240\201\345\210\206\346\236\220HashMap.md" => "JavaJob/JavaSE/\344\273\216\346\272\220\347\240\201\345\210\206\346\236\220HashMap.md" (100%) rename "Part2/JavaSE/\345\217\215\345\260\204\346\234\272\345\210\266.md" => "JavaJob/JavaSE/\345\217\215\345\260\204\346\234\272\345\210\266.md" (100%) rename "Part2/JavaSE/\345\246\202\344\275\225\350\241\250\350\276\276\345\207\272Collection\345\217\212\345\205\266\345\255\220\347\261\273.md" => "JavaJob/JavaSE/\345\246\202\344\275\225\350\241\250\350\276\276\345\207\272Collection\345\217\212\345\205\266\345\255\220\347\261\273.md" (100%) diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8ffced04c54880aa6c36a253fb912a6a83cd48a4 GIT binary patch literal 10244 zcmeHMU2GIp6h5aEIv1!62$WewRvMt<0=orTY6Z647HIjEEwlx+%*?rhV}wtc~b2Ig+&o_p^( zXJ^hg-`;cYT>!xLf|dY?0)Rvpm-2k7CMjIcuZmLTk1QpL%J2klbYRo#NquI7*N-a*wJ%=qmd+cwAA zYUYTcmj>j;Dcf>Y!_xDfv!Ur^a=h2DG`rMp7c9;3z9%gdlEfr7ATJvpPHbw5MK?9a zM`F?8=H^5!y1BV!WQ0j|s}tM0PUOy=AAV`%<+lZH=+8Z{K=jAzE7Y0DYt?+nw z;j0KW0ADS1fJ)G*&;};`+&O^slZQdbO@t9R3&+Dajps~*vn5VH;6&qn|Cpx?PBA5>{HjakDgSPH%4ckzvb(E$ z&wwl!9Q}}Ps;*JgJ5*P92IK_}&HY_j+d7!ni!{&oW^J>Ovq-ZrtD4yY8S8DPnKsVr zPM@ovb$RQkW9QwJXV_?q|3%Qa3Kdj4?9(A>d()ye9XW>}|si-u!lOuffabNWJzF?MHZ-LhIGqC8Pn z1zjY$Ug|4kj57tpJ?Guy$(0H_uF;e4vo(GfO};5HPgB2AQI2s3bwn1S% z4n-lWzF}-VV?C!SxycSa0)OyCBU28WYDPC@jS07=W~THOMX2%~f3S5CQ~I)YE=M6c z{@9MBqP)m&yH|DG14Ft+kMt$o+Y4=_vQv`!xwcKy=#lD^4Mb`x9tQQvxai4z0k1#| zw!=<13R%iZo{{54}OAQ;5Yak{)E5aAFRQ}xD@Mf z89s&UaRY9|t+)+$U=rJ~8xP>~cnH&Y95bk)jwjK^5}w2JIE=611-yuF;${2*ui`bl zjyLcoeuSUmXLt*5<6ZH5Rps2hSMG5dT+iU>Enx+ zJXznczOnhaq~CjR4L*j?;TF;EJNOZPhF{@t1e}AiN4W?t#}&8+*W%N- z4r90ln}~cZ*oqz4iMwz&5ipHCcm#W~p9q-s2snsmFpn-4h=`;33cfl<#JBJgzJu=y zf{oE`cbRZPB2Tgb+66MpY&b|+B~K|j5y&d9lkfNhJpED?W{pZ|AG{r~?Xj#3zYh`_^*09JRTJK8D6 z@)|i9EL@1{5am*DA1U{MezKRG|v4;g`^gh2k~dX Xw1;`&{{OztLIVriaQ{C8_y7L^Y4$)b literal 0 HcmV?d00001 diff --git a/AndroidJob/.DS_Store b/AndroidJob/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1cf825382f2cdf5665d5712d4cb3acb49305a05b GIT binary patch literal 8196 zcmeHMPfyf96n_IK-9@DQ6U3M_ZcIqv0D(x1A*>5Vi7~7!K@f0hx5Ls2jJj=JMHs={ssnc&lbfvVc%C) zEj0t0f&Y>L@qDnb3QWgXRVW`FC}awN*o4ipppJQfjIm-&$5>S;L$OblJ&-t*#3=?* z;b^ynJ7PMR1~S-lDY`5_@|epj8D3^?DErANgJC3$MBeP( z-5nmeF=&m94ebqDyJKU+gVyNS&Aq*Z(Q|!xe0p_rduR9A-t(7oB0%D23ACx>1No|c znqFZmo+f!$o91WJtW7kLY`M^SvCVAn=xpz5@9w_T)7yQy?@C|Z>~!qHMllelJjs0? zWc)H+Dh8gLE7=8)6&E7bXckR(E?_=qMYM>hR+s_`A%4m#;1=?p^IkV>=VuIO4${hNxTUDq_+xRuy6k7X2b1 MY0yG5@JAW=0o92(i~s-t literal 0 HcmV?d00001 diff --git a/Part1/Android/AIDL.md b/AndroidJob/Android/AIDL.md similarity index 100% rename from Part1/Android/AIDL.md rename to AndroidJob/Android/AIDL.md diff --git "a/Part1/Android/ANR\351\227\256\351\242\230.md" "b/AndroidJob/Android/ANR\351\227\256\351\242\230.md" similarity index 100% rename from "Part1/Android/ANR\351\227\256\351\242\230.md" rename to "AndroidJob/Android/ANR\351\227\256\351\242\230.md" diff --git "a/Part1/Android/APP\345\220\257\345\212\250\350\277\207\347\250\213.md" "b/AndroidJob/Android/APP\345\220\257\345\212\250\350\277\207\347\250\213.md" similarity index 100% rename from "Part1/Android/APP\345\220\257\345\212\250\350\277\207\347\250\213.md" rename to "AndroidJob/Android/APP\345\220\257\345\212\250\350\277\207\347\250\213.md" diff --git "a/Part1/Android/Activity\345\220\257\345\212\250\350\277\207\347\250\213\345\205\250\350\247\243\346\236\220.md" "b/AndroidJob/Android/Activity\345\220\257\345\212\250\350\277\207\347\250\213\345\205\250\350\247\243\346\236\220.md" similarity index 100% rename from "Part1/Android/Activity\345\220\257\345\212\250\350\277\207\347\250\213\345\205\250\350\247\243\346\236\220.md" rename to "AndroidJob/Android/Activity\345\220\257\345\212\250\350\277\207\347\250\213\345\205\250\350\247\243\346\236\220.md" diff --git "a/Part1/Android/Android\345\205\263\344\272\216oom\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" "b/AndroidJob/Android/Android\345\205\263\344\272\216oom\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" similarity index 100% rename from "Part1/Android/Android\345\205\263\344\272\216oom\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" rename to "AndroidJob/Android/Android\345\205\263\344\272\216oom\347\232\204\350\247\243\345\206\263\346\226\271\346\241\210.md" diff --git "a/Part1/Android/Android\345\206\205\345\255\230\346\263\204\346\274\217\346\200\273\347\273\223.md" "b/AndroidJob/Android/Android\345\206\205\345\255\230\346\263\204\346\274\217\346\200\273\347\273\223.md" similarity index 100% rename from "Part1/Android/Android\345\206\205\345\255\230\346\263\204\346\274\217\346\200\273\347\273\223.md" rename to "AndroidJob/Android/Android\345\206\205\345\255\230\346\263\204\346\274\217\346\200\273\347\273\223.md" diff --git "a/Part1/Android/Android\345\207\240\347\247\215\350\277\233\347\250\213.md" "b/AndroidJob/Android/Android\345\207\240\347\247\215\350\277\233\347\250\213.md" similarity index 100% rename from "Part1/Android/Android\345\207\240\347\247\215\350\277\233\347\250\213.md" rename to "AndroidJob/Android/Android\345\207\240\347\247\215\350\277\233\347\250\213.md" diff --git "a/Part1/Android/Android\345\233\276\347\211\207\344\270\255\347\232\204\344\270\211\347\272\247\347\274\223\345\255\230.md" "b/AndroidJob/Android/Android\345\233\276\347\211\207\344\270\255\347\232\204\344\270\211\347\272\247\347\274\223\345\255\230.md" similarity index 100% rename from "Part1/Android/Android\345\233\276\347\211\207\344\270\255\347\232\204\344\270\211\347\272\247\347\274\223\345\255\230.md" rename to "AndroidJob/Android/Android\345\233\276\347\211\207\344\270\255\347\232\204\344\270\211\347\272\247\347\274\223\345\255\230.md" diff --git "a/Part1/Android/Android\345\237\272\347\241\200\347\237\245\350\257\206.md" "b/AndroidJob/Android/Android\345\237\272\347\241\200\347\237\245\350\257\206.md" similarity index 100% rename from "Part1/Android/Android\345\237\272\347\241\200\347\237\245\350\257\206.md" rename to "AndroidJob/Android/Android\345\237\272\347\241\200\347\237\245\350\257\206.md" diff --git "a/Part1/Android/Android\345\274\200\346\234\272\350\277\207\347\250\213.md" "b/AndroidJob/Android/Android\345\274\200\346\234\272\350\277\207\347\250\213.md" similarity index 100% rename from "Part1/Android/Android\345\274\200\346\234\272\350\277\207\347\250\213.md" rename to "AndroidJob/Android/Android\345\274\200\346\234\272\350\277\207\347\250\213.md" diff --git "a/Part1/Android/Android\346\200\247\350\203\275\344\274\230\345\214\226.md" "b/AndroidJob/Android/Android\346\200\247\350\203\275\344\274\230\345\214\226.md" similarity index 100% rename from "Part1/Android/Android\346\200\247\350\203\275\344\274\230\345\214\226.md" rename to "AndroidJob/Android/Android\346\200\247\350\203\275\344\274\230\345\214\226.md" diff --git "a/Part1/Android/Android\347\263\273\347\273\237\346\234\272\345\210\266.md" "b/AndroidJob/Android/Android\347\263\273\347\273\237\346\234\272\345\210\266.md" similarity index 100% rename from "Part1/Android/Android\347\263\273\347\273\237\346\234\272\345\210\266.md" rename to "AndroidJob/Android/Android\347\263\273\347\273\237\346\234\272\345\210\266.md" diff --git "a/Part1/Android/Art\345\222\214Dalvik\345\214\272\345\210\253.md" "b/AndroidJob/Android/Art\345\222\214Dalvik\345\214\272\345\210\253.md" similarity index 100% rename from "Part1/Android/Art\345\222\214Dalvik\345\214\272\345\210\253.md" rename to "AndroidJob/Android/Art\345\222\214Dalvik\345\214\272\345\210\253.md" diff --git "a/Part1/Android/Asynctask\346\272\220\347\240\201\345\210\206\346\236\220.md" "b/AndroidJob/Android/Asynctask\346\272\220\347\240\201\345\210\206\346\236\220.md" similarity index 100% rename from "Part1/Android/Asynctask\346\272\220\347\240\201\345\210\206\346\236\220.md" rename to "AndroidJob/Android/Asynctask\346\272\220\347\240\201\345\210\206\346\236\220.md" diff --git "a/Part1/Android/Binder\346\234\272\345\210\266.md" "b/AndroidJob/Android/Binder\346\234\272\345\210\266.md" similarity index 100% rename from "Part1/Android/Binder\346\234\272\345\210\266.md" rename to "AndroidJob/Android/Binder\346\234\272\345\210\266.md" diff --git "a/Part1/Android/Bitmap\347\232\204\345\210\206\346\236\220\344\270\216\344\275\277\347\224\250.md" "b/AndroidJob/Android/Bitmap\347\232\204\345\210\206\346\236\220\344\270\216\344\275\277\347\224\250.md" similarity index 100% rename from "Part1/Android/Bitmap\347\232\204\345\210\206\346\236\220\344\270\216\344\275\277\347\224\250.md" rename to "AndroidJob/Android/Bitmap\347\232\204\345\210\206\346\236\220\344\270\216\344\275\277\347\224\250.md" diff --git "a/Part1/Android/EventBus\347\224\250\346\263\225\350\257\246\350\247\243.md" "b/AndroidJob/Android/EventBus\347\224\250\346\263\225\350\257\246\350\247\243.md" similarity index 100% rename from "Part1/Android/EventBus\347\224\250\346\263\225\350\257\246\350\247\243.md" rename to "AndroidJob/Android/EventBus\347\224\250\346\263\225\350\257\246\350\247\243.md" diff --git a/Part1/Android/FlowchartDiagram.jpg b/AndroidJob/Android/FlowchartDiagram.jpg similarity index 100% rename from Part1/Android/FlowchartDiagram.jpg rename to AndroidJob/Android/FlowchartDiagram.jpg diff --git a/Part1/Android/Fragment.md b/AndroidJob/Android/Fragment.md similarity index 100% rename from Part1/Android/Fragment.md rename to AndroidJob/Android/Fragment.md diff --git "a/Part1/Android/Git\346\223\215\344\275\234.md" "b/AndroidJob/Android/Git\346\223\215\344\275\234.md" similarity index 100% rename from "Part1/Android/Git\346\223\215\344\275\234.md" rename to "AndroidJob/Android/Git\346\223\215\344\275\234.md" diff --git "a/Part1/Android/Handler\345\206\205\345\255\230\346\263\204\346\274\217\345\210\206\346\236\220\345\217\212\350\247\243\345\206\263.md" "b/AndroidJob/Android/Handler\345\206\205\345\255\230\346\263\204\346\274\217\345\210\206\346\236\220\345\217\212\350\247\243\345\206\263.md" similarity index 100% rename from "Part1/Android/Handler\345\206\205\345\255\230\346\263\204\346\274\217\345\210\206\346\236\220\345\217\212\350\247\243\345\206\263.md" rename to "AndroidJob/Android/Handler\345\206\205\345\255\230\346\263\204\346\274\217\345\210\206\346\236\220\345\217\212\350\247\243\345\206\263.md" diff --git "a/Part1/Android/Listview\350\257\246\350\247\243.md" "b/AndroidJob/Android/Listview\350\257\246\350\247\243.md" similarity index 100% rename from "Part1/Android/Listview\350\257\246\350\247\243.md" rename to "AndroidJob/Android/Listview\350\257\246\350\247\243.md" diff --git "a/Part1/Android/MVC,MVP,MVVM\347\232\204\345\214\272\345\210\253.md" "b/AndroidJob/Android/MVC,MVP,MVVM\347\232\204\345\214\272\345\210\253.md" similarity index 100% rename from "Part1/Android/MVC,MVP,MVVM\347\232\204\345\214\272\345\210\253.md" rename to "AndroidJob/Android/MVC,MVP,MVVM\347\232\204\345\214\272\345\210\253.md" diff --git a/Part1/Android/MVP.md b/AndroidJob/Android/MVP.md similarity index 100% rename from Part1/Android/MVP.md rename to AndroidJob/Android/MVP.md diff --git "a/Part1/Android/Recyclerview\345\222\214Listview\347\232\204\345\274\202\345\220\214.md" "b/AndroidJob/Android/Recyclerview\345\222\214Listview\347\232\204\345\274\202\345\220\214.md" similarity index 100% rename from "Part1/Android/Recyclerview\345\222\214Listview\347\232\204\345\274\202\345\220\214.md" rename to "AndroidJob/Android/Recyclerview\345\222\214Listview\347\232\204\345\274\202\345\220\214.md" diff --git a/Part1/Android/SurfaceView.md b/AndroidJob/Android/SurfaceView.md similarity index 100% rename from Part1/Android/SurfaceView.md rename to AndroidJob/Android/SurfaceView.md diff --git "a/Part1/Android/Zygote\345\222\214System\350\277\233\347\250\213\347\232\204\345\220\257\345\212\250\350\277\207\347\250\213.md" "b/AndroidJob/Android/Zygote\345\222\214System\350\277\233\347\250\213\347\232\204\345\220\257\345\212\250\350\277\207\347\250\213.md" similarity index 100% rename from "Part1/Android/Zygote\345\222\214System\350\277\233\347\250\213\347\232\204\345\220\257\345\212\250\350\277\207\347\250\213.md" rename to "AndroidJob/Android/Zygote\345\222\214System\350\277\233\347\250\213\347\232\204\345\220\257\345\212\250\350\277\207\347\250\213.md" diff --git "a/Part1/Android/\344\272\213\344\273\266\345\210\206\345\217\221\346\234\272\345\210\266.md" "b/AndroidJob/Android/\344\272\213\344\273\266\345\210\206\345\217\221\346\234\272\345\210\266.md" similarity index 100% rename from "Part1/Android/\344\272\213\344\273\266\345\210\206\345\217\221\346\234\272\345\210\266.md" rename to "AndroidJob/Android/\344\272\213\344\273\266\345\210\206\345\217\221\346\234\272\345\210\266.md" diff --git "a/Part1/Android/\345\274\200\346\272\220\346\241\206\346\236\266\346\272\220\347\240\201\345\210\206\346\236\220.md" "b/AndroidJob/Android/\345\274\200\346\272\220\346\241\206\346\236\266\346\272\220\347\240\201\345\210\206\346\236\220.md" similarity index 100% rename from "Part1/Android/\345\274\200\346\272\220\346\241\206\346\236\266\346\272\220\347\240\201\345\210\206\346\236\220.md" rename to "AndroidJob/Android/\345\274\200\346\272\220\346\241\206\346\236\266\346\272\220\347\240\201\345\210\206\346\236\220.md" diff --git "a/Part1/Android/\346\217\222\344\273\266\345\214\226\346\212\200\346\234\257\345\255\246\344\271\240.md" "b/AndroidJob/Android/\346\217\222\344\273\266\345\214\226\346\212\200\346\234\257\345\255\246\344\271\240.md" similarity index 100% rename from "Part1/Android/\346\217\222\344\273\266\345\214\226\346\212\200\346\234\257\345\255\246\344\271\240.md" rename to "AndroidJob/Android/\346\217\222\344\273\266\345\214\226\346\212\200\346\234\257\345\255\246\344\271\240.md" diff --git "a/Part1/Android/\346\237\245\346\274\217\350\241\245\347\274\272.md" "b/AndroidJob/Android/\346\237\245\346\274\217\350\241\245\347\274\272.md" similarity index 100% rename from "Part1/Android/\346\237\245\346\274\217\350\241\245\347\274\272.md" rename to "AndroidJob/Android/\346\237\245\346\274\217\350\241\245\347\274\272.md" diff --git "a/Part1/Android/\347\203\255\344\277\256\345\244\215\346\212\200\346\234\257.md" "b/AndroidJob/Android/\347\203\255\344\277\256\345\244\215\346\212\200\346\234\257.md" similarity index 100% rename from "Part1/Android/\347\203\255\344\277\256\345\244\215\346\212\200\346\234\257.md" rename to "AndroidJob/Android/\347\203\255\344\277\256\345\244\215\346\212\200\346\234\257.md" diff --git "a/Part1/Android/\347\272\277\347\250\213\351\200\232\344\277\241\345\237\272\347\241\200\346\265\201\347\250\213\345\210\206\346\236\220.md" "b/AndroidJob/Android/\347\272\277\347\250\213\351\200\232\344\277\241\345\237\272\347\241\200\346\265\201\347\250\213\345\210\206\346\236\220.md" similarity index 100% rename from "Part1/Android/\347\272\277\347\250\213\351\200\232\344\277\241\345\237\272\347\241\200\346\265\201\347\250\213\345\210\206\346\236\220.md" rename to "AndroidJob/Android/\347\272\277\347\250\213\351\200\232\344\277\241\345\237\272\347\241\200\346\265\201\347\250\213\345\210\206\346\236\220.md" diff --git "a/Part1/Android/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266.md" "b/AndroidJob/Android/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266.md" similarity index 100% rename from "Part1/Android/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266.md" rename to "AndroidJob/Android/\350\207\252\345\256\232\344\271\211\346\216\247\344\273\266.md" diff --git "a/Part1/DesignPattern/Builder\346\250\241\345\274\217.md" "b/AndroidJob/DesignPattern/Builder\346\250\241\345\274\217.md" similarity index 100% rename from "Part1/DesignPattern/Builder\346\250\241\345\274\217.md" rename to "AndroidJob/DesignPattern/Builder\346\250\241\345\274\217.md" diff --git "a/Part1/DesignPattern/\344\273\243\347\220\206\346\250\241\345\274\217.md" "b/AndroidJob/DesignPattern/\344\273\243\347\220\206\346\250\241\345\274\217.md" similarity index 100% rename from "Part1/DesignPattern/\344\273\243\347\220\206\346\250\241\345\274\217.md" rename to "AndroidJob/DesignPattern/\344\273\243\347\220\206\346\250\241\345\274\217.md" diff --git "a/Part1/DesignPattern/\345\215\225\344\276\213\346\250\241\345\274\217.md" "b/AndroidJob/DesignPattern/\345\215\225\344\276\213\346\250\241\345\274\217.md" similarity index 100% rename from "Part1/DesignPattern/\345\215\225\344\276\213\346\250\241\345\274\217.md" rename to "AndroidJob/DesignPattern/\345\215\225\344\276\213\346\250\241\345\274\217.md" diff --git "a/Part1/DesignPattern/\345\216\237\345\236\213\346\250\241\345\274\217.md" "b/AndroidJob/DesignPattern/\345\216\237\345\236\213\346\250\241\345\274\217.md" similarity index 100% rename from "Part1/DesignPattern/\345\216\237\345\236\213\346\250\241\345\274\217.md" rename to "AndroidJob/DesignPattern/\345\216\237\345\236\213\346\250\241\345\274\217.md" diff --git "a/Part1/DesignPattern/\345\244\226\350\247\202\346\250\241\345\274\217.md" "b/AndroidJob/DesignPattern/\345\244\226\350\247\202\346\250\241\345\274\217.md" similarity index 100% rename from "Part1/DesignPattern/\345\244\226\350\247\202\346\250\241\345\274\217.md" rename to "AndroidJob/DesignPattern/\345\244\226\350\247\202\346\250\241\345\274\217.md" diff --git "a/Part1/DesignPattern/\345\270\270\350\247\201\347\232\204\351\235\242\345\220\221\345\257\271\350\261\241\350\256\276\350\256\241\345\216\237\345\210\231.md" "b/AndroidJob/DesignPattern/\345\270\270\350\247\201\347\232\204\351\235\242\345\220\221\345\257\271\350\261\241\350\256\276\350\256\241\345\216\237\345\210\231.md" similarity index 100% rename from "Part1/DesignPattern/\345\270\270\350\247\201\347\232\204\351\235\242\345\220\221\345\257\271\350\261\241\350\256\276\350\256\241\345\216\237\345\210\231.md" rename to "AndroidJob/DesignPattern/\345\270\270\350\247\201\347\232\204\351\235\242\345\220\221\345\257\271\350\261\241\350\256\276\350\256\241\345\216\237\345\210\231.md" diff --git "a/Part1/DesignPattern/\347\255\226\347\225\245\346\250\241\345\274\217.md" "b/AndroidJob/DesignPattern/\347\255\226\347\225\245\346\250\241\345\274\217.md" similarity index 100% rename from "Part1/DesignPattern/\347\255\226\347\225\245\346\250\241\345\274\217.md" rename to "AndroidJob/DesignPattern/\347\255\226\347\225\245\346\250\241\345\274\217.md" diff --git "a/Part1/DesignPattern/\347\256\200\345\215\225\345\267\245\345\216\202.md" "b/AndroidJob/DesignPattern/\347\256\200\345\215\225\345\267\245\345\216\202.md" similarity index 100% rename from "Part1/DesignPattern/\347\256\200\345\215\225\345\267\245\345\216\202.md" rename to "AndroidJob/DesignPattern/\347\256\200\345\215\225\345\267\245\345\216\202.md" diff --git "a/Part1/DesignPattern/\350\247\202\345\257\237\350\200\205\346\250\241\345\274\217.md" "b/AndroidJob/DesignPattern/\350\247\202\345\257\237\350\200\205\346\250\241\345\274\217.md" similarity index 100% rename from "Part1/DesignPattern/\350\247\202\345\257\237\350\200\205\346\250\241\345\274\217.md" rename to "AndroidJob/DesignPattern/\350\247\202\345\257\237\350\200\205\346\250\241\345\274\217.md" diff --git "a/Part1/DesignPattern/\350\264\243\344\273\273\351\223\276\346\250\241\345\274\217.md" "b/AndroidJob/DesignPattern/\350\264\243\344\273\273\351\223\276\346\250\241\345\274\217.md" similarity index 100% rename from "Part1/DesignPattern/\350\264\243\344\273\273\351\223\276\346\250\241\345\274\217.md" rename to "AndroidJob/DesignPattern/\350\264\243\344\273\273\351\223\276\346\250\241\345\274\217.md" diff --git "a/Part1/DesignPattern/\351\200\202\351\205\215\345\231\250\346\250\241\345\274\217.md" "b/AndroidJob/DesignPattern/\351\200\202\351\205\215\345\231\250\346\250\241\345\274\217.md" similarity index 100% rename from "Part1/DesignPattern/\351\200\202\351\205\215\345\231\250\346\250\241\345\274\217.md" rename to "AndroidJob/DesignPattern/\351\200\202\351\205\215\345\231\250\346\250\241\345\274\217.md" diff --git a/BookNotes/.DS_Store b/BookNotes/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..52cb7069c36319ea47b275b77dee1ebd21126838 GIT binary patch literal 6148 zcmeHK!D`z;5S_K1X6?3Ahd^`OOQ8oJY*J!M2?!@WHV%IgnkQY7hVwKL zg;^to98TZ}G?Yux>{v$z=-oYm_mDscG5r4i5-1Kc{VmFLgfaAiyg_|=X9TT(8G+P^wHl^&y&eP7<;8ah8GAt*>FdToTt9M~}8aexe*4e@iqmOAa z9eG>(IxoXCPsS!WjS~#{@+r+@Jss*v9v5bvz)ncnmhF+ZJ)8A+cDrh4(5t#?HW>7~ z>eb+NRkh{w7yZ4%d4 zUETkiARd?jX5jy1K(r2mgCXwC)z+n5Qms{}$EYL}S6f`9pkYce#!@NXMm2(dMFyhp Uu(pUE6#fw~H1NO-+$#gW0JSS)pa1{> literal 0 HcmV?d00001 diff --git "a/Part5/ReadingNotes/\343\200\212APP\347\240\224\345\217\221\345\275\225\343\200\213\347\254\2541\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" "b/BookNotes/ReadingNotes/\343\200\212APP\347\240\224\345\217\221\345\275\225\343\200\213\347\254\2541\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" similarity index 100% rename from "Part5/ReadingNotes/\343\200\212APP\347\240\224\345\217\221\345\275\225\343\200\213\347\254\2541\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" rename to "BookNotes/ReadingNotes/\343\200\212APP\347\240\224\345\217\221\345\275\225\343\200\213\347\254\2541\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" diff --git "a/Part5/ReadingNotes/\343\200\212APP\347\240\224\345\217\221\345\275\225\343\200\213\347\254\2542\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" "b/BookNotes/ReadingNotes/\343\200\212APP\347\240\224\345\217\221\345\275\225\343\200\213\347\254\2542\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" similarity index 100% rename from "Part5/ReadingNotes/\343\200\212APP\347\240\224\345\217\221\345\275\225\343\200\213\347\254\2542\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" rename to "BookNotes/ReadingNotes/\343\200\212APP\347\240\224\345\217\221\345\275\225\343\200\213\347\254\2542\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" diff --git "a/Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\270\200\347\253\240\347\254\224\350\256\260.md" "b/BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\270\200\347\253\240\347\254\224\350\256\260.md" similarity index 100% rename from "Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\270\200\347\253\240\347\254\224\350\256\260.md" rename to "BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\270\200\347\253\240\347\254\224\350\256\260.md" diff --git "a/Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\270\211\347\253\240\347\254\224\350\256\260.md" "b/BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\270\211\347\253\240\347\254\224\350\256\260.md" similarity index 100% rename from "Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\270\211\347\253\240\347\254\224\350\256\260.md" rename to "BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\270\211\347\253\240\347\254\224\350\256\260.md" diff --git "a/Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\272\214\347\253\240\347\254\224\350\256\260.md" "b/BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\272\214\347\253\240\347\254\224\350\256\260.md" similarity index 100% rename from "Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\272\214\347\253\240\347\254\224\350\256\260.md" rename to "BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\344\272\214\347\253\240\347\254\224\350\256\260.md" diff --git "a/Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\205\253\347\253\240\347\254\224\350\256\260.md" "b/BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\205\253\347\253\240\347\254\224\350\256\260.md" similarity index 100% rename from "Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\205\253\347\253\240\347\254\224\350\256\260.md" rename to "BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\205\253\347\253\240\347\254\224\350\256\260.md" diff --git "a/Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\215\201\344\272\224\347\253\240\347\254\224\350\256\260.md" "b/BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\215\201\344\272\224\347\253\240\347\254\224\350\256\260.md" similarity index 100% rename from "Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\215\201\344\272\224\347\253\240\347\254\224\350\256\260.md" rename to "BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\215\201\344\272\224\347\253\240\347\254\224\350\256\260.md" diff --git "a/Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\233\233\347\253\240\347\254\224\350\256\260.md" "b/BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\233\233\347\253\240\347\254\224\350\256\260.md" similarity index 100% rename from "Part5/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\233\233\347\253\240\347\254\224\350\256\260.md" rename to "BookNotes/ReadingNotes/\343\200\212Android\345\274\200\345\217\221\350\211\272\346\234\257\346\216\242\347\264\242\343\200\213\347\254\254\345\233\233\347\253\240\347\254\224\350\256\260.md" diff --git "a/Part5/ReadingNotes/\343\200\212Java\347\274\226\347\250\213\346\200\235\346\203\263\343\200\213\347\254\254\344\270\200\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" "b/BookNotes/ReadingNotes/\343\200\212Java\347\274\226\347\250\213\346\200\235\346\203\263\343\200\213\347\254\254\344\270\200\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" similarity index 100% rename from "Part5/ReadingNotes/\343\200\212Java\347\274\226\347\250\213\346\200\235\346\203\263\343\200\213\347\254\254\344\270\200\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" rename to "BookNotes/ReadingNotes/\343\200\212Java\347\274\226\347\250\213\346\200\235\346\203\263\343\200\213\347\254\254\344\270\200\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" diff --git "a/Part5/ReadingNotes/\343\200\212Java\347\274\226\347\250\213\346\200\235\346\203\263\343\200\213\347\254\254\344\272\214\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" "b/BookNotes/ReadingNotes/\343\200\212Java\347\274\226\347\250\213\346\200\235\346\203\263\343\200\213\347\254\254\344\272\214\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" similarity index 100% rename from "Part5/ReadingNotes/\343\200\212Java\347\274\226\347\250\213\346\200\235\346\203\263\343\200\213\347\254\254\344\272\214\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" rename to "BookNotes/ReadingNotes/\343\200\212Java\347\274\226\347\250\213\346\200\235\346\203\263\343\200\213\347\254\254\344\272\214\347\253\240\350\257\273\344\271\246\347\254\224\350\256\260.md" diff --git "a/Part5/ReadingNotes/\343\200\212\346\267\261\345\205\245\347\220\206\350\247\243java\350\231\232\346\213\237\346\234\272\343\200\213\347\254\25412\347\253\240.md" "b/BookNotes/ReadingNotes/\343\200\212\346\267\261\345\205\245\347\220\206\350\247\243java\350\231\232\346\213\237\346\234\272\343\200\213\347\254\25412\347\253\240.md" similarity index 100% rename from "Part5/ReadingNotes/\343\200\212\346\267\261\345\205\245\347\220\206\350\247\243java\350\231\232\346\213\237\346\234\272\343\200\213\347\254\25412\347\253\240.md" rename to "BookNotes/ReadingNotes/\343\200\212\346\267\261\345\205\245\347\220\206\350\247\243java\350\231\232\346\213\237\346\234\272\343\200\213\347\254\25412\347\253\240.md" diff --git a/Bussiness/.DS_Store b/Bussiness/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1ede0aca95621b672c204a48112c13882679874e GIT binary patch literal 6148 zcmeHK!HN?>5UtKe?L@?Yf_vE6@$pa5Z6O)!iXMJc4sz&J1|a%WU`~i$oz)> zkze5F=&SC|qC{a&L8S_+UrlvYHS>Dto+2VOUQUNZJtERj##RTzZ-nPrx1<$3dqCxC z%;}tR%BZF%ThZe98yVoeyG0W!slvYfynpX#<~+QgC7n_>DeP%l*c2K3xjcg2`|bqR zrK_a%Viu}=O=m^Es0M>?s_+mCHoC3%_6U2;Cn5c29pUQTU2w##z5aCKrop>;=hj(hv7)$rg!-yDnv z>%LiyM#H|jKYF-ccl4dR!^6qR+xH(}?f z{UANQ|Ix4issDFDG6)00!2ijBY9GZ%W4v3qTesel?^**rfwFL1_yvBBJ$Gg*>bCf#SeXlV&YijUOqfG5lOZB87!Q4-E)hvMW2=MaFUEQH8Jn{s z3qYagP*l*jtxSE5vzcl);1qBQJTwLP+g+r0lu$)AUHN`hj0|rJui>i~+7QiD$8|Z1 zGhKZakFvC^dcAWoH{W`)uqb6mcAj;8r)6%wN@eiCLxFO0>Smc??_mN@N61}GpL@OwQ za4F@qPaz#siC#j7W(&NO@D~_YCA@|GSS7t>**7GHX3p+Z0sH#Pr+4}kH@Q>5Deylk z!25#-XACSh2KCl~MqdGdEevZz%s&mx@hk=w8-vKegrNcrRoE+rFm#N2wl1*P7&LSe z_VOX@lZCyZ2>o=-@9A<9fkD?g1)Kuc6__{OE}#Ez|9$_zPI5h`fK%X6DIi*#;pPBK zvS;he;`prf;Cpa3u4@cx3L1MH>wu5q6}UF!JPv??#l|2;VD3ji%itQPz`ZK)8#!sZ A%m4rY literal 0 HcmV?d00001 diff --git "a/Part4/Network/Http\345\215\217\350\256\256.md" "b/CsNetwork/Network/Http\345\215\217\350\256\256.md" similarity index 100% rename from "Part4/Network/Http\345\215\217\350\256\256.md" rename to "CsNetwork/Network/Http\345\215\217\350\256\256.md" diff --git a/Part4/Network/Socket.md b/CsNetwork/Network/Socket.md similarity index 100% rename from Part4/Network/Socket.md rename to CsNetwork/Network/Socket.md diff --git "a/Part4/Network/TCP\344\270\216UDP.md" "b/CsNetwork/Network/TCP\344\270\216UDP.md" similarity index 100% rename from "Part4/Network/TCP\344\270\216UDP.md" rename to "CsNetwork/Network/TCP\344\270\216UDP.md" diff --git "a/Part4/Network/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234\345\237\272\347\241\200\346\261\207\346\200\273.md" "b/CsNetwork/Network/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234\345\237\272\347\241\200\346\261\207\346\200\273.md" similarity index 100% rename from "Part4/Network/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234\345\237\272\347\241\200\346\261\207\346\200\273.md" rename to "CsNetwork/Network/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234\345\237\272\347\241\200\346\261\207\346\200\273.md" diff --git "a/Part4/OperatingSystem/Linux\347\263\273\347\273\237\347\232\204IPC.md" "b/CsNetwork/OperatingSystem/Linux\347\263\273\347\273\237\347\232\204IPC.md" similarity index 100% rename from "Part4/OperatingSystem/Linux\347\263\273\347\273\237\347\232\204IPC.md" rename to "CsNetwork/OperatingSystem/Linux\347\263\273\347\273\237\347\232\204IPC.md" diff --git "a/Part4/OperatingSystem/\346\223\215\344\275\234\347\263\273\347\273\237.md" "b/CsNetwork/OperatingSystem/\346\223\215\344\275\234\347\263\273\347\273\237.md" similarity index 100% rename from "Part4/OperatingSystem/\346\223\215\344\275\234\347\263\273\347\273\237.md" rename to "CsNetwork/OperatingSystem/\346\223\215\344\275\234\347\263\273\347\273\237.md" diff --git a/DataAlgorithm/.DS_Store b/DataAlgorithm/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..376f8ee05bf6ef40c47300100ee96d16dc06260b GIT binary patch literal 6148 zcmeHK!AiqG5S`Vi+lttOV2`!B@5^&rGr58i}`9#m{%iw(rAq=`XmB)_45 z%FiZNn+d~!Vc@?pKxelEI}pMp2>5V*hu3~6e2hN(*I_VB>h%{kGi%MwFK}Mw<)!kO zI}n+hcu6{Jd+`a44!mUGYyVJ)@ZI*JEs;~?sZtS!>0 zHl_C3G|v3gy*-Mz#Qm^cx`sed;AB$JXd*EEHk{g{f3TmCAIB z!BjfV+j^a&u~4Yef$8Rh=`S6$8xbxSckZq~F$w;^?ilQM;%lw60JnQ_$$=SUU6+S5c*4%q9oX(O4+N85Hv) NAZakhFz}}gyaGS>ogM%H literal 0 HcmV?d00001 diff --git a/Part3/Algorithm/LeetCode/two-sum.md b/DataAlgorithm/Algorithm/LeetCode/two-sum.md similarity index 100% rename from Part3/Algorithm/LeetCode/two-sum.md rename to DataAlgorithm/Algorithm/LeetCode/two-sum.md diff --git a/Part3/Algorithm/LeetCode/zigzag-conversion.md b/DataAlgorithm/Algorithm/LeetCode/zigzag-conversion.md similarity index 100% rename from Part3/Algorithm/LeetCode/zigzag-conversion.md rename to DataAlgorithm/Algorithm/LeetCode/zigzag-conversion.md diff --git "a/Part3/Algorithm/Lookup/\346\212\230\345\215\212\346\237\245\346\211\276.md" "b/DataAlgorithm/Algorithm/Lookup/\346\212\230\345\215\212\346\237\245\346\211\276.md" similarity index 100% rename from "Part3/Algorithm/Lookup/\346\212\230\345\215\212\346\237\245\346\211\276.md" rename to "DataAlgorithm/Algorithm/Lookup/\346\212\230\345\215\212\346\237\245\346\211\276.md" diff --git "a/Part3/Algorithm/Lookup/\351\241\272\345\272\217\346\237\245\346\211\276.md" "b/DataAlgorithm/Algorithm/Lookup/\351\241\272\345\272\217\346\237\245\346\211\276.md" similarity index 100% rename from "Part3/Algorithm/Lookup/\351\241\272\345\272\217\346\237\245\346\211\276.md" rename to "DataAlgorithm/Algorithm/Lookup/\351\241\272\345\272\217\346\237\245\346\211\276.md" diff --git "a/Part3/Algorithm/Sort/\345\206\222\346\263\241\346\216\222\345\272\217.md" "b/DataAlgorithm/Algorithm/Sort/\345\206\222\346\263\241\346\216\222\345\272\217.md" similarity index 100% rename from "Part3/Algorithm/Sort/\345\206\222\346\263\241\346\216\222\345\272\217.md" rename to "DataAlgorithm/Algorithm/Sort/\345\206\222\346\263\241\346\216\222\345\272\217.md" diff --git "a/Part3/Algorithm/Sort/\345\275\222\345\271\266\346\216\222\345\272\217.md" "b/DataAlgorithm/Algorithm/Sort/\345\275\222\345\271\266\346\216\222\345\272\217.md" similarity index 100% rename from "Part3/Algorithm/Sort/\345\275\222\345\271\266\346\216\222\345\272\217.md" rename to "DataAlgorithm/Algorithm/Sort/\345\275\222\345\271\266\346\216\222\345\272\217.md" diff --git "a/Part3/Algorithm/Sort/\345\277\253\351\200\237\346\216\222\345\272\217.md" "b/DataAlgorithm/Algorithm/Sort/\345\277\253\351\200\237\346\216\222\345\272\217.md" similarity index 100% rename from "Part3/Algorithm/Sort/\345\277\253\351\200\237\346\216\222\345\272\217.md" rename to "DataAlgorithm/Algorithm/Sort/\345\277\253\351\200\237\346\216\222\345\272\217.md" diff --git "a/Part3/Algorithm/Sort/\351\200\211\346\213\251\346\216\222\345\272\217.md" "b/DataAlgorithm/Algorithm/Sort/\351\200\211\346\213\251\346\216\222\345\272\217.md" similarity index 100% rename from "Part3/Algorithm/Sort/\351\200\211\346\213\251\346\216\222\345\272\217.md" rename to "DataAlgorithm/Algorithm/Sort/\351\200\211\346\213\251\346\216\222\345\272\217.md" diff --git "a/Part3/Algorithm/Sort/\351\235\242\350\257\225\344\270\255\347\232\204 10 \345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.md" "b/DataAlgorithm/Algorithm/Sort/\351\235\242\350\257\225\344\270\255\347\232\204 10 \345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.md" similarity index 100% rename from "Part3/Algorithm/Sort/\351\235\242\350\257\225\344\270\255\347\232\204 10 \345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.md" rename to "DataAlgorithm/Algorithm/Sort/\351\235\242\350\257\225\344\270\255\347\232\204 10 \345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.md" diff --git "a/Part3/Algorithm/\345\211\221\346\214\207Offer/1.\344\270\203\347\247\215\346\226\271\345\274\217\345\256\236\347\216\260singleton\346\250\241\345\274\217.md" "b/DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/1.\344\270\203\347\247\215\346\226\271\345\274\217\345\256\236\347\216\260singleton\346\250\241\345\274\217.md" similarity index 100% rename from "Part3/Algorithm/\345\211\221\346\214\207Offer/1.\344\270\203\347\247\215\346\226\271\345\274\217\345\256\236\347\216\260singleton\346\250\241\345\274\217.md" rename to "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/1.\344\270\203\347\247\215\346\226\271\345\274\217\345\256\236\347\216\260singleton\346\250\241\345\274\217.md" diff --git "a/Part3/Algorithm/\345\211\221\346\214\207Offer/2.\344\272\214\347\273\264\346\225\260\347\273\204\344\270\255\347\232\204\346\237\245\346\211\276.md" "b/DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/2.\344\272\214\347\273\264\346\225\260\347\273\204\344\270\255\347\232\204\346\237\245\346\211\276.md" similarity index 100% rename from "Part3/Algorithm/\345\211\221\346\214\207Offer/2.\344\272\214\347\273\264\346\225\260\347\273\204\344\270\255\347\232\204\346\237\245\346\211\276.md" rename to "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/2.\344\272\214\347\273\264\346\225\260\347\273\204\344\270\255\347\232\204\346\237\245\346\211\276.md" diff --git "a/Part3/Algorithm/\345\211\221\346\214\207Offer/\345\220\210\345\271\266\344\270\244\344\270\252\346\216\222\345\272\217\347\232\204\351\223\276\350\241\250.md" "b/DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\345\220\210\345\271\266\344\270\244\344\270\252\346\216\222\345\272\217\347\232\204\351\223\276\350\241\250.md" similarity index 100% rename from "Part3/Algorithm/\345\211\221\346\214\207Offer/\345\220\210\345\271\266\344\270\244\344\270\252\346\216\222\345\272\217\347\232\204\351\223\276\350\241\250.md" rename to "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\345\220\210\345\271\266\344\270\244\344\270\252\346\216\222\345\272\217\347\232\204\351\223\276\350\241\250.md" diff --git "a/Part3/Algorithm/\345\211\221\346\214\207Offer/\346\227\213\350\275\254\346\225\260\347\273\204\347\232\204\346\234\200\345\260\217\346\225\260\345\255\227.md" "b/DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\346\227\213\350\275\254\346\225\260\347\273\204\347\232\204\346\234\200\345\260\217\346\225\260\345\255\227.md" similarity index 100% rename from "Part3/Algorithm/\345\211\221\346\214\207Offer/\346\227\213\350\275\254\346\225\260\347\273\204\347\232\204\346\234\200\345\260\217\346\225\260\345\255\227.md" rename to "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\346\227\213\350\275\254\346\225\260\347\273\204\347\232\204\346\234\200\345\260\217\346\225\260\345\255\227.md" diff --git "a/Part3/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23011\357\274\232\346\225\260\345\200\274\347\232\204\346\225\264\346\225\260\346\254\241\346\226\271.md" "b/DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23011\357\274\232\346\225\260\345\200\274\347\232\204\346\225\264\346\225\260\346\254\241\346\226\271.md" similarity index 100% rename from "Part3/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23011\357\274\232\346\225\260\345\200\274\347\232\204\346\225\264\346\225\260\346\254\241\346\226\271.md" rename to "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23011\357\274\232\346\225\260\345\200\274\347\232\204\346\225\264\346\225\260\346\254\241\346\226\271.md" diff --git "a/Part3/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23012\357\274\232\346\211\223\345\215\2601\345\210\260\346\234\200\345\244\247\347\232\204n\344\275\215\346\225\260.md" "b/DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23012\357\274\232\346\211\223\345\215\2601\345\210\260\346\234\200\345\244\247\347\232\204n\344\275\215\346\225\260.md" similarity index 100% rename from "Part3/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23012\357\274\232\346\211\223\345\215\2601\345\210\260\346\234\200\345\244\247\347\232\204n\344\275\215\346\225\260.md" rename to "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23012\357\274\232\346\211\223\345\215\2601\345\210\260\346\234\200\345\244\247\347\232\204n\344\275\215\346\225\260.md" diff --git "a/Part3/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23044\357\274\232\346\211\221\345\205\213\347\211\214\347\232\204\351\241\272\345\255\220.md" "b/DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23044\357\274\232\346\211\221\345\205\213\347\211\214\347\232\204\351\241\272\345\255\220.md" similarity index 100% rename from "Part3/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23044\357\274\232\346\211\221\345\205\213\347\211\214\347\232\204\351\241\272\345\255\220.md" rename to "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23044\357\274\232\346\211\221\345\205\213\347\211\214\347\232\204\351\241\272\345\255\220.md" diff --git "a/Part3/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23045\357\274\232\345\234\206\345\234\210\344\270\255\346\234\200\345\220\216\345\211\251\344\270\213\347\232\204\346\225\260\345\255\227.md" "b/DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23045\357\274\232\345\234\206\345\234\210\344\270\255\346\234\200\345\220\216\345\211\251\344\270\213\347\232\204\346\225\260\345\255\227.md" similarity index 100% rename from "Part3/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23045\357\274\232\345\234\206\345\234\210\344\270\255\346\234\200\345\220\216\345\211\251\344\270\213\347\232\204\346\225\260\345\255\227.md" rename to "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\23045\357\274\232\345\234\206\345\234\210\344\270\255\346\234\200\345\220\216\345\211\251\344\270\213\347\232\204\346\225\260\345\255\227.md" diff --git "a/Part3/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\2306\357\274\232\351\207\215\345\273\272\344\272\214\345\217\211\346\240\221.md" "b/DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\2306\357\274\232\351\207\215\345\273\272\344\272\214\345\217\211\346\240\221.md" similarity index 100% rename from "Part3/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\2306\357\274\232\351\207\215\345\273\272\344\272\214\345\217\211\346\240\221.md" rename to "DataAlgorithm/Algorithm/\345\211\221\346\214\207Offer/\351\235\242\350\257\225\351\242\2306\357\274\232\351\207\215\345\273\272\344\272\214\345\217\211\346\240\221.md" diff --git "a/Part3/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/1.\350\256\276\350\256\241\344\270\200\344\270\252\346\234\211getMin\345\212\237\350\203\275\347\232\204\346\240\210.md" "b/DataAlgorithm/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/1.\350\256\276\350\256\241\344\270\200\344\270\252\346\234\211getMin\345\212\237\350\203\275\347\232\204\346\240\210.md" similarity index 100% rename from "Part3/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/1.\350\256\276\350\256\241\344\270\200\344\270\252\346\234\211getMin\345\212\237\350\203\275\347\232\204\346\240\210.md" rename to "DataAlgorithm/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/1.\350\256\276\350\256\241\344\270\200\344\270\252\346\234\211getMin\345\212\237\350\203\275\347\232\204\346\240\210.md" diff --git "a/Part3/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/2.\347\224\261\344\270\244\344\270\252\346\240\210\347\273\204\346\210\220\347\232\204\351\230\237\345\210\227.md" "b/DataAlgorithm/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/2.\347\224\261\344\270\244\344\270\252\346\240\210\347\273\204\346\210\220\347\232\204\351\230\237\345\210\227.md" similarity index 100% rename from "Part3/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/2.\347\224\261\344\270\244\344\270\252\346\240\210\347\273\204\346\210\220\347\232\204\351\230\237\345\210\227.md" rename to "DataAlgorithm/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/2.\347\224\261\344\270\244\344\270\252\346\240\210\347\273\204\346\210\220\347\232\204\351\230\237\345\210\227.md" diff --git "a/Part3/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/3.\345\246\202\344\275\225\344\273\205\347\224\250\351\200\222\345\275\222\345\207\275\346\225\260\345\222\214\346\240\210\346\223\215\344\275\234\351\200\206\345\272\217\344\270\200\344\270\252\346\240\210.md" "b/DataAlgorithm/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/3.\345\246\202\344\275\225\344\273\205\347\224\250\351\200\222\345\275\222\345\207\275\346\225\260\345\222\214\346\240\210\346\223\215\344\275\234\351\200\206\345\272\217\344\270\200\344\270\252\346\240\210.md" similarity index 100% rename from "Part3/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/3.\345\246\202\344\275\225\344\273\205\347\224\250\351\200\222\345\275\222\345\207\275\346\225\260\345\222\214\346\240\210\346\223\215\344\275\234\351\200\206\345\272\217\344\270\200\344\270\252\346\240\210.md" rename to "DataAlgorithm/Algorithm/\347\250\213\345\272\217\345\221\230\344\273\243\347\240\201\351\235\242\350\257\225\346\214\207\345\215\227(\345\267\246\347\250\213\344\272\221)/3.\345\246\202\344\275\225\344\273\205\347\224\250\351\200\222\345\275\222\345\207\275\346\225\260\345\222\214\346\240\210\346\223\215\344\275\234\351\200\206\345\272\217\344\270\200\344\270\252\346\240\210.md" diff --git "a/Part3/DataStructure/\346\225\260\346\215\256\347\273\223\346\236\204(Java).md" "b/DataAlgorithm/DataStructure/\346\225\260\346\215\256\347\273\223\346\236\204(Java).md" similarity index 100% rename from "Part3/DataStructure/\346\225\260\346\215\256\347\273\223\346\236\204(Java).md" rename to "DataAlgorithm/DataStructure/\346\225\260\346\215\256\347\273\223\346\236\204(Java).md" diff --git "a/Part3/DataStructure/\346\225\260\347\273\204.md" "b/DataAlgorithm/DataStructure/\346\225\260\347\273\204.md" similarity index 100% rename from "Part3/DataStructure/\346\225\260\347\273\204.md" rename to "DataAlgorithm/DataStructure/\346\225\260\347\273\204.md" diff --git "a/Part3/DataStructure/\346\240\210\345\222\214\351\230\237\345\210\227.md" "b/DataAlgorithm/DataStructure/\346\240\210\345\222\214\351\230\237\345\210\227.md" similarity index 100% rename from "Part3/DataStructure/\346\240\210\345\222\214\351\230\237\345\210\227.md" rename to "DataAlgorithm/DataStructure/\346\240\210\345\222\214\351\230\237\345\210\227.md" diff --git "a/Part3/DataStructure/\351\200\222\345\275\222\345\222\214\351\235\236\351\200\222\345\275\222\346\226\271\345\274\217\345\256\236\347\216\260\344\272\214\345\217\211\346\240\221\345\205\210\343\200\201\344\270\255\343\200\201\345\220\216\345\272\217\351\201\215\345\216\206.md" "b/DataAlgorithm/DataStructure/\351\200\222\345\275\222\345\222\214\351\235\236\351\200\222\345\275\222\346\226\271\345\274\217\345\256\236\347\216\260\344\272\214\345\217\211\346\240\221\345\205\210\343\200\201\344\270\255\343\200\201\345\220\216\345\272\217\351\201\215\345\216\206.md" similarity index 100% rename from "Part3/DataStructure/\351\200\222\345\275\222\345\222\214\351\235\236\351\200\222\345\275\222\346\226\271\345\274\217\345\256\236\347\216\260\344\272\214\345\217\211\346\240\221\345\205\210\343\200\201\344\270\255\343\200\201\345\220\216\345\272\217\351\201\215\345\216\206.md" rename to "DataAlgorithm/DataStructure/\351\200\222\345\275\222\345\222\214\351\235\236\351\200\222\345\275\222\346\226\271\345\274\217\345\256\236\347\216\260\344\272\214\345\217\211\346\240\221\345\205\210\343\200\201\344\270\255\343\200\201\345\220\216\345\272\217\351\201\215\345\216\206.md" diff --git a/JavaJob/.DS_Store b/JavaJob/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..fc300f5bb67ff3542ce8b041af5889a40954cc96 GIT binary patch literal 10244 zcmeHMTWl0n82n2w^iFxXxP#Vw=%mk(uvcVvNOA- ztks%mFly8%6^QcSixKt7dV9jlgG8UC#z1^ABwilW1YbyuiT{~1+t4jkpA6zT$vOX= z|8ma$-}%l=&RGD!L{4u8hys8_l}Ys$YOYb3oz(>;6ljOC+gE zs#;ogAT{btq&&^bxd|=1kM;UAZ!{e|_dAX?_pGG{Ok-k1txGz#r(JQb zvBG0hkDuUqV(_kj>XN)q{$0}fRMxf}`!M;jF)HT(N@Z1vNYV?v!i$Ct`SwuxyEk8(mXS7bZDO8j;PfxQJ^d1*nL?ePs=@+aje{!O_rLB zW@U2ZY;3ozlzEJMXR?lE^*OHTnT|a?ynh^Gt25DtJmMXsr~+V=WMlFQ>)Y|%LntOYo;w@&xEOaqr;k;F>Kwm5AP+K z*`E1`X=LRZY?AwJZOoXhU9s}^JMIjJOTCMu4CT`1k(}vGs*RGw=V%Bw%Ib`?U#ARv z9i5G+`<8G+c%3BeWBO#)pq8tZ4dEtP)ueux^5sKpRGMYgmHQv1y}(0Tl{QJ$OLbwigVsWCoqme>x^7+>#8XygLG2c$6`<9(HVt-}z51Z|9iFbEl9zqQ>sH2Hl zbTNl{EZ|f4G#f&G*Pd4|jFbF5j3s1?L>ZoQ{XQPgtU2;6$#7P3|n<+*iRn5+=klIv(7 zq))^@Ch(&4JqKUI_wWl5_X_-p6uW;ciS}KOVplqHdbV zYoU$fc!UUCz$ttJr}0UA7M~~jzKAd338L?7_&T1(H}NezLqwh-8h?l%;m1VeukahZ zSVG$!^J$BhN@-j2ohqa4H~_sj>lZ3WuO#XD7>S-hKp-Fx5C{ka1OkgAP{z$scK_db z{r~?LA4FIM0s?{mGy+)Ok?KfL3dQ4cX*TSxJxcWuRaThaG?#t|HU4!xN&h;YI_zH2 ozeFHiaBJYl#YxZNr@5pjD*yVQ0pk2$yoD0y{{`1q|Bv(kU-@YunE(I) literal 0 HcmV?d00001 diff --git a/Part2/JVM/JVM.md b/JavaJob/JVM/JVM.md similarity index 100% rename from Part2/JVM/JVM.md rename to JavaJob/JVM/JVM.md diff --git "a/Part2/JVM/JVM\347\261\273\345\212\240\350\275\275\346\234\272\345\210\266.md" "b/JavaJob/JVM/JVM\347\261\273\345\212\240\350\275\275\346\234\272\345\210\266.md" similarity index 100% rename from "Part2/JVM/JVM\347\261\273\345\212\240\350\275\275\346\234\272\345\210\266.md" rename to "JavaJob/JVM/JVM\347\261\273\345\212\240\350\275\275\346\234\272\345\210\266.md" diff --git "a/Part2/JVM/Java\345\206\205\345\255\230\345\214\272\345\237\237\344\270\216\345\206\205\345\255\230\346\272\242\345\207\272.md" "b/JavaJob/JVM/Java\345\206\205\345\255\230\345\214\272\345\237\237\344\270\216\345\206\205\345\255\230\346\272\242\345\207\272.md" similarity index 100% rename from "Part2/JVM/Java\345\206\205\345\255\230\345\214\272\345\237\237\344\270\216\345\206\205\345\255\230\346\272\242\345\207\272.md" rename to "JavaJob/JVM/Java\345\206\205\345\255\230\345\214\272\345\237\237\344\270\216\345\206\205\345\255\230\346\272\242\345\207\272.md" diff --git "a/Part2/JVM/\345\236\203\345\234\276\345\233\236\346\224\266\347\256\227\346\263\225.md" "b/JavaJob/JVM/\345\236\203\345\234\276\345\233\236\346\224\266\347\256\227\346\263\225.md" similarity index 100% rename from "Part2/JVM/\345\236\203\345\234\276\345\233\236\346\224\266\347\256\227\346\263\225.md" rename to "JavaJob/JVM/\345\236\203\345\234\276\345\233\236\346\224\266\347\256\227\346\263\225.md" diff --git "a/Part2/JavaConcurrent/Java\345\271\266\345\217\221\345\237\272\347\241\200\347\237\245\350\257\206.md" "b/JavaJob/JavaConcurrent/Java\345\271\266\345\217\221\345\237\272\347\241\200\347\237\245\350\257\206.md" similarity index 100% rename from "Part2/JavaConcurrent/Java\345\271\266\345\217\221\345\237\272\347\241\200\347\237\245\350\257\206.md" rename to "JavaJob/JavaConcurrent/Java\345\271\266\345\217\221\345\237\272\347\241\200\347\237\245\350\257\206.md" diff --git a/Part2/JavaConcurrent/NIO.md b/JavaJob/JavaConcurrent/NIO.md similarity index 100% rename from Part2/JavaConcurrent/NIO.md rename to JavaJob/JavaConcurrent/NIO.md diff --git a/Part2/JavaConcurrent/Synchronized.md b/JavaJob/JavaConcurrent/Synchronized.md similarity index 100% rename from Part2/JavaConcurrent/Synchronized.md rename to JavaJob/JavaConcurrent/Synchronized.md diff --git "a/Part2/JavaConcurrent/Thread\345\222\214Runnable\345\256\236\347\216\260\345\244\232\347\272\277\347\250\213\347\232\204\345\214\272\345\210\253.md" "b/JavaJob/JavaConcurrent/Thread\345\222\214Runnable\345\256\236\347\216\260\345\244\232\347\272\277\347\250\213\347\232\204\345\214\272\345\210\253.md" similarity index 100% rename from "Part2/JavaConcurrent/Thread\345\222\214Runnable\345\256\236\347\216\260\345\244\232\347\272\277\347\250\213\347\232\204\345\214\272\345\210\253.md" rename to "JavaJob/JavaConcurrent/Thread\345\222\214Runnable\345\256\236\347\216\260\345\244\232\347\272\277\347\250\213\347\232\204\345\214\272\345\210\253.md" diff --git "a/Part2/JavaConcurrent/thread\344\270\216runable\345\246\202\344\275\225\345\256\236\347\216\260\345\244\232\347\272\277\347\250\213.md" "b/JavaJob/JavaConcurrent/thread\344\270\216runable\345\246\202\344\275\225\345\256\236\347\216\260\345\244\232\347\272\277\347\250\213.md" similarity index 100% rename from "Part2/JavaConcurrent/thread\344\270\216runable\345\246\202\344\275\225\345\256\236\347\216\260\345\244\232\347\272\277\347\250\213.md" rename to "JavaJob/JavaConcurrent/thread\344\270\216runable\345\246\202\344\275\225\345\256\236\347\216\260\345\244\232\347\272\277\347\250\213.md" diff --git "a/Part2/JavaConcurrent/volatile\345\217\230\351\207\217\344\277\256\351\245\260\347\254\246.md" "b/JavaJob/JavaConcurrent/volatile\345\217\230\351\207\217\344\277\256\351\245\260\347\254\246.md" similarity index 100% rename from "Part2/JavaConcurrent/volatile\345\217\230\351\207\217\344\277\256\351\245\260\347\254\246.md" rename to "JavaJob/JavaConcurrent/volatile\345\217\230\351\207\217\344\277\256\351\245\260\347\254\246.md" diff --git "a/Part2/JavaConcurrent/\344\275\277\347\224\250wait notify notifyall\345\256\236\347\216\260\347\272\277\347\250\213\351\227\264\351\200\232\344\277\241.md" "b/JavaJob/JavaConcurrent/\344\275\277\347\224\250wait notify notifyall\345\256\236\347\216\260\347\272\277\347\250\213\351\227\264\351\200\232\344\277\241.md" similarity index 100% rename from "Part2/JavaConcurrent/\344\275\277\347\224\250wait notify notifyall\345\256\236\347\216\260\347\272\277\347\250\213\351\227\264\351\200\232\344\277\241.md" rename to "JavaJob/JavaConcurrent/\344\275\277\347\224\250wait notify notifyall\345\256\236\347\216\260\347\272\277\347\250\213\351\227\264\351\200\232\344\277\241.md" diff --git "a/Part2/JavaConcurrent/\345\217\257\351\207\215\345\205\245\345\206\205\347\275\256\351\224\201.md" "b/JavaJob/JavaConcurrent/\345\217\257\351\207\215\345\205\245\345\206\205\347\275\256\351\224\201.md" similarity index 100% rename from "Part2/JavaConcurrent/\345\217\257\351\207\215\345\205\245\345\206\205\347\275\256\351\224\201.md" rename to "JavaJob/JavaConcurrent/\345\217\257\351\207\215\345\205\245\345\206\205\347\275\256\351\224\201.md" diff --git "a/Part2/JavaConcurrent/\345\244\232\347\272\277\347\250\213\347\216\257\345\242\203\344\270\255\345\256\211\345\205\250\344\275\277\347\224\250\351\233\206\345\220\210API.md" "b/JavaJob/JavaConcurrent/\345\244\232\347\272\277\347\250\213\347\216\257\345\242\203\344\270\255\345\256\211\345\205\250\344\275\277\347\224\250\351\233\206\345\220\210API.md" similarity index 100% rename from "Part2/JavaConcurrent/\345\244\232\347\272\277\347\250\213\347\216\257\345\242\203\344\270\255\345\256\211\345\205\250\344\275\277\347\224\250\351\233\206\345\220\210API.md" rename to "JavaJob/JavaConcurrent/\345\244\232\347\272\277\347\250\213\347\216\257\345\242\203\344\270\255\345\256\211\345\205\250\344\275\277\347\224\250\351\233\206\345\220\210API.md" diff --git "a/Part2/JavaConcurrent/\345\256\210\346\212\244\347\272\277\347\250\213\344\270\216\351\230\273\345\241\236\347\272\277\347\250\213.md" "b/JavaJob/JavaConcurrent/\345\256\210\346\212\244\347\272\277\347\250\213\344\270\216\351\230\273\345\241\236\347\272\277\347\250\213.md" similarity index 100% rename from "Part2/JavaConcurrent/\345\256\210\346\212\244\347\272\277\347\250\213\344\270\216\351\230\273\345\241\236\347\272\277\347\250\213.md" rename to "JavaJob/JavaConcurrent/\345\256\210\346\212\244\347\272\277\347\250\213\344\270\216\351\230\273\345\241\236\347\272\277\347\250\213.md" diff --git "a/Part2/JavaConcurrent/\345\256\236\347\216\260\345\206\205\345\255\230\345\217\257\350\247\201\347\232\204\344\270\244\347\247\215\346\226\271\346\263\225\346\257\224\350\276\203\357\274\232\345\212\240\351\224\201\345\222\214volatile\345\217\230\351\207\217.md" "b/JavaJob/JavaConcurrent/\345\256\236\347\216\260\345\206\205\345\255\230\345\217\257\350\247\201\347\232\204\344\270\244\347\247\215\346\226\271\346\263\225\346\257\224\350\276\203\357\274\232\345\212\240\351\224\201\345\222\214volatile\345\217\230\351\207\217.md" similarity index 100% rename from "Part2/JavaConcurrent/\345\256\236\347\216\260\345\206\205\345\255\230\345\217\257\350\247\201\347\232\204\344\270\244\347\247\215\346\226\271\346\263\225\346\257\224\350\276\203\357\274\232\345\212\240\351\224\201\345\222\214volatile\345\217\230\351\207\217.md" rename to "JavaJob/JavaConcurrent/\345\256\236\347\216\260\345\206\205\345\255\230\345\217\257\350\247\201\347\232\204\344\270\244\347\247\215\346\226\271\346\263\225\346\257\224\350\276\203\357\274\232\345\212\240\351\224\201\345\222\214volatile\345\217\230\351\207\217.md" diff --git "a/Part2/JavaConcurrent/\346\255\273\351\224\201.md" "b/JavaJob/JavaConcurrent/\346\255\273\351\224\201.md" similarity index 100% rename from "Part2/JavaConcurrent/\346\255\273\351\224\201.md" rename to "JavaJob/JavaConcurrent/\346\255\273\351\224\201.md" diff --git "a/Part2/JavaConcurrent/\347\224\237\344\272\247\350\200\205\345\222\214\346\266\210\350\264\271\350\200\205\351\227\256\351\242\230.md" "b/JavaJob/JavaConcurrent/\347\224\237\344\272\247\350\200\205\345\222\214\346\266\210\350\264\271\350\200\205\351\227\256\351\242\230.md" similarity index 100% rename from "Part2/JavaConcurrent/\347\224\237\344\272\247\350\200\205\345\222\214\346\266\210\350\264\271\350\200\205\351\227\256\351\242\230.md" rename to "JavaJob/JavaConcurrent/\347\224\237\344\272\247\350\200\205\345\222\214\346\266\210\350\264\271\350\200\205\351\227\256\351\242\230.md" diff --git "a/Part2/JavaConcurrent/\347\272\277\347\250\213\344\270\255\346\226\255.md" "b/JavaJob/JavaConcurrent/\347\272\277\347\250\213\344\270\255\346\226\255.md" similarity index 100% rename from "Part2/JavaConcurrent/\347\272\277\347\250\213\344\270\255\346\226\255.md" rename to "JavaJob/JavaConcurrent/\347\272\277\347\250\213\344\270\255\346\226\255.md" diff --git "a/Part2/JavaConcurrent/\347\272\277\347\250\213\346\214\202\350\265\267\343\200\201\346\201\242\345\244\215\344\270\216\347\273\210\346\255\242\347\232\204\346\255\243\347\241\256\346\226\271\346\263\225.md" "b/JavaJob/JavaConcurrent/\347\272\277\347\250\213\346\214\202\350\265\267\343\200\201\346\201\242\345\244\215\344\270\216\347\273\210\346\255\242\347\232\204\346\255\243\347\241\256\346\226\271\346\263\225.md" similarity index 100% rename from "Part2/JavaConcurrent/\347\272\277\347\250\213\346\214\202\350\265\267\343\200\201\346\201\242\345\244\215\344\270\216\347\273\210\346\255\242\347\232\204\346\255\243\347\241\256\346\226\271\346\263\225.md" rename to "JavaJob/JavaConcurrent/\347\272\277\347\250\213\346\214\202\350\265\267\343\200\201\346\201\242\345\244\215\344\270\216\347\273\210\346\255\242\347\232\204\346\255\243\347\241\256\346\226\271\346\263\225.md" diff --git "a/Part2/JavaSE/ArrayList \343\200\201 LinkedList \343\200\201 Vector \347\232\204\345\272\225\345\261\202\345\256\236\347\216\260\345\222\214\345\214\272\345\210\253.md" "b/JavaJob/JavaSE/ArrayList \343\200\201 LinkedList \343\200\201 Vector \347\232\204\345\272\225\345\261\202\345\256\236\347\216\260\345\222\214\345\214\272\345\210\253.md" similarity index 100% rename from "Part2/JavaSE/ArrayList \343\200\201 LinkedList \343\200\201 Vector \347\232\204\345\272\225\345\261\202\345\256\236\347\216\260\345\222\214\345\214\272\345\210\253.md" rename to "JavaJob/JavaSE/ArrayList \343\200\201 LinkedList \343\200\201 Vector \347\232\204\345\272\225\345\261\202\345\256\236\347\216\260\345\222\214\345\214\272\345\210\253.md" diff --git "a/Part2/JavaSE/ArrayList\346\272\220\347\240\201\345\211\226\346\236\220.md" "b/JavaJob/JavaSE/ArrayList\346\272\220\347\240\201\345\211\226\346\236\220.md" similarity index 100% rename from "Part2/JavaSE/ArrayList\346\272\220\347\240\201\345\211\226\346\236\220.md" rename to "JavaJob/JavaSE/ArrayList\346\272\220\347\240\201\345\211\226\346\236\220.md" diff --git a/Part2/JavaSE/Arraylist.md b/JavaJob/JavaSE/Arraylist.md similarity index 100% rename from Part2/JavaSE/Arraylist.md rename to JavaJob/JavaSE/Arraylist.md diff --git "a/Part2/JavaSE/Arraylist\345\222\214Hashmap\345\246\202\344\275\225\346\211\251\345\256\271\347\255\211.md" "b/JavaJob/JavaSE/Arraylist\345\222\214Hashmap\345\246\202\344\275\225\346\211\251\345\256\271\347\255\211.md" similarity index 100% rename from "Part2/JavaSE/Arraylist\345\222\214Hashmap\345\246\202\344\275\225\346\211\251\345\256\271\347\255\211.md" rename to "JavaJob/JavaSE/Arraylist\345\222\214Hashmap\345\246\202\344\275\225\346\211\251\345\256\271\347\255\211.md" diff --git a/Part2/JavaSE/Collection.md b/JavaJob/JavaSE/Collection.md similarity index 100% rename from Part2/JavaSE/Collection.md rename to JavaJob/JavaSE/Collection.md diff --git "a/Part2/JavaSE/HashMap\346\272\220\347\240\201\345\211\226\346\236\220.md" "b/JavaJob/JavaSE/HashMap\346\272\220\347\240\201\345\211\226\346\236\220.md" similarity index 100% rename from "Part2/JavaSE/HashMap\346\272\220\347\240\201\345\211\226\346\236\220.md" rename to "JavaJob/JavaSE/HashMap\346\272\220\347\240\201\345\211\226\346\236\220.md" diff --git "a/Part2/JavaSE/HashTable\346\272\220\347\240\201\345\211\226\346\236\220.md" "b/JavaJob/JavaSE/HashTable\346\272\220\347\240\201\345\211\226\346\236\220.md" similarity index 100% rename from "Part2/JavaSE/HashTable\346\272\220\347\240\201\345\211\226\346\236\220.md" rename to "JavaJob/JavaSE/HashTable\346\272\220\347\240\201\345\211\226\346\236\220.md" diff --git "a/Part2/JavaSE/Hashmap\347\232\204hashcode\347\232\204\344\275\234\347\224\250\347\255\211.md" "b/JavaJob/JavaSE/Hashmap\347\232\204hashcode\347\232\204\344\275\234\347\224\250\347\255\211.md" similarity index 100% rename from "Part2/JavaSE/Hashmap\347\232\204hashcode\347\232\204\344\275\234\347\224\250\347\255\211.md" rename to "JavaJob/JavaSE/Hashmap\347\232\204hashcode\347\232\204\344\275\234\347\224\250\347\255\211.md" diff --git "a/Part2/JavaSE/Java\344\270\255\347\232\204\345\206\205\345\255\230\346\263\204\346\274\217.md" "b/JavaJob/JavaSE/Java\344\270\255\347\232\204\345\206\205\345\255\230\346\263\204\346\274\217.md" similarity index 100% rename from "Part2/JavaSE/Java\344\270\255\347\232\204\345\206\205\345\255\230\346\263\204\346\274\217.md" rename to "JavaJob/JavaSE/Java\344\270\255\347\232\204\345\206\205\345\255\230\346\263\204\346\274\217.md" diff --git "a/Part2/JavaSE/Java\345\237\272\347\241\200\347\237\245\350\257\206.md" "b/JavaJob/JavaSE/Java\345\237\272\347\241\200\347\237\245\350\257\206.md" similarity index 100% rename from "Part2/JavaSE/Java\345\237\272\347\241\200\347\237\245\350\257\206.md" rename to "JavaJob/JavaSE/Java\345\237\272\347\241\200\347\237\245\350\257\206.md" diff --git "a/Part2/JavaSE/Java\351\233\206\345\220\210\346\241\206\346\236\266.md" "b/JavaJob/JavaSE/Java\351\233\206\345\220\210\346\241\206\346\236\266.md" similarity index 100% rename from "Part2/JavaSE/Java\351\233\206\345\220\210\346\241\206\346\236\266.md" rename to "JavaJob/JavaSE/Java\351\233\206\345\220\210\346\241\206\346\236\266.md" diff --git "a/Part2/JavaSE/LinkedHashMap\346\272\220\347\240\201\345\211\226\346\236\220.md" "b/JavaJob/JavaSE/LinkedHashMap\346\272\220\347\240\201\345\211\226\346\236\220.md" similarity index 100% rename from "Part2/JavaSE/LinkedHashMap\346\272\220\347\240\201\345\211\226\346\236\220.md" rename to "JavaJob/JavaSE/LinkedHashMap\346\272\220\347\240\201\345\211\226\346\236\220.md" diff --git "a/Part2/JavaSE/LinkedList\346\272\220\347\240\201\345\211\226\346\236\220.md" "b/JavaJob/JavaSE/LinkedList\346\272\220\347\240\201\345\211\226\346\236\220.md" similarity index 100% rename from "Part2/JavaSE/LinkedList\346\272\220\347\240\201\345\211\226\346\236\220.md" rename to "JavaJob/JavaSE/LinkedList\346\272\220\347\240\201\345\211\226\346\236\220.md" diff --git a/Part2/JavaSE/Linkedlist.md b/JavaJob/JavaSE/Linkedlist.md similarity index 100% rename from Part2/JavaSE/Linkedlist.md rename to JavaJob/JavaSE/Linkedlist.md diff --git a/Part2/JavaSE/List.md b/JavaJob/JavaSE/List.md similarity index 100% rename from Part2/JavaSE/List.md rename to JavaJob/JavaSE/List.md diff --git a/Part2/JavaSE/Queue.md b/JavaJob/JavaSE/Queue.md similarity index 100% rename from Part2/JavaSE/Queue.md rename to JavaJob/JavaSE/Queue.md diff --git a/Part2/JavaSE/Set.md b/JavaJob/JavaSE/Set.md similarity index 100% rename from Part2/JavaSE/Set.md rename to JavaJob/JavaSE/Set.md diff --git "a/Part2/JavaSE/String\346\272\220\347\240\201\345\210\206\346\236\220.md" "b/JavaJob/JavaSE/String\346\272\220\347\240\201\345\210\206\346\236\220.md" similarity index 100% rename from "Part2/JavaSE/String\346\272\220\347\240\201\345\210\206\346\236\220.md" rename to "JavaJob/JavaSE/String\346\272\220\347\240\201\345\210\206\346\236\220.md" diff --git "a/Part2/JavaSE/Vector\346\272\220\347\240\201\345\211\226\346\236\220.md" "b/JavaJob/JavaSE/Vector\346\272\220\347\240\201\345\211\226\346\236\220.md" similarity index 100% rename from "Part2/JavaSE/Vector\346\272\220\347\240\201\345\211\226\346\236\220.md" rename to "JavaJob/JavaSE/Vector\346\272\220\347\240\201\345\211\226\346\236\220.md" diff --git "a/Part2/JavaSE/hashmap\345\222\214hashtable\347\232\204\345\272\225\345\261\202\345\256\236\347\216\260\345\222\214\345\214\272\345\210\253\357\274\214\344\270\244\350\200\205\345\222\214concurrenthashmap\347\232\204\345\214\272\345\210\253\343\200\202.md" "b/JavaJob/JavaSE/hashmap\345\222\214hashtable\347\232\204\345\272\225\345\261\202\345\256\236\347\216\260\345\222\214\345\214\272\345\210\253\357\274\214\344\270\244\350\200\205\345\222\214concurrenthashmap\347\232\204\345\214\272\345\210\253\343\200\202.md" similarity index 100% rename from "Part2/JavaSE/hashmap\345\222\214hashtable\347\232\204\345\272\225\345\261\202\345\256\236\347\216\260\345\222\214\345\214\272\345\210\253\357\274\214\344\270\244\350\200\205\345\222\214concurrenthashmap\347\232\204\345\214\272\345\210\253\343\200\202.md" rename to "JavaJob/JavaSE/hashmap\345\222\214hashtable\347\232\204\345\272\225\345\261\202\345\256\236\347\216\260\345\222\214\345\214\272\345\210\253\357\274\214\344\270\244\350\200\205\345\222\214concurrenthashmap\347\232\204\345\214\272\345\210\253\343\200\202.md" diff --git "a/Part2/JavaSE/\344\273\216\346\272\220\347\240\201\345\210\206\346\236\220HashMap.md" "b/JavaJob/JavaSE/\344\273\216\346\272\220\347\240\201\345\210\206\346\236\220HashMap.md" similarity index 100% rename from "Part2/JavaSE/\344\273\216\346\272\220\347\240\201\345\210\206\346\236\220HashMap.md" rename to "JavaJob/JavaSE/\344\273\216\346\272\220\347\240\201\345\210\206\346\236\220HashMap.md" diff --git "a/Part2/JavaSE/\345\217\215\345\260\204\346\234\272\345\210\266.md" "b/JavaJob/JavaSE/\345\217\215\345\260\204\346\234\272\345\210\266.md" similarity index 100% rename from "Part2/JavaSE/\345\217\215\345\260\204\346\234\272\345\210\266.md" rename to "JavaJob/JavaSE/\345\217\215\345\260\204\346\234\272\345\210\266.md" diff --git "a/Part2/JavaSE/\345\246\202\344\275\225\350\241\250\350\276\276\345\207\272Collection\345\217\212\345\205\266\345\255\220\347\261\273.md" "b/JavaJob/JavaSE/\345\246\202\344\275\225\350\241\250\350\276\276\345\207\272Collection\345\217\212\345\205\266\345\255\220\347\261\273.md" similarity index 100% rename from "Part2/JavaSE/\345\246\202\344\275\225\350\241\250\350\276\276\345\207\272Collection\345\217\212\345\205\266\345\255\220\347\261\273.md" rename to "JavaJob/JavaSE/\345\246\202\344\275\225\350\241\250\350\276\276\345\207\272Collection\345\217\212\345\205\266\345\255\220\347\261\273.md" diff --git a/README.md b/README.md index 993ad08..dbc5b34 100644 --- a/README.md +++ b/README.md @@ -3,40 +3,40 @@ ## 第一部分: -* [Android(安卓)](https://github.com/BlogForMe/LearningNotes/tree/master/Part1/Android) - - * [Android基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Android基础知识.md) - * [Android内存泄漏总结](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Android内存泄漏总结.md) - * [Handler内存泄漏分析及解决](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Handler内存泄漏分析及解决.md) - * [Handler、Looper、Message、MessageQueue基础流程分析](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/线程通信基础流程分析.md) - * [Android性能优化](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Android性能优化.md) - * [ListView详解](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Listview详解.md) - * [RecyclerView和ListView的异同](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Recyclerview和Listview的异同.md) - * [AsyncTask源码分析](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Asynctask源码分析.md) - * [插件化技术](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/插件化技术学习.md) - * [自定义控件](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/自定义控件.md) +* [Android(安卓)](https://github.com/BlogForMe/LearningNotes/tree/master/AndroidJob/Android) + + * [Android基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Android基础知识.md) + * [Android内存泄漏总结](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Android内存泄漏总结.md) + * [Handler内存泄漏分析及解决](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Handler内存泄漏分析及解决.md) + * [Handler、Looper、Message、MessageQueue基础流程分析](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/线程通信基础流程分析.md) + * [Android性能优化](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Android性能优化.md) + * [ListView详解](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Listview详解.md) + * [RecyclerView和ListView的异同](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Recyclerview和Listview的异同.md) + * [AsyncTask源码分析](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Asynctask源码分析.md) + * [插件化技术](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/插件化技术学习.md) + * [自定义控件](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/自定义控件.md) * [事件分发机制](http://www.jianshu.com/p/e99b5e8bd67b) - * [ANR问题](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/ANR问题.md) - * [Art和Dalvik的区别](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Art和Dalvik区别.md) - * [Android关于OOM的解决方案](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Android关于oom的解决方案.md) - * [Fragment](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Fragment.md) + * [ANR问题](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/ANR问题.md) + * [Art和Dalvik的区别](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Art和Dalvik区别.md) + * [Android关于OOM的解决方案](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Android关于oom的解决方案.md) + * [Fragment](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Fragment.md) * [Activity&Fragment](https://github.com/xxv/android-lifecycle) - * [SurfaceView](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/SurfaceView.md) - * [Android几种进程](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Android几种进程.md) - * [APP启动过程](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/APP启动过程.md) + * [SurfaceView](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/SurfaceView.md) + * [Android几种进程](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Android几种进程.md) + * [APP启动过程](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/APP启动过程.md) * Activity启动流程以及界面展示过程 - * [图片三级缓存](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Android图片中的三级缓存.md) - * [Bitmap的分析与使用](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Bitmap的分析与使用.md) - * [热修复的原理](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/热修复技术.md) - * [AIDL](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/AIDL.md) - * [Binder机制](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Binder机制.md) - * [Zygote和System进程的启动过程](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Zygote和System进程的启动过程.md) - * [Android中的MVC,MVP和MVVM](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/MVC%2CMVP%2CMVVM的区别.md) - * [MVP](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/MVP.md) - * [Android开机过程](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Android开机过程.md) + * [图片三级缓存](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Android图片中的三级缓存.md) + * [Bitmap的分析与使用](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Bitmap的分析与使用.md) + * [热修复的原理](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/热修复技术.md) + * [AIDL](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/AIDL.md) + * [Binder机制](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Binder机制.md) + * [Zygote和System进程的启动过程](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Zygote和System进程的启动过程.md) + * [Android中的MVC,MVP和MVVM](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/MVC%2CMVP%2CMVVM的区别.md) + * [MVP](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/MVP.md) + * [Android开机过程](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Android开机过程.md) * [Retrofit源码分析](http://www.jianshu.com/p/c1a3a881a144) * [Glide源码分析](http://frodoking.github.io/2015/10/10/android-glide/) - * [EventBus用法详解](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/EventBus用法详解.md) + * [EventBus用法详解](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/EventBus用法详解.md) * [EventBus源码分析](http://p.codekk.com/blogs/detail/54cfab086c4761e5001b2538) * [Android ORM 框架之 greenDAO 使用心得](http://www.open-open.com/lib/view/open1438065400878.html) * [Data Binding(数据绑定)用户指南](http://www.jcodecraeer.com/a/anzhuokaifa/developer/2015/0606/3005.html) @@ -44,40 +44,40 @@ * 设计一套图片异步加载缓存方案 * Android UI适配 * [Gradle](http://wuxiaolong.me/categories/Gradle/) - * [查漏补缺](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/查漏补缺.md) - * [Git操作](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/Android/Git操作.md) + * [查漏补缺](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/查漏补缺.md) + * [Git操作](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Git操作.md) --- -* [DesignPattern(设计模式)](https://github.com/BlogForMe/LearningNotes/tree/master/Part1/DesignPattern) +* [DesignPattern(设计模式)](https://github.com/BlogForMe/LearningNotes/tree/master/AndroidJob/DesignPattern) - * [面向对象六大原则](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/常见的面向对象设计原则.md) - * [单例模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/单例模式.md) - * [Builder模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/Builder模式.md) - * [原型模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/原型模式.md) - * [简单工厂](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/简单工厂.md) + * [面向对象六大原则](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/DesignPattern/常见的面向对象设计原则.md) + * [单例模式](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/DesignPattern/单例模式.md) + * [Builder模式](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/DesignPattern/Builder模式.md) + * [原型模式](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/DesignPattern/原型模式.md) + * [简单工厂](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/DesignPattern/简单工厂.md) * 工厂方法模式 * 抽象工厂模式 - * [策略模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/策略模式.md) + * [策略模式](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/DesignPattern/策略模式.md) * 状态模式 - * [责任链模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/责任链模式.md) + * [责任链模式](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/DesignPattern/责任链模式.md) * 解释器模式 * 命令模式 - * [观察者模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/观察者模式.md) + * [观察者模式](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/DesignPattern/观察者模式.md) * 备忘录模式 * 迭代器模式 * 模板方法模式 * 访问者模式 * 中介者模式 - * [代理模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/代理模式.md) + * [代理模式](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/DesignPattern/代理模式.md) * 组合模式 - * [适配器模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/适配器模式.md) + * [适配器模式](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/DesignPattern/适配器模式.md) * 装饰模式 * 享元模式 - * [外观模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part1/DesignPattern/外观模式.md) + * [外观模式](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/DesignPattern/外观模式.md) * 桥接模式 @@ -85,84 +85,84 @@ ## 第二部分 -* [JavaSE(Java基础)](https://github.com/BlogForMe/LearningNotes/tree/master/Part2/JavaSE) - * [Java基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/Java基础知识.md) - * [Java中的内存泄漏](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/Java中的内存泄漏.md) - * [String源码分析](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/String源码分析.md) - * [Java集合框架](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/Java集合框架.md) - * [ArrayList源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/ArrayList源码剖析.md) - * [LinkedList源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/LinkedList源码剖析.md) - * [Vector源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/Vector源码剖析.md) - * [HashMap源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/HashMap源码剖析.md) - * [HashTable源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/HashTable源码剖析.md) - * [LinkedHashMap源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaSE/LinkedHashMap源码剖析.md) - -* [JVM(Java虚拟机)](https://github.com/BlogForMe/LearningNotes/tree/master/Part2/JVM) - * [JVM基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JVM/JVM.md) - * [JVM类加载机制](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JVM/JVM类加载机制.md) - * [Java内存区域与内存溢出](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JVM/Java内存区域与内存溢出.md) - * [垃圾回收算法](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JVM/垃圾回收算法.md) -* [JavaConcurrent(Java并发)](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/Java并发.md) - * [Java并发基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/Java并发基础知识.md) - * [生产者和消费者问题](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/生产者和消费者问题.md) - * [Thread和Runnable实现多线程的区别](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/Thread和Runnable实现多线程的区别.md) - * [线程中断](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/线程中断.md) - * [守护线程与阻塞线程](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/守护线程与阻塞线程.md) - * [synchronized](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/Synchronized.md) - * [多线程环境中安全使用集合API](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/多线程环境中安全使用集合API.md) - * [实现内存可见的两种方法比较:加锁和volatile变量](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/实现内存可见的两种方法比较:加锁和volatile变量.md) - * [死锁](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/死锁.md) - * [可重入内置锁](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/可重入内置锁.md) - * [使用wait/notify/notifyAll实现线程间通信](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/使用wait:notify:notifyall实现线程间通信.md) - * [NIO](https://github.com/BlogForMe/LearningNotes/blob/master/Part2/JavaConcurrent/NIO.md) +* [JavaSE(Java基础)](https://github.com/BlogForMe/LearningNotes/tree/master/JavaJob/JavaSE) + * [Java基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/Java基础知识.md) + * [Java中的内存泄漏](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/Java中的内存泄漏.md) + * [String源码分析](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/String源码分析.md) + * [Java集合框架](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/Java集合框架.md) + * [ArrayList源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/ArrayList源码剖析.md) + * [LinkedList源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/LinkedList源码剖析.md) + * [Vector源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/Vector源码剖析.md) + * [HashMap源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/HashMap源码剖析.md) + * [HashTable源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/HashTable源码剖析.md) + * [LinkedHashMap源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/LinkedHashMap源码剖析.md) + +* [JVM(Java虚拟机)](https://github.com/BlogForMe/LearningNotes/tree/master/JavaJob/JVM) + * [JVM基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JVM/JVM.md) + * [JVM类加载机制](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JVM/JVM类加载机制.md) + * [Java内存区域与内存溢出](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JVM/Java内存区域与内存溢出.md) + * [垃圾回收算法](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JVM/垃圾回收算法.md) +* [JavaConcurrent(Java并发)](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/Java并发.md) + * [Java并发基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/Java并发基础知识.md) + * [生产者和消费者问题](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/生产者和消费者问题.md) + * [Thread和Runnable实现多线程的区别](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/Thread和Runnable实现多线程的区别.md) + * [线程中断](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/线程中断.md) + * [守护线程与阻塞线程](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/守护线程与阻塞线程.md) + * [synchronized](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/Synchronized.md) + * [多线程环境中安全使用集合API](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/多线程环境中安全使用集合API.md) + * [实现内存可见的两种方法比较:加锁和volatile变量](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/实现内存可见的两种方法比较:加锁和volatile变量.md) + * [死锁](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/死锁.md) + * [可重入内置锁](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/可重入内置锁.md) + * [使用wait/notify/notifyAll实现线程间通信](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/使用wait:notify:notifyall实现线程间通信.md) + * [NIO](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/NIO.md) --- ## 第三部分 -* [DataStructure(数据结构)](https://github.com/BlogForMe/LearningNotes/tree/master/Part3/DataStructure) - * [数组](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/DataStructure/数组.md) +* [DataStructure(数据结构)](https://github.com/BlogForMe/LearningNotes/tree/master/DataAlgorithm/DataStructure) + * [数组](https://github.com/BlogForMe/LearningNotes/blob/master/DataAlgorithm/DataStructure/数组.md) * 链表 - * [栈和队列](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/DataStructure/栈和队列.md) + * [栈和队列](https://github.com/BlogForMe/LearningNotes/blob/master/DataAlgorithm/DataStructure/栈和队列.md) * 字符串 * 树 * 图 * [Algorithm(算法)]() - * [排序](https://github.com/anAngryAnt/LearningNotes/tree/master/Part3/Algorithm/Sort) - * [选择排序](https://github.com/anAngryAnt/LearningNotes/tree/master/Part3/Algorithm/Sort/选择排序.md) - * [冒泡排序](https://github.com/anAngryAnt/LearningNotes/tree/master/Part3/Algorithm/Sort/冒泡排序.md) - * [快速排序](https://github.com/anAngryAnt/LearningNotes/tree/master/Part3/Algorithm/Sort/快速排序.md) - * [归并排序](https://github.com/anAngryAnt/LearningNotes/tree/master/Part3/Algorithm/Sort/归并排序.md) - * [面试中的十大排序算法总结](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/Sort/%E9%9D%A2%E8%AF%95%E4%B8%AD%E7%9A%84%2010%20%E5%A4%A7%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E6%80%BB%E7%BB%93.md) + * [排序](https://github.com/anAngryAnt/LearningNotes/tree/master/DataAlgorithm/Algorithm/Sort) + * [选择排序](https://github.com/anAngryAnt/LearningNotes/tree/master/DataAlgorithm/Algorithm/Sort/选择排序.md) + * [冒泡排序](https://github.com/anAngryAnt/LearningNotes/tree/master/DataAlgorithm/Algorithm/Sort/冒泡排序.md) + * [快速排序](https://github.com/anAngryAnt/LearningNotes/tree/master/DataAlgorithm/Algorithm/Sort/快速排序.md) + * [归并排序](https://github.com/anAngryAnt/LearningNotes/tree/master/DataAlgorithm/Algorithm/Sort/归并排序.md) + * [面试中的十大排序算法总结](https://github.com/BlogForMe/LearningNotes/blob/master/DataAlgorithm/Algorithm/Sort/%E9%9D%A2%E8%AF%95%E4%B8%AD%E7%9A%84%2010%20%E5%A4%A7%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E6%80%BB%E7%BB%93.md) * 查找 - * [顺序查找](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/Lookup/顺序查找.md) - * [折半查找](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/Lookup/折半查找.md) + * [顺序查找](https://github.com/BlogForMe/LearningNotes/blob/master/DataAlgorithm/Algorithm/Lookup/顺序查找.md) + * [折半查找](https://github.com/BlogForMe/LearningNotes/blob/master/DataAlgorithm/Algorithm/Lookup/折半查找.md) * 《剑指Offer》 - * [面试题2:实现Singleton模式](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/剑指Offer/1.七种方式实现singleton模式.md) - * [面试题6:重建二叉树](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/剑指Offer/面试题6:重建二叉树.md) - * [面试题11:数值的整数次方](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/剑指Offer/面试题11:数值的整数次方.md) - * [面试题44:扑克牌的顺子](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/剑指Offer/面试题44:扑克牌的顺子.md) - * [面试题45:圆圈中最后剩下的数字](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/剑指Offer/面试题45:圆圈中最后剩下的数字.md) + * [面试题2:实现Singleton模式](https://github.com/BlogForMe/LearningNotes/blob/master/DataAlgorithm/Algorithm/剑指Offer/1.七种方式实现singleton模式.md) + * [面试题6:重建二叉树](https://github.com/BlogForMe/LearningNotes/blob/master/DataAlgorithm/Algorithm/剑指Offer/面试题6:重建二叉树.md) + * [面试题11:数值的整数次方](https://github.com/BlogForMe/LearningNotes/blob/master/DataAlgorithm/Algorithm/剑指Offer/面试题11:数值的整数次方.md) + * [面试题44:扑克牌的顺子](https://github.com/BlogForMe/LearningNotes/blob/master/DataAlgorithm/Algorithm/剑指Offer/面试题44:扑克牌的顺子.md) + * [面试题45:圆圈中最后剩下的数字](https://github.com/BlogForMe/LearningNotes/blob/master/DataAlgorithm/Algorithm/剑指Offer/面试题45:圆圈中最后剩下的数字.md) * 《程序员面试金典》 * 《LeetCode》 - * [two-sum](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/LeetCode/two-sum.md) + * [two-sum](https://github.com/BlogForMe/LearningNotes/blob/master/DataAlgorithm/Algorithm/LeetCode/two-sum.md) * 《程序员代码面试指南(左程云)》 - * [1.设计一个有getMin功能的栈](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/程序员代码面试指南(左程云)/1.设计一个有getMin功能的栈.md) - * [2.由两个栈组成的队列](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/程序员代码面试指南(左程云)/2.由两个栈组成的队列.md) - * [3.如何仅用递归函数和栈操作逆序一个栈](https://github.com/BlogForMe/LearningNotes/blob/master/Part3/Algorithm/程序员代码面试指南(左程云)/3.如何仅用递归函数和栈操作逆序一个栈.md) + * [1.设计一个有getMin功能的栈](https://github.com/BlogForMe/LearningNotes/blob/master/DataAlgorithm/Algorithm/程序员代码面试指南(左程云)/1.设计一个有getMin功能的栈.md) + * [2.由两个栈组成的队列](https://github.com/BlogForMe/LearningNotes/blob/master/DataAlgorithm/Algorithm/程序员代码面试指南(左程云)/2.由两个栈组成的队列.md) + * [3.如何仅用递归函数和栈操作逆序一个栈](https://github.com/BlogForMe/LearningNotes/blob/master/DataAlgorithm/Algorithm/程序员代码面试指南(左程云)/3.如何仅用递归函数和栈操作逆序一个栈.md) --- ## 第四部分 -* [Network(网络)](https://github.com/BlogForMe/LearningNotes/tree/master/Part4/Network) - * [TCP/UDP](https://github.com/BlogForMe/LearningNotes/blob/master/Part4/Network/TCP与UDP.md) - * [HTTP](https://github.com/BlogForMe/LearningNotes/blob/master/Part4/Network/Http协议.md) - * [Socket](https://github.com/BlogForMe/LearningNotes/blob/master/Part4/Network/Socket.md) - * [计算机网络基础汇总](https://github.com/BlogForMe/LearningNotes/blob/master/Part4/Network/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80%E6%B1%87%E6%80%BB.md) -* [OperatingSystem(操作系统)](https://github.com/BlogForMe/LearningNotes/blob/master/Part4/OperatingSystem/操作系统.md) - * [Linux系统的IPC](https://github.com/BlogForMe/LearningNotes/blob/master/Part4/OperatingSystem/Linux系统的IPC.md) +* [Network(网络)](https://github.com/BlogForMe/LearningNotes/tree/master/CsNetwork/Network) + * [TCP/UDP](https://github.com/BlogForMe/LearningNotes/blob/master/CsNetwork/Network/TCP与UDP.md) + * [HTTP](https://github.com/BlogForMe/LearningNotes/blob/master/CsNetwork/Network/Http协议.md) + * [Socket](https://github.com/BlogForMe/LearningNotes/blob/master/CsNetwork/Network/Socket.md) + * [计算机网络基础汇总](https://github.com/BlogForMe/LearningNotes/blob/master/CsNetwork/Network/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80%E6%B1%87%E6%80%BB.md) +* [OperatingSystem(操作系统)](https://github.com/BlogForMe/LearningNotes/blob/master/CsNetwork/OperatingSystem/操作系统.md) + * [Linux系统的IPC](https://github.com/BlogForMe/LearningNotes/blob/master/CsNetwork/OperatingSystem/Linux系统的IPC.md) --- @@ -170,31 +170,31 @@ ## 第五部分 -* [ReadingNotes(读书笔记)](https://github.com/BlogForMe/LearningNotes/tree/master/Part5/ReadingNotes) - * [《APP研发录》第1章读书笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《APP研发录》第1章读书笔记.md) - * [《APP研发录》第2章读书笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《APP研发录》第2章读书笔记.md) - * [《Android开发艺术探索》第一章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第一章笔记.md) - * [《Android开发艺术探索》第二章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第二章笔记.md) - * [《Android开发艺术探索》第三章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第三章笔记.md) - * [《Android开发艺术探索》第四章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第四章笔记.md) - * [《Android开发艺术探索》第八章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第八章笔记.md) - * [《Android开发艺术探索》第十五章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《Android开发艺术探索》第十五章笔记.md) - * [《深入理解Java虚拟机》第12章](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《深入理解java虚拟机》第12章.md) - * [《Java编程思想》第一章读书笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《Java编程思想》第一章读书笔记.md) - * [《Java编程思想》第二章读书笔记](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/ReadingNotes/《Java编程思想》第二章读书笔记.md) - -* [Project(项目)](https://github.com/BlogForMe/LearningNotes/tree/master/Part5/Project) - * [项目难点](https://github.com/BlogForMe/LearningNotes/blob/master/Part5/Project/项目.md) +* [ReadingNotes(读书笔记)](https://github.com/BlogForMe/LearningNotes/tree/master/BookNotes/ReadingNotes) + * [《APP研发录》第1章读书笔记](https://github.com/BlogForMe/LearningNotes/blob/master/BookNotes/ReadingNotes/《APP研发录》第1章读书笔记.md) + * [《APP研发录》第2章读书笔记](https://github.com/BlogForMe/LearningNotes/blob/master/BookNotes/ReadingNotes/《APP研发录》第2章读书笔记.md) + * [《Android开发艺术探索》第一章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/BookNotes/ReadingNotes/《Android开发艺术探索》第一章笔记.md) + * [《Android开发艺术探索》第二章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/BookNotes/ReadingNotes/《Android开发艺术探索》第二章笔记.md) + * [《Android开发艺术探索》第三章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/BookNotes/ReadingNotes/《Android开发艺术探索》第三章笔记.md) + * [《Android开发艺术探索》第四章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/BookNotes/ReadingNotes/《Android开发艺术探索》第四章笔记.md) + * [《Android开发艺术探索》第八章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/BookNotes/ReadingNotes/《Android开发艺术探索》第八章笔记.md) + * [《Android开发艺术探索》第十五章笔记](https://github.com/BlogForMe/LearningNotes/blob/master/BookNotes/ReadingNotes/《Android开发艺术探索》第十五章笔记.md) + * [《深入理解Java虚拟机》第12章](https://github.com/BlogForMe/LearningNotes/blob/master/BookNotes/ReadingNotes/《深入理解java虚拟机》第12章.md) + * [《Java编程思想》第一章读书笔记](https://github.com/BlogForMe/LearningNotes/blob/master/BookNotes/ReadingNotes/《Java编程思想》第一章读书笔记.md) + * [《Java编程思想》第二章读书笔记](https://github.com/BlogForMe/LearningNotes/blob/master/BookNotes/ReadingNotes/《Java编程思想》第二章读书笔记.md) + +* [Project(项目)](https://github.com/BlogForMe/LearningNotes/tree/master/BookNotes/Project) + * [项目难点](https://github.com/BlogForMe/LearningNotes/blob/master/BookNotes/Project/项目.md) ## 第六部分 -* [InterviewExperience(面试经验)](https://github.com/BlogForMe/LearningNotes/tree/master/Part6/InterviewExperience) - * [Alibaba](https://github.com/BlogForMe/LearningNotes/blob/master/Part6/InterviewExperience/Alibaba.md) - * [美团](https://github.com/BlogForMe/LearningNotes/blob/master/Part6/InterviewExperience/美团.md) - * [豌豆荚](https://github.com/BlogForMe/LearningNotes/blob/master/Part6/InterviewExperience/豌豆荚.md) - * [蜻蜓FM](https://github.com/BlogForMe/LearningNotes/blob/master/Part6/InterviewExperience/蜻蜓FM.md) - * [新浪微博](https://github.com/BlogForMe/LearningNotes/blob/master/Part6/InterviewExperience/新浪微博.md) - * [网易杭研](https://github.com/BlogForMe/LearningNotes/blob/master/Part6/InterviewExperience/网易杭研.md) +* [InterviewExperience(面试经验)](https://github.com/BlogForMe/LearningNotes/tree/master/Bussiness/InterviewExperience) + * [Alibaba](https://github.com/BlogForMe/LearningNotes/blob/master/Bussiness/InterviewExperience/Alibaba.md) + * [美团](https://github.com/BlogForMe/LearningNotes/blob/master/Bussiness/InterviewExperience/美团.md) + * [豌豆荚](https://github.com/BlogForMe/LearningNotes/blob/master/Bussiness/InterviewExperience/豌豆荚.md) + * [蜻蜓FM](https://github.com/BlogForMe/LearningNotes/blob/master/Bussiness/InterviewExperience/蜻蜓FM.md) + * [新浪微博](https://github.com/BlogForMe/LearningNotes/blob/master/Bussiness/InterviewExperience/新浪微博.md) + * [网易杭研](https://github.com/BlogForMe/LearningNotes/blob/master/Bussiness/InterviewExperience/网易杭研.md) --- From 38460672cdc12f18f7d061e3bb3093b68c29c746 Mon Sep 17 00:00:00 2001 From: john Date: Sat, 2 Jan 2021 11:17:24 +0800 Subject: [PATCH 3/9] d --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index dbc5b34..ef38a9c 100644 --- a/README.md +++ b/README.md @@ -198,7 +198,6 @@ --- -* [Resume(简历)](https://zhuanlan.zhihu.com/p/20672941) --- From aa9f7da3186e21d5d4595bfaab70084f24e8e059 Mon Sep 17 00:00:00 2001 From: john Date: Thu, 7 Jan 2021 13:58:34 +0800 Subject: [PATCH 4/9] fd --- .DS_Store | Bin 10244 -> 10244 bytes JavaJob/.DS_Store | Bin 10244 -> 10244 bytes ...72\347\241\200\347\237\245\350\257\206.md" | 18 +++++++++++++----- README.md | 10 +++++----- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/.DS_Store b/.DS_Store index 8ffced04c54880aa6c36a253fb912a6a83cd48a4..31c19f5dfa1eb3eb723223719d459e3c3f7cf4d7 100644 GIT binary patch delta 166 zcmZn(XbIS0E+ERq;K-22kit;Jkk60_q`iQ2(&P=&@;GE_1a9!7>6tu1T6A)Vpzvld zfwQb4#s(%j3Wmn!wK@vb=H>=E3g*TZljQ|XHz$a>vTi;jBg?#*UEvSQWCua9%~yn- MnQ&^DoFEnt00d$w9smFU delta 113 zcmZn(XbIS0F0i>q@Bu4_k*Sf6f{B5}9sFWaiAw zIcIj}+i!MqW*K8>$z_@ti!#O(%3SIi71v2z&-0WN33@6>g8UhaGnY9m&2lU|#X9T= z5eN|o5eN|o5eN~u6%e2^nNXN~e`gSCn$4d`9^riGFt|;V1o^*OJWc=dI49-=7NVU9M}7*ORF| zmO0d?&yKr}pR^n^E1a#2NhSw+EGOd*wYWJaIX(fRHbHV(}wm#1ILaJpBOoLMl6dV_|C8@*&Z*?-fYqNMAorg=P=pv zG0MilO|UIRV4f%aL@+1W-l^bCTBPmeU7dh=j^0!Zno`&b=;)BDleUN zZM)O;EI!QMUf(?GbKMkG?>^7X`f)K>uSMfaD?R6#yGrZ8{mtIlPZJ>G;;8mYG%cH`FdCIbaGW zW3Dk@(d(4nT*`VZXZgp*X6n^d3l{X*7=-w1FjD!5iJCmNjYtVFPR+s7VeCftQW2>U<<=V}e49%*J7%oy>Y`Lt6 zCD+9oWlN=Fe*s&?TG>u^h%OC>*(vrsJI5}vOYAN75&Mjdv1{ym_7nS={lb1_e*lP} z6w^?N8Z5yw)MGiCumKyf32o@WE_C8y>_Z=tNFfayS@_5ykH_%@p2E|32B+~NUcx!N zj0<=d@8bh}h)-}CS8x?$_!d9lNBkxy7%6-QI%K<0;&-YQQ#tt9MNVIz%C+0twzY4+ zg{k~iC4Y&tX5TfZCc1RReXE)u+B{BxqE|kNl@p05*eB^FXjh<>q`EP8-u&7H+TAzW zAKgS$^QgkvrcWOe){ASGC`2$_5lyYWwnC*{Aa(V%4T_>iq-JGplS;JLOQdd%wpJm6 z>(iumowi=3Eufc5?M5x85YzRtvH5f787*;5(;00@^-ex z&J$}d;u7A*JH+1i@G(Be7x=n}uR9A&l@i|+^R?)lDxq^~59^qGLZODdCZ14%)t!1a z1^#!rM@QYDD_aBv#YLx!-p8;X~ PuV3#fD~$jDKk@(H6a+S@ literal 10244 zcmeHMTWl0n82n2w^iFxXxP#Vw=%mk(uvcVvNOA- ztks%mFly8%6^QcSixKt7dV9jlgG8UC#z1^ABwilW1YbyuiT{~1+t4jkpA6zT$vOX= z|8ma$-}%l=&RGD!L{4u8hys8_l}Ys$YOYb3oz(>;6ljOC+gE zs#;ogAT{btq&&^bxd|=1kM;UAZ!{e|_dAX?_pGG{Ok-k1txGz#r(JQb zvBG0hkDuUqV(_kj>XN)q{$0}fRMxf}`!M;jF)HT(N@Z1vNYV?v!i$Ct`SwuxyEk8(mXS7bZDO8j;PfxQJ^d1*nL?ePs=@+aje{!O_rLB zW@U2ZY;3ozlzEJMXR?lE^*OHTnT|a?ynh^Gt25DtJmMXsr~+V=WMlFQ>)Y|%LntOYo;w@&xEOaqr;k;F>Kwm5AP+K z*`E1`X=LRZY?AwJZOoXhU9s}^JMIjJOTCMu4CT`1k(}vGs*RGw=V%Bw%Ib`?U#ARv z9i5G+`<8G+c%3BeWBO#)pq8tZ4dEtP)ueux^5sKpRGMYgmHQv1y}(0Tl{QJ$OLbwigVsWCoqme>x^7+>#8XygLG2c$6`<9(HVt-}z51Z|9iFbEl9zqQ>sH2Hl zbTNl{EZ|f4G#f&G*Pd4|jFbF5j3s1?L>ZoQ{XQPgtU2;6$#7P3|n<+*iRn5+=klIv(7 zq))^@Ch(&4JqKUI_wWl5_X_-p6uW;ciS}KOVplqHdbV zYoU$fc!UUCz$ttJr}0UA7M~~jzKAd338L?7_&T1(H}NezLqwh-8h?l%;m1VeukahZ zSVG$!^J$BhN@-j2ohqa4H~_sj>lZ3WuO#XD7>S-hKp-Fx5C{ka1OkgAP{z$scK_db z{r~?LA4FIM0s?{mGy+)Ok?KfL3dQ4cX*TSxJxcWuRaThaG?#t|HU4!xN&h;YI_zH2 ozeFHiaBJYl#YxZNr@5pjD*yVQ0pk2$yoD0y{{`1q|Bv(kU-@YunE(I) diff --git "a/JavaJob/JavaSE/Java\345\237\272\347\241\200\347\237\245\350\257\206.md" "b/JavaJob/JavaSE/Java\345\237\272\347\241\200\347\237\245\350\257\206.md" index 782ade9..09c3256 100644 --- "a/JavaJob/JavaSE/Java\345\237\272\347\241\200\347\237\245\350\257\206.md" +++ "b/JavaJob/JavaSE/Java\345\237\272\347\241\200\347\237\245\350\257\206.md" @@ -1,7 +1,7 @@ -#J2SE + J2SE --- -##基础 +基础 --- **八种基本数据类型的大小,以及他们的封装类。** @@ -27,7 +27,7 @@ 比较基础数据类型(Java中基础数据类型包括八中:short,int,long,float,double,char,byte,boolen):这种情况下,==比较的是他们的值是否相等。 引用间的比较:在这种情况下,==比较的是他们在内存中的地址,也就是说,除非引用指向的是同一个new出来的对象,此时他们使用`==`去比较得到true,否则,得到false。 2. 使用equals进行比较: - + equals追根溯源,是Object类中的一个方法,在该类中,equals的实现也仅仅只是比较两个对象的内存地址是否相等,但在一些子类中,如:String、Integer 等,该方法将被重写。 3. 以`String`类为例子说明`eqauls`与`==`的区别: @@ -101,6 +101,8 @@ 主要是JAVA里除了8种基本类型传参数是值传递,其他的类对象传参数都是引用传递,我们有时候不希望在方法里讲参数改变,这是就需要在类中复写clone方法。 + [深拷贝和浅拷贝](https://blog.csdn.net/huaiyiheyuan/article/details/55102057) + 2.getClass方法 final方法,获得运行时类型。 @@ -173,7 +175,7 @@ JDK1.2之前只有强引用,其他几种引用都是在JDK1.2之后引入的. --- -**Hashcode的作用。** +**Hashcode的作用。**? [http://c610367182.iteye.com/blog/1930676](http://c610367182.iteye.com/blog/1930676) @@ -303,7 +305,7 @@ Java将可抛出(Throwable)的结构分为三种类型: 被检查的异常(Che 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好因此操作起来更简单;我们现在使用的智能手机也是封装得足够好的,因为几个按键就搞定了所有的事情)。 多态:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。如果将对象的方法视为对象向外界提供的服务,那么运行时的多态性可以解释为:当A系统访问B系统提供的服务时,B系统有多种提供服务的方式,但一切对A系统来说都是透明的(就像电动剃须刀是A系统,它的供电系统是B系统,B系统可以使用电池供电或者用交流电,甚至还有可能是太阳能,A系统只会通过B类对象调用供电的方法,但并不知道供电系统的底层实现是什么,究竟通过何种方式获得了动力)。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:1. 方法重写(子类继承父类并重写父类中已有的或抽象的方法);2. 对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。 - + --- @@ -532,6 +534,8 @@ LinkedList 是线程不安全的,底层是由链表实现的 Map 是键值对集合 + + HashTable 和 HashMap 是 Map 的实现类 HashTable 是线程安全的,不能存储 null 值 HashMap 不是线程安全的,可以存储 null 值 @@ -542,3 +546,7 @@ Queue接口:提供了几个基本方法,offer、poll、peek等。已知实 + + + + diff --git a/README.md b/README.md index ef38a9c..c8c67e1 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # LearningNotes - --- +--- ## 第一部分: @@ -102,7 +102,7 @@ * [JVM类加载机制](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JVM/JVM类加载机制.md) * [Java内存区域与内存溢出](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JVM/Java内存区域与内存溢出.md) * [垃圾回收算法](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JVM/垃圾回收算法.md) -* [JavaConcurrent(Java并发)](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/Java并发.md) +* [JavaConcurrent(Java并发)](https://github.com/BlogForMe/LearningNotes/tree/master/JavaJob/JavaConcurrent) * [Java并发基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/Java并发基础知识.md) * [生产者和消费者问题](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/生产者和消费者问题.md) * [Thread和Runnable实现多线程的区别](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/Thread和Runnable实现多线程的区别.md) @@ -116,7 +116,7 @@ * [使用wait/notify/notifyAll实现线程间通信](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/使用wait:notify:notifyall实现线程间通信.md) * [NIO](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaConcurrent/NIO.md) - --- +--- ## 第三部分 @@ -152,7 +152,7 @@ * [2.由两个栈组成的队列](https://github.com/BlogForMe/LearningNotes/blob/master/DataAlgorithm/Algorithm/程序员代码面试指南(左程云)/2.由两个栈组成的队列.md) * [3.如何仅用递归函数和栈操作逆序一个栈](https://github.com/BlogForMe/LearningNotes/blob/master/DataAlgorithm/Algorithm/程序员代码面试指南(左程云)/3.如何仅用递归函数和栈操作逆序一个栈.md) - --- +--- ## 第四部分 @@ -165,7 +165,7 @@ * [Linux系统的IPC](https://github.com/BlogForMe/LearningNotes/blob/master/CsNetwork/OperatingSystem/Linux系统的IPC.md) - --- +--- ## 第五部分 From d4e4a62b3e4bfc5d25ab25b9b80034771049f8e9 Mon Sep 17 00:00:00 2001 From: john Date: Thu, 7 Jan 2021 15:00:43 +0800 Subject: [PATCH 5/9] f --- JavaJob/.DS_Store | Bin 10244 -> 10244 bytes JavaJob/JavaSE/.DS_Store | Bin 0 -> 8196 bytes ...72\347\241\200\347\237\245\350\257\206.md" | 18 +++++++++++++----- ...47\351\235\242\350\257\225\351\242\230.md" | 8 ++++++++ 4 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 JavaJob/JavaSE/.DS_Store create mode 100644 "JavaJob/JavaSE/Java\351\253\230\347\272\247\351\235\242\350\257\225\351\242\230.md" diff --git a/JavaJob/.DS_Store b/JavaJob/.DS_Store index ecbb18cdfca04ff2fb98ffbc5e57c16fa5e3bacd..aff1bf2c23a66eefb246221e93fa2b0ad6835b84 100644 GIT binary patch delta 163 zcmZn(XbIR*EWmhb@f}yebBtcomnUm!N_rV8yoxtZf)`KHgP=FTe?ai=tsd$(yPMa2$tHRdX?Mf!ytg~w&h9t+gLxq$5nsxm zAQ~j1Ffz;jUKEzZ?VMXum#$&30G{XpU7~qfq%wIe+OEPe;23ZWI0hU8j)DJy0o>V~ z!foz-)#^&efMZ}!GQj79hs-jjWmQRebfAzS0AvW>|9Qgp)Q9wzXY6Dsoi`w9nZX4e4AcRjV6cbINhQAc(Ihr7E4)J z;7xfNd1zZEJP}0`=o4MVN zOdPH5hh|P%$(F<+x5r6 zW6bj$Ca0H%I(WnEt>5o0-Qb|pXasx1#7F5Oa21-FI9918Rx{U&A4`2U4g`C{MD{k2 z*S3~p_rI@g+EC1#2pi1#sOOvM@Z9;rJ1YvD1yGTOt(V^(y?&8h`&zHtaH0m>FT>iQ zz@BWZ`ak-N*L=W!G|*3n{m1+UkOu?Ezu7O~InYCof0o$xJM+72%s5O5tnpcyZTift zsoza0XqT;QG7F||6uM>XA3o&@a+P(r-}6mK;{@!uK6&=0&Ay2*zNLWwY$KMd?T5ie zPwMk@s4$v5Wz}XbOzp#b5|fyU92P90NfHL})BE7Dt_qt%I$2<5=56zJ<(*^{Prr2nrdFL&|U*(*MH{ f&mL466VtM)Bx;cU`G)}WE_V07yZ_}X+ Date: Thu, 7 Jan 2021 16:17:29 +0800 Subject: [PATCH 6/9] miansh --- .DS_Store | Bin 10244 -> 10244 bytes AndroidJob/.DS_Store | Bin 8196 -> 8196 bytes ...02\351\235\242\350\257\225\351\242\230.md" | 1460 +++++++++++++++++ JavaJob/.DS_Store | Bin 10244 -> 10244 bytes ...47\351\235\242\350\257\225\351\242\230.md" | 3 + README.md | 5 +- 6 files changed, 1466 insertions(+), 2 deletions(-) create mode 100644 "AndroidJob/Android/\345\244\247\345\216\202\351\235\242\350\257\225\351\242\230.md" diff --git a/.DS_Store b/.DS_Store index 31c19f5dfa1eb3eb723223719d459e3c3f7cf4d7..8a7be9446aa8b8a62d26dfc0fc288f56d0afe6e8 100644 GIT binary patch delta 95 zcmZn(XbIRLASi5ZrlVkFXj!YHP;G8(p`&1KVm8@O%ye^vAPbv_Auida;@kOg%1&M? G9uELzvlqnx delta 75 zcmZn(XbIRLAUJt~u*c>IK^8UBbhhq$Vtt!F}R zWmR=eZQZQNjDqrvvnMMG$}(=AY%i$HAu1*=Dj_K;JvmFTNH$)8zc{%lKPM+3zc{lb zGe0jfI=v_}#Xl{rIJIQ*PeEU4kcy1_a?j-aynv$Avdq--h)f_mII}8sa-xu0HirOX zNM3$kDkrD1LjVH=a4={yI5PM$gfV0@R546sn9H!9VK>7GhPw>!8GbUdGfFZlF={iK zFxoQOGkP$3GI}!xFa|OPK{PWlLQRo@(ol*qdh=hQGRDnCGLx7mHt=j_m-x#L09(67 A=>Px# delta 268 zcmZp1XmQvOE-<-7_^dQLgCj#8LkdF?Lq0<$LrP|HSwT`xei8!%;|2JOlZ*0masu*;GfOh_^Ctfi^p%dtOwP{>&a6rW zNoVAjdjh!uMX6<(spXTCgw*Pl9m*FlfB=U8V@O_pUMi=uLjYKSfs=uQK^y2AUxqM- zY=$a^i41cYRx<2nIKgn2;XT7oMs`L4MkPjVMiWL`MtepN#z4j(#t_Cx#wf;QhyhHD k5Sl?2N<%5e6d(iQ&&_{?av3+*$aFAIY~b0hB>(^b diff --git "a/AndroidJob/Android/\345\244\247\345\216\202\351\235\242\350\257\225\351\242\230.md" "b/AndroidJob/Android/\345\244\247\345\216\202\351\235\242\350\257\225\351\242\230.md" new file mode 100644 index 0000000..c8e6d07 --- /dev/null +++ "b/AndroidJob/Android/\345\244\247\345\216\202\351\235\242\350\257\225\351\242\230.md" @@ -0,0 +1,1460 @@ +# [2020年Android面试题含答案](https://www.cnblogs.com/huangjialin/p/12411842.html) + +##### (一) java基础面试知识点 + +- java中==和equals和hashCode的区别 +- int、char、long各占多少字节数 +- int与integer的区别 +- 谈谈对java多态的理解 +- String、StringBuffer、StringBuilder区别 +- 什么是内部类?内部类的作用 +- 抽象类和接口区别 +- 抽象类的意义 +- 抽象类与接口的应用场景 +- 抽象类是否可以没有方法和属性? +- 接口的意义 +- 泛型中extends和super的区别 +- 父类的静态方法能否被子类重写 +- 进程和线程的区别 +- final,finally,finalize的区别 +- 序列化的方式 +- Serializable 和Parcelable 的区别 +- 静态属性和静态方法是否可以被继承?是否可以被重写?以及原因? +- 静态内部类的设计意图 +- 成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用 +- 谈谈对kotlin的理解 +- 闭包和局部内部类的区别 +- string 转换成 integer的方式及原理 + +##### (二) java深入源码级的面试题(有难度) + +- 哪些情况下的对象会被垃圾回收机制处理掉? +- 讲一下常见编码方式? +- utf-8编码中的中文占几个字节;int型几个字节? +- 静态代理和动态代理的区别,什么场景使用? +- Java的异常体系 +- 谈谈你对解析与分派的认识。 +- 修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法? +- Java中实现多态的机制是什么? +- 如何将一个Java对象序列化到文件里? +- 说说你对Java反射的理解 +- 说说你对Java注解的理解 +- 说说你对依赖注入的理解 +- 说一下泛型原理,并举例说明 +- Java中String的了解 +- String为什么要设计成不可变的? +- Object类的equal和hashCode方法重写,为什么? + +##### (三) 数据结构 + +- 常用数据结构简介 +- 并发集合了解哪些? +- 列举java的集合以及集合之间的继承关系 +- 集合类以及集合框架 +- 容器类介绍以及之间的区别(容器类估计很多人没听这个词,Java容器主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections),具体的可以看看这篇博文 [Java容器类](http://alexyyek.github.io/2015/04/06/Collection/)) +- List,Set,Map的区别 +- List和Map的实现方式以及存储方式 +- HashMap的实现原理 +- HashMap数据结构? +- HashMap源码理解 +- HashMap如何put数据(从HashMap源码角度讲解)? +- HashMap怎么手写实现? +- ConcurrentHashMap的实现原理 +- ArrayMap和HashMap的对比 +- HashTable实现原理 +- TreeMap具体实现 +- HashMap和HashTable的区别 +- HashMap与HashSet的区别 +- HashSet与HashMap怎么判断集合元素重复? +- 集合Set实现Hash怎么防止碰撞 +- ArrayList和LinkedList的区别,以及应用场景 +- 数组和链表的区别 +- 二叉树的深度优先遍历和广度优先遍历的具体实现 +- 堆的结构 +- 堆和树的区别 +- 堆和栈在内存中的区别是什么(解答提示:可以从数据结构方面以及实际实现方面两个方面去回答)? +- 什么是深拷贝和浅拷贝 +- 手写链表逆序代码 +- 讲一下对树,B+树的理解 +- 讲一下对图的理解 +- 判断单链表成环与否? +- 链表翻转(即:翻转一个单项链表) +- 合并多个单有序链表(假设都是递增的) + +##### (四) 线程、多线程和线程池 + +- 开启线程的三种方式? +- 线程和进程的区别? +- 为什么要有线程,而不是仅仅用进程? +- run()和start()方法区别 +- 如何控制某个方法允许并发访问线程的个数? +- 在Java中wait和seelp方法的不同; +- 谈谈wait/notify关键字的理解 +- 什么导致线程阻塞? +- 线程如何关闭? +- 讲一下java中的同步的方法 +- 数据一致性如何保证? +- 如何保证线程安全? +- 如何实现线程同步? +- 两个进程同时要求写或者读,能不能实现?如何防止进程的同步? +- 线程间操作List +- Java中对象的生命周期 +- Synchronized用法 +- synchronize的原理 +- 谈谈对Synchronized关键字,类锁,方法锁,重入锁的理解 +- static synchronized 方法的多线程访问和作用 +- 同一个类里面两个synchronized方法,两个线程同时访问的问题 +- volatile的原理 +- 谈谈volatile关键字的用法 +- 谈谈volatile关键字的作用 +- 谈谈NIO的理解 +- synchronized 和volatile 关键字的区别 +- synchronized与Lock的区别 +- ReentrantLock 、synchronized和volatile比较 +- ReentrantLock的内部实现 +- lock原理 +- 死锁的四个必要条件? +- 怎么避免死锁? +- 对象锁和类锁是否会互相影响? +- 什么是线程池,如何使用? +- Java的并发、多线程、线程模型 +- 谈谈对多线程的理解 +- 多线程有什么要注意的问题? +- 谈谈你对并发编程的理解并举例说明 +- 谈谈你对多线程同步机制的理解? +- 如何保证多线程读写文件的安全? +- 多线程断点续传原理 +- 断点续传的实现 + +##### 一)Android基础知识点 + +- 四大组件是什么 +- 四大组件的生命周期和简单用法 +- Activity之间的通信方式 +- Activity各种情况下的生命周期 +- 横竖屏切换的时候,Activity 各种情况下的生命周期 +- Activity与Fragment之间生命周期比较 +- Activity上有Dialog的时候按Home键时的生命周期 +- 两个Activity 之间跳转时必然会执行的是哪几个方法? +- 前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命值周期回调方法。 +- Activity的四种启动模式对比 +- Activity状态保存于恢复 +- fragment各种情况下的生命周期 +- Fragment状态保存startActivityForResult是哪个类的方法,在什么情况下使用? +- 如何实现Fragment的滑动? +- fragment之间传递数据的方式? +- Activity 怎么和Service 绑定? +- 怎么在Activity 中启动自己对应的Service? +- service和activity怎么进行数据交互? +- Service的开启方式 +- 请描述一下Service 的生命周期 +- 谈谈你对ContentProvider的理解 +- 说说ContentProvider、ContentResolver、ContentObserver 之间的关系 +- 请描述一下广播BroadcastReceiver的理解 +- 广播的分类 +- 广播使用的方式和场景 +- 在manifest 和代码中如何注册和使用BroadcastReceiver? +- 本地广播和全局广播有什么差别? +- BroadcastReceiver,LocalBroadcastReceiver 区别 +- AlertDialog,popupWindow,Activity区别 +- Application 和 Activity 的 Context 对象的区别 +- Android属性动画特性 +- 如何导入外部数据库? +- LinearLayout、RelativeLayout、FrameLayout的特性及对比,并介绍使用场景。 +- 谈谈对接口与回调的理解 +- 回调的原理 +- 写一个回调demo +- 介绍下SurfView +- RecycleView的使用 +- 序列化的作用,以及Android两种序列化的区别 +- 差值器 +- 估值器 +- Android中数据存储方式 + +##### (二)Android源码相关分析 + +- Android动画框架实现原理 +- Android各个版本API的区别 +- Requestlayout,onlayout,onDraw,DrawChild区别与联系 +- invalidate和postInvalidate的区别及使用 +- Activity-Window-View三者的差别 +- 谈谈对Volley的理解 +- 如何优化自定义View +- 低版本SDK如何实现高版本api? +- 描述一次网络请求的流程 +- HttpUrlConnection 和 okhttp关系 +- Bitmap对象的理解 +- looper架构 +- ActivityThread,AMS,WMS的工作原理 +- 自定义View如何考虑机型适配 +- 自定义View的事件 +- AstncTask+HttpClient 与 AsyncHttpClient有什么区别? +- LaunchMode应用场景 +- AsyncTask 如何使用? +- SpareArray原理 +- 请介绍下ContentProvider 是如何实现数据共享的? +- AndroidService与Activity之间通信的几种方式 +- IntentService原理及作用是什么? +- 说说Activity、Intent、Service 是什么关系 +- ApplicationContext和ActivityContext的区别 +- SP是进程同步的吗?有什么方法做到同步? +- 谈谈多线程在Android中的使用 +- 进程和 Application 的生命周期 +- 封装View的时候怎么知道view的大小 +- RecycleView原理 +- AndroidManifest的作用与理解 + +##### (三)常见的一些原理性问题 + +- Handler机制和底层实现 +- Handler、Thread和HandlerThread的差别 +- handler发消息给子线程,looper怎么启动? +- 关于Handler,在任何地方new Handler 都是什么线程下? +- ThreadLocal原理,实现及如何保证Local属性? +- 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系 +- 请描述一下View事件传递分发机制 +- Touch事件传递流程 +- 事件分发中的onTouch 和onTouchEvent 有什么区别,又该如何使用? +- View和ViewGroup分别有哪些事件分发相关的回调方法 +- View刷新机制 +- View绘制流程 +- 自定义控件原理 +- 自定义View如何提供获取View属性的接口? +- Android代码中实现WAP方式联网 +- AsyncTask机制 +- AsyncTask原理及不足 +- 如何取消AsyncTask? +- 为什么不能在子线程更新UI? +- ANR产生的原因是什么? +- ANR定位和修正 +- oom是什么? +- 什么情况导致oom? +- 有什么解决方法可以避免OOM? +- Oom 是否可以try catch?为什么? +- 内存泄漏是什么? +- 什么情况导致内存泄漏? +- 如何防止线程的内存泄漏? +- 内存泄露场的解决方法 +- 内存泄漏和内存溢出区别? +- LruCache默认缓存大小 +- ContentProvider的权限管理(解答:读写分离,权限控制-精确到表级,URL控制) +- 如何通过广播拦截和abort一条短信? +- 广播是否可以请求网络? +- 广播引起anr的时间限制是多少? +- 计算一个view的嵌套层级 +- Activity栈 +- Android线程有没有上限? +- 线程池有没有上限? +- ListView重用的是什么? +- Android为什么引入Parcelable? +- 有没有尝试简化Parcelable的使用? + +##### (四)开发中常见的一些问题 + +- ListView 中图片错位的问题是如何产生的? +- 混合开发有了解吗? +- 知道哪些混合开发的方式?说出它们的优缺点和各自使用场景?(解答:比如:RN,weex,H5,小程序,WPA等。做Android的了解一些前端js等还是很有好处的); +- 屏幕适配的处理技巧都有哪些? +- 服务器只提供数据接收接口,在多线程或多进程条件下,如何保证数据的有序到达? +- 动态布局的理解 +- 怎么去除重复代码? +- 画出 Android 的大体架构图 +- Recycleview和ListView的区别 +- ListView图片加载错乱的原理和解决方案 +- 动态权限适配方案,权限组的概念 +- Android系统为什么会设计ContentProvider? +- 下拉状态栏是不是影响activity的生命周期 +- 如果在onStop的时候做了网络请求,onResume的时候怎么恢复? +- Bitmap 使用时候注意什么? +- Bitmap的recycler() +- Android中开启摄像头的主要步骤 +- ViewPager使用细节,如何设置成每次只初始化当前的Fragment,其他的不初始化? +- 点击事件被拦截,但是想传到下面的View,如何操作? +- 微信主页面的实现方式 +- 微信上消息小红点的原理 +- CAS介绍(这是阿里巴巴的面试题,我不是很了解,可以参考博客: [CAS简介](http://blog.csdn.net/jly4758/article/details/46673835)) + +------ + + + +Kotin面试题 + +http://www.youkmi.cn/2019/10/27/kotlin-ti-mu-zheng-li/ + +https://www.jianshu.com/p/45866c8415c8 + + + +## 三、混合开发面试题 + +**大厂除了技术深度之外,还要求你具备一些广度的知识,比如你要会前端知识,会混合开发,至少会一种脚本语言,C c++更不用说了,也是必会的。** + +- Hybrid做过吗? +- Hybrid通信原理是什么,有做研究吗? +- react native有多少了解?讲一下原理。 +- weex了解吗?如何自己实现类似技术? +- flutter了解吗?内部是如何实现跨平台的? +- Dart语言有研究贵吗? +- 快应用了解吗?跟其她方式相比有什么优缺点? +- 说说你用过的混合开发技术有哪些?各有什么优缺点? +- Python会吗? +- 会不会PHP? +- Gradle了解多少?groovy语法会吗? +- + +------ + +## 四、高端技术面试题 + +**这里讲的是大公司需要用到的一些高端Android技术,这里专门整理了一个文档,希望大家都可以看看。这些题目有点技术含量,需要好点时间去研究一下的。** + +##### (一)图片 + +- 图片库对比 +- 图片库的源码分析 +- 图片框架缓存实现 +- LRUCache原理 +- 图片加载原理 +- 自己去实现图片库,怎么做? +- Glide源码解析 +- Glide使用什么缓存? +- Glide内存缓存如何控制大小? + +##### (二)网络和安全机制 + +- 网络框架对比和源码分析 +- 自己去设计网络请求框架,怎么做? +- okhttp源码 +- 网络请求缓存处理,okhttp如何处理网络缓存的 +- 从网络加载一个10M的图片,说下注意事项 +- TCP的3次握手和四次挥手 +- TCP与UDP的区别 +- TCP与UDP的应用 +- HTTP协议 +- HTTP1.0与2.0的区别 +- HTTP报文结构 +- HTTP与HTTPS的区别以及如何实现安全性 +- 如何验证证书的合法性? +- https中哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解? +- client如何确定自己发送的消息被server收到? +- 谈谈你对WebSocket的理解 +- WebSocket与socket的区别 +- 谈谈你对安卓签名的理解。 +- 请解释安卓为啥要加签名机制? +- 视频加密传输 +- App 是如何沙箱化,为什么要这么做? +- 权限管理系统(底层的权限是如何进行 grant 的)? + +##### (三)数据库 + +- sqlite升级,增加字段的语句 +- 数据库框架对比和源码分析 +- 数据库的优化 +- 数据库数据迁移问题 + +##### (四)算法 + +- 排序算法有哪些? +- 最快的排序算法是哪个? +- 手写一个冒泡排序 +- 手写快速排序代码 +- 快速排序的过程、时间复杂度、空间复杂度 +- 手写堆排序 +- 堆排序过程、时间复杂度及空间复杂度 +- 写出你所知道的排序算法及时空复杂度,稳定性 +- 二叉树给出根节点和目标节点,找出从根节点到目标节点的路径 +- 给阿里2万多名员工按年龄排序应该选择哪个算法? +- GC算法(各种算法的优缺点以及应用场景) +- 蚁群算法与蒙特卡洛算法 +- 子串包含问题(KMP 算法)写代码实现 +- 一个无序,不重复数组,输出N个元素,使得N个元素的和相加为M,给出时间复杂度、空间复杂度。手写算法 +- 万亿级别的两个URL文件A和B,如何求出A和B的差集C(提示:Bit映射->hash分组->多文件读写效率->磁盘寻址以及应用层面对寻址的优化) +- 百度POI中如何试下查找最近的商家功能(提示:坐标镜像+R树)。 +- 两个不重复的数组集合中,求共同的元素。 +- 两个不重复的数组集合中,这两个集合都是海量数据,内存中放不下,怎么求共同的元素? +- 一个文件中有100万个整数,由空格分开,在程序中判断用户输入的整数是否在此文件中。说出最优的方法 +- 一张Bitmap所占内存以及内存占用的计算 +- 2000万个整数,找出第五十大的数字? +- 烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢? +- 求1000以内的水仙花数以及40亿以内的水仙花数 +- 5枚硬币,2正3反如何划分为两堆然后通过翻转让两堆中正面向上的硬8币和反面向上的硬币个数相同 +- 时针走一圈,时针分针重合几次 +- N*N的方格纸,里面有多少个正方形 +- x个苹果,一天只能吃一个、两个、或者三个,问多少天可以吃完? + +##### (五)插件化、模块化、组件化、热修复、增量更新、Gradle + +- 对热修复和插件化的理解 +- 插件化原理分析 +- 模块化实现(好处,原因) +- 热修复,插件化 +- 项目组件化的理解 +- 描述清点击 Android Studio 的 build 按钮后发生了什么 + +##### (六)架构设计和设计模式 + +- 谈谈你对Android设计模式的理解 +- MVC MVP MVVM原理和区别 +- 你所知道的设计模式有哪些? +- 项目中常用的设计模式 +- 手写生产者/消费者模式 +- 写出观察者模式的代码 +- 适配器模式,装饰者模式,外观模式的异同? +- 用到的一些开源框架,介绍一个看过源码的,内部实现过程。 +- 谈谈对RxJava的理解 +- RxJava的功能与原理实现 +- RxJava的作用,与平时使用的异步操作来比的优缺点 +- 说说EventBus作用,实现方式,代替EventBus的方式 +- 从0设计一款App整体架构,如何去做? +- 说一款你认为当前比较火的应用并设计(比如:直播APP,P2P金融,小视频等) +- 谈谈对java状态机理解 +- Fragment如果在Adapter中使用应该如何解耦? +- Binder机制及底层实现 +- 对于应用更新这块是如何做的?(解答:灰度,强制更新,分区域更新)? +- 实现一个Json解析器(可以通过正则提高速度) +- 统计启动时长,标准 + +##### (七)性能优化 + +- 如何对Android 应用进行性能分析以及优化? +- ddms 和 traceView +- 性能优化如何分析systrace? +- 用IDE如何分析内存泄漏? +- Java多线程引发的性能问题,怎么解决? +- 启动页白屏及黑屏解决? +- 启动太慢怎么解决? +- 怎么保证应用启动不卡顿? +- App启动崩溃异常捕捉 +- 自定义View注意事项 +- 现在下载速度很慢,试从网络协议的角度分析原因,并优化(提示:网络的5层都可以涉及)。 +- Https请求慢的解决办法(提示:DNS,携带数据,直接访问IP) +- 如何保持应用的稳定性 +- RecyclerView和ListView的性能对比 +- ListView的优化 +- RecycleView优化 +- View渲染 +- Bitmap如何处理大图,如一张30M的大图,如何预防OOM +- java中的四种引用的区别以及使用场景 +- 强引用置为null,会不会被回收? + +##### (八)NDK、jni、Binder、AIDL、进程通信有关 + +- 请介绍一下NDK +- 什么是NDK库? +- jni用过吗? +- 如何在jni中注册native函数,有几种注册方式? +- Java如何调用c、c++语言? +- jni如何调用java层代码? +- 进程间通信的方式? +- Binder机制 +- 简述IPC? +- 什么是AIDL? +- AIDL解决了什么问题? +- AIDL如何使用? +- Android 上的 Inter-Process-Communication 跨进程通信时如何工作的? +- 多进程场景遇见过么? +- Android进程分类? +- 进程和 Application 的生命周期? +- 进程调度 +- 谈谈对进程共享和线程安全的认识 +- 谈谈对多进程开发的理解以及多进程应用场景 +- 什么是协程? + +##### (九)framework层、ROM定制、Ubuntu、Linux之类的问题 + +- java虚拟机的特性 +- 谈谈对jvm的理解 +- JVM内存区域,开线程影响哪块内存 +- 对Dalvik、ART虚拟机有什么了解? +- Art和Dalvik对比 +- 虚拟机原理,如何自己设计一个虚拟机(内存管理,类加载,双亲委派) +- 谈谈你对双亲委派模型理解 +- JVM内存模型,内存区域 +- 类加载机制 +- 谈谈对ClassLoader(类加载器)的理解 +- 谈谈对动态加载(OSGI)的理解 +- 内存对象的循环引用及避免 +- 内存回收机制、GC回收策略、GC原理时机以及GC对象 +- 垃圾回收机制与调用System.gc()区别 +- Ubuntu编译安卓系统 +- 系统启动流程是什么?(提示:Zygote进程 –> SystemServer进程 –> 各种系统服务 –> 应用进程) +- 大体说清一个应用程序安装到手机上时发生了什么 +- 简述Activity启动全部过程 +- App启动流程,从点击桌面开始 +- 逻辑地址与物理地址,为什么使用逻辑地址? +- Android为每个应用程序分配的内存大小是多少? +- Android中进程内存的分配,能不能自己分配定额内存? +- 进程保活的方式 +- 如何保证一个后台服务不被杀死?(相同问题:如何保证service在后台不被kill?)比较省电的方式是什么? +- App中唤醒其他进程的实现方式 + +https://www.jianshu.com/p/c3965e82b164 + + + +# [阿里面试题](https://www.jianshu.com/p/cf5092fa2694) + +## 1.android事件分发机制,请详细说下整个流程 + +![img](https:////upload-images.jianshu.io/upload_images/2911038-5349d6ebb32372da?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp) + +事件分发(面试).png + +## 2.android view绘制机制和加载过程,请详细说下整个流程 + +- 1.ViewRootImpl会调用performTraversals(),其内部会调用performMeasure()、performLayout、performDraw()。 +- 2.performMeasure()会调用最外层的ViewGroup的measure()-->onMeasure(),ViewGroup的onMeasure()是抽象方法,但其提供了measureChildren(),这之中会遍历子View然后循环调用measureChild()这之中会用getChildMeasureSpec()+父View的MeasureSpec+子View的LayoutParam一起获取本View的MeasureSpec,然后调用子View的measure()到View的onMeasure()-->setMeasureDimension(getDefaultSize(),getDefaultSize()),getDefaultSize()默认返回measureSpec的测量数值,所以继承View进行自定义的wrap_content需要重写。 +- 3.performLayout()会调用最外层的ViewGroup的layout(l,t,r,b),本View在其中使用setFrame()设置本View的四个顶点位置。在onLayout(抽象方法)中确定子View的位置,如LinearLayout会遍历子View,循环调用setChildFrame()-->子View.layout()。 +- 4.performDraw()会调用最外层ViewGroup的draw():其中会先后调用background.draw()(绘制背景)、onDraw()(绘制自己)、dispatchDraw()(绘制子View)、onDrawScrollBars()(绘制装饰)。 +- 5.MeasureSpec由2位SpecMode(UNSPECIFIED、EXACTLY(对应精确值和match_parent)、AT_MOST(对应warp_content))和30位SpecSize组成一个int,DecorView的MeasureSpec由窗口大小和其LayoutParams决定,其他View由父View的MeasureSpec和本View的LayoutParams决定。ViewGroup中有getChildMeasureSpec()来获取子View的MeasureSpec。 +- 6.三种方式获取measure()后的宽高: + - 1.Activity#onWindowFocusChange()中调用获取 + - 2.view.post(Runnable)将获取的代码投递到消息队列的尾部。 + - 3.ViewTreeObservable. + +## 3.android四大组件的加载过程,请详细介绍下 + +- 1.[android四大组件的加载过程](https://www.jianshu.com/p/f499afd8d0ab):这是我总结的一篇博客 + +## 4.Activity的启动模式 + +- 1.standard:默认标准模式,每启动一个都会创建一个实例, +- 2.singleTop:栈顶复用,如果在栈顶就调用onNewIntent复用,从onResume()开始 +- 3.singleTask:栈内复用,本栈内只要用该类型Activity就会将其顶部的activity出栈 +- 4.singleInstance:单例模式,除了3中特性,系统会单独给该Activity创建一个栈, + +## 5.A、B、C、D分别是四种Activity的启动模式,那么A->B->C->D->A->B->C->D分别启动,最后的activity栈是怎么样的 + +- 1.这个题目需要深入了解activity的启动模式 +- 2.最后的答案是:两个栈,前台栈是只有D,后台栈从底至上是A、B、C + +## 6.Activity缓存方法 + +- 1.配置改变导致Activity被杀死,横屏变竖屏:在onStop之前会调用onSaveInstanceState()保存数据在重建Activity之后,会在onStart()之后调用onRestoreInstanceState(),并把保存下来的Bundle传给onCreate()和它会默认重建Activity当前的视图,我们可以在onCreate()中,回复自己的数据。 +- 2.内存不足杀掉Activity,优先级分别是:前台可见,可见非前台,后台。 + +## 7.Service的生命周期,两种启动方法,有什么区别 + +- 1.context.startService() ->onCreate()- >onStart()->Service running-->(如果调用context.stopService() )->onDestroy() ->Service shut down + - 1.如果Service还没有运行,则调用onCreate()然后调用onStart(); + - 2.如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。 + - 3.调用stopService的时候直接onDestroy, + - 4.如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。该Service的调用者再启动起来后可以通过stopService关闭Service。 +- 2.context.bindService()->onCreate()->onBind()->Service running-->onUnbind() -> onDestroy() ->Service stop + - 1.onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。 + - 2.这个时候会把调用者和Service绑定在一起,Context退出了,Service就会调用onUnbind->onDestroy相应退出。 + - 3.所以调用bindService的生命周期为:onCreate --> onBind(只一次,不可多次绑定) --> onUnbind --> onDestory。 + +## 8.怎么保证service不被杀死 + +- 1.提升service优先级 +- 2.提升service进程优先级 +- 3.onDestroy方法里重启service + +## 9.静态的Broadcast 和动态的有什么区别 + +- 1.动态的比静态的安全 +- 2.静态在app启动的时候就初始化了 动态使用代码初始化 +- 3.静态需要配置 动态不需要 +- 4.生存期,静态广播的生存期可以比动态广播的长很多 +- 5.优先级动态广播的优先级比静态广播高 + +## 10.Intent可以传递哪些数据类型 + +- 1.Serializable +- 2.charsequence: 主要用来传递String,char等 +- 3.parcelable +- 4.Bundle + +## 11.Json有什么优劣势、解析的原理 + +- 1.JSON的速度要远远快于XML +- 2.JSON相对于XML来讲,数据的体积小 +- 3.JSON对数据的描述性比XML较差 +- 4.解析的基本原理是:词法分析 + +## 12.一个语言的编译过程 + +- 1.词法分析:将一串文本按规则分割成最小的结构,关键字、标识符、运算符、界符和常量等。一般实现方法是自动机和正则表达式 +- 2.语法分析:将一系列单词组合成语法树。一般实现方法有自顶向下和自底向上 +- 3.语义分析:对结构上正确的源程序进行上下文有关性质的审查 +- 4.目标代码生成 +- 5.代码优化:优化生成的目标代码, + +## 13.动画有哪几类,各有什么特点 + +- 1.动画的基本原理:其实就是利用插值器和估值器,来计算出各个时刻View的属性,然后通过改变View的属性来,实现View的动画效果。 +- 2.View动画:只是影像变化,view的实际位置还在原来的地方。 +- 3.帧动画是在xml中定义好一系列图片之后,使用AnimationDrawable来播放的动画。 +- 4.View的属性动画: + - 1.插值器:作用是根据时间的流逝的百分比来计算属性改变的百分比 + - 2.估值器:在1的基础上由这个东西来计算出属性到底变化了多少数值的类 + +## 14.Handler、Looper消息队列模型,各部分的作用 + +- 1.MessageQueue:读取会自动删除消息,单链表维护,在插入和删除上有优势。在其next()中会无限循环,不断判断是否有消息,有就返回这条消息并移除。 +- 2.Looper:Looper创建的时候会创建一个MessageQueue,调用loop()方法的时候消息循环开始,loop()也是一个死循环,会不断调用messageQueue的next(),当有消息就处理,否则阻塞在messageQueue的next()中。当Looper的quit()被调用的时候会调用messageQueue的quit(),此时next()会返回null,然后loop()方法也跟着退出。 +- 3.Handler:在主线程构造一个Handler,然后在其他线程调用sendMessage(),此时主线程的MessageQueue中会插入一条message,然后被Looper使用。 +- 4.系统的主线程在ActivityThread的main()为入口开启主线程,其中定义了内部类Activity.H定义了一系列消息类型,包含四大组件的启动停止。 +- 5.MessageQueue和Looper是一对一关系,Handler和Looper是多对一 + +## 15.怎样退出终止App + +- 1.自己设置一个Activity的栈,然后一个个finish() + +## 16.Android IPC:Binder原理 + +- 1.在Activity和Service进行通讯的时候,用到了Binder。 + - 1.当属于同个进程我们可以继承Binder然后在Activity中对Service进行操作 + - 2.当不属于同个进程,那么要用到AIDL让系统给我们创建一个Binder,然后在Activity中对远端的Service进行操作。 +- 2.系统给我们生成的Binder: + - 1.Stub类中有:接口方法的id,有该Binder的标识,有asInterface(IBinder)(让我们在Activity中获取实现了Binder的接口,接口的实现在Service里,同进程时候返回Stub否则返回Proxy),有onTransact()这个方法是在不同进程的时候让Proxy在Activity进行远端调用实现Activity操作Service + - 2.Proxy类是代理,在Activity端,其中有:IBinder mRemote(这就是远端的Binder),两个接口的实现方法不过是代理最终还是要在远端的onTransact()中进行实际操作。 +- 3.哪一端的Binder是副本,该端就可以被另一端进行操作,因为Binder本体在定义的时候可以操作本端的东西。所以可以在Activity端传入本端的Binder,让Service端对其进行操作称为Listener,可以用RemoteCallbackList这个容器来装Listener,防止Listener因为经历过序列化而产生的问题。 +- 4.当Activity端向远端进行调用的时候,当前线程会挂起,当方法处理完毕才会唤醒。 +- 5.如果一个AIDL就用一个Service太奢侈,所以可以使用Binder池的方式,建立一个AIDL其中的方法是返回IBinder,然后根据方法中传入的参数返回具体的AIDL。 +- 6.IPC的方式有:Bundle(在Intent启动的时候传入,不过是一次性的),文件共享(对于SharedPreference是特例,因为其在内存中会有缓存),使用Messenger(其底层用的也是AIDL,同理要操作哪端,就在哪端定义Messenger),AIDL,ContentProvider(在本进程中继承实现一个ContentProvider,在增删改查方法中调用本进程的SQLite,在其他进程中查询),Socket + +## 17.描述一次跨进程通讯 + +- 1.client、proxy、serviceManager、BinderDriver、impl、service +- 2.client发起一个请求service信息的Binder请求到BinderDriver中,serviceManager发现BinderDiriver中有自己的请求 然后将clinet请求的service的数据返回给client这样完成了一次Binder通讯 +- 3.clinet获取的service信息就是该service的proxy,此时调用proxy的方法,proxy将请求发送到BinderDriver中,此时service的 Binder线程池循环发现有自己的请求,然后用impl就处理这个请求最后返回,这样完成了第二次Binder通讯 + 4.中间client可挂起,也可以不挂起,有一个关键字oneway可以解决这个 + +## 18.android重要术语解释 + +- 1.ActivityManagerServices,简称AMS,服务端对象,负责系统中所有Activity的生命周期 +- 2.ActivityThread,App的真正入口。当开启App之后,会调用main()开始运行,开启消息循环队列,这就是传说中的UI线程或者叫主线程。与ActivityManagerServices配合,一起完成Activity的管理工作 +- 3.ApplicationThread,用来实现ActivityManagerService与ActivityThread之间的交互。在ActivityManagerService需要管理相关Application中的Activity的生命周期时,通过ApplicationThread的代理对象与ActivityThread通讯。 +- 4.ApplicationThreadProxy,是ApplicationThread在服务器端的代理,负责和客户端的ApplicationThread通讯。AMS就是通过该代理与ActivityThread进行通信的。 +- 5.Instrumentation,每一个应用程序只有一个Instrumentation对象,每个Activity内都有一个对该对象的引用。Instrumentation可以理解为应用进程的管家,ActivityThread要创建或暂停某个Activity时,都需要通过Instrumentation来进行具体的操作。 +- 6.ActivityStack,Activity在AMS的栈管理,用来记录已经启动的Activity的先后关系,状态信息等。通过ActivityStack决定是否需要启动新的进程。 +- 7.ActivityRecord,ActivityStack的管理对象,每个Activity在AMS对应一个ActivityRecord,来记录Activity的状态以及其他的管理信息。其实就是服务器端的Activity对象的映像。 +- 8.TaskRecord,AMS抽象出来的一个“任务”的概念,是记录ActivityRecord的栈,一个“Task”包含若干个ActivityRecord。AMS用TaskRecord确保Activity启动和退出的顺序。如果你清楚Activity的4种launchMode,那么对这个概念应该不陌生。 + +## 19.理解Window和WindowManager + +- 1.Window用于显示View和接收各种事件,Window有三种类型:应用Window(每个Activity对应一个Window)、子Window(不能单独存在,附属于特定Window)、系统window(Toast和状态栏) +- 2.Window分层级,应用Window在1-99、子Window在1000-1999、系统Window在2000-2999.WindowManager提供了增删改View三个功能。 +- 3.Window是个抽象概念:每一个Window对应着一个View和ViewRootImpl,Window通过ViewRootImpl来和View建立联系,View是Window存在的实体,只能通过WindowManager来访问Window。 +- 4.WindowManager的实现是WindowManagerImpl其再委托给WindowManagerGlobal来对Window进行操作,其中有四个List分别储存对应的View、ViewRootImpl、WindowManger.LayoutParams和正在被删除的View +- 5.Window的实体是存在于远端的WindowMangerService中,所以增删改Window在本端是修改上面的几个List然后通过ViewRootImpl重绘View,通过WindowSession(每个应用一个)在远端修改Window。 +- 6.Activity创建Window:Activity会在attach()中创建Window并设置其回调(onAttachedToWindow()、dispatchTouchEvent()),Activity的Window是由Policy类创建PhoneWindow实现的。然后通过Activity#setContentView()调用PhoneWindow的setContentView。 + +## 20.Bitmap的处理 + +- 1.当使用ImageView的时候,可能图片的像素大于ImageView,此时就可以通过BitmapFactory.Option来对图片进行压缩,inSampleSize表示缩小2^(inSampleSize-1)倍。 +- 2.BitMap的缓存: + - 1.使用LruCache进行内存缓存。 + - 2.使用DiskLruCache进行硬盘缓存。 + - 3.实现一个ImageLoader的流程:同步异步加载、图片压缩、内存硬盘缓存、网络拉取 + - 1.同步加载只创建一个线程然后按照顺序进行图片加载 + - 2.异步加载使用线程池,让存在的加载任务都处于不同线程 + - 3.为了不开启过多的异步任务,只在列表静止的时候开启图片加载 + +## 21.如何实现一个网络框架(参考Volley) + +- 1.缓存队列,以url为key缓存内容可以参考Bitmap的处理方式,这里单独开启一个线程。 +- 2.网络请求队列,使用线程池进行请求。 +- 3.提供各种不同类型的返回值的解析如String,Json,图片等等。 + +## 22.ClassLoader的基础知识 + +- 1.双亲委托:一个ClassLoader类负责加载这个类所涉及的所有类,在加载的时候会判断该类是否已经被加载过,然后会递归去他父ClassLoader中找。 +- 2.可以动态加载Jar通过URLClassLoader +- 3.ClassLoader 隔离问题 JVM识别一个类是由:ClassLoader id+PackageName+ClassName。 +- 4.加载不同Jar包中的公共类: + - 1.让父ClassLoader加载公共的Jar,子ClassLoader加载包含公共Jar的Jar,此时子ClassLoader在加载公共Jar的时候会先去父ClassLoader中找。(只适用Java) + - 2.重写加载包含公共Jar的Jar的ClassLoader,在loadClass中找到已经加载过公共Jar的ClassLoader,也就是把父ClassLoader替换掉。(只适用Java) + - 3.在生成包含公共Jar的Jar时候把公共Jar去掉。 + +## 23.插件化框架描述:dynamicLoadApk为例子 + +- 1.可以通过DexClassLoader来对apk中的dex包进行加载访问 +- 2.如何加载资源是个很大的问题,因为宿主程序中并没有apk中的资源,所以调用R资源会报错,所以这里使用了Activity中的实现ContextImpl的getAssets()和getResources()再加上反射来实现。 +- 3.由于系统启动Activity有很多初始化动作要做,而我们手动反射很难完成,所以可以采用接口机制,将Activity的大部分生命周期提取成接口,然后通过代理Activity去调用插件Activity的生命周期。同时如果像增加一个新生命周期方法的时候,只需要在接口中和代理中声明一下就行。 +- 4.缺点: + - 1.慎用this,因为在apk中使用this并不代表宿主中的activity,当然如果this只是表示自己的接口还是可以的。除此之外可以使用that代替this。 + - 2.不支持Service和静态注册的Broadcast + - 3.不支持LaunchMode和Apk中Activity的隐式调用。 + +## 24.热修复:Andfix为例子 + +- 1.大致原理:apkpatch将两个apk做一次对比,然后找出不同的部分。可以看到生成的apatch了文件,后缀改成zip再解压开,里面有一个dex文件。通过jadx查看一下源码,里面就是被修复的代码所在的类文件,这些更改过的类都加上了一个_CF的后缀,并且变动的方法都被加上了一个叫@MethodReplace的annotation,通过clazz和method指定了需要替换的方法。然后客户端sdk得到补丁文件后就会根据annotation来寻找需要替换的方法。最后由JNI层完成方法的替换。 +- 2.无法添加新类和新的字段、补丁文件很容易被反编译、加固平台可能会使热补丁功能失效 + +## 25.线程同步的问题,常用的线程同步 + +- 1.sycn:保证了原子性、可见性、有序性 +- 2.锁:保证了原子性、可见性、有序性 + - 1.自旋锁:可以使线程在没有取得锁的时候,不被挂起,而转去执行一个空循环。 + - 1.优点:线程被挂起的几率减少,线程执行的连贯性加强。用于对于锁竞争不是很激烈,锁占用时间很短的并发线程。 + - 2.缺点:过多浪费CPU时间,有一个线程连续两次试图获得自旋锁引起死锁 + - 2.阻塞锁:没得到锁的线程等待或者挂起,Sycn、Lock + - 3.可重入锁:一个线程可多次获取该锁,Sycn、Lock + - 4.悲观锁:每次去拿数据的时候都认为别人会修改,所以会阻塞全部其他线程 Sycn、Lock + - 5.乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。cas + - 6.显示锁和内置锁:显示锁用Lock来定义、内置锁用synchronized。 + - 7.读-写锁:为了提高性能,Java提供了读 +- 3.volatile + - 1.只能保证可见性,不能保证原子性 + - 2.自增操作有三步,此时多线程写会出现问题 +- 4.cas + - 1.操作:内存值V、旧的预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做并返回false。 + - 2.解释:本地副本为A,共享内存为V,线程A要把V修改成B。某个时刻线程A要把V修改成B,如果A和V不同那么就表示有其他线程在修改V,此时就表示修改失败,否则表示没有其他线程修改,那么把V改成B。 + - 3.局限:如果V被修改成V1然后又被改成V,此时cas识别不出变化,还是认为没有其他线程在修改V,此时就会有问题 + - 4.局限解决:将V带上版本。 +- 5.线程不安全到底是怎么回事: + - 1.一个线程写,多个线程读的时候,会造成写了一半就去读 + - 2.多线程写,会造成脏数据 + +## 26.Asynctask和线程池,GC相关(怎么判断哪些内存该GC,GC算法) + +- 1.Asynctask:异步任务类,单线程线程池+Handler +- 2.线程池: + - 1.ThreadPoolExecutor:通过Executors可以构造单线程池、固定数目线程池、不固定数目线程池。 + - 2.ScheduledThreadPoolExecutor:可以延时调用线程或者延时重复调度线程。 +- 3.GC相关:重要 + - 1.搜索算法: + - 1.引用计数 + - 2.图搜索,可达性分析 + - 2.回收算法: + - 1.标记清除复制:用于青年代 + - 2.标记整理:用于老年代 + - 3.堆分区: + - 1.青年区eden 80%、survivor1 10%、survivor2 10% + - 2.老年区 + - 4.虚拟机栈分区: + - 1.局部变量表 + - 2.操作数栈 + - 3.动态链接 + - 4.方法返回地址 + - 5.GC Roots: + - 1.虚拟机栈(栈桢中的本地变量表)中的引用的对象 + - 2.方法区中的类静态属性引用的对象 + - 3.方法区中的常量引用的对象 + - 4.本地方法栈中JNI的引用的对象 + +## 27.网络 + +- 1.ARP协议:在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能提供该节点的MAC地址。 +- 2.HTTP HTTPS的区别: + - 1.HTTPS使用TLS(SSL)进行加密 + - 2.HTTPS缺省工作在TCP协议443端口 + - 3.它的工作流程一般如以下方式: + - 1.完成TCP三次同步握手 + - 2.客户端验证服务器数字证书,通过,进入步骤3 + - 3.DH算法协商对称加密算法的密钥、hash算法的密钥 + - 4.SSL安全加密隧道协商完成 + - 5.网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改 + - 3.http请求包结构,http返回码的分类,400和500的区别 + - 1.包结构: + - 1.请求:请求行、头部、数据 + - 2.返回:状态行、头部、数据 + - 2.http返回码分类:1到5分别是,消息、成功、重定向、客户端错误、服务端错误 + - 4.Tcp + - 1.可靠连接,三次握手,四次挥手 + - 1.三次握手:防止了服务器端的一直等待而浪费资源,例如只是两次握手,如果s确认之后c就掉线了,那么s就会浪费资源 + - 1.syn-c = x,表示这消息是x序号 + - 2.ack-s = x + 1,表示syn-c这个消息接收成功。syn-s = y,表示这消息是y序号。 + - 3.ack-c = y + 1,表示syn-s这条消息接收成功 + - 2.四次挥手:TCP是全双工模式 + - 1.fin-c = x , 表示现在需要关闭c到s了。ack-c = y,表示上一条s的消息已经接收完毕 + - 2.ack-s = x + 1,表示需要关闭的fin-c消息已经接收到了,同意关闭 + - 3.fin-s = y + 1,表示s已经准备好关闭了,就等c的最后一条命令 + - 4.ack-c = y + 1,表示c已经关闭,让s也关闭 + - 3.滑动窗口,停止等待、后退N、选择重传 + - 4.拥塞控制,慢启动、拥塞避免、加速递减、快重传快恢复 + +## 28.数据库性能优化:索引和事务,需要找本专门的书大概了解一下 + +## 29.13.APK打包流程和其内容 + +- 1.流程 + - 1.aapt生成R文件 + - 2.aidl生成java文件 + - 3.将全部java文件编译成class文件 + - 4.将全部class文件和第三方包合并成dex文件 + - 5.将资源、so文件、dex文件整合成apk + - 6.apk签名 + - 7.apk字节对齐 +- 2.内容:so、dex、asset、资源文件 + +## 30.网络劫持的类型原理:可以百度一下了解一下具体概念 + +- 1.DNS劫持、欺骗、污染 +- 2.http劫持:重定向、注入js,http注入、报文扩展 + +## 31.java类加载过程: + +- 1.加载时机:创建实例、访问静态变量或方法、反射、加载子类之前 +- 2.验证:验证文件格式、元数据、字节码、符号引用的正确性 +- 3.加载:根据全类名获取文件字节流、将字节流转化为静态储存结构放入方法区、生成class对象 +- 4.准备:在堆上为静态变量划分内存 +- 5.解析:将常量池中的符号引用转换为直接引用 +- 6.初始化:初始化静态变量 +- 7.书籍推荐:**深入理解java虚拟机**,博客推荐:[Java/Android阿里面试JVM部分理解](https://www.jianshu.com/p/bc6d1770d92c) + +## 32.retrofit的了解 + +- 1.动态代理创建一个接口的代理类 +- 2.通过反射解析每个接口的注解、入参构造http请求 +- 3.获取到返回的http请求,使用Adapter解析成需要的返回值。 + +## 33.bundle的数据结构,如何存储 + +- 1.键值对储存 +- 2.传递的数据可以是boolean、byte、int、long、float、double、string等基本类型或它们对应的数组,也可以是对象或对象数组。 +- 3.当Bundle传递的是对象或对象数组时,必须实现Serializable 或Parcelable接口 + +## 34.listview内点击buttom并移动的事件流完整拦截过程: + +- 1.点下按钮的时候: + - 1.产生了一个down事件,activity-->phoneWindow-->ViewGroup-->ListView-->botton,中间如果有重写了拦截方法,则事件被该view拦截可能消耗。 + - 2.没拦截,事件到达了button,这个过程中建立了一条事件传递的view链表 + - 3.到button的dispatch方法-->onTouch-->view是否可用-->Touch代理 +- 2.移动点击按钮的时候: + - 1.产生move事件,listView中会对move事件做拦截 + - 2.此时listView会将该滑动事件消费掉 + - 3.后续的滑动事件都会被listView消费掉 +- 3.手指抬起来时候:前面建立了一个view链表,listView的父view在获取事件的时候,会直接取链表中的listView让其进行事件消耗。 + +## 35.service的意义:不需要界面,在后台执行的程序 + +## 36.android的IPC通信方式,线程(进程间)通信机制有哪些 + +- 1.ipc通信方式:binder、contentprovider、socket +- 2.操作系统进程通讯方式:共享内存、socket、管道 + +## 37.操作系统进程和线程的区别 + +- 1.简而言之,一个程序至少有一个进程,一个进程至少有一个线程. +- 2.线程的划分尺度小于进程,使得多线程程序的并发性高。 +- 3.另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 +- 4.多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配 + +## 38.HashMap的实现过程:Capacity就是buckets的数目,Load factor就是buckets填满程度的最大比例。如果对迭代性能要求很高的话不要把capacity设置过大,也不要把load factor设置过小。 + +- 1.简单来说HashMap就是一个会自动扩容的**数组链表** +- 2.put过程 + - 1.对key的hashCode()做hash,然后再计算index; + - 2.如果没碰撞直接放到bucket里; + - 3.如果碰撞了,以链表的形式存在buckets后; + - 4.如果碰撞导致链表过长(大于等于TREEIFY_THRESHOLD),就把链表转换成红黑树; + - 5.如果节点已经存在就替换old value(保证key的唯一性) + - 6.如果bucket满了(超过load factor*current capacity),就要resize。 +- 3.resize:当put时,如果发现目前的bucket占用程度已经超过了Load Factor所希望的比例,那么就会发生resize。在resize的过程,简单的说就是把bucket扩充为2倍,之后重新计算index,把节点再放到新的bucket中 +- 4.get过程 + - 1.根据key的hash算出数组下表 + - 2.使用equals遍历链表进行比较 + +## 39.mvc、mvp、mvvm: + +- 1.mvc:数据、View、Activity,View将操作反馈给Activity,Activitiy去获取数据,数据通过观察者模式刷新给View。循环依赖 + - 1.Activity重,很难单元测试 + - 2.View和Model耦合严重 +- 2.mvp:数据、View、Presenter,View将操作给Presenter,Presenter去获取数据,数据获取好了返回给Presenter,Presenter去刷新View。PV,PM双向依赖 + - 1.接口爆炸 + - 2.Presenter很重 +- 3.mvvm:数据、View、ViewModel,View将操作给ViewModel,ViewModel去获取数据,数据和界面绑定了,数据更新界面更新。 + - 1.viewModel的业务逻辑可以单独拿来测试 + - 2.一个view 对应一个 viewModel 业务逻辑可以分离,不会出现全能类 + - 3.数据和界面绑定了,不用写垃圾代码,但是复用起来不舒服 + +## 40.java的线程如何实现 + +- 1.Thread继承 +- 2.Runnale +- 3.Future +- 4.线程池 + +## 41.ArrayList 如何删除重复的元素或者指定的元素; + +- 1.删除重复:Set +- 2.删除指定:迭代器 + +## 42.如何设计在 UDP 上层保证 UDP 的可靠性传输; + +- 1.简单来讲,要使用UDP来构建可靠的面向连接的数据传输,就要实现类似于TCP协议的超时重传,有序接受,应答确认,滑动窗口流量控制等机制,等于说要在传输层的上一层(或者直接在应用层)实现TCP协议的可靠数据传输机制。 +- 2.比如使用UDP数据包+序列号,UDP数据包+时间戳等方法,在服务器端进行应答确认机制,这样就会保证不可靠的UDP协议进行可靠的数据传输。 +- 3.基于udp的可靠传输协议有:RUDP、RTP、UDT + +## 43.Java 中内部类为什么可以访问外部类 + +- 1.因为内部类创建的时候,需要外部类的对象,在内部类对象创建的时候会把外部类的引用传递进去 + +## 44.设计移动端的联系人存储与查询的功能,要求快速搜索联系人,可以用到哪些数据结构?数据库索引,平衡二叉树(B树、红黑树) + +## 45.红黑树特点 + +- 1.root节点和叶子节点是黑色 +- 2.红色节点后必须为黑色节点 +- 3.从root到叶子每条路径的黑节点数量相同 + +## 46.linux异步和同步i/o: + +- 1.同步:对于client,client一直等待,但是client不挂起:主线程调用 +- 2.异步:对于client,client发起请求,service好了再回调client:其他线程调用,调用完成之后进行回调 +- 3.阻塞:对于service,在准备io的时候会将service端挂起,直至准备完成然后唤醒service:bio +- 3.非阻塞:对于service,在准备io的时候不会将service端挂起,而是service一直去轮询判断io是否准备完成,准备完成了就进行操作:nio、linux的select、poll、epoll +- 4.多路复用io:非阻塞io的一种优化,java nio,用一个线程去轮询多个 io端口是否可用,如果一个可用就通知对应的io请求,这使用一个线程轮询可以大大增强性能。 + - 1.我可以采用 多线程+ 阻塞IO 达到类似的效果,但是由于在多线程 + 阻塞IO 中,每个socket对应一个线程,这样会造成很大的资源占用。 + - 2.而在多路复用IO中,轮询每个socket状态是内核在进行的,这个效率要比用户线程要高的多。 +- 5.异步io:aio,用户线程完全不感知io的进行,所有操作都交给内核,io完成之后内核通知用户线程。 + - 1.这种io才是异步的,2、3、4都是同步io,因为内核进行数据拷贝的过程都会让用户线程阻塞。 + - 2.异步IO是需要操作系统的底层支持,也就是内核支持,Java 7中,提供了Asynchronous IO + +## 47.ConcurrentHashMap内部实现,HashTable的实现被废弃的原因: + +- 1.HashTable容器在竞争激烈的并发环境下表现出效率低下的原因,是因为所有访问HashTable的线程都必须竞争同一把锁,那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHashMap所使用的锁分段技术,首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。 +- 2.ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。Segment是一种可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色,HashEntry则用于存储键值对数据。一个ConcurrentHashMap里包含一个Segment数组,Segment的结构和HashMap类似,是一种数组和链表结构, 一个Segment里包含一个HashEntry数组,每个HashEntry是一个链表结构的元素,每个Segment守护者一个HashEntry数组里的元素,当对HashEntry数组的数据进行修改时,必须首先获得它对应的Segment锁。 + +## 48.HandlerThread是什么 + +- 1.MessageQueue + Looper + Handler + +## 49.IntentService是什么 + +- 1.含有HandlerThread的Service,可以多次startService()来多次在子线程中进行 onHandlerIntent()的调用。 + +## 50.class和dex + +- 1.dvm执行的是dex格式文件,jvm执行的是class文件,android程序编译完之后生产class文件。然后dex工具会把class文件处理成dex文件,然后把资源文件和.dex文件等打包成apk文件。 +- 2.dvm是基于寄存器的虚拟机,而jvm执行是基于虚拟栈的虚拟机。寄存器存取速度比栈快的多,dvm可以根据硬件实现最大的优化,比较适合移动设备。 +- 3.class文件存在很多的冗余信息,dex工具会去除冗余信息,并把所有的class文件整合到dex文件中。减少了I/O操作,提高了类的查找速度 + +## 51.内存泄漏 + +- 1.其他线程持有一个Listener,Listener操作activity。那么在线程么有完毕的时候,activity关闭了,原本是要被回收的但是,不能被回收。 +- 2.例如Handler导致的内存泄漏,Handler就相当于Listener。 +- 3.在activity关闭的时候注意停止线程,或者将Listener的注册取消 +- 3.使用弱引用,这样即使Listener持有了activity,在GC的时候还是会被回收 +- 4.工具:LeakCanary + +## 52.过度绘制、卡顿优化: + +- 1.过度绘制: + - 1.移除Window默认的Background:getWidow.setBackgroundDrawable(null); + - 2.移除XML布局文件中非必需的Background + - 3.减少布局嵌套(扁平化的一个体现,减少View数的深度,也就减少了View树的遍历时间,渲染的时候,前后期的工作,总是按View树结点来) + - 4.在引入布局文件里面,最外层可以用merge替代LinearLayout,RelativeLayout,这样把子UI元素直接衔接在include位置 + - 5.工具:HierarchyViewer 查看视图层级 +- 2.卡顿优化:16ms数据更新 + +## 53.apk瘦身: + +- 1.classes.dex:通过代码混淆,删掉不必要的jar包和代码实现该文件的优化 +- 2.资源文件:通过Lint工具扫描代码中没有使用到的静态资源 +- 3.图片资源:使用tinypng和webP,下面详细介绍图片资源优化的方案,矢量图 +- 4.SO文件将不用的去掉,目前主流app一般只放一个arm的so包 + +## 54.ANR的形成,各个组件上出现ARN的时间限制是多少 + +- 1.只要是主线程耗时的操作就会ARN 如io +- 2.broadcast超时时间为10秒 按键无响应的超时时间为5秒 前台service无响应的超时时间为20秒,后台service为200秒 + +## 55.Serializable和Parcelable 的区别 + +- 1.P 消耗内存小 +- 2.网络传输用S 程序内使用P +- 3.S将数据持久化方便 +- 4.S使用了反射 容易触发垃圾回收 比较慢 + +## 56.Sharedpreferences源码简述 + +- 1.储存于硬盘上的xml键值对,数据多了会有性能问题 +- 2.ContextImpl记录着SharedPreferences的重要数据,文件路径和实例的键值对 +- 3.在xml文件全部内加载到内存中之前,读取操作是阻塞的,在xml文件全部内加载到内存中之后,是直接读取内存中的数据 +- 4.apply因为是异步的没有返回值, commit是同步的有返回值能知道修改是否提交成功 +- 5.多并发的提交commit时,需等待正在处理的commit数据更新到磁盘文件后才会继续往下执行,从而降低效率; 而apply只是原子更新到内存,后调用apply函数会直接覆盖前面内存数据,从一定程度上提高很多效率。 3.edit()每次都是创建新的EditorImpl对象. +- 6.博客推荐:**[全面剖析SharedPreferences](https://www.jianshu.com/p/102f25cf64e3)** + +## 57.操作系统如何管理内存的: + +- 1.使用寄存器进行将进程地址和物理内存进行映射 +- 2.虚拟内存进行内存映射到硬盘上增大内存 +- 3.虚拟内存是进行内存分页管理 +- 4.页表实现分页,就是 页+地址偏移。 +- 5.如果程序的内存在硬盘上,那么就需要用页置换算法来将其调入内存中:先进先出、最近未使用最少等等 +- 6.博客推荐:**[现代操作系统部分章节笔记](https://www.jianshu.com/p/aecff59430fa)** + +## 58.浏览器输入地址到返回结果发生了什么 + +- 1.DNS解析 +- 2.TCP连接 +- 3.发送HTTP请求 +- 4.服务器处理请求并返回HTTP报文 +- 5.浏览器解析渲染页面 +- 6.连接结束 + +## 59.java泛型类型擦除发生在什么时候,通配符有什么需要注意的。 + +- 1.发生在编译的时候 +- 2.PECS,extends善于提供精确的对象 A是B的子集,Super善于插入精确的对象 A是B的超集 +- 3.博客推荐:**[Effective Java笔记(不含反序列化、并发、注解和枚举)](https://www.jianshu.com/p/4e4751b5bbbb)**、**[android阿里面试java基础锦集](https://www.jianshu.com/p/6006a3284f55)** + +## 60.activity的生命周期 + +- 1.a启动b,后退键再到a的生命周期流程:a.create-->a.start-->a.resume-->a.pause-->b.create-->b.start-->b.resume-->b界面绘制-->a.stop-->b.pause-->b.stop-->b.destroy-->a.restart-->a.start-->a.resume +- 2.意外销毁会调用saveInstance,重新恢复的时候回调用restoreInstance。储存数据的时候使用了委托机制,从activity-->window-->viewGroup-->view 会递归调用save来保持本view的数据,restore则是递归恢复本view数据。我们可以在里面做一些自己需要的数据操作。 + +## 61.面试常考的算法 + +- 1.快排、堆排序为首的各种排序算法 +- 2.链表的各种操作:判断成环、判断相交、合并链表、倒数K个节点、寻找成环节点 +- 3.二叉树、红黑树、B树定义以及时间复杂度计算方式 +- 4.动态规划、贪心算法、简单的图论 +- 5.推荐书籍:**算法导论**,将图论之前的例子写一遍 + +## 62.Launcher进程启动另外一个进程的过程:[启动一个app](http://www.cnblogs.com/tiantianbyconan/p/5017056.html) + +## 63.开源框架源码 + +- 1.Fresco + - 1.mvc框架: + - 1.Controller控制数据显示在Hierarchy中的Drawable的显隐 + - 2.ImagePipeline在Controller中负责进行数据获取,返回的数据是CloseableImage + - 3.Drawee把除了初始化之外的操作全部交给Holder去做,Holder持有Controller和Hierarchy + - 2.Drawable层次以及绘制: + - 1.如果要绘制一次Drawable就调用invalidateSelf()来触发onDraw() + - 2.Drawable分为:容器类(保存一些Drawable)、自我绘制类(进度条)、图形变换类(scale、rotate、矩阵变换)、动画类(内部不断刷新,进行webp和gif的帧绘制) + - 3.ImagePipeline返回的CloseableImage是由一个个DrawableFactory解析成Drawable的 + - 4.webp和gif动画是由jni代码解析的,然后其他静态图片是根据不同的android平台使用BitmapFactory来解析的 + - 3.职责链模式:producer不做操作标n,表示只是提供一个consumer。获取图片--》解码图片缓存Producer--》后台线程Producer--》client图片处理producer(n)--》解码producer(n)--》旋转或剪裁producer(n)--》编码图片内存缓存producer--》读硬盘缓存producer--》写硬盘缓存producer(n)--》网络producer提供CloseableImage《--解码图片缓存consumer《--client图片处理consumer《--解码consumer《--旋转或剪裁consumer《--编码图片内存缓存consumer《--写硬盘缓存consumer《--图片数据 + - 4.内存缓存: + - 1.一个CountingLruMap保存已经没有被引用的缓存条目,一个CountingLruMap保存所有的条目包括没有引用的条目。每当缓存策略改变和一定时间缓存配置的更新的时候,就会将 待销毁条目Map中的条目一个个移除,直到缓存大小符合配置。 + - 2.这里的引用计数是用Fresco组件实现的引用计数器。 + - 3.缓存有一个代理类,用来追踪缓存的存取。 + - 4.CountingLruMap是使用LinkedHashMap来储存数据的。 + - 5.硬盘缓存: + - 1.DefaultDiskStorage使用Lru策略。 + - 2.为了不让所有的文件集中在一个文件中,创建很多命名不同的文件夹,然后使用hash算法把缓存文件分散 + - 3.DiskStorageCache封装了DefaultDiskStorage,不仅进行缓存存取追踪,并且其在内存里面维持着一个 的键值对,因为文件修改频繁,所有只是定时刷新,因此如果在内存中找不到,还要去硬盘中找一次。 + - 4.删除硬盘的缓存只出现在硬盘数据大小超限的时候,此时同时也会删除缓存中的key,所以不会出现内存中有key,但是硬盘上没有的情况。 + - 5.在插入硬盘数据的时候,采用的是插入器的形式。返回一个Inserter,在Inserter.writeData()中传入一个CallBack(里面封装了客户端插入数据的逻辑和文件引用),让内部实现调用CallBack的逻辑来插入文件数据,前面写的文件后缀是.temp,只有调用commit()之后才会修改后缀,让文件对客户端可见。 + - 6.使用了java提供的FileTreeVisitor来遍历文件 + - 6.对象池: + - 1.使用数组来存储一个桶,桶内部是一个Queue。数组下标是数据申请内存的byte大小,桶内部的Queue存的是内存块的。所以数组使用的是稀疏数组 + - 2.申请内存的方式有两种 1.java堆上开辟的内存 2.ashme 的本地内存中开辟的内存 + - 7.设计模式:Builder、职责链、观察者、代理、组合、享元、适配器、装饰者、策略、生产者消费者、提供者 + - 8.自定义计数引用:类似c++智能指针 + - 1.使用一个静态IdentityHashMap <储存需要被计数引用的对象,其被引用的次数> + - 2.用SharedReference分装需要被计数引用的对象,提供一个销毁资源的销毁器,提供一个静态工厂方法来复制自己,复制一个引用计数加一。提供一个方法销毁自己,表示自己需要变成无人引用的对象了,此时引用计数减一。 + - 3.引用计数归零,销毁器将销毁资源,如bitmap的recycle或者是jni内存调用jni方法归还内存。 + - 9.博客推荐:**[Android Fresco源码文档翻译](https://www.jianshu.com/p/dbe01f9994d0)**、**[从零开始撸一个Fresco之硬盘缓存](https://www.jianshu.com/p/ab2124764438)**、**[从零开始撸一个Fresco之gif和Webp动画](https://www.jianshu.com/p/36663090b140)**、**[从零开始撸一个Fresco之内存缓存](https://www.jianshu.com/p/ba0de15ce667)**、**[从零开始撸一个Fresco之总结](https://www.jianshu.com/p/2dff47ae7666)** +- 2.oKhttp: + - 1.同步和异步: + - 1.异步使用了Dispatcher来将存储在 Deque 中的请求分派给线程池中各个线程执行。 + - 2.当任务执行完成后,无论是否有异常,finally代码段总会被执行,也就是会调用Dispatcher的finished函数,它将正在运行的任务Call从队列runningAsyncCalls中移除后,主动的把缓存队列向前走了一步。 + - 2.连接池: + - 1.一个Connection封装了一个socket,ConnectionPool中储存s着所有的Connection,StreamAllocation是引用计数的一个单位 + - 2.当一个请求获取一个Connection的时候要传入一个StreamAllocation,Connection中存着一个弱引用的StreamAllocation列表,每当上层应用引用一次Connection,StreamAllocation就会加一个。反之如果上层应用不使用了,就会删除一个。 + - 3.ConnectionPool中会有一个后台任务定时清理StreamAllocation列表为空的Connection。5分钟时间,维持5个socket + - 3.选择路线与建立连接 + - 1.选择路线有两种方式: + - 1.无代理,那么在本地使用DNS查找到ip,注意结果是数组,即一个域名有多个IP,这就是自动重连的来源 + - 2.有代理HTTP:设置socket的ip为代理地址的ip,设置socket的端口为代理地址的端口 + - 3.代理好处:HTTP代理会帮你在远程服务器进行DNS查询,可以减少DNS劫持。 + - 2.建立连接 + - 1.连接池中已经存在连接,就从中取出(get)RealConnection,如果没有命中就进入下一步 + - 2.根据选择的路线(Route),调用Platform.get().connectSocket选择当前平台Runtime下最好的socket库进行握手 + - 3.将建立成功的RealConnection放入(put)连接池缓存 + - 4.如果存在TLS,就根据SSL版本与证书进行安全握手 + - 5.构造HttpStream并维护刚刚的socket连接,管道建立完成 + - 4.职责链模式:缓存、重试、建立连接等功能存在于拦截器中网络请求相关,主要是网络请求优化。网络请求的时候遇到的问题 + - 5.博客推荐:**[Android数据层架构的实现 上篇](https://www.jianshu.com/p/60e5ebf0096a)**、**[Android数据层架构的实现 下篇](https://www.jianshu.com/p/5def7b42d223)** +- 3.okio + - 1.简介; + - 1.sink:自己--》别人 + - 2.source:别人--》自己 + - 3.BufferSink:有缓存区域的sink + - 4.BufferSource:有缓存区域的source + - 5.Buffer:实现了3、4的缓存区域,内部有Segment的双向链表,在在转移数据的时候,只需要将指针转移指向就行 + - 2.比java io的好处: + - 1.减少内存申请和数据拷贝 + - 2.类少,功能齐全,开发效率高 + - 3.内部实现: + - 1.Buffer的Segment双向链表,减少数据拷贝 + - 2.Segment的内部byte数组的共享,减少数据拷贝 + - 3.SegmentPool的共享和回收Segment + - 4.sink和source中被实际操作的其实是Buffer,Buffer可以充当sink和source + - 5.最终okio只是对java io的封装,所有操作都是基于java io 的 + +> 写在最后:能看到这里的人,我挺佩服你的.这篇文章是我在**头条**面试之前整理的,最后**80%**的题目都命中了,所以祝你好运. + +不贩卖焦虑,也不标题党。分享一些这个世界上有意思的事情。题材包括且不限于:科幻、科学、科技、互联网、程序员、计算机编程。下面是我的微信公众号:**世界上有意思的事**,干货多多等你来看。 + + + +作者:何时夕 +链接:https://www.jianshu.com/p/cf5092fa2694 +来源:简书 +著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 + + + +# [百度面试题](https://www.jianshu.com/p/f0d2ed1254a9) + + + +电话面试 + +``` +1. 安卓View绘制流程 +2. 事件分发机制 +3. JAVA基础思想 +4. 多线程和安全问题 +5. 安卓性能优化和兼容问题 +6. 再问一下常规的组件相关问题 +``` + + + + + +现场笔试 + +```kotlin +1 请描述安卓四大组建之间的关系,并说下安卓MVC的设计模式。 + +2 线程中sleep()和wait()有和却别,各有什么含义 + +3 abstract和interface的区别? + +4 array,arrayList, List ,三者有何区别? + +5 hashtable和hashmap的区别,并简述Hashmap的实现原理 + +6 StringBuilder和],String ,subString方法的细微差别 + +7 请写出四种以上你知道的设计模式,并介绍下实现原理 + +8 安卓子线程是否能更新UI,如果能请说明具体细节。 + +9 ANR产生的原因和解决步骤 + +10 JavaGC机制的原理和内存泄露 + +11 安卓布局优化方案, + +12 请在100个电话号码找出135的电话号码 注意 不能用正则,(类似怎么最好的遍历LogGat日志) +13 Handler机制,请写出一种更新UI的方法和代码 + +14 请解释安卓为啥要加签名机制。 + +15 你觉得安卓开发最关键的技术在哪里? +13 Handler机制,请写出一种更新UI的方法和代码 + +14 请解释安卓为啥要加签名机制。 + +15 你觉得安卓开发最关键的技术在哪里? +``` + +一轮面试: + +```undefined +1 ANR 具体产生的类型有哪些,具体说下其产生的最大超时时间。 + +2 多线程多点下载的过程 + +3 http协议的理解和用法 + +4 安卓解决线程并发问题 + +5 你知道的数据结构有哪些,说下具体实现机制 + +6 十六进制数据怎么和十进制和二进制之间转换 + +7 谈下对Java OOP中多态的理解 + +8 activty和Fragmengt之间怎么通信,Fragmengt和Fragmengt怎么通信 + +9 怎么让自己的进程不被第三方应用杀掉,系统杀掉之后怎么能启动起来。 +10 说下平时开发中比较注意的一些问题, + +答 :可以熟说下svn和git的细节,和代码规范问题,和一些安全信息的问题等 + +11 自定义view效率高于xml定义吗?说明理由。 + +13 广播注册一般有几种,各有什么优缺点 + +14 服务启动一般有几种,服务和activty之间怎么通信,服务和服务之间怎么通信 +15 布局优化主要哪些?具体优化? + +16 数据库的知识,包括本地数据库优化点。 +``` + +二轮面试 + +```css +1 安卓事件分发机制,请详细说下整个流程 + +2 安卓view绘制机制和加载过程,请详细说下整个流程 + +3 activty的加载过程 请详细介绍下(不是生命周期切记) + +4 安卓采用自动垃圾回收机制,请说下安卓内存管理的原理 + +5 说下安卓虚拟机和java虚拟机的原理和不同点 + +6 多线程中的安全队列一般通过什么实现?线程池原理?(java) + +7 安卓权限管理,为何在清单中注册权限,安卓APP就可以使用,反之不可以(操作系统) + +8 socket短线重连怎么实现,心跳机制又是怎样实现,四次握手步骤有哪些(网络通讯原理) + +9 http中TCP和UDP有啥区别,说下HTTP请求的IP报文结构(计算机网络) +10 你知道的安全加密有哪些? (如果你说了一个加密,面试官就会接着跟进提问,所以之前你必须要会,不会的话背也要背下来)(安全加密) +11 你知道的数据存储结构?堆栈和链表内部机制。(数据结构) + +12 说下Linux进程和线程的区别。进程调度优先级,和cpu调度进程关系。(操作系统) + +13 请你详细说下你知道的一种设计模式,并解释下java的高内聚和低耦合。 + +14 spring 的反射和代理,在安卓中应用场景(插件和ROM数据框架) + +15 JNI 调用过程中 混淆问题 + +16 看过安卓源码吗,请说出一个你看过的API或者组建内部原理。 + +17 android 5.0 6.0 以及7.0预测新特性 + +18 hybrid混合开发,响应式编程等 + +17为啥离职呢 对待加班看法 + +18 你擅长什么,做了那些东西。 +``` + + + +# [名企面试题](https://www.jianshu.com/p/735be5ece9e8) + +## [Android](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/tree/master/android) + +##### 基础 + +- [Android 源码中的设计模式(你需要知道的设计模式全在这里)](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Android 源码中的设计模式(你需要知道的设计模式全在这里).md) +- [全面了解Activity](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/全面了解Activity.md) +- [Service全面总结](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Service全面总结.md) +- [IntentService使用详解和实例介绍](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/IntentService使用详解和实例介绍.md) +- [Fragment 全解析](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Fragment 全解析.md) +- [ContentProvider实例详解](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/ContentProvider实例详解.md) +- [BroadcastReceiver使用总结](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/BroadcastReceiver使用总结.md) +- [Android异步任务机制之AsycTask](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Android异步任务机制之AsycTask.md) +- [Android启动过程图解](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Android启动过程图解.md) +- [Android 自定义View入门](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Android 自定义View入门.md) +- [Android 自定义ViewGroup入门实践](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Android 自定义ViewGroup入门实践.md) +- [Android 缓存机制](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Android 缓存机制.md) +- [Android 数据存储五种方式使用与总结](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Android 数据存储五种方式使用与总结.md) +- [Android 异步消息处理机制源码解析](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Android 异步消息处理机制(Handler 、 Looper 、MessageQueue)源码解析.md) +- [Android View事件分发机制源码分析](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Android View事件分发机制源码分析.md) +- [Android SQLite的使用入门](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Android SQLite的使用入门.md) +- [AIDL的使用情况和实例介绍](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/AIDL的使用情况和实例介绍.md) +- [Android 名企面试题及答案整理(一)](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Android 名企面试题及答案整理(一).md) + +##### 问题 + +- [Android5.0、6.0、7.0新特性](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Android5.0、6.0、7.0新特性.md) +- [Android中弱引用与软引用的应用场景](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Android中弱引用与软引用的应用场景.md) +- [Android长连接,怎么处理心跳机制](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Android长连接,怎么处理心跳机制.md) +- [Asset目录与res目录的区别](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Asset目录与res目录的区别.md) +- [Binder机制原理和底层实现](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Binder机制原理和底层实现.md) +- [Json优劣势](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/Json优劣势.md) +- [ListView优化](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/ListView优化.md) +- [android中图片缓存](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/android中图片缓存.md) +- [两类动画](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/两类动画.md) +- [五大布局易混淆知识](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/五大布局易混淆知识.md) +- [保证service不被杀死](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/保证service不被杀死.md) +- [加速启动activity](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/加速启动activity.md) +- [怎样退出终止App](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/怎样退出终止App.md) +- [activity切换动画](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/android/activity切换动画.md) + +##### 外链 + +- [布局性能优化(include, viewstub, merge)](https://link.jianshu.com?t=http://www.trinea.cn/android/layout-performance/) +- [DOM、SAX、Pull解析XML](https://link.jianshu.com?t=http://www.cnblogs.com/xiaoluo501395377/p/3444744.html) + +## [Java](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/tree/master/java) + +##### 基础 + +- [ArrayList、LinkedList、Vector的区别](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] ArrayList、LinkedList、Vector的区别.md) +- [Collection包结构,与Collections的区别](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] Collection包结构,与Collections的区别.md) +- [Excption与Error包结构,OOM和SOF](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] Excption与Error包结构%2COOM和SOF.md) +- [HashMap和HashTable的区别](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] HashMap和HashTable的区别.md) +- [HashMap源码分析](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] HashMap源码分析.md) +- [Hashcode的作用](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] Hashcode的作用.md) +- [Map、Set、List、Queue、Stack的特点与用法](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] Map、Set、List、Queue、Stack的特点与用法.md) +- [Object有哪些公用方法?](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] Object有哪些公用方法?.md) +- [Override和Overload的使用规则和区别](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] Override和Overload的使用规则和区别.md) +- [Switch能否用string做参数?](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] Switch能否用string做参数?.md) +- [ThreadLocal的使用规则和源码分析](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] ThreadLocal的使用规则和源码分析.md) +- [ThreadPool用法与示例](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] ThreadPool用法与示例.md) +- [equals与==的区别](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] equals与%3D%3D的区别.md) +- [try catch finally,try里有return,finally还执行么?](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] try catch finally,try里有return,finally还执行么?.md) +- [九种基本数据类型的大小,以及他们的封装类](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] 九种基本数据类型的大小,以及他们的封装类.md) +- [从源码分析String、StringBuffer与StringBuilder区别和联系](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] 从源码分析String、StringBuffer与StringBuilder区别和联系.md) +- [多线程下生产者消费者问题的五种同步方法实现](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] 多线程下生产者消费者问题的五种同步方法实现.md) +- [实现多线程的两种方法](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] 实现多线程的两种方法.md) +- [接口(Interface)与 抽象类 (Abstract)使用规则和区别](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] 接口(Interface)与 抽象类 (Abstract)使用规则和区别.md) +- [方法锁、对象锁和类锁的意义和区别](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] 方法锁、对象锁和类锁的意义和区别.md) +- [四种引用,强弱软虚,用到的场景](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] 的四种引用,强弱软虚,用到的场景.md) +- [线程同步的方法:sychronized、lock、reentrantLock分析](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] 线程同步的方法:sychronized、lock、reentrantLock分析.md) +- [集合框架的层次结构和使用规则梳理](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] 集合框架的层次结构和使用规则梳理.md) +- [面向对象的三个特征与含义](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[Java] 面向对象的三个特征与含义.md) +- [static的作用和意义](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[java] static的作用和意义.md) +- [多态实现的JVM调用过程](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/[java] 多态实现的JVM调用过程.md) +- [wait()和sleep()的区别](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/wait()和sleep()的区别.md) +- [git命令使用](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/git命令使用.md) +- [Java与C++对比](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/java/Java与C%2B%2B对比.md) + +##### 外链 + +- [java反射](https://link.jianshu.com?t=http://762626559-qq-com.iteye.com/blog/395402) +- [java回调](https://link.jianshu.com?t=http://blog.csdn.net/xiaanming/article/details/8703708/) +- [Java泛型](https://link.jianshu.com?t=http://www.weixueyuan.net/view/6321.html) +- [java 新特性](https://link.jianshu.com?t=http://www.cnblogs.com/langtianya/p/3757993.html) +- [Java IO与NIO](https://link.jianshu.com?t=http://www.iteye.com/topic/834447) +- [foreach与正常for循环效率对比](https://link.jianshu.com?t=http://www.xuebuyuan.com/780786.html) + +## [数据结构](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/tree/master/data structure) + +##### 基础 + +- [九大基础排序总结与对比(排序算法一网打尽)](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/data structure/[数据结构] 九大基础排序总结与对比.md) +- [AVL树和AVL旋转、哈夫曼树和哈夫曼编码](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/data structure/[数据结构] AVL树和AVL旋转、哈夫曼树和哈夫曼编码.md) +- [B(B-)树、B+树、B树](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/data structure/[数据结构] B(B-)树、B%2B树、B树.md) +- [Hash表、Hash函数及冲突解决](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/data structure/[数据结构] Hash表、Hash函数及冲突解决.md) +- [KMP的一个简单解释](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/data structure/[数据结构] KMP的一个简单解释.md) +- [二分查找与变种二分查找](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/data structure/[数据结构] 二分查找与变种二分查找.md) +- [二叉树前中后、层次遍历算法](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/data structure/[数据结构] 二叉树前中后、层次遍历算法.md) +- [图的BFS、DFS、prim、Dijkstra算法](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/data structure/[数据结构] 图的BFS、DFS、prim、Dijkstra算法.md) +- [字符串操作](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/data structure/[数据结构] 字符串操作.md) +- [数组与链表的优缺点和区别](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/data structure/[数据结构] 数组与链表的优缺点和区别.md) +- [红黑树](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/data structure/[数据结构] 红黑树.md) +- [队列和栈](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/data structure/[数据结构] 队列和栈.md) + +##### 外链 + +- [海量数据处理 ](https://link.jianshu.com?t=http://blog.csdn.net/zyq522376829/article/details/47686867) + +## [算法](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/tree/master/algorithm) + +##### 基础 + +- [二叉搜索树与双向链表](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/二叉搜索树与双向链表.md) +- [二叉树中 和为某值 的所有路径](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/二叉树中 和为某值 的所有路径.md) +- [二叉树的镜像](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/二叉树的镜像.md) +- [二维数组中的查找](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/二维数组中的查找.md) +- [二进制中1的个数](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/二进制中1的个数.md) +- [从上往下打印二叉树](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/从上往下打印二叉树.md) +- [从尾到头打印链表](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/从尾到头打印链表.md) +- [判断二叉搜索树的后序遍历序列](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/判断二叉搜索树的后序遍历序列.md) +- [判断栈的弹出序列](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/判断栈的弹出序列.md) +- [判断树B是不是树A的子结构](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/判断树B是不是树A的子结构.md) +- [包含min函数的栈](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/包含min函数的栈.md) +- [反转链表](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/反转链表.md) +- [变态跳台阶](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/变态跳台阶.md) +- [合并两个排序链表](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/合并两个排序链表.md) +- [复杂链表的复制](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/复杂链表的复制.md) +- [字符串中空格替换](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/字符串中空格替换.md) +- [字符串的顺序全排列](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/字符串的顺序全排列.md) +- [数组中出现次数超过一半的数字](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/数组中出现次数超过一半的数字.md) +- [斐波那契数列](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/斐波那契数列.md) +- [旋转数组的最小数字](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/旋转数组的最小数字.md) +- [浮点数的整数次方](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/浮点数的整数次方.md) +- [用两个栈实现队列](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/用两个栈实现队列.md) +- [矩形覆盖](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/矩形覆盖.md) +- [调整数组顺序使奇数位于偶数前面](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/调整数组顺序使奇数位于偶数前面.md) +- [跳台阶](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/跳台阶.md) +- [重建二叉树](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/重建二叉树.md) +- [链表中倒数第k个结点](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/链表中倒数第k个结点.md) +- [顺时针打印矩阵](https://link.jianshu.com?t=https://github.com/helen-x/AndroidInterview/blob/master/algorithm/swordForOffer/顺时针打印矩阵.md) + +##### 外链 + +- [分治算法](https://link.jianshu.com?t=http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741370.html) +- [动态规划](https://link.jianshu.com?t=http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741374.html) +- [贪心算法](https://link.jianshu.com?t=http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741375.html) +- [分支限界法](https://link.jianshu.com?t=http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741378.html) + + + +作者:菜刀文 +链接:https://www.jianshu.com/p/735be5ece9e8 +来源:简书 +著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 + + + +# 面试和必备的技能 + +这里只简单列举一些东西,可能不是特别全,但是却特别适用,也不一定按照下面的流程,有可能是穿插的,也有可能都有,根据公司的规模以及面试官的心情而定(哈哈哈 ,你们就自求多福吧)。建议大家还是要将下面的东西全部掌握,没事写写代码,练练手,在项目中能用到的地方一定要用,有可能会遇到很多坑,一定要自己想办法填坑,之后回忆起这段经历,肯定可以敢理直气壮的跟别人讨论。如果你说的头头是道,那么对方会先输一层,然后在心里对你佩服。 + +1. 一般情况下第一轮都是基础面试,需要扎实的基础 + + - 最常用的Android 基础知识 + - Java 基础知识 + - 了解一些 常用东西的原理,例如:handler, thread 等 + - 项目中的技术点 + +2. 第二轮的时候需要了解更深层次的东西 + + - Android 事件分发机制原理 + - Android 绘图机制原理 + - WindowManager 的相关知识 + - 进程间传输方式 + - Java 内存管理机制 + - 一些常用的 list,map 原理,以及子类之间的差别 + +3. 能进入第三轮基本没什么问题,但是要注意以下问题 + + - 该轮一般是 老大或者部门负责人,问的问题一般都看 深度与广度 + + - 当问及薪水的时候,要说一个合适的,小公司随意,大公司一定要慎重,当心里没底的时候,可以告诉对方,让对方给一个合理的薪资。一般都是在原工资基础之上增长,听猎头说一般涨幅都在15%-30%,超 NB 的可以要30%及以上,如果感觉自己还不错的,挺厉害的,建议最高20%,一般人就定在15% 左右最靠谱。公司内部一般有一套机制,根据公司情况而定。 + + - 我们的面试原则就是拿到合理薪资,得到 offer + + - 个人发展情况,这个问题很难回答,如果和公司方向不符合,极有可能和公司无缘。建议多试探性的问问公司缺少什么,你能否给予公司对应的东西。当然对于有自我追求的人,那可以放心大胆的提。我的方向就是架构师,哈哈哈,挺极端的,别学我哦。我感觉选择都是双向的,因此我知道自己需要的是什么。 + + - 你最擅长什么UI 还是其他什么?这个问题更不好回答。你要说你擅长 UI,是不是意味着你其他能力就不行?虽然我不知道面试官的用意,但是我能感觉到,这个问题不是那么好回答,我会回答说自己都行,来什么业务接什么需求。可能回答不太好,总之和公司的职位吻合就行,这样总不至于出错吧。 + + + + + +## [Android 高级面试题及答案](https://www.cnblogs.com/deman/p/5860976.html) + +- [1.如何对 Android 应用进行性能分析](https://www.cnblogs.com/deman/p/5860976.html#_label0) +- [2.什么情况下会导致内存泄露](https://www.cnblogs.com/deman/p/5860976.html#_label1) +- [3.如何避免 OOM 异常](https://www.cnblogs.com/deman/p/5860976.html#_label2) +- [4.Android 中如何捕获未捕获的异常](https://www.cnblogs.com/deman/p/5860976.html#_label3) +- [5.ANR 是什么?怎样避免和解决 ANR(重要)](https://www.cnblogs.com/deman/p/5860976.html#_label4) +- [6.Android 线程间通信有哪几种方式](https://www.cnblogs.com/deman/p/5860976.html#_label5) +- [7.Devik 进程,linux 进程,线程的区别](https://www.cnblogs.com/deman/p/5860976.html#_label6) +- [8.描述一下 android 的系统架构](https://www.cnblogs.com/deman/p/5860976.html#_label7) +- [9.android 应用对内存是如何限制的?我们应该如何合理使用内存?](https://www.cnblogs.com/deman/p/5860976.html#_label8) +- [10. 简述 android 应用程序结构是哪些](https://www.cnblogs.com/deman/p/5860976.html#_label9) +- [11.请解释下 Android 程序运行时权限与文件系统权限的区别](https://www.cnblogs.com/deman/p/5860976.html#_label10) +- [12.Framework 工作方式及原理,Activity 是如何生成一个 view 的,机制是什么](https://www.cnblogs.com/deman/p/5860976.html#_label11) +- [13.多线程间通信和多进程之间通信有什么不同,分别怎么实现](https://www.cnblogs.com/deman/p/5860976.html#_label12) +- [14.Android 屏幕适配](https://www.cnblogs.com/deman/p/5860976.html#_label13) +- [15.什么是 AIDL 以及如何使用](https://www.cnblogs.com/deman/p/5860976.html#_label14) +- [16.Handler 机制](https://www.cnblogs.com/deman/p/5860976.html#_label15) +- [17.事件分发机制](https://www.cnblogs.com/deman/p/5860976.html#_label16) +- [18.子线程发消息到主线程进行更新 UI,除了 handler 和 AsyncTask,还有什么](https://www.cnblogs.com/deman/p/5860976.html#_label17) +- [19.子线程中能不能 new handler?为什么](https://www.cnblogs.com/deman/p/5860976.html#_label18) +- [20.Android 中的动画有哪几类,它们的特点和区别是什么](https://www.cnblogs.com/deman/p/5860976.html#_label19) +- [21.如何修改 Activity 进入和退出动画](https://www.cnblogs.com/deman/p/5860976.html#_label20) +- [22.SurfaceView & View 的区别](https://www.cnblogs.com/deman/p/5860976.html#_label21) +- [23.开发中都使用过哪些框架、平台](https://www.cnblogs.com/deman/p/5860976.html#_label22) +- [24.使用过那些自定义View](https://www.cnblogs.com/deman/p/5860976.html#_label23) +- [25.自定义控件:绘制圆环的实现过程](https://www.cnblogs.com/deman/p/5860976.html#_label24) +- [26.自定义控件:摩天轮的实现过程](https://www.cnblogs.com/deman/p/5860976.html#_label25) +- [27.GridLayout的使用](https://www.cnblogs.com/deman/p/5860976.html#_label26) +- [28.流式布局的实现过程](https://www.cnblogs.com/deman/p/5860976.html#_label27) +- [29.第三方登陆](https://www.cnblogs.com/deman/p/5860976.html#_label28) +- [30.第三方支付](https://www.cnblogs.com/deman/p/5860976.html#_label29) \ No newline at end of file diff --git a/JavaJob/.DS_Store b/JavaJob/.DS_Store index aff1bf2c23a66eefb246221e93fa2b0ad6835b84..2d319adc6cfc585d08e60072ff083701526baf57 100644 GIT binary patch delta 1316 zcmeH`NlX+$6o%_Zl)p z+?mwjsahu-3Km93vkUUm<8!i$)DnFx&Z$OS9L}pF`hsA(!zy<q(0GiyE_;g zRHU6!pUo+|qzao;QaYI4B}+r~d!4ewt~5&niuN{@nTdDsH$x0DYZFqlHWY0tpATg^ z{hBaJ+hkF)JLPU!8fY4lMQ2Z|P3e;CqHN#Y;*u4)vrn?vZT%Aa$n*1hrVAA!g=mhM z+?;i=Q{FcyJBPhz#To_LE^1lSIYiHCBD=@&US*w85O#T#@&QSEiX7(+CngEhqG;7H zn}1Ttv_14kqXu>M}NOo zi=soiKdhF934xxZ)z+|NH_t#g5=#j2tHuWSY#7S@Mj`k@sYgd?rie zJNZF=l3(D!BN!CnFd_{Z$V3(jQGrTSp&k}AqXkyj(2X9**aHQ_7{vh`#8I5UNu0uI zT)-7v!*wHW;4U8EAs*o|Uf?BOVFB;3h)?)}uWCYgV`%mE>KdBz2k6Sb2mLn0M>jme z5TB5mnOj)8RZWXf-6^~Vg<)QZjEas)ipk(O7U2D$=9nB_! tTeyu$&G~7D8O-9oAHj3HnVK`?a#KO^-vSf-jQ%59_GbJ$MCzQu{2M0WOWObd delta 1214 zcmeH_OGs2v7{||lQn?o|dK|}@;}gwy89Hi;nL0I+mWt*B%}BfBz1GEf(SO zcapR=Hf5@|Yjx&K?FY-#Cd`$l7D0nGMO!ithx?QvpSMdnE)P-~ROL?DEe4d3+$aWQ zm4cs5uw~@rZz`>GOWmc zp3d>zUeO~*idZU3=V&h17j!A3K_xJzn`u&FW)>5)g=BMhE!ddF*nY|A>h#OTEpc4r zO+g_Ox>aL5Dsp^8*<2zB-6M)uqADL%%IpH`af>e5O(i~BwzW!Ny&>7JDn2i5Sr@m} z3aoF)=kXXrs!1qWmmAU@j18={ZWYx)`w`hIOLW=jzqYO>T8hHCjxrKCJmE+tDJPAj zl^i5~GESz+1u{eC$s)N+o{*PBCvV9I@|k=gU&%M}6MzXZh(!Wy$U^}NQ3N~cP>%*Q zqYdroz+UuY5F%U{f*XDW5JU)JoWvAP;|%i8;tH-}2G=l)2Y7@fJjOFD<2hEK;~hTY z6TWK&DP3_*%}u-a{5H4z59Yo}SX(jKl47-G=NE4&uim~xtFUSZ;(5Bj=`1xZJ)WkPftx_JDq|+iSa3T zZPdd4mgozzLf#uRS3wYmcqD@%2gN8wjls_WCmOLU!mtxv=)u4`#}R|02R$riNxMfhC$0F|GzCrgPp5hf=&*`=bZZ0l+H74&r{C^E! H({1)&bnGpt diff --git "a/JavaJob/JavaSE/Java\351\253\230\347\272\247\351\235\242\350\257\225\351\242\230.md" "b/JavaJob/JavaSE/Java\351\253\230\347\272\247\351\235\242\350\257\225\351\242\230.md" index 7075f64..46e8653 100644 --- "a/JavaJob/JavaSE/Java\351\253\230\347\272\247\351\235\242\350\257\225\351\242\230.md" +++ "b/JavaJob/JavaSE/Java\351\253\230\347\272\247\351\235\242\350\257\225\351\242\230.md" @@ -1,8 +1,11 @@ 1、哪些情况下的对象会被垃圾回收机制处理掉? + 2、讲一下常见编码方式? 3、utf-8 编码中的中文占几个字节;int 型几个字节? 4、静态代理和动态代理的区别,什么场景使用? 5、Java 的异常体系 6、谈谈你对解析与分派的认识。 7、修改对象 A 的 equals 方法的签名,那么使用 HashMap 存放这个对象 实例的时候,会调用哪个 equals 方法 + 链接:https://www.jianshu.com/p/14fa0c6ed6e8 + diff --git a/README.md b/README.md index c8c67e1..df8508b 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ * [JavaSE(Java基础)](https://github.com/BlogForMe/LearningNotes/tree/master/JavaJob/JavaSE) * [Java基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/Java基础知识.md) + * [Java高级面试题](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/Java%E9%AB%98%E7%BA%A7%E9%9D%A2%E8%AF%95%E9%A2%98.md) * [Java中的内存泄漏](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/Java中的内存泄漏.md) * [String源码分析](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/String源码分析.md) * [Java集合框架](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/Java集合框架.md) @@ -95,8 +96,8 @@ * [Vector源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/Vector源码剖析.md) * [HashMap源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/HashMap源码剖析.md) * [HashTable源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/HashTable源码剖析.md) - * [LinkedHashMap源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/LinkedHashMap源码剖析.md) - +* [LinkedHashMap源码剖析](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JavaSE/LinkedHashMap源码剖析.md) + * [JVM(Java虚拟机)](https://github.com/BlogForMe/LearningNotes/tree/master/JavaJob/JVM) * [JVM基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JVM/JVM.md) * [JVM类加载机制](https://github.com/BlogForMe/LearningNotes/blob/master/JavaJob/JVM/JVM类加载机制.md) From 64507c4d66db6684636e72f041efa551750899e0 Mon Sep 17 00:00:00 2001 From: john Date: Thu, 7 Jan 2021 16:35:06 +0800 Subject: [PATCH 7/9] df --- JavaJob/.DS_Store | Bin 10244 -> 10244 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/JavaJob/.DS_Store b/JavaJob/.DS_Store index 2d319adc6cfc585d08e60072ff083701526baf57..00f5b6bb9dc30e7d76a2f255c18de1409a60ffbe 100644 GIT binary patch delta 87 zcmZn(XbIR*EHHVaV2g;6v5Ag?p^;^+jzYDifw_)?xw*+?Pa)IEj)Gq}Objh_6pRck fCJD-JjuQIJ3etfrI5|p4WwWH@3+~NKqRh+yWV0A) delta 134 zcmZn(XbIR*EWmhb@vW&AP%L>Xf&Yo;5_+7-%+)PKo z$k4J@N1@u>*g{9a+{A1$x1j0fTA}l-j3+<_Xoy!=n;QUC8Ji)is;%YZ5LY#{^-RdE Xtg5c5t(yThcIIX=$=BSQM46cZTAC*F From 3da262bd9293d615cb1e66eda66d6e9ab63fd35a Mon Sep 17 00:00:00 2001 From: john Date: Thu, 7 Jan 2021 16:37:14 +0800 Subject: [PATCH 8/9] fe --- .DS_Store | Bin 10244 -> 10244 bytes AndroidJob/.DS_Store | Bin 8196 -> 8196 bytes README.md | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.DS_Store b/.DS_Store index 8a7be9446aa8b8a62d26dfc0fc288f56d0afe6e8..b9ebed3d47f8967681179829a9b2cc0bbb28693b 100644 GIT binary patch delta 96 zcmZn(XbITBFDPPaY@(xJXlYTaqfl*WV6LNJZf-K!P|S35gdhu>h!I%U$Pz<#srYt& LoU)UbipK*0crzF6 delta 96 zcmZn(XbITBFDPPYZlc+xcBbhhq$Vtt!F}R kWmR=eZQZQNjDqrvvo|XWdNOY=k(t0ev4LkZyTo610LDfbJ^%m! diff --git a/README.md b/README.md index df8508b..43980d7 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ ## 第一部分: +* [大厂面试题](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/%E5%A4%A7%E5%8E%82%E9%9D%A2%E8%AF%95%E9%A2%98.md) * [Android(安卓)](https://github.com/BlogForMe/LearningNotes/tree/master/AndroidJob/Android) - - * [Android基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Android基础知识.md) +* [Android基础知识](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Android基础知识.md) * [Android内存泄漏总结](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Android内存泄漏总结.md) * [Handler内存泄漏分析及解决](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/Handler内存泄漏分析及解决.md) * [Handler、Looper、Message、MessageQueue基础流程分析](https://github.com/BlogForMe/LearningNotes/blob/master/AndroidJob/Android/线程通信基础流程分析.md) From 687ad860cba4b289fdf808bfb252a21af6a03e87 Mon Sep 17 00:00:00 2001 From: john Date: Thu, 7 Jan 2021 16:43:23 +0800 Subject: [PATCH 9/9] fe --- .DS_Store | Bin 10244 -> 10244 bytes AndroidJob/.DS_Store | Bin 8196 -> 8196 bytes AndroidJob/Android/.DS_Store | Bin 0 -> 8196 bytes ...02\351\235\242\350\257\225\351\242\230.md" | 0 JavaJob/.DS_Store | Bin 10244 -> 10244 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 AndroidJob/Android/.DS_Store rename "AndroidJob/Android/\345\244\247\345\216\202\351\235\242\350\257\225\351\242\230.md" => "AndroidJob/\345\244\247\345\216\202\351\235\242\350\257\225\351\242\230.md" (100%) diff --git a/.DS_Store b/.DS_Store index b9ebed3d47f8967681179829a9b2cc0bbb28693b..c3e26385b002748f7a18b2d630acfab528ec9f5f 100644 GIT binary patch delta 96 zcmZn(XbITBFDPPUYM`TFXk<{Uqfl*OV6LNJVQ4nlP|S35gdhu>h_Mk+#L&zTLw2e7 Nc7B|)lb4Fe0|0NP7s~(u delta 96 zcmZn(XbITBFDPPaY@(xJXlYTaqfl*WV6LNJZf-K!P|S35gdhu>h!I%U$Pz<#srYt& LoU)UbipK*0crzF6 diff --git a/AndroidJob/.DS_Store b/AndroidJob/.DS_Store index e6449e9b833012f618a9359a7768fb1e063a0a36..ecda5f19fe697f936ff47c6c5087a015c7dd0031 100644 GIT binary patch delta 102 zcmZp1XmOa}&&aVcU^hP_$7CLX^CCv32099cMh3My3e^?{<~j-%hGv`J3sf`fa73yH zH%(9KzB*$DgC0XJLyBikesWSyei8!%g8%~qqd1V(_zwmQo9D}(v&nwe;{py z2$qWWA{76D>RAvxc@Y(%2Nh2qR7ynzdl7n2{PBIWtIQ^o^r+|z?7r#j`@Wg^?3-C8 zB_g9W6Fp4SKtvu~YHYbIY4Oqjtw|A zXImjfO#Ad;I8wtoVi>j@&;9HU8*psSwzixMTTX`4v*Daj4ADDue&J3=z_$9X31|Yv z1RBv)N5?3FbNh&Ve!ux-#@jhOziKVgAxcoRJ)VpV#*>5a=OuO&SJMwsP$Sxg812+X zXO!M|3%qy2dyJx#q9l5ac21Z#P)kxGo1b6pycc^gd|DO9*j*53M?svcy*=?qNniib z*_TTF)dGEOf&T6E%FWj^UZwVPftIOBbLjq_I%OWr=FO_v<+=La9#srMZAqe5(EqtF zQ-R5~g~v)QGc2R+BddkqnMy0TmC^R^%Y6$rgm)>m%&d&|^4HlnR!iuJQp?O_tq06Z z3f)>?T2lElAHyT@sfK?Cb@1;=rRGN9;?nq_Nm07%ImAR{C8jDL+7`CTxFY`(9eYrAUxf}$L?mcq!B6b*r81o68;0~AzRW>?W8 zvD-}-Fd7RPlcpF(5yoFkGDZpBJG1%CR;w#omAPPUget?&ORg2HP?y5nM`Me_C$0ON ztxK1xI`YEY2=5xqS%I{wcVAzJ_~H`eWTy z$o@664`;lKdxGzH*H0Xq@s`|Un1HPGT>030+iZ_4n;WX0c#XOIu?Z{77Q3~9&;KV% z|NgJk>PAgK6Zkg>7+c%IZLOG#bG9y;6`!^JxcYH%VZWShg#{{HLlf6