程序猿之华丽转身:必备技术面试手册
摘自:易搜社区http://bbs.easysoo.cn/?p=398
这份清单,既是一份有助于对这些题目做深入研究的快速指南和参考,也算是计算机科学课程中不能忘记的基础知识总结,因此并不可能全面覆盖所有内容。它也可以作为 gist 在 Github 上公开,人人都可以编辑和补充。
一、数据结构基础
数组
定义
- 按顺序连续存储数据元素,通常索引从0开始
- 以集合论中的元组为基础
- 数组是最古老,最常用的数据结构
知识要点
- 索引最优;不利于查找、插入和删除(除非在数组最末进行)
- 最基础的是线性数组或一维数组
数组长度固定,意味着声明数组时应指明长度
- 动态数组与一维数组类似,但为额外添加的元素预留了空间
如果动态数组已满,则把每一元素复制到更大的数组中
- 类似网格或嵌套数组,二维数组有 x 和 y 索引
时间复杂度
- O(1)索引:一维数组:O(1),动态数组:O(1)
- O(n)查找:一维数组:O(n),动态数组:O(n)
- O(log n)最优查找:一维数组:O(log n),动态数组:O(log n)
- O(n)插入:一维数组:n/a,动态数组:O(n)
链表
定义
- 结点存储数据,并指向下一结点
最基础的结点包含一个数据和一个指针(指向另一结点)
- 链表靠结点中指向下一结点的指针连接成链
要点
- 为优化插入和删除而设计,但不利于索引和查找
- 双向链表包含指向前一结点的指针
- 循环链表是一种终端结点指针域指向头结点的简单链表
- 堆栈通常由链表实现,不过也可以利用数组实现
堆栈是“后进先出”(LIFO)的数据结构
- 由链表实现时,只有头结点处可以进行插入或删除操作
- 同样地,队列也可以通过链表或数组实现
队列是“先进先出”(FIFO)的数据结构
- 由双向链表实现时,只能在头部删除,在末端插入
时间复杂度
- O(n)索引:链表:O(n)
- O(n)查找:链表:O(n)
- Linked Lists: O(n)最优查找:链表:O(n)
- O(1)插入:链表:O(1)
哈希表或哈希图
定义
- 通过键值对进行储存
- 哈希函数接受一个关键字,并返回该关键字唯一对应的输出值
这一过程称为散列(hashing),是输入与输出一一对应的概念
- 哈希函数为该数据返回在内存中唯一的存储地址
要点
- 为查找、插入和删除而设计
- 哈希冲突是指哈希函数对两个不同的数据项产生了相同的输出值
所有的哈希函数都存在这个问题
- 用一个非常大的哈希表,可以有效缓解这一问题
- 哈希表对于关联数组和数据库检索十分重要
时间复杂度
- O(1)索引:哈希表:O(1)
- O(1)查找:哈希表:O(1)
- O(1)插入:哈希表:O(1)
二叉树
定义
- 一种树形的数据结构,每一结点最多有两个子树
- 子结点又分为左子结点和右子结点
要点
- 为优化查找和排序而设计
- 退化树是一种不平衡的树,如果完全只有一边,其本质就是一个链表
- 相比于其他数据结构,二叉树较为容易实现
- 可用于实现二叉查找树
- 由于上述原因,二叉查找树通常被用作一种数据结构,而不是二叉树
- 重复的结点可省略
- 右子树有比双亲结点更大的键值
- 左子树有比双亲结点更小的键值
- 二叉树利用可比较的键值来确定子结点的方向
时间复杂度
- 索引:二叉查找树:O(log n)
- 查找:二叉查找树:O(log n)
- 插入:二叉查找树:O(log n)
- >>>未完,浏览下节 >>>未完,浏览下节
程序猿之华丽转身:必备技术面试手册相关推荐
- 程序猿之华丽转身:必杀之八技
摘自:易搜社区http://bbs.easysoo.cn/?p=101 既然你选择了程序员这一条路,就说明了你接受这工作给你带来的酸甜苦辣,无论如何,勿忘初心. 1.技术只是工具而非解决问题之本 当我 ...
- GitHub 标星 44k!史上最全技术面试手册!
大家好,我是为前端娱乐圈操碎了心的小迷妹,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标. 每天上班必须做的一件事情,就是打开 ...
- GitHub 3W 星,冲击热榜!超实用技术面试手册,看这篇就够了
安妮 发自 凹非寺 量子位 出品 | 公众号 QbitAI 技术人员求职面试,单刷leetcode上的大厂题库可能还不够. 简历怎么写才能吸引HR的眼光,可能会被技术老大问到哪些常见问题,拿到Offe ...
- 面试 | 阿里P7级别程序猿亲身告知,不会面试,还想进大厂?做梦吧
Hi!我是小小,今天是本周的第四篇,在这篇中,将会着重的讲解关于面试的一些内容. 一般来说,将会考察一些以下需要的技术点:看看聪明的你能答出几道来. Java基础知识面试题 Java概述 何为编程? ...
- 值得程序猿收藏的这些顶级技术网站,你都知道几个?
版权声明:本文为 ABC实验室 原创文章,版权所有, 侵权必究! 编者语 今天是信息爆炸的时代,我们每天被各种各样的媒体资讯轰炸着,各种网站.各种APP.各种公众号,信息像雪片一样铺天盖地的向我们扑来 ...
- GitHub 标星 3.2w!史上最全技术面试手册!
点击上方"码农突围",马上关注,每天早上8:50准时推送 真爱,请置顶或星标 本文转自量子位,作者安妮,编辑 GitHubDaily 技术人员求职面试,单刷 LeetCode 上的 ...
- Java程序员必看,java技术面试评语及录用建议
前言 最近一段时间发现经常看到很多人,对Spring源码比较感兴趣,日常开发中,无论你做什么什么项目,大部分都离不开Spring生态的那一套东西,所以很多人对Spring底层源码实现很感兴趣,但是有些 ...
- 给新手程序猿的16个必备小妙招
写在前面: 这个文章核心并不是程序优化的具体技巧,而是拿到一个问题如何思考和利用工具的通用方法.比如即使我们不知道 profiler 这个东西,通过搜索"代码 每一行 时间"也可以 ...
- 程序猿应该了解的密码技术
目录 1. 概述 2. 加密与解密技术 2.1 对称密码 几种典型的对称密码介绍 对称密码的选择 分组密码的模式 2.2 公钥密码 公钥密码算法RSA 其他公钥密码 2.3 混合密码系统 加密过程 3 ...
最新文章
- 希望和等待:目标,欲望和意志
- linux centos7 设置 grub2
- 百度李彦宏携三人赴港二次上市,网站推广之下百度的未来愈加可期
- 深入理解pts,dts,time_base
- 让你了解什么是内存屏障
- JavaScript中对象的构造方法
- 蓝桥杯2015初赛-加法变乘法-枚举
- 微信 网页开发 获取地理位置 高德地图显示
- Office web app server2013详细的安装和部署
- Maven知识点整理
- 配置centos7下的Apache服务
- java带圈数字,小1,小2
- iTerm2使用zmodem协议上传下载文件
- 下载安装php详细教程(在安装配置apache之后)
- R语言基本用法(主要为时间序列分析方面)
- 考研英语近义词与反义词·一
- 零和博弈思维模式:选择即博弈,无法逃脱的思想牢笼
- 王选-“从Dijkstra谈帅才的洞察力”[转]
- linux中使用U盘拷贝
- jenkins svn publisher插件使用手册