数据结构,我们被问到的数据结构

2020-03-02 10:48 来源:未知

作为一个非CS专业的应届生,在面试的时候经常会被问到关于数据结构中的概念以及算法实现。既然要成为一名程序员,那么掌握数据结构也是无可厚非的,毕竟有着很多的应用与实现。所以自己就整理了一些关于数据结构应该掌握的概念和算法,以及面试常问的问题(实现语言用的Java),有些算法可能手写不出,但思路一定要会,自己也是菜鸟一枚,也在学习。

1、责任链模式

  • 掌握数据结构的基本概念、基本原理和基本方法。
  • 掌握数据的逻辑结构、存储结构及基本操作的实现,能够对算法进行基本的时间复杂度与
    空间复杂度的分析。
  • 能够运用数据结构基本原理和方法进行问题的分析与求解,具备采用 C 或 C 语言设计与实现算法的能力。

      最近抽空整理了"数据结构和算法"的相关文章。在整理过程中,对于每种数据结构和算法分别给出"C"、"C "和"Java"这三种语言的实现;实现语言虽不同,但原理如出一辙。因此,读者在了解和学习的过程中,择其一即可!

美高梅网投平台 1

2、Bulid模式

线性表

下面是整理数据数据和算法的目录表,对于每一种按照C/C /Java进行了划分,方便查阅。若文章有错误或纰漏,请不吝指正。谢谢!

线性表

线性表的相关概念,对于其中的链表,栈,队列,后面展开介绍。

线性表 及Java实现 顺序表、链表、栈、队列

3、Retrofit源码

线性表的定义和基本操作

 

栈和队

1.栈的创建2.队列的创建3.两个栈实现一个队列4.两个队列实现一个栈5.设计含最小函数min()的栈,要求min、push、pop、的时间复杂度都是O6.判断栈的push和pop序列是否一致

栈和队列的面试题Java实现

(1)使用责任链模式实现

线性表的实现

  • 顺序存储
  • 链式存储

数据结构和算法目录表

链表

1、单链表的创建和遍历2、求单链表中节点的个数3、查找单链表中的倒数第k个结点(剑指offer,题15)4、查找单链表中的中间结点5、合并两个有序的单链表,合并之后的链表依然有序(剑指offer,题17)6、单链表的反转(剑指offer,题16)7、从尾到头打印单链表(剑指offer,题5)8、判断单链表是否有环9、取出有环链表中,环的长度10、单链表中,取出环的起始点(剑指offer,题56)。本题需利用上面的第8题和第9题。11、判断两个单链表相交的第一个交点(剑指offer,题37)

链表面试题Java实现

上个文章中对链表反转的递归方法没给出,这篇有:Java反转单链表实战

(2)Map使用

线性表的应用

 

排序

1.冒泡排序2.插入排序3.选择排序4.希尔排序5.快速排序6.归并排序7.堆排序

排序算法的比较与java实现

4、RecycleView源码

栈、队列和数组

C

1.二叉查找树二叉查找树之 Java的实现2.树的深度遍历与广度遍历树的深度优先遍历和广度优先遍历的原理和java实现代码3.平衡树AVL树之 Java的实现4.红黑树红黑树原理解析以及Java实现5.哈夫曼树哈夫曼树之 Java详解6.并查集数据结构--并查集的原理及实现7.B树系列 B-树,B 树,B*树

5、Netty框架

栈和队列的基本概念

C

1.图的基础概念图的理论基础2.深度遍历与广度遍历图的遍历之 深度优先搜索和广度优先搜索3.单源最短路径Dijkstra算法之 Java详解4.多源最短路径Floyd算法之 Java详解5.最小生成树Prim算法之 Java详解Kruskal算法之 Java详解6.拓扑排序拓扑排序之 Java详解

6、Thread和Runnable的区别

栈和队列的顺序存储结构

Java

散列查找

1.散列表的概念散列表2.散列表的一些算法应用从头到尾解析Hash表算法

