关于数据结构和算法主题的问题水平完全取决于你应聘的公司水平。
排列
数组由一组具备相同数据类型的元素组成。它连续存储在内存中,通过使用其索引,您可以找到基础数据。阵列可以是一维的和多维的。一维数组是最简单的数据结构,也是最常用的数据结构。值得注意的是,在Java语言中,多维数组被实现为数组数组。例如,int[10][5]
实际上是一个数组,其'单元格指向十个5元素数组。
算法 | 平均 | 最糟糕的情况 |
---|---|---|
空间 | Θ(n)的 | 上) |
搜索 | Θ(n)的 | 上) |
插入 | Θ(n)的 | 上) |
删除 | Θ(n)的 | 上) |
LinkedList链表
LinkedList就像树一样,与数组不同,由一组节点组成,这些节点一起表示一个序列。每个节点包含数据和指针。节点中的数据可以是任何内容,但指针是对LinkedList中下一项的引用。LinkedList包含头部和尾部。“Head”是LinkedList中的第一个项目,而“Tail”是最后一个项目。它不是一个循环数据结构,因而尾部没有指向头部的指针 - 指针就是这样null
。每种基本方法的运行时复杂度如下:
算法 | 平均 | 最糟糕的情况 |
---|---|---|
空间 | Θ(n)的 | 上) |
搜索 | Θ(n)的 | 上) |
插入 | Θ(1) | O(1) |
删除 | Θ(1) | O(1) |
DoublyLinkedList
DoublyLinkedList基于LinkedList,但每个节点有两个指针,“previous”指针保存对前一个节点的引用,“next”指针保存对下一个节点的引用。它还有一个Head节点,头节点的下一个指针引用该DoublyLinkedList中的第一个节点。最后一个节点的“下一个”引用指向null
,但假如最后一个节点的下一个指针指向第一个节点,则此类DoublyLinkedList称为“Circular DoublyLinkedList”。假如您需要能够在两个方向上遍历存储的元素,则此数据结构非常方便。
算法 | 平均 | 最糟糕的情况 |
---|---|---|
空间 | Θ(n)的 | 上) |
搜索 | Θ(n)的 | 上) |
插入 | Θ(1) | O(1) |
删除 | Θ(1) | O(1) |
堆
null
条目。Queue
PriorityQueue
Binary Tree Wikipedia
Binary Search Tree
Hash Table or Hash Map
Sorting Algorithms
使用最有效的排序算法(以及实现它的正确数据结构)对于任何程序都至关重要,由于数据操作可能是性能最重要的瓶颈之一,也是花费时间的主要目的,确定最佳算法工作,就是要大幅提高体现。算法的效率在其“Big O”中测量(StackOverflow) 得分了。非常好的算法在O(n log n)或者甚至O(log n)时间内执行重要操作,其中少量甚至可以在O(1)时间内执行某些操作(例如,HashTable插入)。但总有一个权衡 - 假如某些算法真的很擅长向数据结构增加新元素,那么在数据访问方面,它一定比其余算法更糟糕。假如你精通数学,你可能会注意到“大O”符号与“限制”有许多类似之处,你会是对的 - 它通过查看它的'函数来衡量一个算法的最佳,最差和平均性能限制。应该注意的是,当我们谈论O(1) - 恒定时间时 - 我们并不是说这个算法在一次操作中执行一个动作,相反,它可以使用相同数量的操作(粗略地)执行此操作,而不考虑它必需考虑的元素数量。值得庆幸的是,已经计算了很多“大O”分数,因而您不必猜测,哪种算法或者数据结构在您的项目中体现更好。“大O”备忘单
Bubble sort
Bubble sort 是最简单的排序算法之一。它只是比较相邻元素,假如相邻元素之前的元素较小 - 它会改变它们的位置。因而,在数据列表上的一次迭代中,保证至少一个元素将处于其正确的位置(最大/最小的一个 - 取决于排序的方向)。这不是一个非常有效的算法,由于高度无序的数组将需要大量的重新排序(高达O(n ^ 2)),但该算法的一个优点是它的空间复杂性 - 只有两个元素同时进行比较没有必要分配更多的内存,而不是那两个占用。
Insertion sort
插入排序是算法的另一个例子,它并不难实现,但效率也不高。为了完成它的工作,它“增长”数据的排序部分,通过将新遇到的元素“插入”数组的已经(内部)排序部分,该部分由先前遇到的元素组成。这意味着在最好的情况下(数据已经排序),它可以确认其作业是在Ω(n)操作中完成的,而假如所有遇到的元素都不符合O(n ^ 2)次操作所需的顺序可能需要。
Merge sort
这是一种“分而治之”的算法,意味着它递归地将给定数组“划分”为较小的部分(最多1个元素),而后对这些部分进行排序,将它们相互组合。这种方法允许合并排序实现非常高的速度,同时加倍所需的空间,当然,但今天的存储空间比几年前更容易取得,所以这种权衡被认为是可接受的。
Quicksort
Quicksort被认为是非常快的。假如实施得当,它可能比其主要竞争对手快很多倍。这个算法也是“分而治之”的家族,它的第一步是选择一个“枢轴”元素(从统计上随机选择,最小化取得最差性能的机会),而后通过比较元素到这个支点,移动它越来越接近它的'最终位置。在此过程中,较大的元素移动到它的右侧,较小的元素移动到左侧。完成此操作后,quicksort会对放置的pivot的每一侧的子数组重复此过程(首先递归执行),直到对数组进行排序。
Dynamic Programming
Greedy Algorithm
String Manipulation
Pathfinding algorithms
Dijkstra算法
A *算法
广度优先搜索
深度优先搜索
告诉所有Android应用程序组件。Android官方
Android应用程序的结构是什么?
什么是Context
?怎样用?MindOrks
什么是AndroidManifest.xml
?Android官方
什么是Application
课?
什么是Activity
?MindOrks
解释Activity
和Fragment
生命周期。(完整的图表GitHub,Activity,Fragment的简化图),Activity生命周期和Fragments生命周期
什么是“发射模式”?MindOrks
什么是Fragment
?MindOrks
a Fragment
和an有Activity
什么区别?解释两者之间的关系。
为什么建议仅使用默认构造函数来创立Fragment
?堆栈溢出
你会如何在两个碎片之间进行通信?Android官方
保留Fragment
什么?AndroidDesignPatterns
什么是View
Android?MindOrks
区别View.GONE
和View.INVISIBLE
?堆栈溢出
你能创立自己设置视图吗?怎样样?MindOrks
什么是ViewGroups以及它们与Views的不同之处?
什么是画布?
什么是SurfaceView
?
相对布局与线性布局。MindOrks
讲述束缚布局MindOrks
你知道什么是视图树吗?你怎样能优化它的深度?
ListView
和之间有什么区别RecyclerView
?
什么是ViewHolder模式?我们为什么要使用它?
什么是SnapHelper
?MindOrks
什么是Dialog
Android?
什么是Toast
Android?
Dialog
和之间有什么区别Dialog Fragment
?
什么是Intent
?堆栈溢出
什么是隐含的Intent
? 堆栈溢出
什么是明确的Intent
?
什么是BroadcastReceiver
?堆栈溢出
什么是LocalBroadcastManager
?开发者Android
一个人的功能是IntentFilter
什么?堆栈溢出
什么是粘性Intent
?AndroidInterview
形容广播和用意如何在您的应用中传递消息?
什么是PendingIntent
?
什么是不同类型的广播?
什么是Serivce
?开发者Android
Service
VS IntentService
。堆栈溢出
什么是JobScheduler
?Vogella
两个不同的Android应用程序如何交互? 开发者Android
能否可以在多个进程中运行Android应用程序?怎样样?
什么是AIDL?枚举通过AIDL创立有界服务的步骤。开发者Android
您可以在Android中使用什么进行后端解决? 开发者Android
什么是ContentProvider
它通常用于什么?开发者Android Developer Android
您将如何在应用程序中执行长时间运行的操作?
为什么要避免在主线程上运行非ui代码?
什么是ANR?如何预防ANR?开发者Android
什么是AsyncTask
? 开发者Android
asynctask有什么问题?
你什么时候使用java线程而不是asynctask?
什么是Loader
?(Depricated)开发者Android
a AsyncTask
和a 的生命周期之间有什么关系Activity
?这会导致什么问题?如何避免这些问题?
解释Looper
,Handler
和HandlerThread
。MindOrks和MindOrks视频
你如何解决Android中的位图,由于它需要太多的内存?开发者Android Developer Android
普通Bitmap
图像和九图像图像有什么区别?
讲述Bitmap
游泳池。MindOrks
如何在Android中播放声音?Vogella
如何在Android应用中保留数据?MindOrks
什么是ORM?它是如何工作的?
如何Activity
在屏幕旋转期间保留状态?堆栈溢出
在Android应用中存储数据的方法有哪些?开发者Android
什么是Spannable
?介质
什么是SpannableString
?
onTrimMemory()
方法是什么?
OutOfMemory如何发生?
onTrimMemory()
方法是什么?开发者Android
OutOfMemory如何发生?Geeksforgeeks
你如何在Android应用程序中发现内存泄漏?MindOrks
如何减少Android应用程序中的电池使用量?MindOrks
什么是Doze?App Standby怎样样?开发者Android
什么是overdraw
?开发者Android
什么是NDK,为什么它有用?MindOrks
什么是renderscript?MindOrks
什么是Dalvik虚拟机?
JVM,DVM和ART有什么区别?
Dalvik和ART之间有什么区别?
什么是DEX?
你能手动调用垃圾收集器吗?
什么是亚行?
什么是DDMS,你能用它做什么?
什么是StrictMode?MindOrks
什么是Lint?它是干什么用的?
为什么Bundle类用于数据传递,为什么我们不能使用简单的Map数据结构
你如何处理崩溃的应用程序?
解释Android通知系统?
Serializable和Parcelable有什么区别?Android中哪种方法最好?
你开发了小部件吗?形容。MindOrks
什么是AAPT?
定期升级屏幕的最佳方法是什么?
FlatBuffers vs JSON。MindOrks
HashMap
,ArrayMap
和SparseArray
MindOrks
什么是注释?MindOrks,Link,Video
如何在Android GitHub中解决多点触控
如何实现XML命名空间?
什么是支持库?为什么要详情?MartianCraft
什么是Android数据绑定?开发者Android
什么是Android架构组件?MindOrks
如何使用RxJava运算符实现搜索?MindOrks
花了少量功夫编写这篇文章,谢谢大家有耐心看完,由于篇幅起因,没能全放上来,有需要的朋友可以
Android进阶技术交流 (895077617 )免费获取整理版的资料
群里可以与大神一起交流并走出迷茫。新手可进群免费领取学习资料,看看前辈们是如何在编程的世界里傲然前行!有想学习Android Java的,或者是转行,或者是大学生,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入。(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,ViewPager,Bitmap,组件化架构,四大组件等深入学习视频资料以及Android、Java全方面面试资料)