自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Idea快捷键查看方法在哪里被调用

点击某个方法,然后ctrl+B就可以看到谁使用到这个方法

2020-05-27 16:26:39 12660 1

原创 为什么说段页式存储融合了两者的优点

为什么需要进行分段:页太小没有整体的含义段页式的由来:分页:cpu拿到的逻辑地址,页号+页内偏移,好处是提高了内存利用率,极大地减少了内存碎片分段:cpu拿到的逻辑地址:段号+段内偏移,与分页不同的是,段表中可以定义一个段的基地址和段大小 好处是,方便于程序运行,例如一个程序跑起来,可以划分为一个主进程,一个栈,还有数据段,以及动态链接等段页式:对于分段,当指定了段大小后,我们如果一次性将内存进行分配,那么内存利用率可能过低。 所以最自然而然的方法是,一块一块的分配,其实也.

2020-05-25 14:14:44 631

原创 辗转相除法求最大公约数

//保证detaX>=0,detaY>=0//注意前面是先判断detaY==0,后面就是detaX%detaY的形式,否则就是先判断detaX==0,后面跟detaY%detaX的形式 private int getGY(int detaX, int detaY) { return detaY==0?detaX:getGY(detaY,detaX%detaY); }...

2020-05-25 08:03:29 273

原创 leetcode经典题目:word-search

题目:给出一个二维字符数组和一个单词,判断单词是否在数组中出现,单词由相邻单元格的字母连接而成,相邻单元指的是上下左右相邻。同一单元格的字母不能多次使用。例如:给出的字符数组=[↵ ["ABCE"],↵ ["SFCS"],↵ ["ADEE"]↵]单词 ="ABCCED", -> 返回 true,单词 ="SEE", ->返回 true,单词 ="ABCB", -> 返回 false.思路:先循环,然后挨个DFS+回溯,这里的回溯使用的是异或运算符,因为ascii码

2020-05-24 15:09:39 770

原创 leetcode经典题目: convert-sorted-list-to-binary-search-tree

题目:给定一个单链表,其中的元素按升序排序,请将它转化成平衡二叉搜索树(BST)思路:递归,通过快慢指针求出middle,可以通过额外一个指针,每次都比middle慢一拍,拿到midlle前面的节点。注意这里的middle一定要是一半或一半+/-1。在本题的解法中middle等于恰好中间节点或者第len/2+1个节点。如何得到这个结论?只需要这样考虑,初始时,slow为head, fast为head。然后,slow每走一步,奇数情况下,fast刚好能走到最后一个节点,此时slow刚好落在中间节点,偶

2020-05-24 14:46:34 78

原创 leetcode经典题目:balanced-binary-tree

题目:判断给定的二叉树是否是平衡的在这个问题中,定义平衡二叉树为每个节点的左右两个子树高度差的绝对值不超过1的二叉树思路:递归,不平衡的子树返回-1 boolean flag=false; public boolean isBalanced(TreeNode root){ if(root==null) return true; return getDepth(root)!=-1; } private int getHeight

2020-05-24 14:11:29 163

原创 leetcode经典题目:rotate-list