散列表可以和Java中集合HashMap等对照学习。

Runnable相当于任务,Thread相当于执行任务的过程。

栈和队列的链式存储结构

线性结构

推荐书籍:《大话数据结构》

美高梅网投平台 2

7、线程池ExecutorService,锁机制

栈和队列的应用

1. 数组、单链表和双链表

《剑指Offer》

美高梅网投平台 3【剑指Offer学习】

8、Android性能分析工具Systrace和TraceView的使用

特殊矩阵的压缩存储

2. Linux内核中双向链表的经典实现

推荐课程学习:数据结构,是浙大的两位老师讲的,很好,在中国大学MOOC上。

美高梅网投平台 4

9、HTTP通信

树与二叉树

 数组、单链表和双链表

后续有新的内容会持续更新.......

10、开发是使用什么工具,怎样调试程序,和解决bug的。自己把日常的做法讲了一遍。包括各种断点的使用方法。内存泄漏的检测方法。内存抖动如果查找到原因和如何使用TraceView来进行性能调优的。

树的基本概念

 数组、单链表和双链表

11、掌握自定义LayoutManager

二叉树

  • 二叉树的定义及其主要特征
  • 二叉树的顺序存储结构和链式存储结构
  • 二叉树的遍历
  • 线索二叉树的基本概念和构造

 栈

12、长连接使用Alarm Manager定时30秒唤醒一次,使用wake lock锁发送心跳,发送完毕释放锁。

树、森林

  • 树的存储结构
  • 森林与二叉树的转换
  • 树和森林的遍历

 栈

13、AIDL的使用

树与二叉树的应用

  • 二叉排序树
  • 平衡二叉树
  • 哈夫曼(Huffman)树和哈夫曼编码

 栈

14、startActivity的原理

 队列

15、启动一个App的原理

图的基本概念

 队列

16、App反编译加壳

图的存储及基本操作

  • 邻接矩阵法
  • 邻接表法
  • 邻接多重表、十字链表

 队列

17、UTF-8编码

图的遍历

  • 深度优先搜索
  • 广度优先搜索

树形结构 

18、View的事件传递机制

图的基本应用

  • 最小(代价)生成树
  • 最短路径
  • 拓扑排序
  • 关键路径

 二叉查找树

Java基础知识点

基本类型和引用类型是什么?每种基本类型都占多少位多少字节?String是基本类型还是引用类型?

Java什么时候是值传递什么时候是引用传递?

String相关的。String常量池,StringBuffer,StringBuilder,运算符“ ”与“ =”重载。String不可变的理解。String的intern方法不同版本的实现原理的区别。

什么是自动拆装包?

Socket传输粘包和拆包,滑动窗口

Java的作用域修饰词有哪些?他们的作用是什么?(不要忘记default,default可以理解成包级别的作用域修饰符)

Java的容器框架结构。他们对应的数据结构都是什么?他们有什么优缺点?哪些是RandomAccess的(这个和遍历的时候是使用迭代器的方式还是i的方式有很大关系)。(有时间最好把HashMap,ArrayList,LinkedList,HashTable,HashSet,搞安卓的同学最好把LinkedHashMap的源码也看了,因为这个和我们常用的一个内存缓存LruCache有很大关系。)

Java容器相关的辅助类Arrays和Collections了解一下。

Java虚拟机的内存模型。堆,方法区,方法栈,本地方法栈,程序计数器都是什么?这些不同虚拟机的具体实现是不同的,我们经常讨论的是HotSpot中的实现。堆的什么新生代老生代?Eden?Survivor的Form和To?永久代。

Java的GC机制?内存回收策略有哪些?HotSpot中具体策略是什么?两次回收是怎么回事(和finilize有关)?如果有时间最好再去了解哪些是GC Root?

final,finally和finalize都是干什么的?带有finally又有return的方法中,finally中的代码是什么时候执行的,finally中改变了return的值,什么情况下会起作用什么情况下不会起作用?

