自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高并发之限流

限流是什么?在生活中,其实限流的日子随处可见,比如姜云升的演唱会只能容纳500人,那么在演唱会中就不能出现超过500人,因为场地只能容纳这么多,如果多了就会发生拥挤或者各种问题。在程序中的体现则是: 每秒请求数,每秒事务处理数,网络流量等等。我们常说的限流指代的是: 限制达到系统的并发请求数,能让系统正常处理部分用户的请求,保证系统的稳定性。但是不可避免的会让一些用户的请求变慢或者被拒绝影响用户体验的情况。为什么需要限流?前面说到 限流是为了保证演唱会能正常进行,保证系统能够稳定的运行。那么

2021-05-06 18:00:52 200 1

原创 每日一题--1208. 尽可能使字符串相等

题目给你两个长度相同的字符串,s 和 t。将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。用于变更字符串的最大预算是 maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。如果你可以将 s 的子字符串转化为它在 t 中对应的子字符串,则返回可以转化的最大长度。如果 s 中没有子字符串可以转化成 t 中对应的子字符串,则返回 0。示例 1:输

2021-02-05 11:26:32 173

原创 java 基础知识之反射

一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。ps.框架的灵魂二 获取类的Class实例的方式想要创建一个对象,首先要获取类的class实例才能进行反射创建通过Class.forName(“类的全限定名”) 来获取Class<Demo> demoClass = (Class<Demo>) Cla

2020-10-23 20:26:16 159

原创 RabbitMq入门

