next

链表逆序

戏子无情 提交于 2020-11-14 12:24:04
反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 方法一: 用三指针法解决此题定义结点f和s分别指向第一个结点和第二个结点,定义虚拟结点dummyHead,让它的next指向第一个结点,具体步骤如下图: 代码实现如下: public static Node reverseList(Node head) { // 定义虚拟头结点 Node dummyHead = new Node(-1 ); dummyHead.next = head; if (head == null || head.next == null ) { return head; } else { // 定义f,s分别指向第一个结点和第二个结点 Node f = dummyHead.next; Node s = f.next; while (s != null ) { f.next = s.next; s.next = dummyHead.next; dummyHead.next = s; s = f.next; } return dummyHead.next; } } 方法二:递归 递归版本稍微复杂一些,其关键在于反向工作。假设列表的其余部分已经被反转,现在我该如何反转它前面的部分?假设列表为:n1 → … → nk-1 → nk → nk+1

漫画:如何将一个链表“逆序”?

走远了吗. 提交于 2020-11-14 11:33:11
漫画:如何将一个链表“逆序”? ————— 第二天 ————— (现实里的小灰在刚入行的时候,面试官也问了我这个问题,当时小灰就傻傻的问面试官是单链表还是双链表?然后就没然后了......) ———————————— 让我们从链表头部开始,建立三个临时节点的引用,分别为p1,p2,p3。它们分别指向头节点、第二个节点、第三个节点。 实现链表逆序的完整步骤如下: 1.以p2节点为视角,把p2节点原本指向p3的next指针倒转,指向p1。 2.三个临时节点引用p1,p2,p3分别向后移动一格位置。 3.重复第1步的工作,以p2节点为视角,把p2节点原本指向p3的next指针倒转,指向p1。 4.重复第2步的工作,三个临时节点引用p1,p2,p3分别向后移动一格位置。 ....... ....... 5.继续像这样子迭代下去,一直到p2是空为止。 6.最后,把head节点的next指向空,成为逆序链表的尾节点。并且把p1赋值给head,让p1所在的节点成为逆序链表的头节点。 private static Node head; public static void reverseLinkedList(){ if(head==null || head.next==null){ return; Node p1 = head; Node p2 = head.next; Node p3 =

趣谈Linux操作系统学习笔记:第二十四讲

我们两清 提交于 2020-11-14 06:52:26
一、小内存的分配基础 1、kmem_cache_alloc_node的作用 通过这段代码可以看出,它调用了kmem_cache_alloc_node函数,在task_struct的缓存区域task_struct分配了一块内存 static struct kmem_cache *task_struct_cachep; task_struct_cachep = kmem_cache_create("task_struct", arch_task_struct_size, align, SLAB_PANIC|SLAB_NOTRACK|SLAB_ACCOUNT, NULL); static inline struct task_struct *alloc_task_struct_node(int node) { return kmem_cache_alloc_node(task_struct_cachep, GFP_KERNEL, node); } static inline void free_task_struct(struct task_struct *tsk) { kmem_cache_free(task_struct_cachep, tsk); } 1、在系统初始化的时候,task_struct_cachep 会被 kmem_cache_create 函数创建。 2

浅析asp .net core 中间件

孤者浪人 提交于 2020-11-14 06:44:19
https://www.cnblogs.com/aoximin/p/13576479.html 梦里小探花 前言 对中间件的一个概况,在《重新整理.net core 计1400篇》系列后面会深入。 正文 什么是中间件呢? 其实中间件这个概念来源于分布式,当然这是一个狭隘的概念了,现在中间件概念就非常广泛了。 官网给出了这样一张图,这张图认为从请求到响应过程中间都是中间件,包括我们认为的路由。 看一段node代码: var http = require ( "http" ); http.createServer( function (req,res) { res.writeHead( 200 ,{ "Content-type" : "text/blain" }); res. write ( "Hello NodeJs" ); res. end (); }).listen( 8888 ); 没有学过node 也是ok的,从字面意思就是创建了一个http服务,然后端口是8888。 createServer 可以传入一个方法,中间有两个参数,一个参数是req,另一个参数就是res。 其实就是这么回事,我们写的就是这个这个方法里面的代码,至于,你想拿到req的什么参数,或者给res写入什么信息,这些都是中间件的范畴。 那么问题来了,问什么叫做中间件呢?从语文的层面上理解,那就是分开的

Mysql5.7安装 Gtid原理作用+主从复制

帅比萌擦擦* 提交于 2020-11-13 10:00:55
Gtid基本概念: 传统的基于binlog position复制的方式有个严重的缺点:如果slave连接master时指定的binlog文件错误或者position错误,会造成遗漏或者重复,很多时候前后数据是有依赖性的,这样就会出错而导致数据不一致。 从MYSQL5.6开始,mysql开始支持GTID复制。GTID的全称是global transaction id,表示的是全局事务ID。GTID的分配方式为uuid:trans_id,其中: uuid是每个mysql服务器都唯一的,记录在$datadir/auto.cnf中。如果复制结构中,任意两台服务器uuid重复的话(比如直接冷备份时,auto.conf中的内容是一致的),在启动复制功能的时候会报错。这时可以删除auto.conf文件再重启mysqld。 Gtid的作用: Gtid,采用了新的复制协议,旧协议是,首先从服务器上在一个特定的偏移量位置连接到主服务器上一个给定的二进制日志文件,然后主服务器再从给定的连接点开始发送所有的事件。 新协议有所不同,支持以全局统一事务ID(GTID)为基础的复制。当在主库上提交事务或者被从库应用时,可以定位和追踪每一个事务。GTID复制是全部以事务为基础,使得检查主从一致性变得非常简单。如果所有主库上提交的事务也同样提交到从库上,一致性就得到了保证。 Gtid复制的好处: 1

数据结构(五)静态链表、循环链表和双向链表

自闭症网瘾萝莉.ら 提交于 2020-11-13 06:53:19
  一、静态链表    1.静态链表:用数组描述的链表叫做静态链表。C语言中,让数组的元素都是由两个数据域组成,data和cur。数组的每个下标都对应着一个data和一个cur。数据域data,用来存放数据元素,也就是要处理的数据;而cur相当于单链表中的next指针,存放该元素的后继在数据中的下标,把cur叫游标。另外,数组的第一个和最后一个元素作为特殊元素处理,不存数据。数组的第一个元素,即下标为0的元素的cur存放备用链表(未被使用的数组元素)第一个结点的下标,而数组的最后一个元素的cur则存放第一个有数值的元素的下标,相当于单链表中的头结点的作用。   2.静态链表的优缺点: 在插入和删除操作时,只需要修改游标,不需要移动元素,从而改进了在顺序存储结构中的插入和删除操作需要移动大量元素的缺点。 没有解决连续存储分配带来的表长难以确定的问题;失去了顺序存储结构随机存取的特性。   3.静态链表的C语言代码实现: #include " string.h " #include " ctype.h " #include " stdio.h " #include " stdlib.h " #include " io.h " #include " math.h " #include " time.h " #define OK 1 #define ERROR 0 #define TRUE

趣谈Linux操作系统学习笔记:第二十六讲

↘锁芯ラ 提交于 2020-11-13 06:51:33
一、内核页表 和用户态页表不同,在系统初始化的时候,我们就要创建内核页表了 我们从内核页表的根swapper_pg_dir开始找线索,在linux-5.1.3/arch/x86/include/asm/pgtable_64.h中就能找到它的定义 extern pud_t level3_kernel_pgt[512]; extern pud_t level3_ident_pgt[512]; extern pmd_t level2_kernel_pgt[512]; extern pmd_t level2_fixmap_pgt[512]; extern pmd_t level2_ident_pgt[512]; extern pte_t level1_fixmap_pgt[512]; extern pgd_t init_top_pgt[]; #define swapper_pg_dir init_top_pgt 1、swapper_pg_dir指向内核最顶级的目录pgd,同时出现的还有几个页表目录。我们可以回忆一下,64位系统的虚拟地址空间的布局 1、期中其中 XXX_ident_pgt 对应的是直接映射区 2、XXX_kernel_pgt 对应的是内核代码区 3、XXX_fixmap_pgt 对应的是固定映射区 2、它们是在哪里初始化的呢? 在汇编语言的文件里面的linux-5.1.3

JS

最后都变了- 提交于 2020-11-13 06:50:56
友情提示 :本文仅mark几个常用的新特性,详细请参见: ES6入门 - ryf ; 碎片 var VS let VS const var:声明全局变量, let:声明块级变量,即局部变量 const:声明常量,块级作用域,不可修改且必须初始化 将一个对象彻底冻结为常量的方法 var constantize = (obj) => { // 冻结对象本身 Object.freeze(obj); // 冻结对象的属性 Object.keys(obj).forEach( (key, i) => { if ( typeof obj[key] === 'object' ) { constantize( obj[key] ); } }); };   ES6声明变量的方法,除上述外,还支持:class、import、function。 Number.isNaN() & Number.isFinite()    该两者仅对数值有效: Number.isNaN():判断一个数值是否为NaN,利用NaN是唯一不等于自身的值,用于isNaN()判断 Number.isFinite():表示某个数值是否为正常的数值(即,非infinity),Infinity、-Infinity、NaN和undefined返回false,其余均返回true 注意与传统的全局方法isFinite()和isNaN()的区别

[转]spdk和nvmf

↘锁芯ラ 提交于 2020-11-13 04:57:37
打造用户态存储利器,基于SPDK的存储引擎Blobstore & BlobFS https://community.mellanox.com/s/article/howto-configure-nvme-over-fabrics SPDK自动精简配置的逻辑卷使用 construct_lvol_bdev https://www.sdnlab.com/21098.html spdk 块设备层bdev https://www.cnblogs.com/whl320124/p/10064878.html https://spdk.io/doc/bdev.html#bdev_ug_introduction 转自 spdk中nvmf源码 https://mp.weixin.qq.com/s/ohPaxAwmhGtuQQWz--J6WA https://spdk.io/doc/nvmf_tgt_pg.html nvmf的spec http://nvmexpress.org/resources/specifications/ 总的知识点+较详细不同bdev配置 https://www.jianshu.com/p/b11948e55d80 https://www.gitmemory.com/issue/spdk/spdk/627/478899588 SPDK NVMe-oF target 多路功能介绍

win7/win10下KiWi Syslog服务器的安装与配置

我的梦境 提交于 2020-11-12 23:24:48
文章转自:https://www.cr173.com/soft/20677.html 功能介绍: Kiwi Syslog Server是最值得信赖的基于 Windows 的 syslog 服务器解决方案之一。这些产品的安装与配置非常简单,提供功能丰富的解决方案来接收、记录、显示并转发各种网络设备(例如路由器、交换机、Unix 主机以及其它启用 syslog 的设备)的 syslog 消息。 •Kiwi Syslog Server接收并管理您网络设备中的 syslog 消息 •同时显示多个窗口中的 syslog 消息 •Kiwi Syslog Server按主机名称、主机 IP 地址、优先级、消息文本关键字或时间来过滤消息 •提供基于消息内容、消息量或元数据的高级警报 •Kiwi Syslog Server自动执行基于警报的操作,包括发送邮件、转发消息、触发声音警报、发送 SNMP 陷阱消息与寻呼 IT 人员 •生成趋势分析图表与电子邮件 syslog 流量统计 以下是KiWi syslog服务端安装配置教程(Win10亲测可用) ============================================================================================ 首先,所需文件有以下2个: 1、Kiwi_Syslog_Server