Java 4种引用,强软弱虚引用都是什么?

Java怎样开启一个线程。线程池是干什么的?有哪些常用的线程池?优缺点是什么?

Java中同步的方式有哪些?类锁和对象锁。共享锁和排斥锁。wait,notify,notifyAll。await和signal,signalAll。wait是在if中使用还是循环中使用?

volidate关键字的作用?(提供可见性和顺序性,自己去找相关文章理解,不要忘记顺序性!!)

面向对象的三大特征。Java多态的实现原理?动态绑定的理解?

内部类,静态内部类,匿名内部类,局部内部类。.this和.new。

Java Object中的基本方法有哪些?

Java clone的使用。

Java hashCode和equal方法。

equal方法和“==”

Java的Class对象。

Java反射机制

Java的静态代理和动态代理

Java注解相关的。(这个其实你自己不提一般不会有面试官问。但现在很多框架都是用的注解,所以最后也要了解一下比较好。)注解的生存期。注解的作用有哪些?(如果你用过ButterKnife这种注解框架,那么最好知道它是什么时候处理注解的,怎样处理的具体代码,有兴趣和时间可以自己研究。)

Java泛型。编译期擦除技术。擦除引发的问题。

Java创建一个线程安全的单例。或者其他比较常见的设计模式。(这个一般他会问你你知道什么,然后让你写什么,或者说这个模式用来解决什么问题。)

Java枚举的理解。

Java操作文件的基本API,RandomAccessFile。NIO。

Java访问网络的基本API。Socket,DatagramSocket,URLConnection。

Java异常有几种?什么是运行时异常,有什么特点?

查找

 二叉查找树

Android基础知识

Activity的生命周期。启动模式。

Service的生命周期,和两种启动方式。

Fragemnt的生命周期和使用场景。(使用场景结合自己用过的讲就好了,不过一般有:实现手机平板适配,Fragment FragmentAdapter ViewPager实现分页滑动效果,实现快速的页面切换,和封装相同的UI逻辑提高代码重用性)Fragment要注意的问题。(主要Fragment嵌套出现的问题)

BoardCastReciever的两种注册方法。

ContentProvider的基本使用方法和作用。ContentValue的使用方法,他和HashMap的区别是什么?

SharedPreference三种获得方法和区别,commit和apply的区别。

SQLite数据库的基本操作API(最后也要会写SQL语句,不过之后实际应用的时候都用封装好的CRUD方法,不过有的时候面试官会考。尤其注意创建表,数据库升级的时候更新升级表的SQL语句的写法,这个是要我们写原生SQL语句的,不过之后工作中使用一些数据库的框架,这些也不用了。不过应付面试,注意准备一下吧。)

Android基本网络库OkHttp的使用方法和优缺点。(优缺点很重要)

Android执行异步有哪些方法?线程间通讯的方式?

AnycTask的优缺点?串行or并行?内部线程池是怎样的?(有时间的话可以看看AsyncTask的源码,还是挺经典的,可以学习到不少东西的。不同版本,串行和并行有变化,最新的是既可以并行也可以串行。)

常用的布局有哪些?

View的绘制流程?

View,SurfaceView,GLSurfaceView有什么区别?

ListView的优化。(这个问题我真是不明白为什么现在还在问。不是都有RecyclerView了吗?不过既然经常问那就准备一下,过不项目中已经完全用RecyclerView代替了。)

RecyclerView与ListView的区别。RecyclerView的优缺点。(这个如果你主动提到了RecyclerView,面试官很有可能跟进这样问。再次强调:尤其注意缺点,这个是我们不太容易注意的。)

WebView的基本使用方法。WebViewClient和WebChromeClient。

Android和H5通信。(基本上就是JS和Android原生互调)

Intent的作用。(PenddingIntent不知道有没有必要了解,一般没人问吧。自己看着办吧。)

Android的屏幕适配方法有哪些?(延伸的比如多语言,RTL布局。不过这两个也基本没有人问。)