介绍MQ 全称为 Message Queue,即消息队列,RabbitMQ 是由 Erlang 语言开发,基于 AMQP(Advanced Message Queue Protocol ,高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛,RabbitMQ 官方地址 https://www.rabbitmq.com/什么是 AMQP?AMQP,即 AMQP(Advanced Message Queue Protocol ,高级消息队列协议),一

2020-10-16 15:11:34 132 1

原创 RabbitMQ 安装的坑

发生系统错误 1067 导致服务启动失败解决方案:删除C:\Users{username}.erlang.cookie 和 C:\Windows\System32\config\systemprofile.erlang.cookie 两个文件 就可以启动成功了

2020-10-15 10:09:19 87

原创 神州信息笔试 2020年9月28日

第一题任取数组中的一个数然后将它放置在数组的最后一个位置。问最少操作多少次可以使得数组从小到大有序?题解排序后 两个数组对比找相同的元素,不同的代表已经换了位置 记录相同的 然后用length 减去就行代码#class Solution: def sort(self, inData): arr = list(map(int,inData.split())) arrSort = sorted(arr) cnt = 0 i =

2020-09-28 20:14:46 1367 2

原创 git 常用命令

git branch 查看本地所有分支git status 查看当前状态git commit 提交git branch -a 查看所有的分支git branch -r 查看远程所有分支git push origin master 将文件给推到服务器上git checkout --track origin/dev 切换到远程dev分支git branch -D master develop 删除本地库developgit checkout -b dev 建立一个新的本地分支devgit me

2020-09-28 09:39:21 163 1

原创 记数据库SQL实战--解题&感想

题目查找入职员工时间排名倒数第三的员工所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天select * from employees order by hire_date desc limit 2,1收获order by 用于排序 asc 升序,desc 降序 默认升序limit 两个参数 第一个参数是从第几个开始(索引从0开始),第二个参数是取几个题目查找薪水变动超过15次的员工号emp_no以及其对应的变动次数tselect emp_no,count(salar

2020-09-28 09:08:22 100

原创 java面经之网络

1.三次握手和四次挥手的过程?每次发送的包的内容,客户端和服务端的状态?三次握手1.客户端向服务器发送 syn =1 seq = x 发送完毕 客户端进入 syn_send状态​ 2.服务器接收到数据包 回复一个syn =1 ack=1 seq=y,acknum = x+1 发送完毕 服务端进入 syn_rcvd状态​ 3. 客户端收到以后回复一个 ack=1 acknum = y+1 发送完毕后客户端进入 established状态 ,当服务器接收到> > 这个包 也进入es

2020-09-26 16:22:26 114 1

原创 LeetCode 3. 无重复字符的最长子串

题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。题解滑动

2020-09-26 11:21:40 98

原创 针对不想学习的解决方案( 看了的都说好!)

不想学习,解决方案,学习肯定要学习啊

2020-09-26 09:35:17 174 2

原创 LeetCode 553. 最优除法

问题给定一组正整数,相邻的整数之间将会进行浮点除法操作。例如, [2,3,4] -> 2 / 3 / 4 。但是,你可以在任意位置添加任意数目的括号,来改变算数的优先级。你需要找出怎么添加括号,才能得到最大的结果,并且返回相应的字符串格式的表达式。你的表达式不应该含有冗余的括号。示例:输入: [1000,100,10,2]输出: “1000/(100/10/2)”解释:1000/(100/10/2) = 1000/((100/10)/2) = 200但是,以下加粗的括号 “1000/(

2020-09-26 09:18:10 91

原创 LeetCode 567. 字符串的排列

题目给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1:输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”).示例2:输入: s1= “ab” s2 = “eidboaoo”输出: False注意:输入的字符串只包含小写字母两个字符串的长度都在 [1, 10,000] 之间思路最开始使用的是全排列,然后比较的时候发现T了

2020-09-26 09:09:01 996

原创 113 LeetCode 路径总和

题目给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]题解可以直接用dfs 所有 运用一个数组来记录路径

2020-09-26 08:39:05 61

原创 LeetCode 513. 找树左下角的值

问题给定一个二叉树,在树的最后一行找到最左边的值。示例 1:输入:2/ \1 3输出:1示例 2:输入: 1 / \ 2 3 / / \4 5 6 / 7输出:7来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-bottom-left-tree-value著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路我们可以使用层序遍历的方式

2020-09-22 20:44:52 78

原创 LeetCode 508. 出现次数最多的子树元素和

题目给你一个二叉树的根结点,请你找出出现次数最多的子树元素和。一个结点的「子树元素和」定义为以该结点为根的二叉树上所有结点的元素之和(包括结点本身)。你需要返回出现次数最多的子树元素和。如果有多个元素出现的次数相同,返回所有出现次数最多的子树元素和(不限顺序)。示例 1:输入:5/ \ 2 -3返回 [2, -3, 4],所有的值均只出现一次,以任意顺序返回所有值。示例 2:输入:5/ \2 -5返回 [2],只有 2 出现两次,-5 只出现 1 次。提示: 假设任

2020-09-22 20:24:12 109

原创 Java每日30面试题---2020年9月22日

HashMap 与 ConcurrentHashMap有什么区别HashMap和ConcurrentHashMap 最大的区别就是 ConcurrentHashMap是一个线程安全的map 而hashmap不是线程安全的。而且concurrentHashMap是一个读写分离的模式,每次扩容的时候都让线程去帮忙扩容,而hashmap 还是正常库容,hashmap的get是从table中拿的。HashMap 插入元素的过程当触发一个put(key,value)方法的时候,他会调用一个put..

2020-09-22 09:26:22 144 1

原创 快速幂--有手就行

以前不会快速幂,自从被笔试吊打以后 学了一波快速幂 发现好简单。要知道2^10 = 2^5 * 2^52^5 = 2 * 2^42^4 = 2^2 * 2^22^2 = 2^1 * 2^12^1 = 2 * 2^0根据这个就可以得到一个递推了def binaryPow(a,b,c): if b==0: return 1 elif b&1 == 1: return a * binaryPow(a,b-1,c)%c else:

2020-09-20 22:59:52 91

原创 Java每日30面试题--2020年9月18日

StringBuilder 和StringBuffer的区别StringBuider和StringBuffer都是字符串变量,比较大的区别就是StringBuider是非线程安全的,StringBuff则是线程安全的Object类里面的方法wait()notify()notifyall()clone()equals()finalie()getClass()hashCode()toString()==和equals的区别== 比较的地址的引用equals 如果没有重..

2020-09-18 21:02:05 184

原创 剑指offer --二叉树的镜像

解法解法很简单 只要root的左子树 等于 root的右子树,root的右子树 等于左子树就行了 ,用临时结点记录一下就ok代码/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution

2020-09-11 09:27:15 72

原创 剑指offer -- 从上往下打印二叉树

解法层序遍历二叉树,用队列实现 每次弹出队列的头,然后把他的左右孩子放入队列。直到队列为空代码import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public clas

2020-09-11 09:25:59 42

原创 剑指offer -- 反转链表

##解法链表 1->2->3->4我们可以先把 当前指针的结点给脱落,将脱落的结点御用头插法重新组成链表就OK了。代码/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode ReverseList(Lis

2020-09-11 09:24:21 50

原创 设计LRU缓存结构--题解

解法样例 [[1,1,1],[1,2,2],[1,3,2],[2,1],[1,4,4],[2,2]],3第一个数字 1 代表 set方法, 2 代表 get方法第二个第三个 代表 key value最后一个数字是 k 代表长度 只能容纳多少个key value。输入的是 每次get的值。 如果找不到就是-1;本质上还是运用双向链表实现 LRU ,HashMap 只是为了更快的查询到key[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9cNYCfqa-159978

2020-09-11 09:22:39 148

原创 剑指offer -- 判断链表中是否有环

解法快慢指针的解法, 一个指针走两步 一个指针走一步,如果快指针直接到了null 说明没有环, 如果有环的话 总有一次结果会让快指针和慢指针相等。代码/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * }

2020-09-11 09:22:00 322

原创 剑指offer--删除链表倒数第K个结点

解法可以通过快指针先走K步 慢指针先指向head,导致 快指针和慢指针相差K个结点,然后快指针移到末尾 这个时候慢指针就是倒数第K个结点了。然后在遍历的时候 记录下慢指针的前一个结点,用来删除就OK了。代码import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * } */public class Solution { /** * *

2020-09-11 09:20:19 87

原创 剑指offer--把二叉树打印多行

解法运用两个队列解决这个层序遍历的问题,工作队列永远是当前输出的那一层,还有一个辅助队列是用来存储孩子结点。如果工作队列空了,在看辅助队列有没有孩子结点。代码import java.util.ArrayList;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.va

2020-09-11 09:18:59 57

原创 剑指offer -- 两个链表的第一个公共结点

解法1运用一个map 存储第一个链表的所有结点,然后遍历第二个链表 看结点是否存在key中代码/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/import java.util.HashMap;public class Solution { public ListNode FindFirstCo

2020-09-11 09:18:24 43

原创 剑指offer--二叉树的最大深度

解法通过递归的方式获取到左子树的长度 和右子树的长度 ,然后比较谁大 最后将结果 加上根节点的深度1代码/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { public

2020-09-11 09:17:06 80

原创 剑指offer--平衡二叉树

解法平衡二叉树的概念 是 左子树和右子树的深度的差的绝对值 等于 1.如果不符合这个条件就是不是平衡二叉树我们只需要判断左子树和右子树是否符合条件 就OK了。代码public class Solution { public int depth(TreeNode root){ if(root == null) { return 0; } int left = depth(root.left); if(lef

2020-09-11 09:16:34 79

原创 Redis基础使用&&底层&&面试题

redisredis使用性能优异的原因redis 是基于内存的采用的是单进程单线程模型的kv数据库,由C语言编写的,官方提供的数据是可以达到10W+的qps的(每秒查询次数)完全基于内存,绝大部分的请求是纯粹的内存操作,非常快速,它的数据存在内存中 类似hashmap 的优势 让查找和操作的时间复杂度都是O(1)数据结构简单,对数据操作简单。采用单线程 避免了不必要的上文切换和竞争条件,也不存在多进程或者多线程切换导致的cpu小号,不用考虑各种锁的问题,不存在加锁释放锁的操作,没有因为可能出现死

2020-08-18 14:52:03 299

原创 薪人薪事面经(java开发实习)

一面自我介绍谈谈项目说下ArrayList说下list set区别list set map 都是继承collection接口嘛?他们哪个查询快一点springMVC的理解springMVC的数据流向redis 的理解redis 持久化为什么使用redisredis 和mecache的区别学习过程个人规划二面自我介绍红黑树设计一个多个公司多个部门多个员工 使用的 发帖和屏蔽人的 数据库表线程池项目hr面自我介绍社团管理个人规划意向的城市薪资最讨厌

2020-07-20 15:54:11 470 5

原创 记牛客--猿辅导2019校招技术类笔试题--笔记

1.猿辅导公司某研发小组一共有 12 名同学,其中 9 人能做后端开发,6 人能做前端开发。现在要抽调 4 名同学成立项目小组,负责公司的一项“机密”项目。其中 2 名同学做后端开发,2 名同学做前端开发。有多少种选派方法A.180 B 225 C.432 D 540答案 C解释:一共有12个人 9个做后端 6个前端,说明有3个 会前端也会后端。纯后端 6个纯前端 3个都会有 3个使用总的减去不可能发生的总的情况是 不可能发生的情况:① 3个都会

2020-07-05 20:11:53 641

原创 多线程之线程池ThreadPoolExecutor 源码解析

线程池 源码 看不懂 顺着网线来打我,ThreadPoolExecutor

2020-06-15 20:25:25 128

原创 ConcurrentHashMap 详解(超详细 看不懂你锤我)

ConcurrentHashMap介绍ConcurrentHashMap是一个 在juc包下的 map, 线程安全。 在jdk.1.7 之前采用数组+ 链表的结构 并且采用分段锁机制 来保证线程安全,而jdk1.8之后 他改成了 数组+ 链表+ 红黑树,线程安全方面也改成了 cas+ synchronized 来保证线程安全。下面我们来看看ConcurrentHashMap的 源码是怎样实现的(jdk1.8)属性// 散列表最大容量private static final int MAXIMUM_C

2020-06-14 09:28:12 9380

原创 多线程之FutureTask源码解析

FutureTask介绍个可取消的异步计算。FutureTask提供了对Future的基本实现,可以调用方法去开始和取消一个计算,可以查询计算是否完成并且获取计算结果。只有当计算完成时才能获取到计算结果,一旦计算完成,计算将不能被重启或者被取消,除非调用runAndReset方法。除了实现了Future接口以外,FutureTask还实现了Runnable接口,因此FutureTask交由Executor执行,也可以直接用线程调用执行(futureTask.run())。public class Fut

2020-06-13 10:11:40 87

原创 线程基础Thread类源码解读

ThreadThread类是java在创建多线程的一个类 也是使用的比较多的一个多线程类。Thread类继承了Runnable 接口 实现了多线程。重要属性解读// 标志线程状态 默认为 未启动private volatile int threadStatus;// 线程最低优先级public static final int MIN_PRIORITY = 1;// 默认优先级public static final int NORM_PRIORITY = 5;// 最大优先级publ

2020-06-12 20:47:41 75

原创 jdk8之LongAdder 源码解析

LongAdder 是比AtomicaLong 更高效的原子累加器 是Doug lea大师的作品。目录结构add && increment && decrement 方法 public void add(long x) { Cell[] cs; long b, v; int m; Cell c; // cells 累加单...

2020-04-16 22:05:12 330

原创 java集合框架源码解析之HashSet

代码结构实现了 Set接口public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable属性 // 底层调用map的方法 private transient HashMap<E,Object&g...

2020-04-01 10:28:14 100

原创 深入理解java虚拟机之虚拟机类加载机制

类加载的时机类的生命周期加载连接验证准备解析初始化使用卸载虚拟机规定必须初始化遇到new getstatic putstatic invokestatic 四个字节码指令,如果类没有初始化,则需要先触发初始化。使用场景使用new 关键字 实例化对象读取或者设置一个类的静态字段调用一个类的静态方法的时候使用java.lang.refle...

2020-03-31 22:30:35 81

原创 Redis基本使用

Reids 数据存储格式key : valueVlue数据类型string :Stringkey:string127.0.0.1:6379> set name zxlOK127.0.0.1:6379> get name"zxl"127.0.0.1:6379> del name(integer) 1127.0.0.1:6379> get name(...

2020-03-28 22:07:34 86

空空如也

空空如也

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

TA关注的人

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