自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 SkipList及其在redis中的应用

1.SkipList是什么?SkipList其实是针对链表查找效率低的特点的一种改进,结合链表和二分查找,查询时间复杂度为O(logn)的一种数据结构特点:1)链表中结点是有序的2)能够满足类似二分查找的“跳跃式”查找2.SkipList如何实现类“二分查找”?(图片引用自https://time.geekbang.org/column/article/42896)先来看一...

2018-11-17 23:41:03 1498 2

原创 OAuth认证原理与第三方登录

1.背景以下例子引用知乎“OAuth 授权的工作原理是怎样的?足够安全吗?”中李天放的回答假如你在某个网站A上使用微博进行第三方登录,那么你可以想象新浪微博就是你的家。偶尔你会想让一些人(第三方应用)去你的家里帮你做一些事,或取点东西。你可以复制一把钥匙(用户名和密码)给他们,但这里有三个问题: (1)别人拿了钥匙后可以去所有的房间  (2)别人拿到你的钥匙后也许会不小心丢到,甚至

2017-11-29 21:35:48 1459

原创 匈牙利算法

因为“趣味算法系列之--匈牙利算法”这篇文章写得相当精彩,本文许多从中借鉴。Blog链接为:http://blog.csdn.net/dark_scope/article/details/8880547匈牙利算法是一种通过使用增广路径来解决二分图的最大匹配的算法,由匈牙利数学家Edmonds于1965年提出。1.二分图设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(

2017-05-26 20:34:19 662

原创 并查集与欧拉回路

因为“并查集详解”这篇文章写得相当精彩,本文有许多从中借鉴。链接:http://blog.csdn.net/dellaserss/article/details/77244011.并查集并查集采用树形数据结构,用于解决不相交集合的合并和查询问题。我们来看一个例子:假设存在若干个城镇,其中一些城镇有道路直接相连,现在我们可以提出这么一些问题:1)给你两个点(城镇可以看成点)让你判断这

2017-05-26 11:02:43 571

原创 华为OJ之Sudoku-Java

1.题目描述2.基本思路目前想到的是暴力求解。(1)从第一行开始(第一行没找到,则第二行开始找,依此类推)找到第一个值为0的数的坐标(i,j),然后记录该i行中已经出现过的数字,以及j列中已经出现的数字,还有当前坐标所在的小九宫格中已经出现的数字,把1-9中第一个尚未出现的数字填进去,如果这里没有找到一个尚未出现的数字,则返回失败。(2)重复(1)的步骤寻找当前行下一个

2017-03-12 20:03:40 726

原创 华为OJ之称砝码

1.题目描述2.基本思路这道题目需要使用动态规划来做,可以这么来想,要看能否称出某中质量X,在已知能称出质量Y,且如果存在某种重量a的砝码有k个,且X=Y+a*n(03.实现代码import java.util.Scanner;public class Main { public static void main(String[] args)

2017-03-12 16:45:23 366

原创 图之最短路径之弗洛伊德算法

1.基本思想通过Floyd计算图G=(V,E)中各个顶点的最短路径时,需要引入一个矩阵S,矩阵S中的元素a[i][j]表示顶点i(第i个顶点)到顶点j(第j个顶点)的距离。初始时,矩阵S中顶点a[i][j]的距离为顶点i到顶点j的权值;如果i和j不相邻,则a[i][j]=∞。然后,对矩阵S进行更新,如果"a[i][j]的距离" > "a[i][k]+a[k][j]",则更新a[i][j

2017-03-11 16:08:48 833

原创 TCP三次握手和四次挥手

1.建立连接(三次握手)TCP是传输层控制协议,提供可靠服务的连接服务,通过三次握手机制来建立一个可靠的连接。SYN攻击在三次握手过程中,服务器发送SYN_ACK之后,收到客户端ACK之前的TCP连接称为半连接。此时服务器处于SYN_RECV状态。当收到ACK之后,服务器进入ESTABLISHED状态。SYN 攻击就是客户端在短时间内伪造大量不存在的IP地址,向服务器不

2016-10-15 19:09:00 281

原创 http与https的介绍

1.http和https的基本区别2.https的工作原理3.http和https各自的优缺点

2016-10-12 16:43:07 461

原创 JVM内存分区和GC回收算法

1.JVM内存分区2.GC回收算法

2016-10-09 21:47:35 2320

原创 struts2工作流程

首先,看看struts2框架的执行结构图工作流程总结:1.客户端通过Action或JSP页面发出一个HttpServlet请求2.服务器通过web.xml配置,将该请求经过一系列Filter过滤器处理,最终被FilterDispacher接收3.FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个request4.是的就

2016-10-02 21:36:19 246

原创 经典面试题之字符串的全排列

1.题目描述输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,输出abc,acb,bac,bca,cab和cba2.问题分析这个问题我们一开始看起来会比较困难,但是如果仔细分析一下排列的实质,或许很快会有思路。我们来看排列的实质,字符串的abc第一个字符分别与后边的字符(含自己)交换可以得到abc,bac,cba,然后对这每一个字符串从第二个字符分别与后边的

2016-08-31 16:47:59 805

原创 经典面试题之最长滑道(2017爱奇艺内推笔试题)

1.题目描述输入输出:2.思路分析这道题实际上就是要求从最大值到最小值所能经过的最长路径,那么我们可以这么考虑,对于每一个坐标点,它到最小值的必定有一个最长路径len,那么我们只要找出所有坐标点到最小值的最长路径,然后再从中找到最大值即为所求答案。这样,我们的问题就只剩下如何求一个坐标点到最小值的最大长度len,很快我们发现每个坐标点的len必定是其上下左右坐标

2016-08-29 20:08:00 3614

原创 经典面试题之两个链表的第一个公共结点

题目描述:输入两个链表,找出它们的第一个公共结点。我们先看下边这个图:对于单向链表而言,从两个单链表第一个公共结点开始,之后它们的所有结点都是重合的,不可能再出现分叉。对于题目,我们最简单的想法就是在第一个链表上顺序遍历每个结点,每遍历到一个结点时,在第二个链表上顺序遍历每个结点,直到找到公共顶点,但是这样的时间复杂度为O(mn)。实际上,我们上边单链表的特点可以知道,可以采取

2016-08-28 17:44:53 1152

原创 经典面试题之数组中的逆序对

1.题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%10000000072.解题思路这道题主要是归并排序思想的应用,如果对归并排序不了解,请先看http://blog.csdn.net/sinat_30186009/artic

2016-08-23 10:44:19 322

转载 数据库设计范式详解

原文详见:https://www.zhihu.com/question/24696366/answer/29189700   原文作者:刘慰1.第一范式第一范式要求关系中的每个属性不可再分,下图就不符合1NF修改为下图后则满足1NF2.第二范式我们先来看这么一个例子,有如下这样一个表:仔细查看,容易发现这么几个问题:1.每一名学生的学号、姓名、系名、系主任这

2016-08-22 20:42:51 471 1

原创 Java跨平台的原理

1.Java编译过程与C/C++编译过程的差异C/C++编译器生成一个对象的代码时,该代码是在某一特定硬件平台下运行而生成的。因此在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译时却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创建内存布局,然后再通过查表

2016-08-21 23:34:49 3422

原创 图之最短路径之迪杰斯特拉算法

一般最短路径算法有迪杰斯特拉算法和弗洛伊德算法,对于有负权值的需要使用弗洛伊德算法,这里主要讲解迪杰斯特拉算法1.算法思想设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示),按

2016-08-17 16:52:40 670

原创 数据结构之最小生成树

1.最小生成树给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树最小生成树的算法有普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法应用场景:要在n个城市之间铺设光缆,主要目标是要使这 n 个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个城市之间铺设光缆的费用不同,因此另一个目标是要使铺设光缆的总费用最低2.普里姆(Prim

2016-08-11 23:19:08 729

原创 数据库索引详解

1.什么是索引?索引的常见类型有什么?索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。分类:这里我们主要介绍常见的聚集索引和非聚集索引聚集索引:对正文内容按照一定规则排列的目录称为聚集索引非聚集索引:目录自己按照一定规则排列,正

2016-08-10 15:46:27 13348 1

原创 经典面试题之求连续子数组最大和

输入一个整形数组(元素可能为正为负),求数组中连续的子数组使其和最大,打印出子数组思路:这道题主要要明白两个点,第一,需要设置一个变量max保存当前的最大值,另外一个变量sum记录不断增加元素之后的总和          第二,如果sum+array[i]>0,sum=sum+array[i],否则就是sum=array[i]。因为如果一个新元素加上之后使得sum         但如

2016-08-09 20:15:04 412

原创 设计模式之责任链模式

责任链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止结构图简述:下列代码描述了一种福场景,经理、总监和总经理可以处理的请求范围代码:public abstract class Manager { protected String name; protected Man

2016-08-08 20:47:55 276

原创 数据结构系列之平衡二叉树

1.基本介绍平衡二叉树是一种特殊的二叉查找树,其左右子树都是平衡二叉树,且高度差的绝对值不超过1如何使二叉查找树在添加数据的同时保持平衡呢?基本思想就是:当在二叉排序树中插入一个节点时,首先检查是否因插入而破坏了平衡,若破坏,则找出其中的最小不平衡二叉树,在保持二叉排序树特性的情况下,调整最小不平衡子树中节点之间的关系,以达到新的平衡。所谓最小不平衡子树 指离插入节点最近且以平衡因

2016-08-07 17:16:22 509

原创 排序序列之直接插入排序与希尔排序

1.直接插入排序思想:将每个数字当作插入一个已经有序的数组中,则只需要找到比该数字大的第一个数字b,从b及其之后的每个数字都往后移动一位,将新数字插入到b原来的位置即可代码:import java.util.*;public class Main{ public static void main(String[] args) { Scanner sc=new Scan

2016-08-03 21:08:01 252

原创 二叉查找树

1.基本概念二叉查找树又称二叉排序树,特点是左子树全部小于根节点,右子树全部大于根节点2.生成二叉排序树,插入节点,查找节点,删除节点查找节点的思路:如果当前节点的值大于要查找节点的值,则与当前节点的左孩子比较,否则与右孩子比较,循环迭代插入节点的思路:当前二叉排序树已存在该值的节点,插入失败,返回false,要插入的节点的值小于当前节点的值,则与当前节点的左孩子比较,否则与右

2016-08-01 22:57:50 238

转载 哈夫曼树和哈夫曼编码

原文参照:http://blog.csdn.net/bruce_6/article/details/386564131.基本概念节点之间的路径长度:在树中从一个结点到另一个结点所经历的分支,构成了这两个结点间的路径上的经过的分支数称为它的路径长度树的路径长度:从树的根节点到树中每一结点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。结点的权:在一些应用中

2016-07-31 10:44:26 1598

原创 设计模式之适配器模式和代理模式

1.适配器模式将一个类的接口转换成客户希望的另一个接口,使得原本接口不兼容而不能一起工作的类可以一起工作应用场景:1.《设计模式》中提到如果想使用一个已经存在的类,但它的接口与你的要求不一致,可以使用设计模式                   2.我自己的一点认识,Java中就是如果一个类需要实现某个接口中的部分方法,如果通过直接继承该接口的话,需要去实现所有的方法

2016-07-30 00:15:22 331

原创 二叉树的遍历

遍历方式:前序遍历、中序遍历、后序遍历和层次遍历                  (递归、非递归)代码:(递归方式)           import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;public class BinaryTree { public sta

2016-07-29 20:05:13 344

原创 设计模式之简单工厂、工厂方法和抽象工厂

以下内容主要参照《大话设计模式》以及一些自己的理解1.简单工厂特点:所有产品类实例由一个简单工厂生产,一旦增加新的产品类,需要修改简单工厂类(违背了开放-封闭原则),但是客户端不需要修改2.工厂方法特点:一个产品类实例由其对应的工厂类生产,增加一个新的产品类,只需要添加对应的工厂类,不需要修改代码,但是客户端代码需要修改3.抽象工厂

2016-07-25 21:49:50 402 1

原创 设计模式系列之单例模式和观察者模式

1.单例模式懒汉式(线程不安全)public class Singleton{    private Singleton(){            }        private static Singleton singleton=null;        public static getInstance(){        if(sin

2016-07-24 22:54:54 2287

原创 排序系列之堆排序

1.堆的基本概念堆结构是一种完全二叉树或近似完全二叉树,堆分为最大堆和最小堆(适用于只需知道最大值和最小值的场景)最大堆:根节点都大于其孩子节点        最小堆:根节点都小于其孩子节点一般使用数组来表示,如下图,是一个堆结构:最大堆:堆中根节点和孩子结点的的下标关系一般为,根节点为i,则左孩子为2+i+1,右孩子为2*i+2堆排序的思路:

2016-07-23 23:21:02 322

原创 数据结构之图的深度优先遍历和广度优先遍历

1.图的简单介绍上图就是一个图(无线图),由顶点和连线组成图可以分为无向图和有向图(这个又有出度、入度的概念)、网,一般来说图有两种常用的表示方式,邻接矩阵(用二维数组的形式表示)和邻接表(主要是数组+链表的形式表示),图常用的遍历方式有深度优先遍历(DFS)和广度优先遍历(BFS)。由于等会代码是用邻接矩阵来实现DFS和BFS,这里主要介绍一下邻接矩阵的表示方法:两个顶点相邻,则

2016-07-23 10:21:53 8185

原创 排序系列之快速排序和归并排序

快速排序的思想:                           每次从数组中挑出一个数字作为基准,比它小的数放左边,比它大的数放右边                           然后继续从左半部分和右半部分递归执行该操作,直到只剩一个数,返回归并排序的思想:                           将数组分为两个部分,左边一部分,右边一部分,一直递

2016-07-20 20:24:59 386

原创 2016华为暑期实习生编程题之和尚挑水

某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表:和尚1: 星期二,四;和尚2: 星期一,六;和尚3: 星期三,日;和尚4: 星期五;和尚5: 星期一,四,六;和尚6: 星期二,五;和尚7: 星期三,六,日;请将所有合理的挑水时间组合思路:自己只能想到穷举,可以采取一种回溯法穷举,利用一个矩阵存储,行表示星期,列表示和尚,和尚

2016-07-19 19:21:37 957

原创 腾讯2017实习生编程题之构造回文

思路:一开始看起来没有思绪,但是仔细想想,这个问题可以转换为两个字符串求公共子序列         注意一个概念上的差异,公共子序列和公共子串。前者不要求连续,后者要求连续。         这个问题可以转换为字符串和其reverse之后的字符串求最大子序列        那么,怎么求最大子序列,考虑动态规划解决这个问题。        假设Xi=,Yj=为两个序列,用矩阵c[i,

2016-07-17 22:52:14 369

原创 腾讯2017实习生编程之算法基础-字符移位

思路:这个实际上就是一个排序问题,大写字母排到小写字母后边并保持原来的相对位置,采用冒泡排序代码:import java.util.*;public class Main{    public static void main(String[] args){  Scanner sc=new Scanner(System.in);        while(s

2016-07-16 22:57:20 427

原创 腾讯2017实习生编程题之有趣的数字

腾讯2017实习编程题思路:         1.采用map来处理,TreeMap中key存放输入数字的值(达到排序的效果),vlaue存放数字出现的次数         2.考虑输入所有数字中不同数字的个数为1,2和大于2三种情况         3.绝对值最大的对数是最大和最小数之间的组合,取TreeMap中第一个和最后一个的value,对数=firstCount*lastCount

2016-07-16 22:20:12 745

原创 链表的C++代码

单链表结点定义为一个结构体struct LinkNode{      int  data;     Node *  next;};然后定义一个链表类class List{private:LinkNode* first;public:        list(){first=null;}         bool insert(int i,int data

2016-07-14 21:32:47 300

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除