题目: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
思路: 刚看完题目,感觉挺简单的,就是复制链表嘛,但在实际操作中,出现很多bug,一直提交出错,说“空”。可能就是题目最后那句话的原因把,后面明白,就是重新创建一个链表,然后一个一个复制过来,有两种方法。
一种递归思路,每一次递归都复制一个节点,这样子思路简洁,而且代码短,我用Js实现这个思路提交对了,但是java就不可以,我怀疑牛客网评测系统有问题,我已经发现三个问题了了。
另外一种思路:如下图分析(图从别人那里借来的)
1.首先复制节点,每一次复杂的节点放在原来的节点后面
2、复制随机节点
3、把复制的链表和原来的链表分开
在实现代码的过程中,总是很难写出来,出现很多问题,但是一看上面的图,就懂了。
代码:
js:
12345678910111213141516/*function RandomListNode(x){ this.label ...
在网上学习了一些材料。
这一篇:https://www.zhihu.com/question/30527705
1234567891011121314151617181920212223242526272829303132AVL树:最早的平衡二叉树之一。应用相对其他数据结构比较少。windows对进程地址空间的管理用到了AVL树红黑树:平衡二叉树,广泛用在C++的STL中。map和set都是用红黑树实现的。我们熟悉的STL的map容器底层是RBtree,当然指的不是unordered_map,后者是hash。B/B+树用在磁盘文件组织 数据索引和数据库索引Trie树 字典树,用在统计和排序大量字符串------AVL是一种高度平衡的二叉树,所以通常的结果是,维护这种高度平衡所付出的代价比从中获得的效率收益还大,故而实际的应用不多,更多的地方是用追求局部而不是非常严格整体平衡的红黑树。当然,如果场景中对插入删除不频繁,只是对查找特别有要求,AVL还是优于红黑的。红黑树的应用就很多了,除了上面同学提到的STL,还有epoll在内核中的实现,用红黑树管理事件块nginx中,用红黑树管理tim ...
javagc
未读大纲介绍第一,垃圾回收简介第二,G1介绍第三,G1 Young GC第四, G1 Mix GC第五,调优实践第六,G1相关处理参数第七,总结本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践和相关参数列表。
一,垃圾回收简介首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么?简单的说垃圾回收就是回收内存中不再使用的对象。
垃圾回收的基本步骤
回收的步骤有2步:
查找内存中不再使用的对象
释放这些对象占用的内存
1,查找内存中不再使用的对象
那么问题来了,如何判断哪些对象不再被使用呢?我们也有2个方法:
引用计数法
引用计数法就是如果一个对象没有被任何引用指向,则可视之为垃圾。这种方法的缺点就是不能检测到环的存在。
2.根搜索算法
根搜索算法的基本思路就是通过一系列名为”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。
现在我们已经知道如何找出垃圾对象了,如何 ...
在Linux/Unix中,一般在屏幕上面看到的信息是从stdout (standard output) 或者 stderr (standard error output) 来的。许多人会问,output 就是 output,送到屏幕上不就得了,为什麼还要分成stdout 和 stderr 呢?那是因为通常在 server 的工作环境下,几乎所有的程序都是 run 在 background 的,所以呢,为了方便 debug,一般在设计程序时,就把stdout 送到/存到一个档案,把错误的信息 stderr 存到不同的档案。
哪些是正常的output呢,例如程序开始运行的时间,现在正在上线人数等等。
哪些是错误的output呢,例如无法找到使用者想要去的URL,或者信用卡认证失败等等。————————————————————————————————————————————————————有了上面这些认知后,回头来讲什麼是 > /dev/null
这是把 stdout 送到 /dev/null 里面
那什麼是 / ...
生活&旅游
未读在临产前的几周,带小满走了北京几个比较有名气的博物馆,像国家博物馆,首都博物馆,汽车博物馆等,但小满最兴奋的当属自然博物馆。由于疫情的关系,地下负一层没有开放,只能从导览图中看个大概,安慰小满说,等疫情过去了,地下一层开放了,咱们再来一次。好在恐龙馆已经开放,在预约官网看到的是恐龙馆也是暂停开放的,能看到恐龙的巨型化石,对于一心想看恐龙和化石的小满来说也是种安慰。一层主要是无脊椎动物,古哺乳动物,古爬行动物及恐龙化石的展区。二层的展区,就具象化了。植物世界,各种各样的植物标本及图片,让人感觉造物主的神奇,其中食虫草引起了小满的极大兴趣,问“妈妈,食虫草会吃人吗”,我说“食虫草只能吃下体积比较小的昆虫,人这么大个,它吃不下去“。小满若有所思的哦了一声。走进非洲就更有意思了,尽管都是些雕塑,但是特别逼真,对于小朋友来说,犹如来到了动物园,各种奇怪的非洲动物,小满会跟曾在动物园里看到的那些动物作对比,老母亲感到逛博物馆的目的就达到了。最后是人类起源,进化各个阶段的化石。基于有之前在国家博物馆看过人类进化化石的基础,对于再次见到远古人类的化石,小满比之前看的认真多了。从导览图可以感受到4D影院 ...
一、简介rsync 是一个常用的 Linux 应用程序,用于文件同步。
它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代cp和mv命令。
它名称里面的r指的是 remote,rsync 其实就是”远程同步”(remote sync)的意思。与其他文件传输工具(如 FTP 或 scp)不同,rsync 的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改时间有变动)。
二、安装如果本机或者远程计算机没有安装 rsync,可以用下面的命令安装。
12345678910# Debian$ sudo apt-get install rsync# Red Hat$ sudo yum install rsync# Arch Linux$ sudo pacman -S rsync
注意,传输的双方都必须安装 rsync。
三、基本用法3.1 -r 参数本机使用 rsync 命令时,可以作为cp和mv命令的替代方法,将源目录同步到目标目录。
123$ rsync -r sour ...
散列表理想状态下,散列表就是一个包含关键字的固定大小的数组,通过使用散列函数,将关键字映射到数组的不同位置。下面是理想散列表的一个示意图:
在理想状态下,哈希函数可以将关键字均匀的分散到数组的不同位置,不会出现两个关键字散列值相同(假设关键字数量小于数组的大小)的情况。但是在实际使用中,经常会出现多个关键字散列值相同的情况(被映射到数组的同一个位置),我们将这种情况称为散列冲突。为了解决散列冲突,主要采用下面两种方式:
分离链表法(separate chaining)
开放定址法(open addressing)
分离链表法分散链表法使用链表解决冲突,将散列值相同的元素都保存到一个链表中。当查询的时候,首先找到元素所在的链表,然后遍历链表查找对应的元素。下面是一个示意图:
开放定址法开放定址法不会创建链表,当关键字散列到的数组单元已经被另外一个关键字占用的时候,就会尝试在数组中寻找其他的单元,直到找到一个空的单元。探测数组空单元的方式有很多,这里介绍一种最简单的 – 线性探测法。线性探测法就是从冲突的数组单元开始,依次往后搜索空单元,如果到数组尾部,再从头开始搜索(环形查找)。如 ...
只有在主库上执行才能有效抵输出:
具体文档如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869# 在127.0.0.1:3306主库上执行tmp@127.0.0.1 ((none))> show variables like '%server%';+---------------------------------+--------------------------------------+| Variable_name | Value |+---------------------------------+--------------------------------------+| character_set_server ...
我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试. 但是服务器总是莫名退出,没有core文件.
最后问题确定为, 对一个对端已经关闭的socket调用两次write, 第二次将会生成SIGPIPE信号, 该信号默认结束进程.
具体的分析可以结合TCP的”四次握手”关闭. TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道, 但本端只是收到FIN包. 按照TCP协议的语义, 表示对端只是关闭了其所负责的那一条单工信道, 仍然可以继续接收数据. 也就是说, 因为TCP协议的限制, 一个端点无法获知对端的socket是调用了close还是shutdown.
对一个已经收到FIN包的socket调用read方法, 如果接收缓冲已空, 则返回0, 这就是常说的表示连接关闭. 但第一次对其调用write方法时, 如果发送缓冲没问题, 会返回正确写入(发送). 但发送的报文会导致对端发送RST报文, 因为对端的socket已经调用了close, 完全关闭, 既不 ...
前言服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态LB机制就不再适用了,需要引入额外的组件来管理微服务提供者的注册与发现,而这个组件就是服务注册中心。
CAP理论CAP理论是分布式架构中重要理论
一致性(Consistency) (所有节点在同一时间具有相同的数据)
可用性(Availability) (保证每个请求不管成功或者失败都有响应)
分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)
关于
P的理解,我觉得是在整个系统中某个部分,挂掉了,或者宕机了,并不影响整个系统的运作或者说使用,
而可用性是,某个系统的某个节点挂了,但是并不影响系统的接受或者发出请求,CAP 不可能都取,只能取其中2个
原因是
如果C是第一需求的话,那么会影响A的性能,因为要数据同步,不然请求结果会有差异,但是数据同步会 ...

