- 博客(38)
- 收藏
- 关注
原创 数据结构和算法之二叉树左视图
思路:1、按照层级来遍历。2、取每一层的第一个有效节点,如果是右视图的话就是最后一个有效节点。import com.alibaba.fastjson.JSONObject;import com.google.common.collect.Lists;import com.zyblue.fastim.common.algorithm.TreeNode;import java.util....
2019-12-23 23:47:15 458 1
原创 数据结构和算法之二叉树锯齿遍历
题:按照如图方式遍历二叉树个人思路:1、用两个栈实现,奇数层用第一个栈,偶数层放第二个栈/** * 层序遍历数组,锯齿形遍历 * 第二层遍历顶点 * 第二层按照右向左遍历 * 第三层按照左向右遍历 * 第四层按照右向左遍历 * 依次。。。。 * Author : BlueSky 2019.11.15 * 4 * 2 6 * 1 3 5 7 * 输出:4 ...
2019-12-18 13:46:16 227
原创 Zookeeper脑裂以及解决办法
脑裂一般脑裂都是出现在集群环境中的。指的是一个集群环境中出现了多个master节点(类似zookeeper的master、elasticsearch的master节点),导致严重数据问题,数据不一致等等。出现的原因:可能就是网络环境有问题如断开,假死等等,导致一部分slave节点会重新进入崩坏恢复模式,重新选举新的master节点,然后对外提供事务服务。例如机房A和机房B通信,一个6个节点...
2019-12-10 18:53:25 3747
原创 金融核心业务流程整理
业务背景借款流程:投资和借款期限错配(如,投资365天,借款只有90天),投资生成资金,p2p维护资金池,借款从资金池捞资金生成有效债权,随后进行转账,至此借款流程结束。先息后本,最后一期一次性本金还款:每一次还款还利息,入利息池,最后一期还本金和利息,入利息池和资金池。资金池:用户投资成功后,不会马上找借款匹配,而是维护一个本金资金池,供借款来按照一定的规则匹配顺序来生成有效债权(如、新...
2019-11-25 17:24:29 5842
原创 数据结构和算法之最长的无重复字符串长度
思路利用滑动窗口右窗口遍历数组,如果值不在滑动窗口内,当前字符可以加进来;如果在的话,只需要移动左窗口指针,然后计算窗口大小利用一个散列表记录每个字符串的下标位置上代码:package com.zyblue.fastim.common.algorithm;import java.util.HashMap;import java.util.Map;/** * 最大字符串长度...
2019-11-22 16:28:03 173
原创 Redis的八大应用
缓存:key-val缓存分布式锁:利用Redis的setnx功能来编写分布式的锁,如果设置返回1说明获取锁成功,否则获取锁失败计数器:incr命令来实现计数器功能,内存操作,性能非常好队列:可以利用redis的订阅/发布功能实现一个简单的消息队列排行榜:可以利用有序集合来实现分布式会话:在集群和分布式环境下存储session最新列表:Redis列表结构,LPUSH可以在列表头部插入一...
2019-11-22 14:29:54 155
原创 数据结构和算法之移除数组重复值
思路利用双指针前后指针相同,前指针向后移动如果不同,前和后指针都向后移动,同时将后指针的值赋值到前指针的下标中。/** * 移除排序数组中重复的值,返回移除后的大小 * Author : BlueSky 2019.11.05 * exe: * 给定 nums = [0,0,1,1,1,2,2,3,3,4], * 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被...
2019-11-19 17:01:43 191
原创 红黑树实现一致性HASH算法
思路:主要利用了红黑树的tailMap(key)方法,找到比key大的map集合直接上代码:package com.zyblue.fastim.common.algorithm;import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuc...
2019-11-18 12:11:31 531
原创 数据结构和算法之LRU缓存淘汰算法
思路:维护一个有序单链表,越靠近链表尾部的结点是越早之前访问的。当有一个新的数据被访问时,我们从链表头开始顺序遍历链表。如果此数据之前已经被缓存在链表中了,我们遍历得到这个数据对应的结点,并将其从原来的位置删除,然后再插入到链表的头部。如果此数据没有在缓存链表中,又可以分为两种情况:如果此时缓存未满,则将此结点直接插入到链表的头部;如果此时缓存已满,则链表尾结点删除,将新的数据结点插入链表...
2019-11-15 16:23:08 253
原创 数据结构和算法之层序遍历二叉树
比较简单,直接上代码package com.zyblue.fastim.common.algorithm;import java.util.LinkedList;/** * 层序遍历数组 * Author : BlueSky 2019.11.15 * 思路:利用队列实现 */public class LayerTree { public void foreach(Tr...
2019-11-15 11:24:20 175
原创 数据结构和算法之判断是否是平衡二叉树
思路一:1、遍历每个结点,借助一个获取树深度的递归函数2、根据该结点的左右子树高度差判断是否平衡缺点:从上往下遍历,时间复杂度高,会重复计算高度思路二:1、后序遍历,从下往上遍历,遍历左子树和右子树2、递归的方法,求左子树和右子树的高度3、每次在求出左子树和右子树的高度的时候比较一下两者之间的差值是否大于1package com.zyblue.fastim.common.a...
2019-11-14 23:53:20 343
原创 数据结构和算法之判断对称二叉树
思路根节点相等,左子树的左子树和右子树的右子树对称,左子树的右子树和右子树的左子树对称直接上代码:package com.zyblue.fastim.common.algorithm;/** * 判断是否是对称二叉树 * Author : BlueSky 2019.11.14 * 例如 * 1 * / \ * 2 2 * / \ / \ * 3 4 ...
2019-11-14 22:57:50 227
原创 数据结构和算法之求两个链表相交的点
思路对于两个链表相交于一节点,则在这个节点之后的所有结点都是两个链表所共有的两个链表的最后一个点的数据肯定是相同的求出两个链表的长度,相减结果为K利用双指针,长的链表的先走K个点,然后取循环判断两个链表最后一个点是否相同。直接上代码:public class LinkListCross{ public static int Length(ListNode list){ /...
2019-11-14 14:55:46 208 1
原创 数据结构和算法之有序数组转二叉搜索树
思路:其实就是个二分查找的过程代码/** * 有序数组转二叉搜索树 */public class ArrayToTree { public static class TreeNode { int val; private TreeNode left; private TreeNode right; private T...
2019-11-14 14:34:45 128
转载 Https原理及流程
原文链接我们知道,HTTP请求都是明文传输的,所谓的明文指的是没有经过加密的信息,如果HTTP请求被黑客拦截,并且里面含有银行卡密码等敏感数据的话,会非常危险。为了解决这个问题,Netscape 公司制定了HTTPS协议,HTTPS可以将数据加密传输,也就是传输的是密文,即便黑客在传输过程中拦截到数据也无法破译,这就保证了网络通信的安全。密码学基础在正式讲解HTTPS协议之前,我们首先要知道...
2019-11-12 16:35:14 136
原创 数据结构和算法之数组实现环形队列
思路:1、循环队列和非循环队列类似,但是要注意队列空和队列满的情况2、队列空 tail = head3、队列满 (tail+1)%capacity = head/** * 循数组实现循环队列 * Author : BlueSky 2019.11.05 * 思路: * 1、循环队列和非循环队列类似,但是要注意队列空和队列满的情况 * 2、队列空 tail = head * 3...
2019-11-06 19:30:26 170
原创 数据结构和算法之数组实现队列
思路1、利用双指针分别指向头结点和尾结点来控制先进先出的特性。2、每次出队操作,将后面的数据向前移一位,来解决头和尾指针向后移动以至于不能插入新数据的问题,但是时间复杂度比较高,出队时间复杂度会由O(1) 变为 O(n),不建议采用。3、每次入队操作,判断如果尾结点达到数组最后面,就把头结点和尾节点所有数据移动到数组最前面。时间复杂度还是O(1) 。直接上代码,自已已经亲测过:/**...
2019-11-01 19:37:36 159
原创 数据结构和算法之两个栈实现队列
思路第一个栈只负责写入。有新数据写入就一直写入第一个栈。当读取数据时候,判断第二个栈是否有数据,如果有直接弹出栈顶元素;如果没有数据,将第一个栈的数据依次弹出,然后按照顺序写入第二个栈,最终弹出第二个栈顶元素。直接上Java代码:import java.util.Stack;/** * 两个栈实现队列 * Author:BlueSky */public class TwoS...
2019-10-31 00:13:06 163
原创 数据结构和算法之布隆过滤算法
文章目录步骤总结代码实现步骤首先需要初始化一个二进制的数组,长度设为 L(图中为 8),同时初始值全为 0 。写入一个 A1=1000 的数据时,需要进行 H 次 hash 函数的运算(这里为 2 次);与 HashMap 有点类似,通过算出的 HashCode 与 L 取模后定位到 0、2 处,将该处的值设为 1。A2=2000 也是同理计算后将 4、7 位置设为 1。当有一个 B...
2019-10-29 18:30:38 196
原创 数据结构和算法之删除链表的倒数第N个节点
示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.思路1:一趟扫描获得链表长度l,然后删除从前往后的第l - n +1个节点。思考进阶:如何用一遍遍历来实现?思路2:利用双指针,间隔n,双指针循环,当后面一个指针指向NULL时候,前一个指针指向的位置就是需要删除节点的上一...
2019-10-29 17:05:30 257
原创 数据结构和算法之单链表反转
/** * 单链表反转 * Author : BlueSky 2019.10.29 * Function:把每个节点的指针域由原来的指向下一个节点变为指向其前一个节点 * Example: * 输入: 1->2->3->4->5->NULL * 输出: 5->4->3->2->1->NULL */public clas...
2019-10-29 14:51:33 148
原创 数据结构和算法之链表是否有环
/** * 链表是否有环 * Author : BlueSky 2019.10.29 * 思路:利用快慢指针 */public class RingLinkedList { public static Boolean hasRing(Node head){ if(head == null || head.getNext() == null){ ...
2019-10-29 14:50:34 77
原创 数据结构和算法之两个有序的链表合并
/** * 两个有序链表合并 * Author : BlueSky 2019.10.29 * Function : 两个有序链表合并为一个新的有序链表并返回 * Example: * 输入:1->2->4, 1->3->4 * 输出:1->1->2->3->4->4 * * 思路:递归 * 1、对特殊情况进行处理:Head...
2019-10-29 14:49:41 579
原创 数据结构和算法之回文数判断
题:判断字符串是否是回文数思路:快慢指针判断中位数1.1 如果是奇数,中间位置不用矫正1.2 如果是偶数,快指针先走,当快指针到达终点时候,慢指针到达上中位数将慢指针后面的所有字符串反转循环一遍对比是否相等...
2019-10-28 12:44:15 843 1
原创 数据结构和算法之TOP K算法
问: 从arr[1, n]这n个数中,找出最大的k个数对数组进行全部排序,时间复杂O(n*lg(n))只对最大k个数排序,比如冒泡算法,冒K个泡,就可以拿到最大的K个数利用最小堆解决步骤一、找出数组前k个数,组成最小堆步骤二、遍历剩余n-k个元素,对比每个元素和堆顶大小步骤三、如果大,则替换堆顶的元素,然后调整;如果小则continue。保证堆里面的元素总是最大的步骤四、...
2019-10-27 11:34:46 436
原创 数据结构和算法之数组右移K
基本思路:不开辟新的数组空间的情况下考虑在原属组上进行操作将数组倒置,这样后k个元素就跑到了数组的前面,然后反转一下即可同理后 len-k个元素只需要翻转就完成数组的k次移动public class ArrayKShift { public void arrayKShift(int[] array, int k) { /** * constr...
2019-10-27 11:32:15 420
原创 职场总结
1、即使要走人离职也得把事情做好交接好2、每一家公司的人都是以后的资源3、保持好在公司的形象4、最大的价值就是不可取代性5、时刻学习、时刻分享6、认为自己是能行的、消除不自信7、主动抓住机会、承担更多的需求任务8、技术方案,必要的话必须提供多种方案,以及每种方案的优势和劣势,供选择9、可以多学习其他行业或相似行业的内容、为以后多铺几道路...
2019-10-27 11:15:19 158
原创 即使通讯技术要点
服务器端启动将自己的节点注册到zookeeper上开启心跳用户登录将用户ID和channel,用户ID和msg存入redis中客户端登录login,根据用户名和ID获取路由服务中的IMserver,并且将IMserver保存内存中将发送的消息分批保存到文件中网关设计1)设计一个spring cloud gateway,一个是自己netty实现的一个网关漫游消息“消息漫游”是指一...
2019-10-27 11:13:58 229
原创 数据结构和算法之美总结——数组
插入操作如果在数组的末尾插入元素,那就不需要移动数据了,这时的时间复杂度为 O(1)。但如果在数组的开头插入元素,那所有的数据都需要依次往后移动一位,所以最坏时间复杂度是 O(n)如果数组有序,那么当插入新的元素时候,后面的k位元素都要移动。如果无序,那么直接替换第k个元素,然后将被替换的元素放到数组最后。时间复杂度就会降低删除操作当需要删除一个元素时候,所有的元素都需要向前移动一...
2019-10-27 11:08:35 168
原创 写给自己的2018年总结
写给自己的2018年总结题记不觉中,2018年就快过了,在这之前从来没有写过一些总结性的文章,从小学初中日志作业,到高中的日复一夜的学习再到大学的浑浑噩噩的僵硬式的学习,一直都在进行流水账式的学习输入,从没有写过关于一年的计划甚至是一个月的小目标。至于为什么要做这个总结,我想是因为,年复一年的度过,有时候自己都不知道在这一年干过什么事情、收获了什么和失去了什么,包括对友情、亲情和事业等等。...
2018-12-31 16:49:53 610
转载 面试感悟----一名3年工作经验的程序员应该具备的技能
原文地址http://www.cnblogs.com/xrq730/p/5260294.html,转载请注明出处,谢谢! 前言因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结,因此有了这篇文章。这篇文章大部分内容都是面向整个程序员群体的,当然因为LZ本身是做Java开发的,因此有一部分内容也是专门面向咱们Java程序员的。简单先说一下,LZ坐标杭州,13届本科毕业,算上年前在阿里巴巴B2...
2018-03-05 10:45:00 352 1
原创 MongoDB常用命令
-- 删除某个字段db.app.update({},{$unset:{"appid":""}},false,true)-- 增加某个字段db.app.update({},{$set:{"appid":""}},{multi:1})--查询存在某字段的数据db.app.find( {"appid": { $exists: true } } )--认证db.auth("user","
2018-03-05 10:40:30 168
转载 程序员找工作的个人经验教训以及注意事项
点击上方“程序人生”,选择“置顶公众号”第一时间关注程序猿(媛)身边的故事忽然间想到如果要找工作的话,需要注意一些什么问题。没毕业的,刚刚毕业的,刚刚工作的都可以借鉴一下。大师兄结合自身经历,经验,稍微总结下。保存下来,以备后来者-------自己或观众使用。想当初刚刚毕业,或者说 ,还没毕业的时候,跟着班里的同学们组队到成都去找工作实习,也就是几天前的事的感觉,但是现在,大家都各奔东西,各自忙自...
2018-03-05 10:39:24 778
原创 新服务器上线优化准备工作
安装:1:挂载数据盘 参见 https://help.aliyun.com/document_detail/25426.html?spm=5176.doc25446.2.3.Drvxlf 2:修改主机名称 1) hostname zhangyao 2) vi /etc/sysconfig/network 3) vi /etc/hosts reboot 生...
2018-03-05 10:35:30 608
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人