[数据结构]单向链表插入排序(C语言)

插入排序

插入排序回顾

我们先回顾一下对数组的插入排序,其步骤大致为:
先将第一个数据元素看作是一个有序序列,后面的 n-1 个数据元素看作是未排序序列。对后面未排序序列中的第一个数据元素在这个有序序列中进行从后往前扫描,找到合适的插入位置并插入到其中,每次有序序列的长度 +1。

重复这样的操作,将每个未排序序列中的元素插入到当前有序序列中合适的位置。直到未排序序列长度为 0,最后得到一个完整的有序序列,即为排序的结果。

之前写过插入排序的随笔,更多详情点这里 插入排序



单向链表的插入排序

单向链表插入排序原理

对于链表的插入排序,原理和普通的插入排序是差不多的。不过要注意的是,在单向链表中,由于链表只能正向遍历,所以在寻找某个节点的合适插入位置时,只能从前向后扫描。

在单向链表插入排序的过程中,我们将前面看成有序链表,将有序链表和无序链表分离,将后面无序链表中的节点不断插入到有序链表中。
我们用 node 来标记当前待排序的节点,由于插入排序过程中将有序链表和无序链表进行了分离,所以还需要一个 nex 来标记下一个待排序节点。同时还需要 pre 用于在有序链表中扫描寻找合适插入位置。

单向链表插入排序步骤

单向链表插入排序的大致步骤为:

(1)先将单个节点 nodenext 置NULL,形成初始有序链表;
(2)pre 在有序链表中扫描,nex 标记下一个待排序节点,当 prenext 指向的节点大于等于 node->data 时停止;
(3)在有序链表中插入节点 node
(4)将 node 指向之前暂存的下一个待排序节点 nex,重复步骤(2)(3)。

单向链表插入排序图解

待排序的单向链表

单向链表插入排序核心代码

//插入排序
void InsertSort(Linklist *head){
    if(!head->next) return;
    Linklist *node = head->next, *nex = node->next, *pre;
    node->next = NULL;    //单个节点形成初始有序链表
    node = nex;

    while(node){
	pre = head;       //pre在有序链表中找到何时插入位置
	nex = node->next; //暂存下一个待排序节点
	//找到何时插入位置,pre指向有序链表中最后一个小于node的节点
	while(pre->next && pre->next->data < node->data)
		pre = pre->next;
	//表中插入
	node->next = pre->next;
	pre->next = node;
	node = nex;       //node指向下一个待排序节点
    }
}


完整程序

完整程序源代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef int Elemtype;        //数据类型
typedef struct Node {

	Elemtype data;           //结构体数据域
	struct Node *next;       //结构体指针域

} Linklist;

//链表的初始化
Linklist* Initial_linklist(){
	//向系统申请内存
	Linklist *head = (Linklist *)malloc(sizeof(Linklist));
	head->next = NULL;
	return head;
}

//创建初始链表  采用尾插法
void Create_linklist(Linklist *head, int n) {    //头节点(不带数据)
	Linklist *node, *end;                        //普通节点 尾节点
	end = head;                                  //当链表为空时 头尾指向同一个节点
	printf("创建链表输入 %d 个元素:", n);
	for (int i = 0; i < n; i++) {                //n为插入普通节点的个数
		node = (Linklist *)malloc(sizeof(Linklist));
		scanf("%d", &node->data);
		end->next = node;                        //当前end的next指向了新节点node
		end = node;                              //end往后移,此时新的节点变成尾节点
	}
	end->next = NULL;                            //end最后置NULL
}

//打印链表
void Show_linklist(Linklist *head) {
	Linklist *t = head->next;					 //t为遍历指针 访问每个节点数据
	if (t == NULL)
		puts("链表为空");

	while (t != NULL) {
		printf("%d ", t->data);
		t = t->next;
	}
	printf("\n\n");
}

