关于objective-c:iOS开发面试只需知道这些技术基本通关数据结构与算法篇附加安全加密

40次阅读

共计 3868 个字符,预计需要花费 10 分钟才能阅读完成。

一、数据结构

汇合构造 线性构造 树形构造 图形构造

1.1、汇合构造 说白了就是一个汇合,就是一个圆圈中有很多个元素,元素与元素之间没有任何关系 这个很简略

1.2、线性构造 说白了就是一个条线上站着很多集体。这条线不肯定是直的。也能够是弯的。也能够是值的 相当于一条线被分成了好几段的样子(施展你的想象力)。线性构造是一对一的关系

1.3、树形构造 说白了 做开发的必定或多或少的晓得 xml 解析 树形构造跟他十分相似。也能够设想成一个金字塔。树形构造是一对多的关系

1.4、图形构造 这个就比较复杂了。他呢 无穷。无际 无向(没有方向)图形机构 你能够了解为多对多 相似于咱们人的交加关系

数据结构的存储

数据结构的存储个别罕用的有两种 顺序存储构造 和 链式存储构造

2.1 顺序存储构造

施展想象力啊。举个列子。数组。1-2-3-4-5-6-7-8-9-10。这个就是一个顺序存储构造,存储是按程序的
举例说明啊。栈,做开发的都相熟。栈是先进后出,后进先出的模式 对不对?

他的你能够这样了解,hello world 在栈外面从栈底到栈顶的逻辑顺次为 h-e-l-l-o-w-o-r-l-d 这就是顺序存储,再比方队列,队列是先进先出的对吧,从头到尾 h-e-l-l-o-w-o-r-l-d 就是这样排对的

2.2 链式存储构造

再次施展想象力 这个略微简单一点 这个图片我始终弄好,回头找美工问问,再贴上 例如 还是一个数组
1-2-3-4-5-6-7-8-9-10 链式存储就不一样了 1(地址)-2(地址)-7(地址)-4(地址)-5(地址)-9(地址)-8(地址)-3(地址)-6(地址)-10(地址)。每个数字前面跟着一个地址 而且存储模式不再是程序,也就说程序乱了,1(地址)
1 前面跟着的这个地址指向的是 2,2 前面的地址指向的是 3,3 前面的地址指向是谁你应该分明了吧。他执行的时候是 1(地址)-2(地址)-3(地址)-4(地址)-5(地址)-6(地址)-7(地址)-8(地址)-9(地址)-10(地址),然而存储的时候就是齐全随机的。明确了?

单向链表 \ 双向链表 \ 循环链表

还是举例子。了解最重要。不要去死记硬背 哪些什么。定义啊。逻辑啊。了解才是最重要滴

3.1 单向链表

A->B->C->D->E->F->G->H. 这就是单向链表 H 是头 A 是尾 像一个只有一个头的火车一样 只能一个头拉着跑

3.2 双向链表

数组和链表区别:

数组:数组元素在内存上间断寄存,能够通过下标查找元素;插入、删除须要挪动大量元素,比拟实用元素很少变动的状况

链表:链表中的元素在内存中不是顺序存储的,查找慢,插入、删除只须要对元素指针从新赋值,效率高

3.3 循环链表

循环链表是与单向链表一样,是一种链式的存储构造,所不同的是,循环链表的最初一个结点的指针是指向该循环链表的第一个结点或者表头结点,从而形成一个环形的链。施展想象力 A->B->C->D->E->F->G->H->A. 绕成一个圈。就像蛇吃本人的这就是循环 不须要去死记硬背哪些理论知识。

二叉树/均衡二叉树

4.1 什么是二叉树

树形构造下, 两个节点以内 都称之为二叉树 不存在大于 2 的节点 分为左子树 右子树 有程序 不能颠倒,懵逼了吧,你必定会想这是什么玩意,什么左子树右子树,都什么跟什么鬼?当初我以普通话再讲一遍,你把二叉树看成一个人,人的头呢就是树的根,左子树就是左手,右子树就是右手,左右手能够都没有(残疾嘛,申明一下,绝非歧视残疾敌人,勿怪,勿怪就是举个例子,I am very sorry), 左右手呢能够有一个,就是不能颠倒。这样讲应该明确了吧

二叉树有五种表现形式

1. 空的树(没有节点)能够了解为什么都没 像空气一样

2. 只有根节点。(了解一个人只有一个头 其余的什么都没,说的有点恐怖)

3. 只有左子树(一个头 一个左手 感觉越来越写不上来了)

4. 只有右子树

5. 左右子树都有

二叉树能够转换成森林 树也能够转换成二叉树。这里就不介绍了 你做我的项目相对用不到数据结构大抵介绍这么多吧。了解为主, 别死记,死记没什么用

二、算法面试题(1)

1、不必两头变量, 用两种办法替换 A 和 B 的值

作为一个开发者,有一个学习的气氛跟一个交换圈子特地重要,这是一个我的 iOS 开发员公众号:编程大鑫,不论你是小白还是大牛都欢送入驻,让咱们一起提高,独特倒退!(群会收费提供一些收费学习书籍材料以及整顿好的几百道面试题和答案文档!)**

2、求最大公约数

3、模仿栈操作

栈是一种数据结构,特点:先进后出 –

练习:应用全局变量模仿栈的操作

