From 22d854de35720940d7d12624de89fad1a1f905d8 Mon Sep 17 00:00:00 2001 From: lzw <2497727771@qq.com> Date: Tue, 20 Mar 2018 23:42:47 +0800 Subject: [PATCH] =?UTF-8?q?:+1:=E6=96=B0=E5=A2=9EAndroid=E5=86=B7=E9=97=A8?= =?UTF-8?q?=E7=9F=A5=E8=AF=86=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...45\350\257\206\346\261\207\346\200\273.md" | 172 ++++++++++++++++++ ...07\345\210\260\347\232\204\345\235\221.md" | 0 .../code/BinaryTreeDemo.java" | 41 +++++ .../code/BubbleSortDemo.java" | 37 ++++ .../code/HeapSort2Demo.java" | 89 +++++++++ .../code/HeapSortDemo.java" | 49 +++++ .../code/QuickSortDemo.java" | 44 +++++ ...02\350\200\203\347\255\224\346\241\210.md" | 91 +++++++++ pic/Sorting-algorithm.png | Bin 0 -> 42584 bytes 9 files changed, 523 insertions(+) create mode 100644 "Android\344\270\255\347\232\204\345\206\267\351\227\250\347\237\245\350\257\206\347\202\271\346\261\207\346\200\273/Android\344\270\255\347\232\204\345\206\267\351\227\250\347\237\245\350\257\206\346\261\207\346\200\273.md" create mode 100644 "Android\345\274\200\345\217\221\351\201\207\345\210\260\347\232\204\345\235\221\346\261\207\346\200\273/Android\345\274\200\345\217\221\351\201\207\345\210\260\347\232\204\345\235\221.md" create mode 100644 "interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/BinaryTreeDemo.java" create mode 100644 "interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/BubbleSortDemo.java" create mode 100644 "interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/HeapSort2Demo.java" create mode 100644 "interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/HeapSortDemo.java" create mode 100644 "interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/QuickSortDemo.java" create mode 100644 "interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/\345\217\202\350\200\203\347\255\224\346\241\210.md" create mode 100644 pic/Sorting-algorithm.png diff --git "a/Android\344\270\255\347\232\204\345\206\267\351\227\250\347\237\245\350\257\206\347\202\271\346\261\207\346\200\273/Android\344\270\255\347\232\204\345\206\267\351\227\250\347\237\245\350\257\206\346\261\207\346\200\273.md" "b/Android\344\270\255\347\232\204\345\206\267\351\227\250\347\237\245\350\257\206\347\202\271\346\261\207\346\200\273/Android\344\270\255\347\232\204\345\206\267\351\227\250\347\237\245\350\257\206\346\261\207\346\200\273.md" new file mode 100644 index 0000000..d5cf140 --- /dev/null +++ "b/Android\344\270\255\347\232\204\345\206\267\351\227\250\347\237\245\350\257\206\347\202\271\346\261\207\346\200\273/Android\344\270\255\347\232\204\345\206\267\351\227\250\347\237\245\350\257\206\346\261\207\346\200\273.md" @@ -0,0 +1,172 @@ +本文转载自:https://zhuanlan.zhihu.com/p/30879859 + +# 四大组件相关: + +1.启动一个Activity,在应用进程至少需要两个Binder线程。 + +2.启动一个launchMode为singleTask的Activity,它并不一定会运行在新的Activity栈中。 + +3.两个不同应用的Activity,可以运行在同一个Activity栈中。 + +4.同一个应用进程中的所有Activity,共享一个WindowSession。 + +5.弹出一个AlertDialog,不一定需要Activity级别的Context,而且任何地方都有办法弹出一个AlertDialog,只要是在Application的attachBaseContext之后。 + +下面是一个简单的demo演示: + +首先看DemoApplication,然后看Alert类: + +> 在Application中初始化: + + import android.app.Application; + + public class DemoApplication extends Application { + @Override + public void onCreate() { + Alert.alertAnyWhere(); + super.onCreate(); + } + } + + +> 下面这个类是对AlertDialog的封装类: + + + import android.app.AlertDialog; + import android.content.Context; + import android.content.DialogInterface; + import android.os.Build; + import android.os.Handler; + import android.os.Looper; + import android.view.WindowManager; + import java.lang.reflect.Method; + + public class Alert { + + public static void alertDialog() { + Context mAppContext = null; + try { + Class clazz = Class.forName("android.app.ActivityThread"); + Method method = clazz.getDeclaredMethod("currentApplication", new Class[0]); + mAppContext = (Context) method.invoke(null, new Object[0]); + } catch (Throwable e) { + e.printStackTrace(); + return; + } + + AlertDialog.Builder builder = new AlertDialog.Builder(mAppContext); + builder.setTitle("Hi") + .setMessage("Hello World"); + .setPositiveButton("确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }) + .setNegativeButton("取消", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + } + }); + AlertDialog dialog = builder.create(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST); + } else { + dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_PHONE); + } + dialog.show(); + } + + + private static Handler handler; + + public static void alertAnyWhere() { + if (Looper.myLooper() == Looper.getMainLooper()) { + alertDialog(); + } else { + if (handler == null) { + handler = new Handler(Looper.getMainLooper()); + } + handler.post(new Runnable() { + @Override + public void run() { + alertDialog(); + } + }); + } + } + + } + + + + + +6.可以通过设置Activity主题android.R.style.Theme_NoDisplay,来启动一个不显示的Activity,在某些需要过渡的地方很实用。 + +7.Activity、Service、Receiver在没有配置intent-filter的action属性时,exported默认为false,配置了intent-filter的action属性时,exported默认为true。稍有不慎,很可能埋下越权、Intent攻击等安全隐患。 + +8.当从最近使用应用列表中移除某个App时,四大组件只有Service拥有神奇的onTaskRemoved回调,但是并不一定回调,还与stopWithTask属性等有关。 + +9.四大组件都运行在主线程,是因为它们在ActityThread中(或Instrumentation)实例化;它们的生命周期也运行在主线程,是因为通过ActivityThread.H将消息从Binder线程发送到主线程,然后执行回调。 + +10.TaskStackBuilder的出现基本上解决了所有构造Activity回退栈的问题。 + +11.ContentProvider的onCreate()方法先于Application的onCreate()方法执行,晚于Application的attachBaseContext()方法,所以在ContentProvider的onCreate()时候也是有办法弹出一个AlertDialog的(参考5)。 + +12.BroadCastReceiver回调onReceive(Context context,Intent intent)中的context类型各种场景相差很大,静态注册的receiver回调的Context都是ReceiverRestrictedContext,动态注册的receiver有可能是Activity或Application。 + +13.ServiceRecord和BroadcastRecord自身就是Binder。 + +14.同一个provider组件名,可能对应多个provider。 + + + +# Handler、Message相关: + +1.MessageQueue.addIdleHandler可以用来在线程空闲的时候,完成某些操作,比较适合那种需要在将来执行操作,却又不知道需要指定多少延迟时间的操作。 + +2.Message.what尽量不要设置成0,因为postRunnable的方式会生成Message.what为0的消息,如果删除了what为0的Message,也会将runnable方式创建的Message删掉。 + +3.Handler可以设置同步异步(默认是同步的),他们的区别在于异步不会被Barrier阻塞,而同步会被阻塞。 + +4.Handler的消息分发流程是如果Message的callback不为空,通过callback处理,如果Handler的mCallback不为空,通过mCallback来处理,如果前两个都为空,才调用handleMessage来处理。在DroidPlugin中,便是利用ActivityThread.H的这一特性,拦截了部分消息,实现Activity的插件化。 + +5.Java层和Native层Looper、MessageQueue的创建时序,Java层Looper—>Java层MessageQueue—>Native层NativeMessageQueue—>Native层Looper。 + +6.Java层通过Handler去发送消息,而Native层是通过Looper发消息。 + + + +# Window、View相关: + +1.硬件加速在Window级只能开不能关,View级只能关不能开。 + +2.自android2.3删除MidWindow后,PhoneWindow成了Window的唯一实现类。 + +3.WMS管理Window的过程中涉及4个Binder,应用进程只有ViewRootImpl.W一个Binder服务端。 + +4.MotionEvent、KeyEvent、DragEvent等具有相似的链式缓存,类似Message。 + +5.在View的状态保存、恢复过程中,ActionBar中所有View共享一个SparseArray容器,ContentView中所有View共享一个SparseArray容器。当前获取焦点的View会额外存储。 + +6.设置ViewTreeObserver的系列监听方法需要确保View在attachToWindow之后,否则可能因为add监听和remove监听不是作用于同一个对象而引起内存泄漏等。 + + + +# Binder、IPC、进程等相关 + +1.可以通过文件锁来实现进程间互斥(参考:RePlugin),在处理某些只需要单进程执行的任务时很实用。 + +2.Binder设计架构中,只有Binder主线程是由本进程主动创建,Binder普通线程都是由Binder驱动根据IPC通信需求被动创建。 + +3.oneway与非oneway,都需要等待Binder Driver的回应消息(BR_TRANSACTION_COMPLETE),区别在于oneway不用等待BR_REPLY消息。 + +4.mediaserver和servicemanager的主线程都是binder线程,但system_server的主线程不是Binder线程,system_server主线程的玩法跟应用进程一样。 + +5.同一个BpBinder可以注册多个死亡回调,但Kernel只允许注册一次死亡通知。 + +6.应用进程由Zygote进程孵化而来,在它真正成为应用进程之前,系统通过抛异常的方式来清理栈帧,并反射调用ActivityThread的main方法。 + +7.在Binder通信的过程中,数据是从发起通信进程的用户空间直接写到目标进程内核空间,内核空间的数据释放是由用户空间控制的。 + diff --git "a/Android\345\274\200\345\217\221\351\201\207\345\210\260\347\232\204\345\235\221\346\261\207\346\200\273/Android\345\274\200\345\217\221\351\201\207\345\210\260\347\232\204\345\235\221.md" "b/Android\345\274\200\345\217\221\351\201\207\345\210\260\347\232\204\345\235\221\346\261\207\346\200\273/Android\345\274\200\345\217\221\351\201\207\345\210\260\347\232\204\345\235\221.md" new file mode 100644 index 0000000..e69de29 diff --git "a/interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/BinaryTreeDemo.java" "b/interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/BinaryTreeDemo.java" new file mode 100644 index 0000000..1e5a55d --- /dev/null +++ "b/interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/BinaryTreeDemo.java" @@ -0,0 +1,41 @@ + + +public class BinaryTreeDemo { + + public static void main(String[] args){ + + } + + public boolean specialPath(Node *pRoot,Node *pNode,vector &v){ + if(pRoot==NULL){ + return false; + } + v.push_back(pRoot->m_value); + boolean found=false; + if(pRoot==pNode){//DZȽָףڵֵпظ + for(int i=0;im_pLeft){ + found=specialPath(pRoot->m_pLeft,pNode,v); + } + + //һҵڵ㣬ͲҪٱ + if(!found && pRoot->m_pRight){ + found=specialPath(pRoot->m_pRight,pNode,v); + } + if(!found){ + v.pop_back(); + } + return found; + } + + class Node{ + Node m_pLeft; + Node m_pRight; + int m_value; + } +} \ No newline at end of file diff --git "a/interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/BubbleSortDemo.java" "b/interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/BubbleSortDemo.java" new file mode 100644 index 0000000..edf882d --- /dev/null +++ "b/interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/BubbleSortDemo.java" @@ -0,0 +1,37 @@ + +/** + * 冒泡排序demo + */ +public class BubbleSortDemo{ + + /** + * 冒泡排序方式1 + */ + public void bubbleSort(int[] score){ + for(int i =0;i < score.length - 1;i++) { + for(int j = 0;j < score.length - 1-i;j++) { // j开始等于0 + if(score[j] < score[j+1]) { + int temp = score[j]; + score[j] = score[j+1]; + score[j+1] = temp; + } + } + } + } + + /** + * 冒泡排序方式2 + * 倒着遍历 + */ + public void bubbleSort2(int[] score){ + for(int i =0;i < score.length - 1;i++){ + for(int j = (score.length - 2);j >= 0;j--){ + if(score[j] < score[j+1]){ + int temp = score[j]; + score[j] = score[j+1]; + score[j+1] = temp; + } + } + } + } +} \ No newline at end of file diff --git "a/interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/HeapSort2Demo.java" "b/interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/HeapSort2Demo.java" new file mode 100644 index 0000000..334efbf --- /dev/null +++ "b/interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/HeapSort2Demo.java" @@ -0,0 +1,89 @@ + +/** + * demo + * ʹöԭȥ + * + * һűȫĶпܵڵײ㣬ײϵԪش롣 + Ϊȫ + * + * ѵ: + ҳԪΪԪڸϣ + ҲһѣôڵӦôкᡣ + */ +public class HeapSort2Demo{ + + public static void main(String[] args) { + int a[] = { 51, 46, 20, 18, 65, 97, 82, 30, 77, 50 }; + heapSort(a); + System.out.println(Arrays.toString(a)); + } + + /** + * + * + * @param ts + */ + public static > void heapSort(T[] ts) { + + // ͨǣʼһѡ + for (int length = ts.length, i = length / 2 - 1; i >= 0; i--) + percDown(ts, i, length); + + // Ծжʵ + for (int len = ts.length - 1; len >= 0; len--) { + // Ԫ[0]ɾŵββԪطŵԪλ + swap(ts, len); + // ԪλԪ + percDown(ts, 0, len); + } + } + + /** + * ҳԪ + * @param ts + * @param index + * @param length + */ + private static > void percDown(T[] ts, int i, int length) { + + T temp = ts[i];// ԪλԪ + + for (int child = leftChild(i); child < length; i = child, child = leftChild(i)) { + + // жҶ&&Ҷ> + if (child + 1 != length && ts[child + 1].compareTo(ts[child]) > 0) { + child++; + } + // ӸȽ + if (temp.compareTo(ts[child]) < 0){ + ts[i] = ts[child]; + } + else { + break; + } + } + + ts[i] = temp;// ŵȷλ + } + + /** + * β׻ + * @param ts + * @param index + */ + private static > void swap(T[] ts, int index) { + T temp = ts[index]; + ts[index] = ts[0]; + ts[0] = temp; + } + + /** + * λ + * @param i + * @return + */ + private static int leftChild(int i) { + return i * 2 + 1; + } + +} \ No newline at end of file diff --git "a/interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/HeapSortDemo.java" "b/interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/HeapSortDemo.java" new file mode 100644 index 0000000..96d7095 --- /dev/null +++ "b/interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/HeapSortDemo.java" @@ -0,0 +1,49 @@ + +/** + * demo + */ +public class HeapSortDemo{ + + public static void main(String[] args) { + int a[] = { 51, 46, 20, 18, 65, 97, 82, 30, 77, 50 }; + heapSort(a); + System.out.println(Arrays.toString(a)); + } + + /** + * + */ + public static void heapSort(int[] a) { + int i; + for (i = a.length / 2 - 1; i >= 0; i--) {// һ󶥶 + adjustHeap(a, i, a.length - 1); + } + for (i = a.length - 1; i >= 0; i--) {// Ѷ¼͵ǰδеһ¼ + int temp = a[0]; + a[0] = a[i]; + a[i] = temp; + adjustHeap(a, 0, i - 1);// aǰi-1¼µΪ󶥶 + } + } + + + /** + * 󶥶 + */ + private static void adjustHeap(int[] a, int i, int len) { + int temp, j; + temp = a[i]; + for (j = 2 * i; j < len; j *= 2) {// عؼֽϴĺӽɸѡ + if (j < len && a[j] < a[j + 1]){ + ++j; // jΪؼнϴ¼± + } + if (temp >= a[j]){ + break; + } + a[i] = a[j]; + i = j; + } + a[i] = temp; + } + +} \ No newline at end of file diff --git "a/interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/QuickSortDemo.java" "b/interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/QuickSortDemo.java" new file mode 100644 index 0000000..21b1b52 --- /dev/null +++ "b/interview/answers/\351\253\230\347\253\257\346\212\200\346\234\257\351\235\242\350\257\225\351\242\230\345\217\202\350\200\203\347\255\224\346\241\210\345\222\214\347\244\272\344\276\213\344\273\243\347\240\201/code/QuickSortDemo.java" @@ -0,0 +1,44 @@ + +/** + * demo + */ +public class QuickSortDemo{ + + //mainн鴫򷽷д,֮ӡµ + public static void main(String[] stra){ + int[] a={7,10,3,5,4,6,2,8,1,9}; + quickSort(a,1,10); + for (int i=0;i 很多题目都是靠理解的东西,这里仅提供一个参考,具体的要结合自己项目去回答是最好的,如有差错,欢迎大家提issues。想要联系我本人,可以在我github资料上面找到联系方式。 + +#一、图片 + +### 图片库的对比 + +图片库名称|实现原理|优点|缺点 +-|-|-|- +Fresco||1.最大的优势便在于5.0以下(最低2.3) bitmap的加载,在5.0以下系统,Fresco将图片放到一个特别的内存区域(Ashmem),而且图片不显示时,占用的内存会自动被释放,这会使APP更加流畅,减少因图片内存占用而引发的OOM。5.0以后的系统默认存储在Ashmem区了2.支持加载Git动态图和Webp格式的图片3.图片的渐进式呈现,图片先呈现大致的轮廓,然后随着图片下载的继续,逐渐成仙清晰的图片,这对于慢网络对说,用户体验更好。|框架体积比较大,3M左右,会增加APK的大小 +Glide||1.图片默认格式为RGB565,而不是ARGB888,内存开销更小2.图片缓存的尺寸是和ImageView一样的,这使得图片加载更快3.支持加载Git动态图4.支持配置网络请求5.Glide的with()方法可以接收activity和fragment,图片的加载会和Activity和Fragment的生命周期保持一致|Glide 显示动画会消耗很多内存 +Picasso||1.图片质量高,但加载速度一般2.Picasso体积比起Glide小|只缓存一个全尺寸的图片 + +具体的可以参考这篇博客[Android的Glide库加载图片的用法及其与Picasso的对比](http://www.jb51.net/article/83152.htm),虽然有点老了,新版本的api有许多变动,但是还是有参考价值的。(**以后有时间我把最新的Glide 4.+ 和 Picasso最新版 Fresco 做一个对比,写一篇博客介绍一下**) + +### 图片库的源码分析 + +这个网上有很多博客,自己可以去看看,内容太多,不方便在这里写出来了。 + +### 自己去实现图片库,怎么做? + +这里介绍一下思路,详细的可以看我给出的一个示例sample,自己手写的一个类似于Picasso的图片框架 + +**需要注意的几点:** + +* 1.首先要做好缓存,这是必备的:可以使用三级缓存,Android提供了LruCache:硬盘缓存用DiskLruCache,内存缓存用LRUCache。 +* 2.图片加载需要压缩,可以考虑BitmapFactory做压缩 +* 3.图片加载的来源,是从文件,还是网络 +* 4.图片的异步加载和同步加载 +* +* 知识点内存缓存 + +* 图片下载时请求转发 + + +#四、算法 + +### 排序算法有哪些? + +常用的10大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序。 + +### 最快的排序算法是哪个? +### 手写一个冒泡排序 + +见代码: + +### 手写快速排序代码 + +见代码: + +### 快速排序的过程、时间复杂度、空间复杂度 +### 手写堆排序 + +见代码: + +### 堆排序过程、时间复杂度及空间复杂度 +### 写出你所知道的排序算法及时空复杂度,稳定性 + +一张图清楚地说明这些算法之间的对比: + +![](https://github.com/AweiLoveAndroid/CommonDevKnowledge/blob/master/pic/Sorting-algorithm.png?raw=true) + + +相关术语: +稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面; +不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; +内排序(In-place):所有排序操作都在内存中完成; +外排序(Out-place):由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行; +时间复杂度: 一个算法执行所耗费的时间。 +空间复杂度:运行完一个程序所需内存的大小 + +具体讲解可以参考博客:[https://www.cnblogs.com/onepixel/articles/7674659.html](https://www.cnblogs.com/onepixel/articles/7674659.html) + +### 二叉树给出根节点和目标节点,找出从根节点到目标节点的路径 +### 给阿里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个苹果,一天只能吃一个、两个、或者三个,问多少天可以吃完? \ No newline at end of file diff --git a/pic/Sorting-algorithm.png b/pic/Sorting-algorithm.png new file mode 100644 index 0000000000000000000000000000000000000000..e1a8715d25424768d9d7ac5c1d4b7c7ee8c07614 GIT binary patch literal 42584 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

