自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

HGS的博客

一个爱编程的小伙子

  • 博客(83)
  • 收藏
  • 关注

原创 BFPRT算法

解决的问题:在一个数组中找到最小的k个数常规解法:1、排序,输出前k个数,时间复杂度O(n*log(n))。 2、利用一个大小为k的大根堆,遍历数组维持大根堆,最后返回大根堆就可以了,时间复杂度O(n*log(k))。BFPRT解法:利用快速排序的思路,选取一个划分值,小于这个数的放右边,等于这个数的放中间,大于这个数的放右边。如下图:这样...

2019-01-31 21:05:13 163

原创 Manacher

文章参考:https://segmentfault.com/a/1190000008484167江湖人称:马拉车算法解决的问题:求一个字符串中的最长回文。暴力的方法:遍历字符串,以当前字符为中心,向两边扩展直至不是回文。时间复杂度O(n^2)Manacher算法:是记录并利用以前遍历过的回文,巧妙的达到一个加速的效果。时间复杂度O(n)首先了解三个概念:(1)回文半径数组:...

2019-01-30 22:35:14 741

原创 KMP

具体学习:请参照,讲解的非常详细:https://blog.csdn.net/v_july_v/article/details/7041827KMP解决的问题:字符串中查找。如:S(文本串)=‘aaab’,P(模式串)=‘aab’,在S中查找是否包含P。暴力的解法:遍历S的时候,匹配P,时间复杂度O(n*m),S 长度n,P 长度m。而KMP方法时间复杂度,O(n+m),与暴力解是...

2019-01-30 18:55:44 530

原创 hash一致性

参照:https://www.cnblogs.com/moonandstar08/p/5405991.html参照:http://www.cnblogs.com/haippy/archive/2011/12/10/2282943.html以下内容,仅供自己理解复习,表达能力有限,还请您见谅!hash一致性解决的问题:如经典的服务器负载均衡,在前端通过一个相同的hash函数计算出一个数值...

2019-01-18 20:37:27 234

原创 阿里巴巴校招三面面经

阿里巴巴三面面经一面简历面时长:一个小时18分钟简历面,面试官根据你的简历进行提问,必须非常熟悉自己简历上的东西1、自我介绍2、介绍简历上的项目(从系统架构讲起,各种分布式微服务组件)3、介绍Eureka4、Feign的好处5、微服务的好处6、RPC(RPC与微服务的Http对比)7、微服务的协议8、Hystix熔断原理9、Cookie和Session,区别,各自的优点与...

2019-10-07 21:17:57 2288 2

原创 Bilibili 2020校招 后端笔试试卷

