xiangzhihong8
著有《React Native移动开发实战》、《Kotlin入门与实战》、《Weex跨平台开发与实战》、《React Native开发进阶》和《Flutter跨平台开发实战》和《Android应用架构实战》
展开
-
京东商品接口加解密算法解析
首先,是请求参数中的json字符串sha265加密,组装成了一个r对象。可以看到,第一层加密很容易,第二层加密有些难度,我们直接分析一下第二层的加密技术。解析一下接口,接口返回值跟没什么特殊说明,首尾加了一个方法名,请求参数中有一个h5st的加密参数就是加密的内容。接着,全局搜索h5st,找到js文件,打开源文件,打上断点,继续鼠标下滑,找到了加密的地方。但是意外的发现是,多次请求的结果,返回的h5st是有一定规律的。打开页面,打开开发者工具,往下滑动鼠标,获取接口地址。,然后打开搜索页面,如下图。原创 2022-11-03 11:31:49 · 562 阅读 · 0 评论 -
什么样的问题应该使用动态规划?
说起动态规划,我不知道你有没有这样的困扰,在掌握了一些基础算法和数据结构之后,碰到一些较为复杂的问题还是无从下手,面试时自然也是胆战心惊。如果我说动态规划是个玄幻的问题其实也不为过。究其原因,我觉得可以归因于这样两点:你对动态规划相关问题的套路和思想还没有完全掌握;你没有系统地总结过究竟有哪些问题可以用动态规划解决。知己知彼,你想把动态规划作为你的面试武器之一,就得足够了解它;而应对面试,总结、归类问题其实是个不错的选择,这在我们刷题的时候其实也能感觉得到。那么,我们就针对以上两点,系统地谈一谈究原创 2022-01-18 10:09:08 · 766 阅读 · 0 评论 -
大厂都爱考算法,那怎么学习算法呢
如果最近你出去面试,不管是大厂还是小的创业公司,最后都会问你几个算法题。看似不怎么实用的算法,成为很多面试者的拦路虎,那对于算法,我们应该怎么面对,又有没有好的方法在短期内提升算法的解题能力呢?对于这个问题,很难给出明确的答复。首先,算法确实很重要,它能将你和普通的程序员区分开来,助你拿到⼤⼚的 Offer。其次,算法更多的好处是隐性的、潜移默化的,会给你带来很多隐形的好处。很多时候,公司在招人的时候,会要求面试者除了经验丰富之外,还要求技术要好,基础扎实,熟练掌握算法和数据结构,这时候算法面试就显得尤为原创 2020-11-13 12:08:25 · 445 阅读 · 0 评论 -
初识动态规划算法
前面,我们对动态规划算法做了一个简单的介绍:算法之动态规划算法简介。下面,我们就动态规划算法做一下具体的介绍。硬币找零问题虽然说硬币找零在现实生活中越来越少,但它仍然活跃在编程领域和面试问题当中,主要还是因为它极具代表性,也能多方面考察一个开发人员或面试者解决问题的能力。首先,我们来看看这个算法问题的具体描述: 给定 n 种不同面值的硬币,分别记为 c[0], c[1], c[2], … c[n],同时还有一个总金额 k,编写一个函数计算出最少需要几枚硬币凑出这个金额 k?同时,每种硬币的个数不限,如原创 2020-10-16 16:48:34 · 1266 阅读 · 0 评论 -
图算法之bfs、dfs、prim、Dijkstra
# 概述 在图算法中经常要执行遍历每个顶点和每条边的操作,即图搜索。许多图算法都以图搜索为基础,如2-着色问题、连通性计算基于深度优先搜寻(depth-first search, DFS),而无权最短路径则基于广度优先搜索(breadth-first search, BFS)。基于搜索的算法还包括计算最小生成树的Prim算法以及计算最短路径的Dijkstra算法。图实现算法在现实的算法结构中占据重原创 2017-04-07 18:05:25 · 3798 阅读 · 0 评论 -
红黑树深入剖析及Java实现
概述红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。二叉查找树(BST)二叉查找树(Bina原创 2017-02-14 22:40:09 · 4901 阅读 · 6 评论 -
数据结构之二叉树
树定义:满足以下条件的就是树: 1. 有且仅有一个特定的称为根Root的结点。 2. 当n>1时,其余结点可分为m(m>0)个互不相交的有限集,其中每个集合本身又是一个棵树,并称为根的子树。树是数据结构中一种常见的数据结构,比如我们排序中常见的二叉树,红黑树等。最常见的是树形表示法和广义表表示法。树的结构示意图如下所示: 二叉树二叉树是一种特殊的顺序树,它有左右两个孩子子树,即左右孩子顺序原创 2017-02-14 21:06:05 · 2847 阅读 · 0 评论 -
数据结构之图
基本概念图(Graph):图(Graph)是一种比线性表和树更为复杂的数据结构。 图结构:是研究数据元素之间的多对多的关系。在这种结构中,任意两个元素之间可能存在关系。即结点之间的关系可以是任意的,图中任意元素之间都可能相关。 图G由两个集合V(顶点Vertex)和E(边Edge)组成,定义为G=(V,E) 线性结构:是研究数据元素之间的一对一关系。在这种结构中,除第一个和最后一个元素外,任何原创 2016-12-22 22:07:09 · 4226 阅读 · 0 评论 -
一起聊聊什么是P问题、NP问题、NPC问题
概念P问题:如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。通常NOI和NOIP不属于P类问题,我们常见到的一些信息奥赛的题目都是P问题。 NP问题:可以在多项式的时间里猜出一个解的问题。NP问题不是非P类问题。NP问题是指可以在多项式的时间里验证一个解的问题。之所以要定义NP问题,是因为通常只有NP问题才可能找到多项式的算法。 所有的P类问题都是NP问题。也就原创 2016-12-22 18:13:39 · 11203 阅读 · 2 评论 -
数据结构之串
基本概念串(string)是由零个或多个字符组成的有限序列,又名叫字符串。形如s="a,b,c.."。ai(1 ≤ i ≤ n)可以是字母、数字或其他字符,i就是该字符在串中位置。串中的字符数目n称为串的长度,定义中谈到“有限”是指长度n是一个有限的数值。两个字符的串称为空串(null string),它的长度为零,可以直接用双引号“”表示。所谓序列,说明串的相邻字符之间具有前驱后继的关系。空格串原创 2016-12-10 18:43:13 · 2529 阅读 · 0 评论 -
数据结构之线性表
基本概念线性表(List):由零个或多个数据元素组成的有限序列。特征:1.线性表是一个序列。2.0个元素构成的线性表是空表。3.线性表中的第一个元素无前驱,最后一个元素无后继,其他元素有且只有一个前驱和后继。4.线性表是有长度的,其长度就是元素个数,且线性表的元素个数是有限的,也就是说,线性表的长度是有限的。线性表抽象数据类型基于线性表的特征,线性表可以做如下操作: InitList(*L);//原创 2016-12-09 10:43:56 · 1242 阅读 · 0 评论 -
数据结构之队列
概述在java5中新增加了java.util.Queue接口,用以支持队列的常见操作。Queue接口与List、Set同一级别,都是继承了Collection接口。Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候原创 2016-12-08 13:41:18 · 1105 阅读 · 0 评论 -
数据结构之哈希函数
概念:哈希(hash),也叫做散列、数据摘要等,是一种常见的数据结构。哈希的表的核心概念分为哈希表和哈希函数。哈希表(hashTable)哈希表之前讲过,有需要的可以参考:点击打开哈希表哈希函数哈希函数就是将某一不定长的对象映射为另一个定长的对象。能够做到这一点的函数有很多,那什么可以作为哈希函数?这里我们首先要明确下什么可以作为哈希函数。如果两个不同的对象经过哈希函数计算后得到相同的哈希值,则这原创 2016-12-07 10:43:43 · 6520 阅读 · 0 评论 -
算法笔记之排序
最近在看《算法笔记》,如果单从算法来说,这本书真正做到了短小精悍,首先以排序入题,那么我们今天也来说说排序。排序将一堆杂乱无章的元素按照某种规则有序排列的过程就叫“排序”.排序是一种非常基础的算法,有着广泛的理论和实践基础。对一个排序算法来说,一般从如下3个方面衡量算法的优劣:时间复杂度:主要是分析关键字的比较次数和记录的移动次数。空间复杂度:分析排序算法中需要多少辅助内存稳定性:若两个记录A和B原创 2016-11-15 20:51:15 · 4476 阅读 · 1 评论 -
Map排序
Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value)。按键排序(sort by key)jdk内置的Java.util包下的TreeMap既可满足此类需求,原理很简单,其重载的构造器之一有一个参数,该参数接受一个比较器,比较器定义比较规则,比较规则就是作用于Tr原创 2016-06-13 22:10:02 · 2210 阅读 · 1 评论 -
【数据结构与算法02】栈与队列
我们知道,在数组中,若知道数据项的下标,便可立即访问该数据项,或者通过顺序搜索数据项,访问到数组中的各个数据项。但是栈和队列不同,它们的访问是受限制的,即在特定时刻只有一个数据项可以被读取或者被删除。众所周知,栈是先进后出,只能访问栈顶的数据,队列是先进先出,只能访问头部数据。这里不再赘述。 栈的主要机制可以用数组来实现,也可以用链表来实现,下面用数组来实现栈的基本操作:p...原创 2016-04-11 22:49:30 · 6899 阅读 · 7 评论 -
数据结构是哈希表(hashTable)
哈希表也称为散列表,是根据关键字值(key value)而直接进行访问的数据结构。也就是说,它通过把关键字值映射到一个位置来访问记录,以加快查找的速度。这个映射函数称为哈希函数(也称为散列函数),映射过程称为哈希化,存放记录的数组叫做散列表。比如我们可以用下面的方法将关键字映射成数组的下标:arrayIndex = hugeNumber % arraySize。 哈希化之原创 2016-06-06 21:34:02 · 5399 阅读 · 1 评论 -
数据结构之数组
一.数组的基本概念数组可以看成是多个相同类型数据组合,对这些数据的统一管理。数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组的元素可以是任何数据类型,包括基本类型和引用类型。C和C++中的数组都可以分配在栈上面,而JAVA中的数组是只能分配在堆上面的,因为JAVA中的数组是引用类型。二.一维数组一维数组的声明方式有2种:格式一:原创 2016-06-06 00:03:23 · 4358 阅读 · 0 评论 -
数据结构之2-3-4树
2-3-4树是一种阶为4的B树。它是一种自平衡的数据结构,可以在O(lgn)的时间内查找、插入和删除,这里的n是树中元素的数目。2-3-4树和红黑树是等价的,也就是每个红黑树都可以转化为一颗2-3-4树,每个选择操作也和2-3-4树中的分裂操作对应。 2-3-4树是这样一种数据结构,满足如下性质: 1) 每个节点每个节点有1、2或3个key,分别称为2-node原创 2016-06-05 23:47:36 · 6410 阅读 · 1 评论 -
算法之插入排序
插入排序算法介绍排序算法是最简单的算法,也是最基本的算法。顾名思义,插入排序就是把当前待排序的元素插入到一个已经排好序的列表里面。 一个非常形象的例子就是右手抓取一张扑克牌,并把它插入左手拿着的排好序的扑克里面。插入排序的最坏运行时间是O(n2), 所以并不是最优的排序算法。特点是简单,不需要额外的存储空间,在元素少的时候工作得好。插入排序算法Java实现Java里面有很多数据类型原创 2016-06-05 19:10:35 · 2181 阅读 · 0 评论 -
算法之冒泡排序
冒泡排序算法需要遍历几次数组。每次遍历都要比较连续相邻的元素,如果某一对相邻元素是降序,则互换它们的值,否则,保持不变。由于较小的值像“气泡”一样逐渐浮想顶部,而较大的值沉向底部,所以叫冒泡排序。冒泡排序的图解是:总结一句话就是:连续比较相邻的元素,降序则呼唤。有n个数,共需要比较n-1趟,第i趟,需要比较n-i次。BubbleSort.Java[java]原创 2016-06-05 13:48:40 · 8164 阅读 · 0 评论 -
数据结构之链表
一、概念(1)数组的线性序是由数组的下标决定的,链表中的顺序是由各对象中的指针所决定的(2)链表结点结构node *prev;node *next;int key;(3)链表结点node *head;node *nil;//哨兵(4)对链表的操作LIST-SEARCH(L, k)LIST-INSERT(L, x)LIST-DELETE(L, x)原创 2016-06-05 13:46:07 · 5118 阅读 · 2 评论 -
KMP算法
KMP为的是解决2字符串匹配问题的算法,检查一个字符串是否为另一个的子串,sub = "abc" , str = "aabcd" ,str里包含了一个sub,KMP算法可以以O(M+N)的复杂度找到子串在str的位置。那代码怎么实现呢:原创 2016-04-07 15:12:17 · 1241 阅读 · 0 评论 -
常用的排序算法和时间复杂度
1. 数据结构部分数据结构中常用的操作的效率表通用数据结构查找 插入 删除遍历 数组O(N)O(1)O(N)—有序数组O(logN)原创 2016-05-31 17:53:42 · 7389 阅读 · 0 评论 -
算法之红黑树
红黑树(一) 原理和算法详细介 1 R-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。红黑树的特性:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里原创 2016-06-05 12:54:48 · 17720 阅读 · 2 评论 -
基本数据结构概念
一、线性结构顺序存储线性表:将元素依次存储在地址连续的存储单元中,物理上相邻;链式存储线性表:将元素按照逻辑顺序链接在依次,不要求地址连续;栈:仅在表的一端进行插入、删除操作的线性表,“后进先出”;队列:仅在表的一端进行插入,另一端进行删除的线性表,“先进先出”栈和队列有时候笔试会针对”FIFO“这些特性出问题,不过一般理解了,就比较简单。原创 2016-05-24 15:11:42 · 2117 阅读 · 1 评论