Z2Myv5mCr8 z-Y#Og@s-)fefZ)*gT3KihL;I}%1q}$(+Vi}0`WRha$-5lL5hfdc8RNKijFr8YWFoi z-$XA<3P^yxdOCe4J`9z+*LOGWZfIRA*Ys?QT}IwleL-hjuGs zBTAJj;j;#Y3V2vom>#J78qQJdi9)5x1ts}xFayX^tk@FakE9Q03%XJhZkkCM_(P7i zc#-_O91Uix&iG;trN(4_HT`hkuPxi4WsH#OAgB7|n1c&-*WsxbCgRc_N$z!{zLR}) z%hTvpr|x&_!IYREhtay%-~n2%Zr_D}>ZmC*d0{FrKUc!z?|z>phI&-)i|))f{1WL~ zzV;C?!0ogj+*O-#xxgUKnxjMs;ngfr_rt$ z7un|C^*6}L2&fH;HVGzuYh3#J+?0Pr>CQq0D{i&NGko#^S!+d-B0f}#BJ?ul`bG|Q z$+fB1m(|A*7VX!ib9X|!-{YXfZ&86K_0Xt|mPFz-#fv_86wgTs|0XPHxL3I4L>jpi zwy~Cg!Oo~%;DQygWz5;!-*=8=S>BZiCD_Bs;zKx;f(f?WEh@kybZY7v@#}KnnmQUM z3m2Y{*icBf@nBvKuQ#>JIYmUM!jGMB16RR?vzI0Hc>;^F4rs79)(m}hPi35SFL4XN zQW4^csR4O;48_U2BtTqtruPTpRe9E*qxk>XKRXFK^wT8UDNPCYz jm3@?fM*1W6!9Wc*uU|N(g1H0*0>0}S`d2H}?e6^xYXWF@ literal 0 HcmV?d00001