XML加载的几种方式,各自的原理。都有什么优缺点?

Android中动画的分类,各自的优缺点。(基本上讲了帧动画,Tween动画,属性动画就OK了,至于Transition Framework可讲可不讲。)

Android中图片加载和缓存怎么做?(一般原生的话加载使用BitmapFactory,缓存使用LruCache就可以了。LruCache的原理再讲讲基本差不多了。如果你使用过这方面的第三方库,自己翻过源码的话再讲,没有的话千万不要讲。因为你只要提了第三方库,面试官紧跟着的就是为什么使用这个库,这个库的优缺点是什么?他的原理是什么?所以如果你看过源码,大胆的讲,让面试官知道你知识的深度。)

JSON相关的。(这个基本上问问你们网络传输用什么格式,然后你说用Json,然后就是怎么解析呀巴拉巴拉巴拉……)

Android中方法数65535问题的原因和解决办法。

Android中的消息传递机制。(Message,Handler,MessageQueue,Looper那个玩意)

有哪些容易造成内存泄漏的原因?

MVC,MVP。(MVVM一般不会问,以及相关的DataBinding呀随便了解一下就OK,不要把重点放在这个上面)

什么是ANR?什么原因?怎么解决?

什么是Force close?……

什么是OOM?……

下面的实习生一般并不会遇到:

Android的Touch事件分发过程(这个直接找网上的文章看看就好了,多的不得了)

Android应用从Launcher的启动过程

Android中进程保活的方法

Android中的IPC Binder是怎么回事?出于什么考虑?

Android中的Zygote是什么鬼?出于什么考虑?

Android中的DVM和JVM有什么区别?又加入的Android Runtime是出于什么考虑?有什么优势?

Android中各个版本的功能特性?

Android中如何检测内存泄漏?

进行过哪些性能优化(这个就要据自己实际的例子)

AIDL的使用。

NDK开发。(这个我也不熟……囧!)

Android中用过哪些第三方库?他们的工作原理是什么?优缺点?(这些要看个人了。自己没事可以去翻翻自己用的第三方库的源码。可以学习到不少东西。)

Android的插件化技术和热修复技术。(这个好像也不怎么会问,总归不是主流,了解一下就好,一旦说到可以扯扯淡)

Android混淆

Android反编译

计算机网络

其实基本上能问到的也就1和2。其实这里我能记住的已经不多了。

TCP

UDP

OSI 7层模型

TCP/IP 4层模型

Http和一些错误码代表的含义。

还有一个SPDY的协议可以了解一下,Http的增强。(因为OkHttp里用这个协议,到时候扯扯淡说不定能加分。)

线性表

线性表的相关概念,对于其中的链表,栈,队列,后面展开介绍。

线性表 及Java实现 顺序表、链表、栈、队列

栈和队

1.栈的创建

2.队列的创建

3.两个栈实现一个队列

4.两个队列实现一个栈

5.设计含最小函数min()的栈,要求min、push、pop、的时间复杂度都是O(1)

6.判断栈的push和pop序列是否一致

栈和队列的面试题Java实现

链表

1、单链表的创建和遍历

2、求单链表中节点的个数

3、查找单链表中的倒数第k个结点(剑指offer,题15)

4、查找单链表中的中间结点

5、合并两个有序的单链表,合并之后的链表依然有序【出现频率高】(剑指offer,题17)

6、单链表的反转【出现频率最高】(剑指offer,题16)

7、从尾到头打印单链表(剑指offer,题5)

8、判断单链表是否有环

9、取出有环链表中,环的长度

10、单链表中,取出环的起始点(剑指offer,题56)。本题需利用上面的第8题和第9题。

11、判断两个单链表相交的第一个交点(剑指offer,题37)

链表面试题Java实现

上个文章中对链表反转的递归方法没给出,这篇有:Java反转单链表实战

排序

1.冒泡排序

2.插入排序

3.选择排序

4.希尔排序

