自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 配置 DNS 映射(mac使用 github)

sudo vim /etc/hostshttps://blog.csdn.net/a_rain2333/article/details/117921719sudo killall -HUP mDNSResponder

2021-07-03 15:31:37 446

原创 Redis 设计与实现——读书笔记

定期删除策略的实现Redis 使用过期字典记录包含过期时间的键与其相应过期时间之间的关联关系。对于过期键的删除存在san'hong

2021-06-25 11:15:30 1187

原创 秒杀系统(高并发系统)的架构设计

存在的问题和需要注意的事情:超卖和少卖 库存量是一定的,如果zai用户订单来了之后

2021-06-05 21:17:39 246

原创 ubuntu 常用操作(备忘)

docker安装 redisdocker search redis查看docker images,可以看到redisdocker run -d --name myredis -p 6379:6379 redis --requirepass "mypassword"docker exec -it ea6cc5896a472c23a09b8c789c96862c0a3e941eda278ba14e5346a92eb2e6f9 redis-clidocker exec :在运行的容器中执行.

2021-06-04 15:38:00 121 1

原创 微人事系统笔记

CustomFilterInvocationSecurityMetadataSource类:通过当前的请求地址,获取该地址需要的用户角色

2021-05-31 17:49:39 426 1

原创 leetcode——Iterator 使用思考(仅单线程安全remove 方法、多线程下对 iterator 遍历加锁)

今天在做剑指 Offer 38. 字符串的排列时,视图利用 map 保存字符与字符个数的映射关系,然后取 map 的 key 集合(map.getSet),对 set 进行遍历时对value 为0的值直接用 map.remove(c)进行删除,结果爆出了 ConcurrentModificationException。猜想原因应该是:遍历的对象是利用 getSet 方法获取的 Set 类型引用,这些引用指向的是 map 中的地址,而不是又新建了一个 Set 对象,因此问题相当于:遍历 Set 引用的时.

2021-04-28 22:41:54 1337

原创 中间件架构——思考总结(长期记录系统中的设计模式应用)

一、Onos 中间件中的依赖倒置、开闭原则、工厂模式(1)遵循依赖倒置,即面向接口编程的原则我们的 onos 中间件的类要提供给西电方使用,那么我们的类要尽量有抽象类或者接口(遵循依赖倒置,即面向接口编程的原则),或者说这个接口本来就是西电方给我们设置的,定义他们需要的方法,我们的实现类实现这些接口,当需求改变时,我们增加新的实现类即可,比如西电方现在需要我们提供支持新版本openflow 协议的类时,我们只需要新增一版类即可。(2)依赖工厂模式向高层代码屏蔽具体子类类型另外,联系到工厂模式

2021-04-27 16:41:02 117

原创 leetcode——思考——Collections.reverse、RandomAccess(原创)

今天做了剑指 Offer 32 - III. 从上到下打印二叉树 III(https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/),利用常规的标志位设置奇偶层,根据标志位决定每个元素(对每个元素都要判断一次)是添加在r 的末尾,还是添加在头部。(时间29%)发现时间效率低,查看了题解发现可以:(1)都添加在末尾(2)最后进行标志位判断,使用 Collections.reverse对 r整体倒置,从而减

2021-04-27 11:09:52 243

原创 设计模式——工厂方法(在不同的工厂子类中创建单一子类)

工厂方法(Factory Method)工厂方法与简单工厂的区别简单工厂使用举例如果说我们有一个父类“交通工具”,它有两个子类“汽车”和“自行车”,我们现在只需要一个工厂负责根据不同的条件创建不同的子类并返回,比如如果条件为“雨天”则创建汽车,条件为“晴天”则创建自行车,这个工厂就是简单工厂,通过调用它的 create 方法,根据方法的参数,创建某一种父类的子类,并将对象返回,create 的调用方会用父类接口接收 create 返回的具体子类。简单工厂好处(1)客户端不需要掌握所有子

2021-04-26 11:11:36 455

原创 剑指Offer——13机器人的运动范围(两种优化:1、仅下和右两种方向,2、数位和的计算基于前一个位置的数位和)

