宇宙中到底存不存在真正的随机,是一个值得思考的哲学问题,虽然与正在谈的技术无关,但是这个问题对于解释我们世界的构成非常重要。
假如说宇宙中不存在真随机,我们用机械的思想来思考这个世界,即所有东西都是由确定的物理规则决定的,只要知道系统的初态以及物理规律,就可以像生命游戏那样模拟系统的整个发展过程,我们受到的限制只是计算能力以及对于规则的了解程度,这个思考方式即世界的过去、现在、未来都是确定的。这样就又引发了一些社会问题,比如如果我们都认为未来是确定的,那我们还会继续努力工作吗?如果未来是确定的,那我们是不是可以把自身的错误归结为世界的物理演化规律呢?这里就会引发很多很多问题,在这里就不继续深入了。
随着量子力学的研究,我们发现这个世界可能存在真正的随机,这个随机就是由最基本的物理规律所决定的,所以另一个思考方式是整个世界系统是随机的,未来是存在不确定性的,我们有可能通过主观能动性改变自己的未来,尽管我们不是确定世界到底存不存在真正的随机,但是从社会和个人的角度,我们更愿意相信存在真正的随机。但要强调的是,人的意志在真正的物理规律面前不堪一击,绝不能靠主观意志来认识世界,只有认识和顺应规律才能更好的生存。
在哲学层面跳了一会,我们的线程切回到编程的角度,从计算机领域理解什么是真随机和伪随机。
简单的理解:
在下图中将真随机数和伪随机数进行了可视化,可以看到伪随机数中存在一些规律,利用这些规律就可以进行预测。
![]() |
![]() |
true random | pseudo random |
计算机中的随机数是通过算法生成的,其分布有一定的规律,而且其是可以预知的,可以复现的,所以其是伪随机数。而在计算机中,控制随机数生成的叫做随机数种子,通过种子就可以复现随机的结果。
random是python中的一个伪随机数生成库,如果是用于安全领域的技术的话,不要使用这个库做随机数生成。
Warning: The pseudo-random generators of this module should not be used for security purposes. For security or cryptographic uses, see the
secrets
module.
使用时需要先导入 random 库:
import random
random分为随机字节、随机整数、随机实数、随机序列等几个部分,下面会结合代码进行解释
这里主要介绍了随机数生成器的初始化,内部状态的获取和设置。
函数名称 | 功能 | 参数 |
---|---|---|
random.seed(a=None, version=2) | ||
random.getstate() | ||
random.setstate(state) |
python中 random.seed()
用来初始化随机数生成器,如果没有参数或者没有调用这个函数的话,就默认用当前系统时间作为种子来初始化随机数生成器,其他可以用于生成的参数如下:
In the future, the seed must be one of the following types: NoneType,
int
,float
,str
,bytes
, orbytearray
.
random.seed() # NoneType
random.seed(123) # int
random.seed(1.23) # float
random.seed('test') # str
random.seed(b'test') # bytes
random.seed(bytearray('test', 'utf-8')) # bytearray
然后是关于随机数生成器的状态的获取:
random.seed(123)
state = random.getstate()
print(state)
输出(实际非常多,这里省略了中间部分):
(3, (2147483648, 2876009367, 1753366361, 587391455, 3571287981, 2841166249, 3473823116, 2904574710, 4146802524, 2741122045, 783444538,
.....
,1307775084, 3508428900, 563598120, 3962693380, 1351546783, 3657472180, 512481711, 162375823, 3972024452, 1156280088, 2910736509, 685587641, 2049376995, 4000340228, 1863192767, 3173692251, 624), None)
random.getstate()
获取了当前随机数生成器的内部状态,并将其作为一个对象返回,那么就可以将这个对象设置为随机数生成器的状态来复现结果:
实验1:
random.seed(123)
state = random.getstate()
print(random.random())
print(random.random())
print(random.random())
# 第一次
0.052363598850944326
0.08718667752263232
0.4072417636703983
# 第二次
0.052363598850944326
0.08718667752263232
0.4072417636703983
# 多次的结果均相同
实验2:
random.seed(123)
state = random.getstate()
print(random.random())
random.setstate(state)
print(random.random())
random.setstate(state)
print(random.random())
# 第一次
0.052363598850944326
0.052363598850944326
0.052363598850944326
# 第二次
0.052363598850944326
0.052363598850944326
0.052363598850944326
# 多次的结果均相同
实验3:
random.seed(123)
print(random.random())
random.seed(123)
print(random.random())
random.seed(123)
print(random.random())
# 第一次
0.052363598850944326
0.052363598850944326
0.052363598850944326
# 第二次
0.052363598850944326
0.052363598850944326
0.052363598850944326
# 多次的结果均相同
这里如何解释?重置状态和重新初始化有什么关系?
python3.9
print(random.randbytes(2))
随机整数有以下几个方法
函数名称 | 功能 | 参数 |
---|---|---|
random.randrange(stop) | ||
random.randrange(start, stop[, step]) | ||
random.randint(a, b) | ||
random.getrandbits(k) |
print(random.randrange(10))
print(random.randrange(0,12,2))
print(random.randint(0,6))
print(random.getrandbits(1)) # 指定位数的整数随机数
函数名称 | 功能 | 参数 |
---|---|---|
random.choice(seq) | ||
random.choices(population, weights=None, *, cum_weights=None, k=1) | ||
random.shuffle(x[, random]) | ||
random.sample(population, k, *, counts=None) |
# 从序列中随机选取一个
choice_test = ['a','b','c','d']
print(random.choice(choice_test))
# 随机生成一个序列,元素可重复,可以给每个元素的可能性赋权重
choices_test = ['a','b','c','d']
print(random.choices(choices_test,weights=[100, 1, 1, 100],k=2))
# 打乱序列
shuffle_test = ['a','b','c','d']
random.shuffle(shuffle_test) # 返回值为None,直接修改原序列
print(shuffle_test)
# 随即选取序列的一个子序列,元素不重复
sample_test = ['a','b','c','d']
print(random.sample(sample_test,2)) # 返回值为子序列
实数分布(Real-valued distributions)
函数名称 | 数值范围 | 分布 | 参数 |
---|---|---|---|
random.random() | [0,1) | random | |
random.uniform(a, b) | [a,b] | random | |
random.triangular(low, high, mode) | [low,high] | symmetric distribution | |
random.betavariate(alpha, beta) | [0,1] | Beta distribution | |
random.expovariate(lambd) | Exponential distribution | ||
random.gammavariate(alpha, beta) | Gamma distribution | ||
random.gauss(mu, sigma) | Gaussian distribution | ||
random.lognormvariate(mu, sigma) | Log normal distribution | ||
random.normalvariate(mu, sigma) | Normal distribution | ||
random.vonmisesvariate(mu, kappa) | Vonmi distribution | ||
random.paretovariate(alpha) | Pareto distribution | ||
random.weibullvariate(alpha, beta) | Weibull distribution |
print(random.random())
print(random.uniform(a=0,b=6))
print(random.triangular(low=0,high=10,mode=5))
print(random.betavariate(alpha=1,beta=5))
print(random.expovariate(lambd=2))
print(random.gammavariate(alpha=1,beta=2))
print(random.gauss(mu=1,sigma=0.6))
print(random.lognormvariate(mu=1,sigma=0.6))
print(random.normalvariate(mu=1,sigma=0.6))
print(random.vonmisesvariate(mu=1,kappa=0.6))
print(random.paretovariate(alpha=1))
print(random.weibullvariate(alpha=1,beta=0.6))
http://docs.python.org/library/random.html
python 随机数_utopia的专栏-CSDN博客
随机数:真随机数和伪随机数_Eyoru的博客-CSDN博客_伪随机数
python random随机数、numpy.random随机数 - 知乎 (zhihu.com)
随机数大家都会用,但是你知道生成随机数的算法吗? - 知乎 (zhihu.com)
组件分享之后端组件——基于Golang的系统和服务监控系统prometheus背景近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。组件基本信息组件:prometheus开源协议:Apache-2.0许可证官网:prometheus.io/内容本节我们分享一个基于Golang的系统和服务监控系统prometheus。它以给定的时间间隔从配置的目标收集指标,评估规则表达式,显示结果,并在观察到指定条件时触发警报。Prometheus与其他指标和监控系统的区别在于:多维数据模型(由指标名称和键/值维度集定义的时间序列)PromQL,一种强大且灵活的查询语言,可利用此维度不依赖分布式存储;单个服务器节点是自治的用于时间序列收集的HTTP拉取模型通过用于批处理作业的中间网关支持推送时间序列通过服务发现或静态配置发现目标图形和仪表板支持的多种模式支持分层和水平联合image.png日常使用可以使用下述安装方式: 1、docker安装dockerrun--namepromethe
题目:输入n个整数,找出其中最小的K个数。 例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4思路:遍历数组先取数组的前k个数建立大根堆,继续遍历数组.如果当前值比大根堆最大值小,那么将数组中这个小值替换到堆里.代码://输入n个整数,找出其中最小的K个数。 //例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 publicstaticArrayList<Integer>GetLeastNumbers_Solution(int[]input,intk){ ArrayList<Integer>list=newArrayList<Integer>(); if(input==null){ returnlist; } if(input.length<k||k==0){ returnlist; } PriorityQueue<Integer>maxHeap=newPriorityQueue<Integer>(newComparator<Integer>
直播系统源码开发完成后,不可避免地要进行在线视频直播系统的搭建部署。此时,也需要根据当初源码开发时的功能,选择合理的服务器搭建部署方案。服务器架构方面通常要用到云存储服务器、流媒体服务器或CDN、socket集群、Redis集群和Mysql集群等。app直播源码固然重要,但是在开发过程中,如果不注意直播架构方面的问题,那么在前端运行的过程中也会出现不少问题。蜂拥是一种在实时互动直播过程中非常突出的一种现象,在短时间内大量的用户进入频道或者使用服务就可以称之为是蜂拥,对于后台的冲击力也十分巨大。大多数直播后台的服务器每秒接入大概千的量级,但是对于蜂拥而来的用户,处理量还远远不够。这时候通常就会出现一个问题就是,后台处理响应的速度越来越慢,很多用户的请求就会出现超时。超时之后就会进入更多的请求,导致整个后台系统不能响应。分布式实时互动直播架构主播的视频流在上传到接入服务器后,这个服务器会把这个视频流分发到我们所部署在世界各地的服务器,然后这些服务器可以接入本地的用户,再把视频传下去。在这个架构里,部署在世界各地的服务器,可以让用户快速就近地接入,整个视频流通过我们在互联网上做的分布式传输算
95道MongoDB面试题(含答案),1万字详细解析!强烈推介IDEA2020.2破解激活,IntelliJIDEA注册码,2020.2IDEA激活码1、mongodb是什么?MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。再高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB旨在给WEB应用提供可扩展的高性能数据存储解决方案。MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB文档类似于JSON对象。字段值可以包含其他文档,数组及文档数组。2、mongodb有哪些特点?(1)MongoDB是一个面向文档存储的数据库,操作起来比较简单和容易。(2)你可以在MongoDB记录中设置任何属性的索引(如:FirstName="Sameer",Address="8GandhiRoad")来实现更快的排序。(3)你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。(4)如果负载的增加(需要更多的存储空间和更强的处理能力),它可以分布在计算机网络
网络层负责将报文从源送到目的包括TCP建立连接,也需要依靠网络层,来将这个连接请求,传递到对方。为设备提供逻辑地址,也就是IP地址主流是IPV4地址IPV4地址,为32位二进制数,长度4个字节,1字节等于8比特(位)ICMP主要用于检测网络的连通性也是面向连接对方收到我的请求后,需要发送回复ping114.114.114.114Tracert主要用于检测,或者说跟踪,源到目的站点所经过的路径使用IP头部中的TTL字段TTL字段,每经过一台三层设备,减1windows10发出的TTL为64tracert114.114.114.114原理基于UDP或者ICMP首先发送一个TTL为1的UDP探测报文,源IP是本地,目的IP比如是114.114.114.114当第一个三层设备收到后,查找去往目的站点的路由,但此时,TTL已经为0超时了,所以它会回应超时报文,这个时候,它的IP地址会显示出来依次类推,直到去到目的站点ARP使用IP去解析该IP对应的MAC比如ping192.168.1.2假设现在电脑没有192.168.1.2的ARP表项,此时就完成不了二层封装为什么,因为二层头部是源MAC,目的
自己眼中的程序员万般皆下品,唯有coding高,一行代码,掌控世界,其他的都是渣渣….老板眼中的程序员廉价搬砖工,不要创新,不要多想,低下头就是干。产品经理眼中的程序员加班汪:随时待命,想改就改,改不完就加班。父母眼中的程序员整天就知道对着电脑玩,天天打游戏。女神眼中的程序员随叫随到,免费修电脑。丈母娘眼中的程序员赚的多,老实人,女儿可托付终身。外行眼中的程序员工资高,福利好,还有专门的鼓励师,羡慕。路人眼中的程序员标配:格仔衫,黑框眼镜,双肩包,牛仔裤。晚上10点的地铁里,程序员下班了。这里推荐一下我的前端学习交流群:731771211,里面都是学习前端的,如果你想制作酷炫的网页,想学习知识。自己整理了一份2018最全面前端学习资料,从最基础的HTML+CSS+JS到移动端HTML5到各种框架都有整理,送给每一位前端小伙伴,有想学习web前端的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入学习。
有没有遇到过这样的问题,读取文件被提示“UnicodeDecodeError”、爬取网页得到一堆乱码,其实这些都是编码惹的祸,如果不能真正理解编码的问题所在,就像开车没有带导航,游泳没有带有度数的眼镜。如果你正在为此而头疼,不妨来看看这篇文章,里面或许有你要的答案。一些基本的编码知识1).常见的编码格式ASCII/ANSI:ASCII可以简单理解为用于表述英文文字的编码。ANSI是ASCII的扩展,除英文外还可以表示拉丁文。GB2312/GBK/GB18030:“GB”既“国标”,是中国自己的编码方案,目的当然是为了描述汉字(下文我们统称其为GB系列)。其中,GB2312是对ASCII的中文扩展,GBK和GB18030的涵盖了GB2312的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。Unicode:既然中国搞出了自己的编码标准,那么其他国家当然也有自己的一套规范,而且相互之间互不支持,为了解决这一乱象,国际标谁化组织提出了统一的标准编码准则Unicode。这里大家可以先简单记住一点:python3Unicode 。UTF-8:说得官面一点,utf-8是最流行的一种
Ubuntuapt-get和pip源更换更新数据源为国内,是为了加速安装包的增加速度。更换apt-get数据源输入:sudo-s切换为root超级管理员;执行命令:vim/etc/apt/sources.list;使用命令:%d清空所有内容;清华数据源地址:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/选择相应的版本复制内容,点击“i”键进入编辑文本模式,粘贴内容到vim编辑窗体,点击“ESC”键进入编辑模式,输入“:wq”保存离开;更新源:sudoapt-getupdate;更新软件:sudoapt-getupgrade;pip3的安装与升级安装pip3:sudoapt-getinstallpython3-pip升级pip3:sudopipinstall--upgradepip查看pip版本:pip-Vpip源更换根目录创建.pip文件:mkdir~/.pip;创建文件pip.conf:vim.pip/pip.conf;点击“i”键,进入编辑模式,复制信息: [global]index-url=https://pypi.tuna.t
1.接口描述接口请求域名:live.tencentcloudapi.com。 删除转码规则。DomainName+AppName+StreamName+TemplateId唯一标识单个转码规则,如需删除需要强匹配。其中TemplateId必填,其余参数为空时也需要传空字符串进行强匹配。 默认接口请求频率限制:200次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:DeleteLiveTranscodeRule。 Version 是 String 公共参数,本接口取值:2018-08-01。 Region 否 String 公共参数,本接口不需要传递此参数。 DomainName 是 String 播放域名。 AppName 是 String 推流路径,与
[gcc编译步骤] 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs] 3.由汇编变为目标代码(机器代码)生成.o的文件[汇编器as] 4.连接目标代码,生成可执行程序[链接器ld] [编译器参数详解] 编写Makefile时,下列编译器参数是赋给CFLAGS的。 例如: CFLAGS=-mmcu=$(MCU) CFLAGS+=-DDebug CFLAGS+=-DFFD …… -xlanguagefilename 设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定C语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp, 例子用法: gcc-xchello.pig -xnonefilename 关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型 例子用法: gcc-xchello.pig-xnonehello2.c -c 只激活预处理,编译,和汇编,也就是只把程序做成obj文件 例子用法: gcc-chello.c 将生成.o的obj文件 -S 只激
1/** 2删除一行最前面的行号和空格 3比如博客园:"12xxx" 4**/ 5#include<cstdio> 6#include<cstdlib> 7#include<cstring> 8#include<iostream> 9usingnamespacestd; 10constintmax_len=1e6; 11 12charstr_1[max_len],str_total[max_len]; 13 14BOOLSetClipData(char*pstr) 15{ 16///https://www.cnblogs.com/emjx/p/11141572.html 17if(OpenClipboard(NULL)) 18{ 19char*pBuf; 20if(0==EmptyClipboard()) 21{ 22CloseClipboard(); 23returnfalse; 24} 25HGLOBALhClip=GlobalAlloc(GMEM_MOVEABLE,strlen(pstr)+1); 26if(NULL==hClip)
搭建Spring、SpringMVC、Mybatis和Freemarker 1、pom文件 <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.candle</groupId> <artifactId>home-finance-sample</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>home-
少点代码,多点头发 上篇给大家写了应届生工作一年不到,从被裁到上岸,我们该如何自渡?如何保证自己的核心竞争力?反响很好。但是吧,我犯了一个错误,敖丙提醒我的。 太难了,失业这几天没发原创,连个原创都忘记标了,真是傻?。所以我今天又放了一次次条,这次可标了原创。没看的赶紧看看,稳稳的有帮助。 大大小小也面试了快十家公司了,有些非常重要的面试题和面试经验必须给大家整出来。 首先声明,我投的岗位是搜索方向、后端开发(偏底层、高性能)、java后台(这个岗位是阿里面试官看我简历让我试试的)。 面试的问题主要分为几块去说,C&C++&STL、数据结构与算法(含编程)、操作系统、多线程问题、场景题目、项目。 项目在社招面试中占据的分数很高,所以面试讲项目的时间会多。项目细节就不给大家透漏了,会把项目中的知识点穿插到对应的知识模块。 项目这块 这一块一定是面试最重要的地方。在整个社招面试的时候,自我介绍从来都是从项目说起,不会像校招那样会介绍来自哪里,叫什么名字,会什么技术。 每次自我介绍都是这样说的: 做了什么项目如果项目是独立设计和开发,要描述为什么做这个项目,设计思路我
发展转正部培训 1.认清材料 首先,我们看到档案袋封面划分为三个部分(各部分依次标记为A、B、C)。 除了A中的1-7材料属于申请入党阶段和入党积极分子的确定和培养教育阶段,其余材料都是我们发展转正部负责跟进。 相关材料编号、名称如下: 2.查材料的基本步骤 1.准备好铅笔、橡皮、白纸(作为问题记录纸); 2.每人每次只打开一份档案袋,逐份审查(同时打开多个人的档案袋容易混淆材料) 3.打开档案袋后,在每份材料左上角处用铅笔写好编号(编号如上图所示或参考档案袋封面,如综合政审报告就在左上角写上A12);然后按编号顺序依次叠放好。查出欠缺哪份材料,将欠缺的材料记在问题记录纸上。 4.按材料编号顺序逐份审查,每处错误用铅笔圈出,然后在纸上记录。 3.基本要点 1.每份材料只要有出现党支部名称的地方,一定要检查确保名称准确。 常见错误:中共上海海洋大学信息学院委员会本科生/研究生第X党支部(❌) ps:前面有出现“中共”二字,后面就不要再出现“党”, 正确形式:中共上海海洋大学信息学院委员会本科生/研究生第X支部;(✔) 或者: &nb
Presto简介 是Facebook开源的,完全基于内存的并⾏计算,分布式SQL交互式查询引擎 Presto架构 Presto优缺点 优点: 1)Presto基于内存运算,减少了磁盘IO,计算更快; 2)能够连接多个数据源,跨数据源连表查; 缺点: Presto能够处理PB级别的海量数据分析,但Presto并不是把PB级数据都放在内存中计算的。而是根据场景,如Count,AVG等聚合运算,是边读数据边计算,再清内存,再读数据再计算,这种耗的内存并不高。但是连表查,就可能产生大量的临时数据,因此速度会变慢 Presto使用 PrestoServer部署 配置coordinator节点、worker节点 Presto命令行Client部署 启动:./prestocli--serverhadoop102:8881--cataloghive--schemadefault 注意: 对接Hive时,如果表使用了parquet存储+lzo压缩,需要手动添加lzo的jar包; 如果表是纯lzo压缩,需要修改hadoop-lzo源码后再手动添加lzo的jar包; Presto可视化Client部署 P
复制 Number.isFinite(),Number.isNaN() ES6在Number对象上,新提供了Number.isFinite()和Number.isNaN()两个方法。 Number.isFinite()用来检查一个数值是否为有限的(finite)。 Number.isFinite(15);//true Number.isFinite(0.8);//true Number.isFinite(NaN);//false Number.isFinite(Infinity);//false Number.isFinite(-Infinity);//false Number.isFinite('foo');//false Number.isFinite('15');//false Number.isFinite(true);//false复制 Number.isNaN()用来检查一个值是否为NaN。 Number.isNaN(NaN)//true Number.isNaN(15)//false Number.isNaN('15')//false Number.isNaN(true)
/** *获取数组最大值下标 */ constfindMaxIndex=(numberList)=>{ letmaxValue=parseFloat(numberList[0]); letminValue=parseFloat(numberList[0]); letmaxIndex=0; letminIndex=0; for(leti=0;i<numberList.length;i++){ letcurrent=parseFloat(numberList[i]); if(current>maxValue){ maxValue=current; maxIndex=i; }elseif(current<minValue){ minValue=current; minIndex=i; } } returnmaxIndex }复制
MyISAM Myisam是Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用Myisam。 它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。 myisam只支持表级锁。 支持FULLTEXT类型的索引 DELETE表时,是一行一行的删除 myisam在磁盘存储上有三个文件,每个文件名以表名开头,扩展名指出文件类型。 .frm用于存储表的定义 .MYD用于存放数据 .MYI用于存放表索引 InnoDB InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全,包括ACID事务支持。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。 Innodb支持行级锁。 不支持FULLTEXT类型的索引 DELETE表时,先drop表,然后重建表 选择 因为MyISAM相对简单所以在效率上要优于InnoDB.如果系统读多,写少。对原子性要求低。那么MyISAM最好的选择。且MyISAM恢复速度快。可直
web服务器两种开源产品 apache ngnix apacheweb服务器 一、apahce配置文件 1、配置文件都哪些 配置文件目录:/apache/etc/ 下 httpd.conf文件 安装文件的主目录 ServerRoot /usr/local/appache2/ 服务监听端口 Listen80 加载动态模块包含php解析器的动态模板 LoadModulephp5_modulemodules/libphp5.so 网站上传的根目录 DocumentRoot "/usr/local/apache2/htdocs/" 网站根目录的服务权限 <Directory"/usr/local/appache2/htdocs"> OptionsIndexesFollowSymLinks AllowOverrideNone Orderallow,deny #先允许 后拒绝 &nbs