Bilibili后端笔试试卷第一题:原地翻转字符串,要求空间复杂度O(1),时间复杂度 O(n)AC 100% 代码:import java.util.Scanner;/** * @author HGS * @date 2019/08/20 */public class BiliBili01 { public static void swap(char[] chars,...

2019-08-20 20:27:58 4766

原创 科大讯飞 2020校招 提前批笔试

科大讯飞 2020校招 提前批笔试无力吐槽,编程题是人工阅卷,而且没有输入输出,调试半天第一题题目意思:寻找输入字符串中的数字,并按升序排序,桶排序思想import java.util.Scanner;/** * @author HGS * @date 2019/08/16 */public class XunFei01 { public static void mai...

2019-08-16 19:35:45 3238

原创 贝壳找房 2020校招 研发工程师试卷题解

贝壳找房 2020校招 研发工程师试卷题解第一题编程题|30.0分1/4计算绝对值**时间限制:**C/C++语言 1000MS;其他语言 3000MS**内存限制:**C/C++语言 131072KB;其他语言 655360KB题目描述:给出n个正整数,要求找出相邻两个数字中差的绝对值最小的一对数字,如果有差的绝对值相同的,则输出最前面的一对数。2<n<=100,正整...

2019-08-10 21:00:42 1023

原创 无状态登录原理 token - 微服务 Zuul + JWT + RSA

1.无状态登录原理1.1.什么是有状态?有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户...

2019-07-26 21:37:56 913

原创 设计模式之结构型学习

结构型外观模式定义:又叫门面模式,提供一个统一的接口,用来访问子系统中的一群接口,外观模式定义了一个高层接口,让子系统更容易使用适用场景:子系统越来越复杂,增加外观模式提供简单调用接口构建多层系统结构,利用外观对象作为每层的入口,简化层间调用优点:简化了调用过程,无需了解深入子系统,防止带来风险减少系统依赖,松散耦合更好的划分访问的层次符合迪米特法则,即最少知道原则缺...

2019-07-11 19:13:54 148

原创 fastDFS在阿里云上的Storage错误

记一次fastDFS在部署在阿里云上运到的错误用postman测试报错信息:无法获取服务端连接资源:can’t create connection to/172.17.15.7:23000原因: storage.conf 要配置的是外网IP,而自己配置的确实内网IP,所以连接不上storage...

2019-07-02 17:13:39 1213

转载 史上最好理解,最详细的Java的lambda表达式教程

原文链接:https://blog.csdn.net/ioriogami/article/details/12782141,这一篇讲解的原理多一些,介绍了函数式接口等概念,更好的理解Lambda原文链接:https://blog.csdn.net/renfufei/article/details/24600507,这一篇实例多一些,建议先消化上一篇,再来细细品味最后再次感谢两位博主!!!...

2019-05-21 19:52:14 1766

原创 Java哪些情况下必须对类进行“初始化”

Java哪些情况下必须对类进行“初始化”遇到new、getstatic、putstatic或invokestatic这四条字节码指令时,如果类没有进行初始化,则需要先触发其初始化。生成这四条指令的常见场景是:使用new关键字实例化对象的时候读取或设置一个类的静态字段的时候(被final修饰、已在编译期把结果放入常量池的静态字段除外)调用一个类的静态方法的时候使用java.lang...

2019-05-09 12:04:39 1122

原创 为什么jdk1.8要把方法区从JVM里移到直接内存?

为什么jdk1.8要把方法区从JVM里移到直接内存?原因一:因为直接内存,JVM将会在IO操作上具有更高的性能,因为它直接作用于本地系统的IO操作。而非直接内存,也就是堆内存中的数据,如果要作IO操作,会先复制到直接内存,再利用本地IO处理。从数据流的角度,非直接内存是下面这样的作用链:本地IO --> 直接内存 --> 非直接内存 --> 直接内存 --> 本地IO...

2019-05-09 11:08:12 4241 2

原创 设计模式之创建型汇总

设计模式创建型工厂方法模式定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行使用场景:创建对象需要大量重复的代码客户端(应用层)不依赖于产品类实例如何被创建、实现等细节一个类通过其子类来指定创建哪个对象当明确地计划不同条件下创建不同实例时优点:用户只需关心所需产品对应的工厂,无须关心创建细节加入新产品符合开闭原则...

2019-04-27 13:10:52 137

原创 简单却又复杂的单例模式

单例模式定义:保证一个类仅有一个实例,并提供一个全局的访问点使用场景:想确保任何情况下都绝对只有一个实例当你想控制实例数目,节省系统资源的时候优点:在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。避免对资源的多重占用(比如写文件操作)设置全局访问点,严格控制访问缺点:没有接口,不能继承与单一职责原则冲突,一个类应该只关...

2019-04-10 21:32:14 148

原创 Java集合学习总结

java集合collectionpublic interface Collection<E> extends Iterable<E>Listpublic interface List<E> extends Collection<E> 特点:线性结构,有序,可重复LinkedListpublic class LinkedList&l...

2019-04-06 17:40:11 238

原创 常见树的总结

树BSTBinary Sort Tree:二叉查找树,或二叉搜索树,或二叉排序树性质:若左子树不空,则左子树上所有结点的值均小于它的根结点的值;若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;左、右子树也分别为二叉查找树;没有键值相等的节点。**特点:**对二叉查找树的中序遍历,是升序的序列。查找的时间复杂度 O(logN),最...

2019-04-06 17:37:24 368

原创 Java的内存泄露

Java的内存泄露1、静态集合类引起内存泄漏像HashMap、Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程序一致,他们所引用的所有的对象Object也不能被释放,因为他们也将一直被Vector等引用着。2、当集合里面的对象属性被修改后,再调用remove()方法时不起作用。3、监听器在释放对象的时候却没有去删除这些监听器,增加了内存泄漏的机会。...

2019-04-06 17:36:51 112

原创 《深入理解Java虚拟机》读书笔记(第三章)

垃圾收集器与内存分配策略(第三章)前言,众所周知,Java是由c++进化而来,c++在内存需自己申请,自己释放,于是就有了Java的动态内存分配。书的第三章开篇,有这样一句话描述的很妙——Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外的人想进去,墙内的人却想出来。如何判断对象已经死去引用计数器法概述:给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就...

2019-04-06 17:35:30 219

原创 《Jave并发编程的艺术》学习笔记(1-2章)

Jave并发的艺术并发编程的挑战上下文切换CPU通过时间片分配算法来循环执行任务,当前时间片执行完之后会切换到下一个任务。但是,切换会保存上一个任务的状态,一遍下次切换回这个任务时,可以再次加载这个状态。所以任务从保存到再加载的过程就是一次上下文切换。如何减少上下文切换减少上下文切换的方法有无锁并发编程、CAS算法、使用最少线程和使用协程无锁并发编程:多线程竞争锁时,会引起上下文切...

2019-04-05 23:00:35 1069

原创 Java多线程与并发之面试常问题

JAVA多线程与并发进程与线程的区别进程是资源分配的最小单位,线程是CPU调度的最小单位所有与进程相关的资源,都被记录在PCB(进程控制块)中进程是抢占处理机的调度单位;线程属于某个进程,共享其资源线程只由堆栈寄存器、程序计数器和TCB(线程控制块)组成总结:线程不能看做独立应用,而进程可看做独立应用进程有独立的地址空间,相互不影响,线程只是进程的不同执行路径线程没有独立...

2019-03-25 11:24:00 282

原创 Morris遍历-如何用空间复杂度O(1)来遍历二叉树

参照和学习:https://www.cnblogs.com/AnnieKim/archive/2013/06/15/morristraversal.html解决的问题:如何使用空间复杂度O(1),来遍历二叉树。我们通常的办法:是递归或者利用栈的迭代,空间复杂度都为O(logN),虽然已经很完美,但是还有更加美丽和充满艺术感的Morris。Morris解法:首先要面临的问题是,O(1...

2019-02-01 21:23:31 1089

原创 路径最小问题

问题:给你一个二维数组,二维数组中的每个数都是正数,要求从左上角走到右下角,每一步只能向右或者向下。沿途经过的数字要累加起来。返回最小的路径经典的动态规划问题请记住这样一句话:每一个优美的动态规划,都来自原先暴力的尝试package class_08;public class Code_07_MinPath { public static int minPath1(int...

2019-01-29 21:25:21 174

原创 哈夫曼编码拓展题

哈夫曼编码:参照:https://blog.csdn.net/FX677588/article/details/70767446https://blog.csdn.net/google19890102/article/details/54848262问题:一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的 金条,不管切成长度多大的两半,都要花费20个铜板。一群人想整分...

2019-01-29 20:44:31 2672

原创 TrieTree

学习链接:https://blog.csdn.net/lisonglisonglisong/article/details/45584721前缀树解决字符串前缀匹配问题,查找单词是否存在,统计以如“abc”开始的字符串的个数,实现词频统计等。package class_07;import java.util.HashMap;public class Code_01_TrieTre...

2019-01-19 22:42:28 221

原创 并查集

并查集在ACM比赛之中比较的常见,映象较深的是PAT团体天梯赛中,中等的题目里面必有这样一道题目,基本的模板和套路。今日份通过左神算法学习,复习一下!深入理解请到:https://blog.csdn.net/dm_vincent/article/details/7655764参照:https://blog.csdn.net/dm_vincent/article/details/7769...

2019-01-18 22:17:56 120

原创 布隆过滤器

文章参照和引用处:http://www.cnblogs.com/haippy/archive/2012/07/13/2590351.html首先布隆过滤器解决的问题是:在一个非常大的数据集合里面判断一个数据是否存在。常规的办法,可以使用一个hash哈希函数,但是非常消耗空间。我们不禁想到如何节省空间,这个时候布隆过滤器就出现了。我们可以在bit位上做文章。例如左神列举的例子:100亿个...

2019-01-17 22:12:00 144

原创 如何计算完全二叉树的结点数?

如何计算完全二叉树的结点数?要求:时间复杂度低于O(n),即不能直接遍历二叉树。答:从根节点开始,查看右子树的高度right_h与左子树的高度left_h的关系,如果right_h &lt; left_h 说明右子树一定是满二叉树,左子树继续递归这个过程。如果right_h == left_h 说明左子树一定是满二叉树,右子树继续递归这个过程。对于满二叉树,有这个公式,如果树的高度为k,则...

2019-01-16 21:36:07 4724

原创 如何翻转单链表和双向链表

package class_03;public class Code_07_ReverseList { public static class Node { public int value; public Node next; public Node(int data) { this.value = data; } } public static Node...

2019-01-16 17:21:11 299

原创 如何判断是搜索二叉树与完全二叉树

1、搜索二叉树的定义:它是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。搜索二叉树可以方便的查找树中的最大值或最小值。如何判断一棵二叉树是否是搜索二叉树?答:只需要判断该二叉树的中序遍历是否从小到大有序,即升序。2、完全二叉树:...

2019-01-16 00:17:45 508

原创 平衡二叉树

平衡二叉树的定义:如果每一个节点的左子树和右子树的高度差不超过1,那么这可树就是平衡二叉树。判断一个树是否为平衡树,把握三点。(1)左子树是否平衡 (2)右子树是否平衡 (3)左子树的高度和右子树的高度差值低于1递归的套路package class_04;public class Code_06_IsBalancedTree { public static class...

2019-01-15 23:28:33 107

原创 二叉树的序列化和反序列化

思路:如何序列化,就如何反序列化。每个节点值后面用 ‘!’表示结束,‘#’表示空。如下按先序遍历,序列化为:1!2!4!#!#!5!#!#!3!6!#!#!7!#!#!,注意空节点,要添加进来package class_04;import java.util.LinkedList;import java.util.Queue;public class Code_04_Seria...

2019-01-15 22:23:50 125

原创 斐波那契数列的应用

f(n)= f(n-1)+ f(n-2), f(1)= 1,f(2)= 2;牛客网题目一:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?分析:链接:https://www.nowcoder.com/questionTerminal/72a5a919508a4251859fb2cfb987a0e6来源...

2019-01-15 14:18:44 2705

原创 如何找二叉树的后继结点

二叉树的后继结点的定义:为该二叉树的中序遍历后,该节点后面一个结点即使该节点的后继结点。如图:中序遍历的结果是,4251637,所以 4的后继结点是2 ,2的后继结点是5package class_04;public class Code_03_SuccessorNode { public static class Node { public int value; p...

2019-01-14 23:41:00 487

原创 二叉树,先-中-后,遍历

建议大家在小本本上,模拟一下,遍历路径,才能更好的理解代码代码如下:package class_04;import java.util.Stack;public class Code_01_PreInPosTraversal { public static class Node { public int value; public Node left; publi...

2019-01-14 23:29:41 126

原创 矩阵“回”,“之”,翻转打印

1. ‘回’字型打印     思路:从最外回字往里面一层层打印。如:                                                         代码如下:package class_03;public class Code_06_PrintMatrixSpiralOrder { public static void spiralOrd...

2019-01-08 22:00:47 179

原创 队列实现栈,栈实现队列

两个队列实现栈:   每次进入一个队列,取出得时候,把所有元素进入另一个队列,只留下一个元素,以此实现栈的先进后出(FILO)。package algorithmByMySelf;import java.util.LinkedList;import java.util.Queue;/* 用两个队列实现一个栈 * * */public class twoQueueToS...

2019-01-04 00:15:04 212

原创 桶排序

首先讨论的问题:给定一个数组,求如果排序后,相邻两数的最大值,要求时间复杂度 O(n)?桶:数组长度N,设计一个桶,数量为(N+1)个桶,数组最小值放进第一个桶,数组最大值放进最后一个桶,每一个桶都要包含min,max,这两个边界值。所以中间一定存在一个空桶,那么就可以得到一个结论:桶内之间绝对不会存在最大差值,最大差值就一定在桶与桶的边界值之间。从第二个桶开始遍历,用这个桶的min减去前一个...

2019-01-02 23:42:34 97

原创 堆排序

堆:就是完全二叉树,注意与满二叉树的区别,完全二叉树,从左往右依次有节点,节点缺一不可用数组表示完全二叉树,下标对应的关系,父:(i+1)/2,左孩子 2*i+1,右孩子 2*i+2。大根堆:这棵树的任何子树的结点,都是父节点大。小根堆:这棵树的任何子树的结点,都是父节点小。package 左神_算法;import java.util.Arrays;public cl...

2019-01-01 23:42:58 98

空空如也

空空如也

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

TA关注的人

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