剑指 Offer 13. 机器人的运动范围bug别忘了对走过的位置进行标记,防止重走死循环优化仅走下和右两个方向 基于上个位置的数位和,计算当前位置的数位和难度中等276地上有一个m行n列的方格,从坐标[0,0]到坐标[m-1,n-1]。一个机器人从坐标[0, 0]的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=...

2021-04-23 22:04:11 58

原创 leetcode——两数之和 I、II(167)(有序双指针+无序HashMap)

两数之和总结:1、数组本身有序,用双指针(两边向中间夹)2、数组无序(要求返回下标),则不适合先排序再双指针夹逼,而是用HashMap保存目标值。public int[] twoSum(int[] numbers, int target) { //两数之和总结:1、数组本身有序,用双指针(两边向中间夹)2、数组无序(要求返回下标),则不适合先排序再双指针夹逼,而是用 HashMap 保存目标值。 int[] result=new int[2]; ...

2021-04-22 21:45:12 92

原创 异步共识

任务:考虑将异步共识(小飞象)融入系统中(1)什么是异步共识,与同步、半同步的区别 (2)异步共识的优缺点,什么情况下适合使用异步共识 异步共识1、什么是异步共识异步共识是指在共识协议的设计中,不对网络能力进行假设(符合真实网络情况,即消息可能在任意时间后到达),为了更清除的解释,在这里对比非异步共识:假设消息会在一定时间范围内到达,若超过某个时间阈值(系统根据网络能力进行设定)之后,没有收到某个期待的消息,则认为消息并未被发出,从而推断消息发送方出现异常。那么非异步共识...

2021-04-22 21:27:45 1542

原创 SDN 网络攻击实验、网络安全学习、SDN 安全讨论——参考链接

参考链接:基于SDN的DDoS攻击检测与防御:https://zhuanlan.zhihu.com/p/270995073(MIninet,SDN 在控制 DDoS 攻击中的作用,下发流表 drop 恶意流量) 请问一下各位网络大佬,学习SDN技术需要什么能力?:https://www.zhihu.com/question/431158823/answer/1585885850(VXLAN基础和EVPN基础) 基于模拟实验理解SDN与传统路由交换网络的关系:https://blog.csdn.net

2021-04-22 17:57:43 746

原创 leetcode——脑筋急转弯(萝卜坑)——剑指03、41、448、442

剑指 Offer 03. 数组中重复的数字难度简单384找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 思路应该首先沟通题目要求:1、不要求空间,要求速度则用hash法(遍历数组,将元素存入hashSet中,遇到Set已经...

2021-04-21 10:58:05 256

原创 leetcode——单调递增栈——862. 和至少为 K 的最短子数组

思路:求的是和至少为 K 的连续最短子数组,首先利用数组prefixSum保存【0~i】的前缀和为多少,容易知prefixSum[j]-prefisxSum[i],表示 i+1~j 的和,因此将问题转化为求以 不同元素结尾时的和至少为 K 的连续最短子数组,要求这个 result[j]其实就是比较所有prefixSum[j]-prefixSum[i](i<j)的情况,如果前缀和相减大于等于 K,则符合情况,将该区间长度与最短长度进行比较,可以直到对于prefixSum[j]-prefixSum[.

2021-04-17 11:48:59 131

原创 leetcode——链表操作——138.复制带随机指针的链表

思路方法1:建立原——新映射关系,遍历到某节点时,不仅创建该节点,还创建其后的random节点方法2:将新节点放在原节点后面,然后再分离 思路:不是一次遍历,对每个进行处理的时候再创建新节点,而是两次遍历,第一次创建所有新节点,第二次再修改指向;不然必须修改源节点 关键!!!将链表分离的方法(将间隔节点连在一起,分成两个链),既得到克隆链,又还原原链子(不还原原链子会报错) 题目给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可...

2021-04-16 18:19:12 96

原创 个人博客开发

先进行页面设计和开发,以驱动后端开发技术:CodeGenerator 自动生成对表的增删改查——mybatis-plus 插件 统一结果封装 Result 类 shiro+jwt(登录时,后端校验通过则返回 jwt,后续客户端请求携带 jwt 作为身份凭证);过滤器JwtFilter处理 jwt(有则交给shiro登录处理:将 jwt 封装成 token、利用shiro的 manager 进行登录 。如果发现 jwt 异常,则解析 Jwt,获取用户 ID,利用 ID 从数据库中找到用户数据,判

2021-04-14 20:25:31 401

转载 跨域资源共享Cors

跨域资源共享CorsCORS是什么跨域资源共享(CORS,Cross-origin resource sharing),是W3C标准,是一种机制,它使用额外的HTTP头来告诉浏览器,让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。http://localhost:9000请求http://localhost:8761/eureka/...

2021-04-14 11:13:32 464

转载 CSRF(Cross-site request forgery)跨站请求伪造详解(好文章,美团技术团队)

背景随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点。在移动互联网时代,前端人员除了传统的 XSS、CSRF 等安全问题之外,又时常遭遇网络劫持、非法调用 Hybrid API 等新型安全问题。当然,浏览器自身也在不断在进化和发展,不断引入 CSP、Same-Site Cookies 等新技术来增强安全性,但是仍存在很多潜在的威胁,这需要前端技术人员不断进行“查漏补缺”。前端安全近几年,美团业务高速发展,前端随之面临很多安全挑战,因此积累了大

2021-04-13 19:29:15 1164

原创 linux——make

如果没有 make,在对一个包含了其他文件(目标文件)的文件 main进行编译之前,需要对目标文件先进行编译,然后进行链接产生 main可执行文件。make 工具使用方法(1)写好 makefile 文件(包含 main 的目标文件)(2) 使用make工具makefile 语法规则那个标的 (target) 就是我们想要创建的信息,⽽⽬标⽂件就是具有相关性的 object files ,那创建可执⾏⽂件的语法就是以 <tab> 按键开头的那⼀⾏!特别给他留意喔,“命.

2021-04-12 15:15:55 200

原创 leetcode——二叉树——94中序遍历

1、递归 List<Integer> result=new LinkedList<Integer>(); public List<Integer> inorderTraversal(TreeNode root) { helper(root); return result; } public void helper(TreeNode root){ if(root==null) return

2021-04-11 17:06:13 70

原创 leetcode——从后数组归并——88. 合并两个有序数组

思路简单思路为两个数组归并到新数组,再将旧数组元素依次替换成新的即可为不占用额外空间,两数组均从后往前找大元素放在原数组的后面。88. 合并两个有序数组难度简单910给你两个有序整数数组nums1和nums2,请你将nums2合并到nums1中,使nums1成为一个有序数组。初始化nums1和nums2的元素数量分别为m和n。你可以假设nums1的空间大小等于m + n,这样它就有足够的空间保存来自nums2的元素。clas...

2021-04-10 20:16:36 96

原创 leetcode——动态规划——322. 零钱兑换

思路:dp[i]表示 金额 i 的硬币组合的硬币最小数量,dp[i]=min(dp[i-coin[j]+1),coin[j]表示不同硬币面额322. 零钱兑换难度中等1191给定不同面额的硬币coins和一个总金额amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。class Solution { public int coinChange(int[] coins,...

2021-04-10 15:57:09 115

原创 leetcode——脑筋急转弯类(规律类)——470. 用 Rand7() 实现 Rand10()

已有方法rand7可生成 1 到 7 范围内的均匀随机整数,试写一个方法rand10生成 1 到 10 范围内的均匀随机整数。不要使用系统的Math.random()方法。/** * The rand7() API is already defined in the parent class SolBase. * public int rand7(); * @return a random integer in the range 1 to 7 */class Solu...

2021-04-10 00:24:54 100

原创 leetcode-找规律类题目(脑筋急转弯)-48旋转(图形)二维数组

48. 旋转图像难度中等852给定一个n×n的二维矩阵matrix表示一个图像。请你将图像顺时针旋转 90 度。你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。思路首先发现:(1)规律1“第 i 行变为第 n-1-i列,其原来在哪一列,转后就在哪一行”,即发现m[i][j]->m[j][n-1-i];(2)且四个元素为一组,即四个元素会互相转,即元素1 m[i][j]会转到元素2 m[j][n-1-i],2会转到3 [...

2021-04-09 19:15:40 236

原创 leetcode-实现数据结构-用栈实现队列

232. 用栈实现队列思路:利用两个栈,一个栈 inStack保存新加入的数据,当需要 pop 或者 peek 栈内最先入栈的元素时,将inStack 中的元素倒入(从顶弹出)outStack 中,即保证再 outStack 中先入 inStack 的元素在outStack栈顶,然后将outStack栈顶弹出或者返回值。难度简单381请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现MyQueue类:void pu..

2021-04-09 11:28:41 143

原创 leetcode-归并排序-148排序链表

148. 排序链表对链表进行归并排序:归并排序分为自顶向下(将整个拆成两半,利用递归分别对两半进行排序,然后再对排好的两半进行合并,层层递归直到元素大小为1——不可拆分再返回其本身),合并时,对两半从头到尾的方式进行合并(双指针法,指针交替前行,比较两指针指向元素的大小)还可以自底向上,我一般用自顶向下(二分+递归)归并排序的时间复杂度为 O(nlogn)难度中等1082给你链表的头结点head,请将其按升序排列并返回排序后的链表。进阶:你可以在O(nlo...

2021-04-09 11:24:22 78

原创 单调栈——求区间最小数乘区间和的最大值(单调增)

思路:计算目标:计算以不同数作为区间最小数时,对应最大区间的(区间和*最小数)的值(因为最小数是固定的,最后要求的结果一定属于最小数*最大区间之和,因此找最大区间即可)。数组元素依次入栈,当当前元素小于栈顶时,可以对栈顶元素作为最小数的情况进行计算(因为此时栈顶元素>其栈内前面的元素,且栈顶元素>当前元素,即栈顶元素作为最小数的区间范围可以确定:栈顶元素对应的下标~当前元素之前),对栈顶元素计算完之后,将其弹出,然后继续对栈顶元素进行判断。直到栈空。类似的题目有:接雨水:(单调.

2021-04-08 11:10:49 787

原创 计算数组的小和——程序员代码面试指南

题目描述数组小和的定义如下:例如,数组s = [1, 3, 5, 2, 4, 6],在s[0]的左边小于或等于s[0]的数的和为0;在s[1]的左边小于或等于s[1]的数的和为1;在s[2]的左边小于或等于s[2]的数的和为1+3=4;在s[3]的左边小于或等于s[3]的数的和为1;在s[4]的左边小于或等于s[4]的数的和为1+3+2=6;在s[5]的左边小于或等于s[5]的数的和为1+3+5+2+4=15。所以s的小和为0+1+4+1+6+15=27给定一个数组s,实现函数返回s的小和

2021-04-07 22:33:15 228

原创 36进制加法、10进制加法(leetcode-416)

思路:不论是几进制加法,方法都是从两个字符串的末尾开始遍历,将个位数加进 stringbuilder,若有进位则记录(供下次两字符相加时加上这个进位),最后再将 stringbuilder 反转。技巧:不需要判断字符串的谁长谁短,只需要用 i、j(当前遍历字符的下标),当 i或 j 下标越界,即不满足>=0的时候(不再对该字符串进行操作即可:不加上字符串中的字符、不对 i、j 进行增减操作);415. 字符串相加难度简单350给定两个字符串形式的非负整数num1和num2,计...

2021-04-07 20:23:11 469

原创 二叉树的下一个结点

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针(next)。public class Solution { public TreeLinkNode GetNext(TreeLinkNode pNode) { if(pNode.right!=null){ TreeLinkNode p=pNode.right; while(p.left!=null.

2021-04-07 19:40:24 55

原创 整数与IP地址间的转换

整数与IP地址间的转换思路:(1)ip 地址转整数:将 ip 地址按"."分割,对分割的四个字符串均利用Long.parseLong转位数字,对数字分别左移到相应的位置,然后用|拼接即可得到最终的整数,也可以每拼接一个字符串移动8位(2)整数转 ip:将整数与255进行&运算得到最后8位对应的数字,进行3次右移,每次移动8位,得到相应位置对应的数字,然后拼接字符串StringBuilder对象可直接拼接数字。知识点1、String.split用法与转义字符'.'“.”和“|

2021-04-07 17:36:43 1010

原创 leetcode-二分查找-69 x 的平方根

69. x 的平方根利用二分查找的思想,一般 x 的平方根都小于 x 的一般,因此二分查找范围:[0,x/2],对于 x==1的情况,则是[0,x],或者直接将 right 统一为 x/2+1;然后判断中间点middle,如果(long)middle*middle(这里需要设置为 long 类型)等于 x,则直接返回 middle,若小于 x,则将左范围 left=middle( middle 可能为最终结果,因此middle 不能排除在搜索范围之外,这里需要注意防止 middle 永远为 lef

2021-04-07 12:20:18 90

转载 Redis

一、概述Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能。二、数据类型 数据类型 可以存储的值 操作 STRING 字符串、整数或者浮点数

2021-04-06 17:20:55 78

转载 MYSQL

https://zhuanlan.zhihu.com/p/54102723知乎(什么是 B+树?)B+树的特征:1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。2.所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。B+树的优势:1.单一节点存储更多的元素,使得查询的IO..

2021-04-06 11:51:00 131

转载 关系型数据库

一、事务概念事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。事务能够简化我们的编程模型,不需要我们去考虑各种各样的潜在错误和并发问题.可以想一下当我们使用事务时,要么提交,要么回滚,我们不会去考虑网络异常了,服务器宕机了,同时更改一个数据怎么办对吧?因此事务本质上是为了应用层服务的.而不是伴随着数据库系统天生就有的.ACID1. 原子性(Atomicity)事务被视为不可分割的最小单元,事务的所有..

2021-04-02 19:33:16 3236

转载 Java面试题-JVM 和服务器性能评估

1、JVM垃圾回收的时候如何确定垃圾?是否知道什么是GC Roots垃圾指的是内存中不再使用的空间(主要指的就是堆内存),确定垃圾的方法有引用记数法和可达性分析法(但引用计数法存在对象之间循环引用的问题,因此 java 使用可达性分析法),可达性分析法指的是从 GC Roots 对象开始向下搜索,如果一个对象不是 GC Roots 对象,并且到 GC Roots 对象没有任何引用链相连,则说明此对象不可用,被视为待回收的垃圾对象。 什么是垃圾? 内存中已经不再使用到的空间就是垃圾

2021-03-31 17:01:25 342

转载 linux

常用操作1. 学会使用命令帮助在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档; linux系统内置的帮助文档很详细,通常能解决我们的问题,我们需要掌握如何正确的去使用它们;在只记得部分命令关键字的场合,我们可通过man -k来搜索; 需要知道某个命令的简要说明,可以使用whatis;而更详细的介绍,则可用info命令; 查看命令在哪个位置,我们需要使用which; 而对于命令的具体参数及使用方法,我们需要用到强大的man;1. --hel

2021-03-31 12:14:55 331

转载 JVM 概述(体系结构、栈、堆、GC 三大算法)、JVM 参数(XX 参数介绍、调参、查看参数方法)

一、JVM 概述熟悉JVM架构与GC垃圾回收机制以及相应的堆参调优,有过在linux进行系统调优的经验JVM是运行在操作系统之上的,他与硬件没有直接的交互。二、JVM体系结构概览运行数据区包括方法区、堆、本地方法栈、java 栈、程序计数器这五个部分。其中,(1)方法区用于保存类的元结构信息(保存所有定义的方法的信息,以及类中定义的静态变量、常量、运行时常量池等)、(2)堆内存中存放实例变量,(3)本地方法栈用于处理标记为 native 的代码,(4)程序计数器作为一个指针(指向.

2021-03-30 20:14:56 179

原创 leetcode 技巧点、常用方法、容易忘知识点总结

1.while(size--)在层序遍历中的应用层序遍历时不要用两个队列来回替换,用size,节省空间199. 二叉树的右视图https://leetcode-cn.com/problems/binary-tree-right-side-view/

2021-03-30 11:49:21 289

空空如也

空空如也

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

TA关注的人

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