java中的sleep、wait、yield、join之间的区别
1 区别在java中,sleep()和yield()方法是Thread类中的方法,而wait()是Object类中的方法。也就是说,在java中,所有的类都有wait()方法,而只有继承了Thread类的方法才有sleep()和yield()方法。
2 其中sleep()和wait()的区别
sleep()方法用于短暂暂停线程的运行,而wait()方法用于线程间的通信
更主要的区别是:
线程调用sleep()方法后,当前线程不会释放其持有的资源
线程调用wait()方法后,当前线程会释放其持有的资源
sleep()是一个静态方法,作用在当前线程上;而wait()是一个实例方法,并且只能由其他线程调用本实例的notify()或者notifyAll()方法后才能被唤醒。且如果线程调用sleep()方法被唤醒后,会立刻进入就绪状态,而调用wait()方法的线程则不会立刻进入,而是先获得同步锁,然后才进入就绪状态。
wait()只能在同步环境中被使用,而sleep()没有限制,可以在任何地方使用
wait()方法针对的是一个呗同步代码块加锁的对象,而sleep()针对的是一个线程进 ...
剑指 Offer 54. 二叉搜索树的第 k 大节点
1 题目
给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:
输入: root = [3,1,4,null,2], k = 1 3 / \1 4 \ 2输出: 4示例2:
输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \2 4 / 1 输出: 4
限制:
1 ≤ k ≤ 二叉搜索树元素个数
作者:画手大鹏链接:https://leetcode-cn.com/leetbook/read/illustrate-lcof/xspy8 ...
剑指 Offer 28. 对称的二叉树
1 题目
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ \2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ \2 2\ \3 3示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3]输出:false限制:0 <= 节点个数 <= 1000注意:本题与主站 101 题相同:https://leetcode-cn.com/problems/symmetric-tree/作者:画手大鹏链接:https://leetcode-cn.com/leetbook/read/illustrate-lcof/xsrxq1/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
...
二叉树的序列化和反序列化
1 题目
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。
请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
示例:
你可以将以下二叉树:
1
/ \ 2 3 / \ 4 5
序列化为 “[1,2,3,null,null,4,5]”提示: 这与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。
说明: 不要使用类的成员 / 全局 / 静态变量来存储状态,你的序列化和反序列化算法应该是无状态的。
作者:力扣 (LeetCode)链接:https://leetcode-cn.com/leetbook/read/20 ...
剑指 Offer 19. 正则表达式匹配
1 题目
请实现一个函数用来匹配包含’. ‘和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”abaca”匹配,但与”aa.a”和”ab*a”均不匹配。
示例 1:
输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。示例 2:
输入:s = “aa”p = “a*”输出: true解释: 因为 ‘*’ 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 ‘a’。因此,字符串 “aa” 可被视为 ‘a’ 重复了一次。示例 3:
输入:s = “ab”p = “.“输出: true解释: “.“ 表示可匹配零个或多个(’*’)任意字符(’.’)。示例 4:
输入:s = “aab”p = “cab”输出: true解释: 因为 ‘*’ 表示零个或多个,这里 ‘c’ 为 0 个, ‘a’ 被重复一次。因此可以 ...
什么是幂等性
1、概述幂等性原本是数学上的概念,即使公式:$f(x)=f(f(x))$ 能够成立的数学性质。用在编程领域,则意为对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。
幂等性是分布式系统设计中十分重要的概念,具有这一性质的接口在设计时总是秉持这样的一种理念:调用接口发生异常并且重复尝试时,总是会造成系统所无法承受的损失,所以必须阻止这种现象的发生。
幂等有两个维度:一是空间维度上的幂等,即幂等对象的范围,是个人还是机构,是某一次交易还是某种类型的交易…二是时间维度上的幂等,即幂等的保证时间,是几秒、几分钟还是永久性的…
不同的需求,会有不一样的解决方案,难度和成本也不一样。
2、幂等性适用领域试想这样的一种场景:在电商平台上支付后,因为网络原因导致系统提示你支付失败,于是你又重新付款了一次,等完成后检查网银发现被系统扣了两次款,这是一种什么样的体验?
造成上述问题的原因可能有很多,比如第一次付款时实际支付成功,但是信息返回时网络中断导致系统误判;又比如第一次付款的确失败了,但第二次付款时发生意外,导致支付请求被重复发送等等。在一次支付的过程中,每个 ...
next permutation 下一个全排列
1 31. 下一个排列
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。
以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/next-permutation著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2 解释思路从后往前遍历数组,找到第一个小于当前索引位置的数,假设当前索引是$i$,则找到$i-1$,有以下三种情况:
$i==nums.length$,说明数组是一个升序数组,直接交换$nums[i]$和$nums[i-1]$的位置即可,如$123$->$132$
$0<i<nums.length$,说明这样的数在数组中间,直接从第$[i…nums.length]$的数中找到一个大于且仅大 ...
java消息队列的作用
消息队列的使用场景:异步、削峰(负载均衡)、解耦。
1 异步(提升系统相应速度)场景一:当电商购物的过程中,需要付款,那么付款就是一个简单的流程,假如说需要花费$100ms$。由于现在都是基于微服务开发的应用,那么每添加一个新的功能,就相应会多一个新的微服务系统,各个微服务系统之间的通信协作就会花费较多时间。那么当后期需要添加新功能时,可能会添加**优惠券系统($100ms$)、积分系统($100ms$)**等。可能一次付款成功的操作会有十几个相应的非主流业务也要执行,如果使用同步的方式那么会消耗很长的时间,所以这个时候使用消息中间件来进行异步执行各个非主流的业务。这样整个下单过程就会值消耗$100ms$的时间,而所有的非主流业务都执行了。
2 削峰(负载均衡,抵抗请求高峰时期)假如某个服务器只能承受5000的访问量,那么当此时有8000的访问量时,那么当前的服务器一定会宕机,如果使用消息中间件,将所有的请求流量添加到消息中间件中,此时由服务器去消息中间件中取请求的事件,此时服务器可以根据当前的总请求数进行协调与均衡,不至于让服务器宕机。比如淘宝双十一凌晨12点时,此时流量会瞬间暴 ...
TCP/IP协议中的三次握手和四次挥手
1 三次握手在TCP/IP协议中,由于需要建立安全且稳定的连接,所有需要进行多次确认。
第一次握手:客户端需要与服务端建立连接,此时客户端会向服务端发送一个连接请求,即将请求头中的SYN字段设置为1,表示需要建立请求,并发送一个客户端的32位的序列号seq1(该序列号由主机随机生成),该序列号用于后续客户端向服务端发送数据时给数据包的一个序列号,服务器端可以通过判断当前序列是否在某一个区间内,如果不在该区间内,表示当前的数据包不是当前客户端发送是数据,可以直接丢弃。
第二次握手:服务端接收到客户端的请求,向客户端发送一个确认建立连接的请求,将请求头中的ACK字段设置为1,并在客户端的序列号seq1的基础上进行加1的操作,客户端通过该序列号来确认是否是一个可信的服务器发送回来的请求,在确认信息中,服务器端也会发送服务端的一个序列号,该序列号用于发送数据时的数据包的编号,每发送一个序列号编号加1。
第三次握手:由于客户端向服务端发送了一个需要建立连接的请求,此时服务器端表示同意建立建立,向客户端返回了一个确认信息,此时客户端已经准备好和服务端建立连接了,但是服务端还没有收到来自客户端 ...
全面解析RNN,LSTM,Seq2Seq,Attention注意力机制
本文将会使用大量的图片和公式推导通俗易懂地讲解RNN,LSTM,Seq2Seq和attention注意力机制(结合colah’s blog 和CS583),希望帮助初学者更好掌握且入门,若有已经掌握RNN,LSTM的读者自行跳过阅读即可,更详细的讲解在Seq2Seq,Attention那。
目录
RNN
LSTM
Seq2Seq
注意力机制
参考
1 RNN(递归神经网络)我们知道人类并不是从零开始思考东西,就像你读这篇文章的时候,你对每个字的理解都是建立在前几个字上面。你读完每个字后并不是直接丢弃然后又从零开始读下一个字,因为你的思想是具有持续性的,很多东西你要通过上下文才能理解。
然而传统的神经网络并不能做到持续记忆理解这一点,这是传统神经网络的主要缺点。举个例子,你打算使用传统的神经网络去对电影里每个时间点发生的事情进行分类的时候,传统的神经网络先让不能使用前一个事件去推理下一个事件。
RNN(递归神经网络)可以解决这个问题。他们是带有循环的神经网络,允许信息在其中保留。
在上图中,A代表神经网络主体,表示网络的输入,表示网络的输出。循环结构允许信息从当前输出传递到下一次 ...