//插入排序
void InsertSort(Linklist *head){
	if(!head->next) return;
	Linklist *node = head->next, *nex = node->next, *pre;
	node->next = NULL;    //单个节点形成初始有序链表
	node = nex;

	while(node){
		pre = head;       //pre在有序链表中找到何时插入位置
		nex = node->next; //暂存下一个待排序节点
		//找到何时插入位置,pre指向有序链表中最后一个小于node的节点
		while(pre->next && pre->next->data < node->data)
			pre = pre->next;
		//表中插入
		node->next = pre->next;
		pre->next = node;
		node = nex;       //node指向下一个待排序节点
	}
}

int main(){
	Linklist *mylist;
	mylist = Initial_linklist();

	Create_linklist(mylist, 10);
	printf("初始状态链表:\n");
	Show_linklist(mylist);

	InsertSort(mylist);
	printf("插入排序后的链表:\n");
	Show_linklist(mylist);
}

程序测试结果

一切都是命运石之门的选择,本文章来源于博客园,作者:Amαdeus,出处:http://www.cnblogs.com/MAKISE004/p/17060466.html,未经允许严禁转载

本文转载于网络 如有侵权请联系删除

相关文章

  • 超详细,自动化测试接入Jenkins+Sonar质量门禁实践

    大家好,我叫董鑫,一名在测试开发道路上的新手,是狂师老师全栈测开训练营上一期的学员。第一阶段的学习已然结束,收获颇多,了解了很多在自己平时测试工作无法接触到的新知识,比如这次在这里分享的Sonarqube进行静态代码扫描并集成Jenkins的知识,是分享也是自我学习的总结。若有不对的地方,还请各位同行,同学,老师及时指正。之前在公众号也分享过一篇文章:测开新手:从0到1,自动化测试接入Jenkins学习1.什么是SonarQubeSonarQube是一个开源的代码质量管理系统,用于检测代码中的错误,漏洞和代码规范,通过插件的机制,可以基于现有的Gitlab、Jenkins集成、以便在项目拉取后进行连续的代码检查。优点:◆支持众多计算机编程语言◆通过插件机制能集成IDE、Jenkins、Git等◆内置大量常用代码检查规则◆支持定制开发规则◆可视化界面◆支持从可靠性、安全性、可维护性、覆盖率、重复率等方面分析项目具体的配置及文档可以访问下面的链接查看:https://www.sonarqube.org/downloads/ https://docs.sonarqube.org/latest

  • 单机12万QPS——FunTester复仇记

    Flag在文章10万QPS,K6、Gatling和FunTester终极对决!中,最后测试结果FunTester除了在在CPU方面有一丁点优势以外,内存和QPS均略逊一筹,特别是内存方面劣势尤为明显。当时立了一个flag:将非必要的处理改成异步尝试更换测试元数据存储方式逐步丢弃业务相关兼容代码成果周末终于有时间进行操作了。经过不懈改代码测试和临阵抱佛脚学习Java基础,终于得到了一个满意的结果。硬件方面:在关掉监控软件,关掉了其他无关要紧的程序,软件方面停掉了所有无用的有用的代码(注释得亲妈都不认识),最终的测试结果停留在「118904」,交于之前的数据「104375」提升「13.92%」。内存也有大大地降低,在请求量300万~500万规模情况下,占用内存在700M~800M区间,相较于之前的「1770」,减少了「57.62」。这里放上上次测试结果:框架CPU内存QPSRTK6718.74370.0759801Gatling585.97350.01133551FunTester528.0317701043751下面我会逐步增加一些影响因素,然后在判断各种因素对性能测试结果的影响。优化内

  • hadoop-2:深入探索hadoop3.3.1集群模式下的各个组件

    (1).关于hadoop3.3.1使用的java版本(2).准备工作(3).配置Hadoop守护进程3.1.配置etc/hadoop/core-site.xml3.2.配置etc/hadoop/hdfs-site.xml3.2.1.namenode配置3.2.2.DataNode的配置3.3.配置etc/hadoop/yarn-site.xml3.3.1.ResourceManager和Node的共同配置3.3.2.ResourceManager的配置3.3.2.NodeManager的配置3.3.3.HistoryServer的配置3.4.配置etc/hadoop/mapred-site.xml3.4.1.MapReduce应用程序的配置3.4.2.MapReduceJobHistory服务器的配置(4).SlavesFile(5).HadoopRackAwareness(6).Logging(7).启动hadoopcluster(8).目录总结8.1.namenode相关目录与文件8.2.datanode相关目录与文件8.3.yarn的resourceManager的相关目录与文件

  • python+浏览器设备间快速共享文件/文件夹

    参考链接:Python目录和文件管理python+浏览器设备间快速共享文件/文件夹 前言:废话少说,开整:使用效果:前言: 以前我总是使用的是U盘,拷文件这个麻烦呀,传一个文件还好,可安装东西经常是需要这需要那的,用U盘传就很麻烦。现在我学聪明了,设备间互传文件直接用网页呀!只要你的设备在一个局域网上,发送端上有python,接收端有浏览器,这个问题就能解决! 废话少说,开整: 对于发送端:先使用shell/cmd进入到想要共享的文件夹中python2: python-mSimpleHTTPServer端口号python3: python-mhttp.server端口号端口号自己定,不加默认是8000 每次还得先开cmd,不高兴,我们来写脚本! windows下的批处理文件share_this_dir.bat: cd%~dp0startpython-mhttp.server8888timeout2starthttp://%USERDOMAIN%:8888/注意:里面的cd%~dp0命令是进入当前脚本所在目录,看似没什么用,不过你不加这一行再使用管理员运行这个bat试试就知道了,所以还是

  • Qt 第二步 熟悉文件结构组成(二)

    目录导航: 《Qt第一步HelloWorld的第一个程序》 《Qt第二步槽与信号(一)实现点击按钮并弹窗》本文参考《Qt5.9c++开发》 上一篇文使用了槽与信号完成了点击按钮并弹窗的程序效果,这一篇文将会了解Qt的项目文件组成。本节将会了解Qt项目中的项目文件部分内容。在一个原始项目中包含:项目组织文件.*.pro入口文件main.cpp窗体头文件widget.h窗体文件widget.ui首先查看项目组织文件.*.pro 代码为:QT+=coregui greaterThan(QT_MAJOR_VERSION,4):QT+=widgets CONFIG+=c++11 DEFINES+=QT_DEPRECATED_WARNINGS SOURCES+=\ main.cpp\ mainwindow.cpp HEADERS+=\ mainwindow.h FORMS+=\ mainwindow.ui #Defaultrulesfordeployment. qnx:target.path=/tmp/$${TARGET}/bin else:unix:!android:target.p

  • 【版本发布】腾讯实时音视频TRTC SDK 6.9

    新的版本围绕视频画质、直播CDN融合、Android10.0系统兼容,以及云端录制等几个方面,增加了很多新的功能特性,期待您的使用:1.增加对1080p的支持实时音视频(TRTCCloud)增加对1080p分辨率的支持(由于硬编码的兼容性考虑,部分平台会采用1920x1088的分辨率)。注意1080p的分辨率搭配2500kbps以上的码率才能达到理想的清晰度效果。2.增加对Android10.0的支持全SDK各项功能优化了对Android10.0的支持,Android10.0的兼容性问题主要源自文件访问方式的调整,以及隐私数据的保护。我们针对短视频中的图片路径获取逻辑进行了全面的梳理,同时确保SDK不访问手机用户的隐私数据,目前SDK仅会访问如下信息(符合GDPR标准):3.TRTC云端录制优化TRTC支持在进房前设置云端录制文件的名称,通过设置TRTCParams中的cloudRecordFileName参数,您就可以设置整场直播(或者会议)在云端录制下来的文件名称。当房间里的最后一路音视频流退出后,腾讯云会结束录制过程并将文件转存到点播(VOD)系统,整个录制过程需要30秒到2分钟

  • python基础二

    一、字典类型  *)字典是python中唯一的映射类型,key-value(哈希表),字典对象是可变的,但key必须用不可变对象。 *)字典的创建和字典值得访问  ##字典的内容在查看时不能通过索引来进行查看  *)内建方法:fromkeys  字典中的key有相同的value值,默认为None *)字典的循环遍历访问 *)字典中key-value的添加  dic[key]=value  ##通过字典的添加发现,字典是无序的数据类型 *)字典的删除  **)根据key值删除字典的元素  **)随机删除字典元素,返回(key,value)  **)删除字典中的所有元素  **)删除字典本身 *)字典的常用方法  **)dic.get()  如果key存在于字典中,返回对应的value值  **)dic.keys()   返回字典中的所有key值 **)字典内容的更新 **)检查字典中是否存在某个key值二、函数 *)定义函数  **)def关键字,依次写出函数名、括号、括号中的参数和冒号:  **)在缩进块中编写函数体,函数的返回值用return语句返回。   deffun():    

  • 在archlinux下安装GNS3+Wi

      一、GNS3安装:     1.yaourt安装:    在/etc/pacman.conf配置文件在末尾加入         [archlinuxcn]     #The Chinese Arch Linux communities packages.     SigLevel = Optional TrustAll     Server   = http://repo.archlinuxcn.org/$arch复制    安装yaourt:    pacman -S yaourt复制      用yaourt安装:    yaourt -S gns3-gui     yaourt -S gns3-server复制         用yaourt安装的话貌似会出现错误:不能连接到本地127.0.0.1:3080。     2.从github下载源码安装         安装GNS3-SERVER:  sudo pacman -S python-pip qt5-svg qt5-webkit python-pyqt5 python-jsonsch  ema python-jinja 

  • Linux经典面试题,了解一下!

    问题一: 绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示?切换目录用什么命令? 答案: 绝对路径:如/etc/init.d 当前目录和上层目录:./../ 主目录:~/ 切换目录:cd 问题二:怎么查看当前进程?怎么执行退出?怎么查看当前路径? 答案: 查看当前进程:ps 执行退出:exit 查看当前路径:pwd 问题三:怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当前用户id?查看指定帮助用什么命令? 答案: 清屏:clear 退出当前命令:ctrl+c彻底退出 执行睡眠:ctrl+z挂起当前进程fg恢复后台 查看当前用户id:”id“:查看显示目前登陆账户的uid和gid及所属分组及用户名 查看指定帮助:如manadduser这个很全而且有例子;adduser--help这个告诉你一些常用参数;infoadduesr; 问题四:Ls命令执行什么功能?可以带哪些参数,有什么区别? 答案: ls执行的功能:列出指定目录中的目录,以及文件 哪些参数以及区别:a所有文件l详细信息,包括大小字节数,可读可写可执行的权限等 问题五:建立软链接(快捷方式),

  • 如何像程序员一样思考——解决问题的经验

    如何你对编程感兴趣,你可能见过这句话:“Everyoneinthiscountryshouldlearntoprogramacomputer,becauseitteachesyoutothink.” — SteveJobs你可能还想知道,像程序员一样思考到底意味着什么?怎样才能做到?从本质上讲,这是一种更有效的解决问题的方法。在这篇文章中,我的目标是用这种方式教你。最后,你就会知道怎样才能更好的解决问题。为什么这很重要?我们每天都有遇到很多问题,无论大的小的。我们处理这些问题的方式有时候都是随机的。除非你有个系统,否则用“随机的方式”可能就是你“解决”问题的方法(下面我开始学习编程写代码时候做做的事情):1、试着解决方案2、如果不行,再试一次3、如果没有效果,重复第二步知道你运气好这样的方法,在你运气不好的时候,就傻了。总之这种方法时候解决问题的最糟糕的方法!也是非常浪费时间的。最好的方法是:a、有一个框架b、练习它几乎所有的雇主都把解决问题的能力放在首位!解决问题的能力已经是雇主们寻找程序员、测试工程师、系统设计师等最看重的一个方面。计算思维或分解大型复杂问题的能力,与工作所需要的基

  • Java常见面试题汇总

     动力节点Java培训最新上线Java实验班,等你来测试自己适不适合学习Java编程哦! 今天的主题我们来谈谈求职,每个程序员的生涯总有几次求职经历,对于求职者而言,在面对自己心仪的公司之前总要做足成分的准备,一份全面精细的面试题可以帮助我们减少很多麻烦,为此动力节点IT培训的小编特地做了Java面试题的文章,一方面可以帮助大家巩固基础,另一方面也希望帮助苦于面试的朋友。Java中Runnable和Callable有什么不同?Runnable和Callable都代表那些要在不同的线程中执行的任务。Runnable从JDK1.0开始就有了,Callable是在JDK1.5增加的。它们的主要区别是Callable的call()方法可以返回值和抛出异常,而Runnable的run()方法没有这些功能。Callable可以返回装载有计算结果的Future对象。  接口:CollectionCollection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不

  • eos地址结构和公钥的关系

    如下图所示,右边是EOSWallet钱包,里面只存放私钥,而且钱包有一个密码,需要输入密码才能解锁钱包,读取私钥。 左边是EOSAccount账户,可以把它看成是一个保险箱,里面有EOSToken以及智能合约,而需要转移里面的EOSToken(或者执行智能合约),你需要钱包中对应的私钥来解锁这个保险箱。钱包.jpgeos账户体系跟eth主要不同:1,密钥的功能解耦:密钥就等同于支付宝中的一对账号和密码。这个私钥有以下两点作用:生成公钥,从而生成交易地址(类似于支付二维码) 生成签名,从而签署一笔交易(类似于支付密码)以太坊中不同的eth地址就代表着一个以太坊账户,地址是账户的标识。它是账户安全最重要的部分,需要妥善保管,如果丢失了私钥也就意味着你的账户丢失了。EOS钱包中也保存着密钥,但EOS钱包和其他区块链钱包也存在着一些差异,主要差异在于EOS中的密钥主要是用来生成签名的,它并不用来生成交易地址。2,引入了账户系统EOS的账号可以是2位到32位的任意字符串,从而方便用户记忆,用户之间的转账是通过账号来进行操作的。EOS团队认为使用公钥作为交易地址对用户来说太不友好了,没人能够记得一

  • 新手,想用Nisight调试CUDA代码,但断点无效怎么破?

    新手,刚接触CUDA编程,搭好了环境,想用nsight来调试,在vs里面,在核函数里面设置了断点,用CUDADebugging,但断点就是不生效,电脑左下角会弹出Night连接成功,程序跑完后,Night会提示Disconnected 整个电脑环境: 显卡:GFGTX1050CPU:i3-41703.70GH硬盘:2T 软件:VS2013+CUDA9.1+Nsight5.4GPU世界论坛bbs.gpuworld.cnHi,楼主, 这个有多种可能的, (1)你的断点所在的行,不能被kernel启动的任何一个线程命中,自然断点不会生效。 这包括kernel在断点之前就已经执行结束,或者断点处于某些if,while,for之类的里面,需要一定的条件才能执行到。 (2)kernel启动没有成功,例如你如果要求了2048个线程的block形状,此形状无法被目前的任何计算能力设备所满足,kernel无法执行该要求下的任何代码。自然无法命中。 建议的解决方案: (1)检查断点的位置,它需要至少能有一个线程执行到这里。 (2)检查kernel启动是否成功,请立刻在<<<>

  • zabbix中配置dg的监控(r6笔记第62天)

    在zabbix中有了orabbix的辅助,监控效率大大提高,但是因为orabbix是基于jdbc的方式,有些监控还是有一些限制。 比如dataguard的检查,如果采用dgbroker来检查,效果就更直观也更可信。 DGMGRL>showconfiguration; Configuration-csdb ProtectionMode:MaxPerformance Databases: test-Primarydatabase stest-Physicalstandbydatabase Fast-StartFailover:DISABLED ConfigurationStatus: SUCCESS 只要显示为SUCCESS,说明dg就是正常的。 如果通过orabbix来监控,只能通过主库中的v$dataguard_status来进行检查。 很多时候这种检查一方面很可能有误报,有时候可能会有很多额外的信息干扰。 所以使用orabbix来监控备库还是有一定的瓶颈,可以监控,但是结果还是不够可信。 这个时候还是投入zabbix的怀抱,我们还是需要通过zabbix的方法来辅助。 对于dg

  • 机器学习、深度学习 知识点总结及面试题

    1、反向传播思想:计算出输出与标签间的损失函数值,然后计算其相对于每个神经元的梯度,根据梯度方向更新权值。(1)将训练集数据输入到ANN的输入层,经过隐藏层,最后达到输出层并输出结果,这是ANN的前向传播过程;(2)由于ANN的输出结果与实际结果有误差,则计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传播,直至传播到输入层;(3)在反向传播的过程中,根据误差调整各种参数的值;不断迭代上述过程,直至收敛。2、无监督逐层训练:预训练:每次训练一层隐结点。训练时将上一层隐结点的输出作为输入,而本层隐结点的输出作为下一层隐结点的输入。在预训练结束后,再对整个网络进行微调训练。3、DNN:指深度神经网络,与RNN循环神经网络、CNN卷积神经网络的区别就是,DNN特指全连接的神经元结构,并不包含卷积单元或时间上的关联。一、DBN:(预训练+微调)思想:整个网络看成是多个RBM的堆叠,在使用无监督逐层训练时,首先训练第一层,然后将第一层预训练好的隐结点视为第二层的输入节点,对第二层进行预训练,各层预训练完成后,再用BP算法对整个网络进行训练。整体解释:预训练+微调的做法可视为将大量参数

  • 微软IIS服务器的最佳优化工具- IIS Tuner

    dudu的《让WindowsServer2008+IIS7+ASP.NET支持10万个同时请求》,里面涉及到需要手工调整参数的地方。在这篇文章中,我们给你介绍一个IIS性能调整工具–IISTuner,可一键配置你的IIS服务器上的ASP.NET应用程序,使得你的IIS服务器上运行的程序具有最佳性能。IISTuner帮你优化系统配置,你的注意力就可以放在应用程序的开发上。IISTuner提供了以下IIS服务器性能调整:HTTP和TCP注册表设置machine.config的设置IIS和AS​​P.NET设置安装IISTuner是很容易的。您的系统上安装了IIS服务器之后,下载IISTuner包,解压到一个目录并双击单击包中的的IISTuner.exe文件。运行后,您的IIS服务器将得到优化,以获得最佳性能。IISTuner站点:iistuner.codeplex.com,网站上的几个文章链接也是学习.NET性能优化的好资料。http://msdn.microsoft.com/en-us/library/ff647813.aspx#scalenetchapt17_topic14 http:

  • Linux curl 命令模拟 POST/GET 请求「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 curl命令,是一个利用URL规则在命令行下工作的文件传输工具。curl支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、FTP等众多协议,还支持GET、POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征,还可以做网页处理流程和数据检索自动化。在进行web后台程序开发测试过程中,常常会需要发送url进行测试,使用curl可以方便地模拟出符合需求的url命令curl语法:curl[options…]<url>#curl(选项)(参数)示例1:curl-m30–retry3https://proxy.mimvp.com/ip.php//curl爬取网页,获取本机外网ip示例2:curl-m30–retry3-xhttps://120.77.176.179:8888https://proxy.mimvp.com/ip.php//curl通过代理IP爬取网页,获取本机外网ip更多示例:https://pro

  • python读取pkl_Python 读取文件

    大家好,又见面了,我是你们的朋友全栈君。使用python读取pkl文件内容可能会出现一些错误,下面将介绍一些解决的方法。importcPickle f=open('subj0.pkl')#文件所在路径 inf=cPickle.load(f)#读取pkl内容 printinf f.close()复制有时候,还是出现错误EOFEORROR,可以通过合并第2,3行,即:inf=cPickle.load(open(‘subj0.pkl’))如果还有问题,最好加上读写方法:inf=cPickle.load(open(‘subj0.pkl’,”rb”)) 上述方法基本可以解决读取pkl文件问题;附几种读取pkl文件的方法:python中cPickle用法版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至举报,一经查实,本站将立刻删除。

  • 腾讯云云函数Web函数相关问题

    Web函数和事件函数的区别?Web函数作为一种全新的函数类型,打破现有事件型函数对于JSON事件格式的限制,可直接由HTTP请求触发,使用场景更灵活,贴近原生Web服务开发体验。 Web函数的适用场景?该类型函数专注于优化Web服务场景,可以直接发送HTTP请求到URL触发函数执行,既支持您通过云函数完成Web服务的开发,也支持本地Web框架一键迁移上云。 Web函数如何计费?作为云函数的新类型,Web函数计费方式和事件型一致,都是通过调用次数、资源使用量、外网出流量来计费,详情请参见计费文档。 启动文件是什么,应该如何编写?Web函数基于函数内置的标准语言镜像环境运行,您必须创建一个可执行文件scf_bootstrap来启动您的WebServer,然后将该文件和您的代码文件一起打包部署,完成Web函数创建。实际处理请求时,您的scf_bootstrap文件将会先启动服务,启动后您的WebServer通过监听指定的9000端口接收到所有的HTTP请求,并转发给后端服务完成逻辑处理并返回给用户。 能否在本地开发时模拟云端环境?目前,云函数SCF标准运行环境镜像已经开放,使用方法请参见使用

  • 跟我一起学Go系列:Go gRPC 安全认证方式-Token和自定义认证

    GogRPC系列: 跟我一起学Go系列:gRPC安全认证机制-SSL/TLS认证 跟我一起学Go系列:gRPC拦截器使用 跟我一起学Go系列:gRPC入门必备 接上一篇继续讲gRPC认证,本篇内容主要是Token认证和自定义认证方式的使用。 说Token认证就不得不提Session。做Web端开发的同学应该都了解Session和Token机制。 Token校验 基于Session的身份校验机制 Session一般由服务端存储,用户通过用户名和密码登录之后服务端会在服务器开辟一块Session内存空间存入用户信息,同时服务器会在cookie信息中写入一个Session_id值,用于标识这一块内存空间。下次用户再来请求的时候会由cookie中带过来这个Session_id,服务端拿着这个Session_id去寻找对应的Session,如果能找到说明用户已经登录过,不用重新走授权的逻辑。 使用Session存在问题在哪里: 服务端存储压力过大,当用户量大的时候,所有用户都会在内存中保存Session信息,可想而知需要很大的内存空间。 分布式应用下Session共享问题会耗费更多的存储。 S

  • 我的Jquery参考词典

    由于工作主要用到Asp.netMvc+Jquery,最近也看了一些Jquery的书籍,在此总结以备回顾。 已读书籍:《JqueryInAction》 主要讲了些Jquery语法以及API用法,感觉不错。              《JavascripttheMissingManual》 前半部分讲了下JS语法,感觉不错,后半部分讲了Jquery插件,没劲。 感觉读有些书还是不要太细了,浪费了很多时间,结果所获寥寥。我感觉自己比较适合泛读书然后实践加深理解。 Jquery Javascript是一种脚本语言,不同于需编译的语言,运行时才被解释器解读。Jquery是基于JS的一个库。 Jqueryfilters即Jquery选择器,匹配语法类似CSS选择器,但也有一些进行了扩展(例如::not)。 Jquery选择器 快速回忆  $("p:even")  匹配所有偶数的<p>  $("tr:

相关推荐

推荐阅读