#include <stdio.h>

#include <stdbool.h>

#include <assert.h>

// 爱护全局变量:在全局变量前加 static 后,这个全局变量就只能在本文件中应用 static int data[1024];// 栈最多能保留 1024 个数据

static int count = 0;// 目前曾经放了多少个数(相当于栈顶地位)

4、排序算法

抉择排序、冒泡排序、插入排序三种排序算法能够总结为如下:

都将数组分为已排序局部和未排序局部。

1. 抉择排序将已排序局部定义在左端,而后抉择未排序局部的最小元素和未排序局部的第一个元素替换。

2. 冒泡排序将已排序局部定义在右端,在遍历未排序局部的过程执行替换,将最大元素替换到最右端。

3. 插入排序将已排序局部定义在左端,将未排序局部元的第一个元素插入到已排序局部适合的地位。

4.1、抉择排序

【抉择排序】:最值呈现在起始端

第 1 趟:在  n  个数中找到最小 (大) 数与第一个数替换地位

第 2 趟:在剩下  n-1  个数中找到最小 (大) 数与第二个数替换地位

反复这样的操作 … 顺次与第三个、第四个 … 数替换地位

 n-1  趟,最终可实现数据的升序(降序)排列。

4.2、冒泡排序

【冒泡排序】:相邻元素两两比拟,比拟完一趟,最值呈现在开端

第 1 趟:顺次比拟相邻的两个数,一直替换(小数放前,大数放后)一一推动,最值最初呈现在第 个元素地位

第 2 趟:顺次比拟相邻的两个数,一直替换(小数放前,大数放后)一一推动,最值最初呈现在第  n-1  个元素地位

…… ……

第 n-1趟:顺次比拟相邻的两个数,一直替换(小数放前,大数放后)一一推动,最值最初呈现在第 2 个元素地位

5、折半查找(二分查找)

折半查找:优化查找时间(不必遍历全副数据)
折半查找的原理:

1. 数组必须是有序的

2. 必须已知 min 和 max(晓得范畴)

3. 动静计算 mid 的值,取出  mid  对应的值进行比拟

4. 如果 mid 对应的值大于要查找的值,那么 max 要变小为 mid-1

5. 如果 mid 对应的值小于要查找的值,那么 min 要变大为 mid+1

// 已知一个有序数组, 和一个  key, 要求从数组中找到 key  对应的索引地位

三、算法面试题(2)

字符串反转

给定字符串 “hello,world“, 实现将其反转。输入后果:dlrow,olleh

序数组合并

将有序数组 {1,4,6,7,9} 和 {2,3,5,6,8,9,10,11,12} 合并为{1,2,3,4,5,6,6,7,8,9,9,10,11,12}

HASH 算法

哈希表

例:给定值是字母  a,对应 ASCII  码值是 97,数组索引下标为 97。

这里的 ASCII 码,就算是一种哈希函数,存储和查找都通过该函数,无效地进步查找效率。

在一个字符串中找到第一个只呈现一次的字符。如输出 ”abaccdeff“,输入 ’b‘ 字符 (char) 是一个长度为 8 的数据类型,因而总共有 256 种可能。每个字母依据其 ASCII 码值作为数组下标对应数组种的一个数字。数组中存储的是每个字符呈现的次数。

查找两个子视图的独特父视图

思路: 别离记录两个子视图的所有父视图并保留到数组中,而后倒序寻找, 直至找到第一个不一样的父视图。

求无序数组中的中位数

中位数:当数组个数  n  为奇数时,为(n + 1)/2,即是最两头那个数字;当 n 为偶数时,为(n/2 + (n/2 + 1))/2, 即是两头两个数字的平均数。

首先要先去理解一些几种排序算法:iOS 排序算法

思路:

1. 排序算法 + 中位数

首先用冒泡排序、疾速排序、堆排序、希尔排序等排序算法将所给数组排序,而后取出其中位数即可。

2. 利用快排思维

四、数据安全及加密

1、简述 SSL 加密的过程用了哪些加密办法,为何这么作?

SSL 加密的过程之前有些过,此处不再赘述。

SSL 加密,在过程中理论应用了 对称加密 和 非对称加密 的联合。

次要的思考是先应用 非对称加密 进行连贯,这样做是为了防止中间人攻打秘钥被劫持,然而 非对称加密的效率比拟低。所以一旦建设了平安的连贯之后,就能够应用轻量的 对称加密。

2、RSA 非对称加密

对称加密 [算法] 在加密和解密时应用的是同一个秘钥;而 [非对称加密算法] 须要两个 [密钥] 来进行加密和解密,这两个秘钥是[公开密钥](public key,简称公钥)和公有密钥(private key,简称私钥)。

RSA 加密

与对称加密 [算法] 不同,[非对称加密算法]须要两个[密钥]:[公开密钥](publickey)和公有密钥(privatekey)。公开密钥与公有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的公有密钥能力解密;如果用公有密钥对数据进行加密,那么只有用对应的公开密钥能力解密。因为加密和解密应用的是两个不同的[密钥],所以这种算法叫作[非对称加密算法]。

RSA 加密原理

RSA 是罕用的加密模式,其加密原理可用以下的例子进行简要的阐述。

随机取两个质数

以上就是本篇所整顿的,感激观看!

正文完
 0