简单美食网站模板,工地招聘网站,义乌外贸公司联系方式,wordpress付款下载文章目录 git版本控制学习高性能的单机管理主机的心跳服务算法题 git版本控制学习
一个免费开源#xff0c;分布式的代码版本控制系统#xff0c;帮助开发团队维护代码 作用#xff1a;记录代码内容#xff0c;切换代码版本#xff0c;多人开发时高效合并代码内容
安装g… 文章目录 git版本控制学习高性能的单机管理主机的心跳服务算法题 git版本控制学习
一个免费开源分布式的代码版本控制系统帮助开发团队维护代码 作用记录代码内容切换代码版本多人开发时高效合并代码内容
安装git软件
如何创建git仓库 将本地文件夹转换成git仓库 从其他服务器上面拷贝git文件
创建git本地仓库 gitgitee.com:z-zhou-xin/sky_take_out.git
高性能的单机管理主机的心跳服务
看了如何将408课程运用起来设计一个高性能的单机管理主机的心跳服务 不是很能看得懂
原链接小林coding
这是设计系统的架构图 需要设计一个识别机器无法工作的程序。
心跳服务的功能就是发现宕机的主机和发现上线的主机
算法设计 不能采用暴力遍历的方式来寻找超时的主机时间复杂度很高心跳包开源用双向链表来设计构成先入先出的队列。
双向队列的好处是有新的包直接添加到队尾头部是最老的心跳包距现在是否超过设定的秒数如果超过则认为宕机了然后将讲其从双链表中删除
如何在队列中找到旧的心跳包 由于数据结构是双向链表直接删除需要寻找时间复杂度是ON随着队列元素变多了效率也会变低。
查询效率最高的就是哈希表了时间复杂度O(1),可以用来优化
哈希表 key表示对应的ip地址value包含主机在双向链表中的节点。 这样每当收到心跳包时先判断其在不在哈希表里。
如果不存在哈希表里说明是新主机上线先将其插入到双向链表的尾部然后将该主机的 IP 作为 Key主机在双向链表的节点作为 Value 插入到哈希表。
如果存在哈希表里说明主机已经上线过先通过查询哈希表找到该主机在双 向链表里旧的心跳包的节点然后就可以通过该节点将其从双向链表中删除最后将新的心跳包插入到双向链表的队尾同时更新哈希表。
如果超时了需要将其从哈希表和双链表中都要删除那么双链表就需要存储一个键值对key -value key是主机的ipvalue是主机的信息
最终的设计图采用双链表是为了删除的更快。
下面来实现高并发和传输协议不是看的太懂
算法题
leetcode 722删除代码中的注释
import java.util.ArrayList;
import java.util.List;//leetcode submit region begin(Prohibit modification and deletion)
class Solution {public ListString removeComments(String[] source) {//删除对应的注释// //块注释直接忽略右边的所有内容// /* */ 忽略注释块以内的内容// 注释的优先级 第一个注释优先于后来的任意注释// 当不出来块注释的情况下//出现块注释的标志 /*然后开启块注释中间都可以忽略//出现行注释标志就忽略这一行//不再注释内的保留下来用StringBuilder进行拼接ListString resnew ArrayList();StringBuilder sbnew StringBuilder();boolean blockCom false;int sIdx; //遍历单个字符串的索引int sLen; //单个字符串的长度char curChar;char nextChar;for (String s:source) {sLens.length();sIdx0;while (sIdx sLen) {curChar s.charAt(sIdx);nextChar sIdx sLen ? s.charAt(sIdx) : ;if (blockCom) {if (curChar * nextChar / blockCom) {blockCom false;sIdx 1;}} else {if (curChar / nextChar *) {blockCom true;sIdx 1;} else if (curChar / nextChar /) {//如果是行注释 就直接删除break;} else {sb.append(curChar);}}}if (!blockCom sb.length() 0) {res.add(sb.toString());sb new StringBuilder();}}return res;}
}