5.快速排序

6.归并排序

7.堆排序

排序算法的比较与java实现

1.二叉查找树

二叉查找树(三)之 Java的实现

2.树的深度遍历与广度遍历

树的深度优先遍历和广度优先遍历的原理和java实现代码

3.平衡树

AVL树(三)之 Java的实现

4.红黑树

红黑树原理解析以及Java实现

5.哈夫曼树

哈夫曼树(三)之 Java详解

6.并查集

数据结构--并查集的原理及实现

7.B树系列

B-树,B 树,B*树

1.图的基础概念

图的理论基础

2.深度遍历与广度遍历

图的遍历之 深度优先搜索和广度优先搜索

3.单源最短路径

Dijkstra算法(三)之 Java详解

4.多源最短路径

Floyd算法(三)之 Java详解

5.最小生成树

Prim算法(三)之 Java详解

Kruskal算法(三)之 Java详解

6.拓扑排序

拓扑排序(三)之 Java详解

散列查找

1.散列表的概念

散列表

2.散列表的一些算法应用

从头到尾解析Hash表算法

散列表可以和Java中集合HashMap等对照学习。

查找的基本概念

 二叉查找树

顺序查找法

 AVL树

分块查找法

 AVL树

折半查找法

 AVL树

B 树及其基本操作、B 树的基本概念

 伸展树

散列(Hash)表

 伸展树

字符串模式匹配

 伸展树

查找算法的分析及应用

1. 红黑树(一)之 原理和算法详细介绍

排序

2. 红黑树(二)之 C语言的实现

排序的基本概念

3. 红黑树(三)之 Linux内核中红黑树的经典实现

插入排序

  • 直接插入排序
  • 折半插入排序

4. 红黑树(六)之 参考资料

气泡排序(bubble sort)

1. 红黑树(一)之 原理和算法详细介绍

简单选择排序

2. 红黑树(四)之 C 的实现 

希尔排序(shell sort)

3. 红黑树(六)之 参考资料

快速排序

1. 红黑树(一)之 原理和算法详细介绍

堆排序

2. 红黑树(五)之 Java的实现

二路归并排序(merge sort)

3. 红黑树(六)之 参考资料

基数排序

 哈夫曼树

外部排序

哈夫曼树 

各种内部排序算法的比较

 哈夫曼树

排序算法的应用

...

 

 

 二叉堆

 二叉堆

 二叉堆

 左倾堆

 左倾堆

 左倾堆

 美高梅网投平台,斜堆

 斜堆

 斜堆

 二项堆

 二项堆

 二项堆

 斐波那契堆

 斐波那契堆

 斐波那契堆

...

 

 

图的理论基础 

图的理论基础 

图的理论基础 

1. 邻接矩阵无向图

2. 邻接表无向图

3. 邻接矩阵有向图

4. 邻接表有向图

1. 邻接矩阵无向图

2. 邻接表无向图

3. 邻接矩阵有向图

4. 邻接表有向图

1. 邻接矩阵无向图 

2. 邻接表无向图

3. 邻接矩阵有向图

4. 邻接表有向图

深度优先搜索和广度优先搜索

深度优先搜索和广度优先搜索

深度优先搜索和广度优先搜索

拓扑排序

拓扑排序

拓扑排序

Kruskal算法

 

 

...

 

 

排序算法

 冒泡排序

 冒泡排序

 冒泡排序

 快速排序

 快速排序

 快速排序

 直接插入排序

 直接插入排序

 直接插入排序

 希尔排序

 希尔排序

 希尔排序

 选择排序

 选择排序

 选择排序

 堆排序

 堆排序

 堆排序

 归并排序

 归并排序

 归并排序

 桶排序

 桶排序

 桶排序

 基数排序

 基数排序

 基数排序

...

 

 

 

 

 

 

【 转自】

TAG标签:
版权声明:本文由美高梅网投平台发布于新闻中心,转载请注明出处:数据结构,我们被问到的数据结构