题目:将给定的链表向右转动k个位置,k是非负数。例如:给定1->2->3->4->5->null , k=2,返回4->5->1->2->3->null。思路:先计算出len,然后首尾相连,从尾走len-n%len步,新head便是p.next ListNode rotateRight(ListNode head,int n){ if(head==null) return null; int

2020-05-24 11:49:47 150

原创 leetcode经典题目:wildcard-matching

题目:请实现支持'?'and'*'.的通配符模式匹配'?' 可以匹配任何单个字符。↵'*' 可以匹配任何字符序列(包括空序列)。↵↵匹配应该覆盖整个输入字符串(而不是部分)。↵函数声明为:↵bool isMatch(const char *s, const char *p)↵↵下面给出一些样例:↵isMatch("aa","a") → false↵isMatch("aa","aa") → true↵isMatch("aaa","aa") → false↵isMatch("aa", "*") → t

2020-05-24 11:25:09 308

原创 leetcode经典题目:multiply-strings

题目:给出两个用字符串表示的数字,将两个数字的乘积作为字符串返回。备注:数字可以无限大,且是非负数https://www.nowcoder.com/profile/641341/codeBookDetail?submissionId=6919337思路:先将对应位的计算结果放到对应位置,然后再进行carry,最后toString public String multiply(String num1,String num2){ int n1=num1.length();

2020-05-24 11:04:05 180

原创 leetcode经典题目:word-breakii

题目:给定一个字符串s和一组单词dict,在s中添加空格将s变成一个句子,使得句子中的每一个单词都是dict中的单词返回所有可能的结果例如:给定的字符串s ="catsanddog",dict =["cat", "cats", "and", "sand", "dog"].返回的结果为["cats and dog", "cat sand dog"].思路:DFS+map缓存结果(没有显示地用到回溯) public ArrayList<String> wordBreak(St

2020-05-24 10:43:08 190

原创 leetcode经典题目:palindrome-partitioning-ii

题目:给出一个字符串s,分割s使得分割出的每一个子串都是回文串计算将字符串s分割成回文分割结果的最小切割数例如:给定字符串s="aab",返回1,因为回文分割结果["aa","b"]是切割一次生成的。思路:动态规划、dp方程dp[i]:表示字串(0,i)的最小回文切割,则最优解在dp[s.length-1]中。分几种情况:1.初始化:当字串s.substring(0,i+1)是回文时,dp[i]=0(表示不需要分隔);否则,dp[i]=i(表示至多分割i次);2. 对于任意大于1的i,如果

2020-05-24 10:26:15 102

原创 leetcode经典题目:gas-station

题目:环形路上有n个加油站,第i个加油站的汽油量是gas[i].你有一辆车,车的油箱可以无限装汽油。从加油站i走到下一个加油站(i+1)花费的油量是cost[i],你从一个加油站出发,刚开始的时候油箱里面没有汽油。求从哪个加油站出发可以在环形路上走一圈。返回加油站的下标,如果没有答案的话返回-1。注意:答案保证唯一。思路:类似于求数组和最大的子序列。累加在每个位置的left+=gas[i]-cost[i].就是在每个位置剩余的油量,如果left一直大于0,则可一直走下去,如果left小于0,那

2020-05-24 10:07:09 453

原创 leetcode经典题目- single-number-ii

题目:现在有一个整数类型的数组,数组中只有一个元素只出现一次,其余元素都出现三次。你需要找出只出现一次的元素注意:你需要给出一个线性时间复杂度的算法,你能在不使用额外内存空间的情况下解决这个问题么?解法:将int型数字看成一个位容器 public int singleNumber(int[] A) { int ones=0; int twos=0; for(int i=0;i<A.length;i++){

2020-05-24 09:53:33 182

原创 leetcode经典题目之word-break

题目:链接:https://www.nowcoder.com/questionTerminal/5f3b7bf611764c8ba7868f3ed40d6b2c?answerType=1&f=discussion来源:牛客网给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。例如:给定s=“leetcode”;dict=["leet", "code"].返回true,因为"leetco

2020-05-24 09:23:17 413

原创 volatile can make common varibles visible before volatile for different threads

The Java Memory model is defined as a set of happens before rules. With a happens before rule you get the guarantee that if ‘a happens before b’ than ‘b will see the effects of a’.So imagine we would have the following code:int a;volatile int b;void f

2020-05-23 17:58:02 66

原创 字符串转换为整数时如何判断接下来是否溢出

public int StrToInt(String str) { if(str==null||str.length()==0) return 0; char[] arr=str.toCharArray(); int flag=1,index=0,sum=0; if(arr[0]=='-'){ flag=-1;index++; }else if(arr[0]=='+'){ index++...

2020-05-23 10:32:05 455

原创 如何将普通类型的数组转为ArrayList

new ArrayList<>(Arrays.asList(new Integer[]{num[i],num[j],num[l],num[r]}))//这里的点在Arrays.asList()方法,看下方法签名// public static <T> List<T> asList(T... a) 如果传入的是普通类型的数组,那么整个数组看成一个对象a,生成的List中的元素类型也就成了List<int []>显然与期望不符,所以我们需要传入

2020-05-22 09:17:31 384

原创 ThreadPoolExecutor,ExecutorService,Executors之间的关系

public class ThreadPoolExecutor extends AbstractExecutorService {public abstract class AbstractExecutorService implements ExecutorService {

2020-05-21 21:04:31 771

原创 典型的线程池工作者线程结构

public void run(){ Throwable thrown=null; try{ while(!isInterrupted) runnableTask.run(); }catch (Throwable e){ thrown=e; }finally { threadExit(this,thrown); } ...

2020-05-21 17:40:21 107

原创 一个线程被创建时可以拿到外部的哪些对象/数据

1.所有类的静态变量(普通变量和对象都可以,前提是访问权限内的)2.创建该线程所在方法的对象public class TestVaribale { private static int y=0; int x=0; Object obj2; public static void main(String[] args) { int p=0; final Object obj=new Object(); new Thread(ne

2020-05-21 16:47:09 227

原创 try catch何时要加返回值 何时不用

抛出异常,try中有返回值,catch后不用加返回值因为未处理异常而是将其抛出,如果没有异常,正常返回future.get(),如果出现异常了,由于你并没有处理异常而是将其抛出,那么异常被抛出,程序执行结束。所以catch块后面不需要返回值。 public ProductInfo get() throws InterruptedException{ try{ return future.get(); }catch(ExecutionExcep

2020-05-20 14:57:02 936

原创 KMP算法及实现

//kmp算法 //算法思路,先整理待匹配的字符串s,next[index]=j,意思是,从j-1往前走的字符串s1==从index往前走同样长度的字符串s2 // 整理next[]的时间复杂度为O(n),s[index+1]的匹配长度要么等于s[index]+1,要么等于s[index]-k1*m1-k2*m2... // 证明思路便是考虑s[index+1]的匹配长度基于s[index]及对其的操作,然后累加可至s[s.length-1]的匹配...

2020-05-20 12:06:25 221

原创 第12章 TCP协议

TCP头部结构:源端口:目的端口:序列号:初始的随机序列号加上分段的数据偏移量确认号:收到的序列号+1头部长度:6位选项:包括请求建立连接,syn,请求断开连接,fin等窗口大小:标识发送方还有多少空间的缓存,接收的主机借此控制发送窗口的大小TCP校验和:紧急指针:补充:面向连接:之所以说TCP是面向连接的是指,TCP在连接前会进行握手,同时它也是有状态的连接面向字节流:TCP不会自动给数据加上消息边界,发送的时候可能分20,30,50字节写入缓存发送,接收到存入缓存后,可能分

2020-05-18 12:22:53 85

原创 第10章 UDP

UDP头部也许你要问源和目的ip地址呢?在IP头部中啊。UDP的校验和是端到端的校验和(ip每一跳后,头部校验和都需要重新计算),在ipv4它是可选的,在ipv6它是强制的。补充:端口号相当于邮箱,仅仅是为了帮助协议辨别发送与接收进程,因此不同协议可以绑定相同的端口号...

2020-05-18 11:57:59 116

原创 网络地址转换(NAT)

NAT本质上是一种允许在互联网的不同地方重复使用相同的IP地址集的机制(得益于特定范围的ip地址不许在网络间使用的规定)。建立NAT的主要动机是正在急剧减少的有限ip地址空间。使用NAT最常见的情况是,唯一与Internet连接的站点被分配了很少的几个IP地址,但是内部却有多台主机需要同时上网。与Internet直接连接的主机通过内部的ip与端口号建立映射从而代理上网。...

2020-05-18 11:41:31 250

原创 第五章 Internet协议

ip数据报格式版本:标识是ipv4还是ipv6IHL:头部长度,表示数据头部32位的数量,只有四位,也就是说ip头部最大为15*32bitDS/ENC:8位,只有区分服务时才设置该字段,比如设置数据报发送的优先级总长度:标识/标志/分片偏移:这是为ip数据分片使用的,如果原数据的标识为xxx,那么所有的分片标识也都是xxx, 标志表明是否还要更多分片以及是否支持分片,分片偏移是该分片首字节在原数据中的偏移。 需要为8的倍数。生

2020-05-18 11:28:28 124

原创 第四章 ARP协议

概述:arp协议提供ip地址到物理地址的一个映射,发送主机拿着ip地址发送一个广播,该主机所在的链路层网段的所有节点都会收到该消息,并且相对应主机会将自己的mac地址发送回去。每个主机和路由器都有arp缓存,默认20分钟到期。ARP帧格式:...

2020-05-18 11:08:35 134

原创 第三章 链路层学到的知识点

以太网帧格式以太网协议规定了一组电信号构成的一组数据包叫做帧,帧包括帧头和数据部分。先是一个SFD字段标志着一个帧的开始,然后是源地址,目的地址,数据长度,协议类型(上层),帧校验序列,然后便是数据部分。以太网帧大小,以及为何设置最大帧一个帧规定了最大与最小的长度,规定最小长度是为了CSMA/CD协议能检测冲突然后随机避让。规定最大长度是考虑到如果数据传输出错最多只需要传输最大帧长度的数据,有效载荷最大为1500字节,但是当数据过大的时候需要分开发送。链路层的流量控制但是不经常使用..

2020-05-18 10:22:36 179

原创 第二章 Internet地址结构学到的知识点

网络前缀的由来为了缓解ip4(尤其是B类地址)的压力,我们可以使用任何未预定义的地址范围作为一个网络,它需要一个类似于子网掩码的掩码,CIDR掩码普通用户分到的ip是临时的,但是服务器 需要永久的ip...

2020-05-18 09:48:56 82

原创 ip地址mac地址为什么都要?

为什么不能只要ip地址?第一是先有的mac,协议应该需要向下兼容。第二,ip地址对应的是五层模型的第三层网络层,如果我们只想搭建一个小型的局域网根本不用出网关,那么根本就用不到ip地址,这时候只需要使用mac地址就够了。为什么不能只要mac地址?mac地址是生厂商焊入网卡的,无法改变,也无法指定。ip地址的好处是他是逻辑的,它方便于划分一个个的小网络。...

2020-05-16 16:01:14 287

原创 第13章 交互式数据分析

13.1 Hive系统数据仓库1. hive表的目录结构: 数据桶式hive数据仓库的最底层,在创建表的时候可以指定根据哪个字段分桶以及分成多少个桶。 hive目录结构: /根目录/table_name/分区名/分桶2. hive任务执行流程: 用户提交命令,编译,根据任务间依赖关系调用执行引擎执行任务。编译时会进行一些优化3. hive慢的原因: 严重依赖于MR,MR不适合迭代型的任务,因为它只能将中间结构储存在磁盘。 ...

2020-05-16 15:42:59 528

原创 第9章 内存k-v数据库

大多数数据库是将数据存储外外存的,但在某些情况下为了加快系统的响应速度,就导致了内存k-v数据库的出现。常见的有redis,memcache。

2020-05-16 15:32:01 328

原创 8.4 文件存储布局

行式存储优点:整行查询不用跨网络缺点:1. 数据整行存储,不能根据某一特定类型进行压缩,压缩效率不高 2. 一些查询只需要某些字段,而行式存储只能将所有字段读出才能找到对应字段列式存储列族存储方式: 对于平面型数据,适合采用列族存储方式。所谓列族,是指将经常要一起使用的字段化为一组,这样即 使是按照列式存储的,也可以将经常使用的数据放到一个数据块中,避免不必要的网络传输。但是依然 不能避免,下面的混合式存储更好的应对了这个问题。混合模式混合式存储布局融合了行式和列式存储各自的

2020-05-16 15:25:51 289

原创 第六章-分布式通信

分布式通信机制主要有三类:序列化与远过程调用,消息队列和多播通信。序列化与远过程调用针对的是网络中不同机器上的进程之间的通信,消息队列的关注点是不同的子系统之间的通信,多播通信主要针对的是P2P环境。这三者都是黏合子系统的有效工具,有利于接触构件之间的耦合。序列化与远过程调用框架IDL是一种节口定义语言,可以实现调用方与被调用方开发语言的解耦消息队列常见消息队列的吞吐量对比:ZeroMQ 10wTPS > Kaffka 4wTPS > RabbitMQ 1wTPS > A

2020-05-16 14:45:00 285

原创 向集合传入基本类型时再删除传入的Obj要和其基本类型对应的类相同

set是Integer类型的,当你想删除对应的值时,不能传入一个char类型的值,因为set的remove方法是这么定义的: boolean remove(Object o);如果传入是基本类型的char,那么编译器会将其转成Char,然后再向上转型成Object。当真正进行删除的时候,是用的hashmap的remove方法: if (p.hash == hash && ((k = p.key) == key || (key != null && key.

2020-05-16 11:21:48 59

原创 第五章 分布式协调系统

chubby暂不表zookeeper 体系结构客户端是通过tcp与zookeeper连接,tcp可以保证客户端的命令是顺序收到的zookeeper通过“重放日志”结合“模糊快照”来对服务器故障进行容错。“重放日志”是操作内存数据前先写日志。“模糊快照“是周期性的指直接用深度遍历的方式将内存树保存到外部文件中,在此期间,内存树允许被改动。但是由于zookeeper的操作保证幂等性,于是在恢复的时候,加载模糊快照同时执行”重放日志“(同一操作可能执行多次但是没有关系)即可恢复。 数据模型

2020-05-14 14:26:15 283

原创 源码中的类需要脚本生成,复制开发包中的对应代码到源码中去

在搭建netty源码阅读环境的时候,netty.io.util.collection包不存在,需要运行脚本才能生成,我刚开始搞了半天如何运行那个脚本。均失败。后来去下载了该版本对应的开发包的源码,里面有对应的代码,复制,粘贴,运行example成功!!!...

2020-05-14 12:59:50 143

原创 解决程序包找不到的错误!!!!

使用默认的maven不要改成自己E盘的困扰了好多次,终于发现怎么解决了。

2020-05-13 17:22:38 431

原创 第四章 集群资源管理与调度

资源管理抽象模型通用架构:调度系统设计的基本问题资源异质性与任务负载异质性:资源异质说的是节点之间的配置并不都是相同的,有的节点cpu核数更多,内存容量更大,设计系统时应该考虑到,一般时通过细化资源分配粒度来来解决这个问题。而任务负载异质说的是,有长任务,有短任务,有需求大量资源的任务,有只要很少资源就能运行的任务,应结合实际场景综合考虑如何统筹安排这些任务,并能充分利用集群的资源。数据局部性任务向数据移动,一个好的调度系统应该尽量保证节点局部性。所谓节点局部性是指,任务被发送的节点存有对

2020-05-13 14:01:55 564

原创 第三章 大数据常用的算法与数据结构

布隆过滤器布隆过滤器可以以较小的时空代价过滤不再巨量数据集合中的数据,它利用有一个较大的位数组,若干hash函数,每条数据的hash值模上该数组的长度,便将该位置为一。于是,对于一条数据,如果我们发现其在位数组中的对应位不全为1,那么该数据肯定不存在,反之是有可能存在。布隆过滤器的误判率与数组长度,数据量与hash函数的个数有关。布隆过滤器的缺点是无法删除对应元素的值,改进措施是,不再使用位数组而是使用整数数组,这样想要删除某个数据只要将数组中对应值减一即可。SkipList它与平衡树

2020-05-12 16:49:16 892

空空如也

空空如也

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

TA关注的人

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