本文转自互联网
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
https://github.com/h2pl/Java-Tutorial
喜欢的话麻烦点下Star哈
文章首发于我的个人博客:
www.how2playlife.com
本文是微信公众号【Java技术江湖】的《重新学习MySQL数据库》其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有侵权,请联系作者。
该系列博文会告诉你如何从入门到进阶,从sql基本的使用方法,从MySQL执行引擎再到索引、事务等知识,一步步地学习MySQL相关技术的实现原理,更好地了解如何基于这些知识来优化sql,减少SQL执行时间,通过执行计划对SQL性能进行分析,再到MySQL的主从复制、主备部署等内容,以便让你更完整地了解整个MySQL方面的技术体系,形成自己的知识框架。
如果对本系列文章有什么建议,或者是有什么疑问的话,也可以关注公众号【Java技术江湖】联系作者,欢迎你参与本系列博文的创作和修订。
一、MySQL扩展具体的实现方式
随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。
关于数据库的扩展主要包括:业务拆分、主从复制、读写分离、数据库分库与分表等。这篇文章主要讲述数据库分库与分表
(1)业务拆分
在 大型网站应用之海量数据和高并发解决方案总结一二 一篇文章中也具体讲述了为什么要对业务进行拆分。
业务起步初始,为了加快应用上线和快速迭代,很多应用都采用集中式的架构。随着业务系统的扩大,系统变得越来越复杂,越来越难以维护,开发效率变得越来越低,并且对资源的消耗也变得越来越大,通过硬件提高系统性能的方式带来的成本也越来越高。
因此,在选型初期,一个优良的架构设计是后期系统进行扩展的重要保障。
例如:电商平台,包含了用户、商品、评价、订单等几大模块,最简单的做法就是在一个数据库中分别创建users、shops、comment、order四张表。
但是,随着业务规模的增大,访问量的增大,我们不得不对业务进行拆分。每一个模块都使用单独的数据库来进行存储,不同的业务访问不同的数据库,将原本对一个数据库的依赖拆分为对4个数据库的依赖,这样的话就变成了4个数据库同时承担压力,系统的吞吐量自然就提高了。
(2)主从复制
一般是主写从读,一主多从
1、MySQL5.6 数据库主从(Master/Slave)同步安装与配置详解
2、MySQL主从复制的常见拓扑、原理分析以及如何提高主从复制的效率总结
3、使用mysqlreplicate命令快速搭建 Mysql 主从复制
上述三篇文章中,讲述了如何配置主从数据库,以及如何实现数据库的读写分离,这里不再赘述,有需要的选择性点击查看。
上图是网上的一张关于MySQL的Master和Slave之间数据同步的过程图。
主要讲述了MySQL主从复制的原理:数据复制的实际就是Slave从Master获取Binary log文件,然后再本地镜像的执行日志中记录的操作。由于主从复制的过程是异步的,因此Slave和Master之间的数据有可能存在延迟的现象,此时只能保证数据最终的一致性。
(3)数据库分库与分表
我们知道每台机器无论配置多么好它都有自身的物理上限,所以当我们应用已经能触及或远远超出单台机器的某个上限的时候,我们惟有寻找别的机器的帮助或者继续升级的我们的硬件,但常见的方案还是通过添加更多的机器来共同承担压力。
我们还得考虑当我们的业务逻辑不断增长,我们的机器能不能通过线性增长就能满足需求?因此,使用数据库的分库分表,能够立竿见影的提升系统的性能,关于为什么要使用数据库的分库分表的其他原因这里不再赘述,主要讲具体的实现策略。请看下边章节。
二、分表实现策略
关键字:用户ID、表容量
对于大部分数据库的设计和业务的操作基本都与用户的ID相关,因此使用用户ID是最常用的分库的路由策略。用户的ID可以作为贯穿整个系统用的重要字段。因此,使用用户的ID我们不仅可以方便我们的查询,还可以将数据平均的分配到不同的数据库中。(当然,还可以根据类别等进行分表操作,分表的路由策略还有很多方式)
接着上述电商平台假设,订单表order存放用户的订单数据,sql脚本如下(只是为了演示,省略部分细节):
CREATE TABLE `order` (
`order_id` bigint(32) primary key auto_increment,
`user_id` bigint(32),
...
)
当数据比较大的时候,对数据进行分表操作,首先要确定需要将数据平均分配到多少张表中,也就是:表容量。
这里假设有100张表进行存储,则我们在进行存储数据的时候,首先对用户ID进行取模操作,根据 user_id%100
获取对应的表进行存储查询操作,示意图如下:
例如,user_id = 101
那么,我们在获取值的时候的操作,可以通过下边的sql语句:
select * from order_1 where user_id= 101
其中,order_1
是根据 101%100
计算所得,表示分表之后的第一章order表。
注意:
在实际的开发中,如果你使用MyBatis做持久层的话,MyBatis已经提供了很好得支持数据库分表的功能,例如上述sql用MyBatis实现的话应该是:
接口定义:
/**
* 获取用户相关的订单详细信息
* @param tableNum 具体某一个表的编号
* @param userId 用户ID
* @return 订单列表
*/
public List getOrder(@Param("tableNum") int tableNum,@Param("userId") int userId);
xml配置映射文件:
select * from order_${tableNum}
where user_id = #{userId}
其中${tableNum}
含义是直接让参数加入到sql中,这是MyBatis支持的特性。
注意:
另外,在实际的开发中,我们的用户ID更多的可能是通过UUID生成的,这样的话,我们可以首先将UUID进行hash获取到整数值,然后在进行取模操作。
三、分库实现策略
数据库分表能够解决单表数据量很大的时候数据查询的效率问题,但是无法给数据库的并发操作带来效率上的提高,因为分表的实质还是在一个数据库上进行的操作,很容易受数据库IO性能的限制。
因此,如何将数据库IO性能的问题平均分配出来,很显然将数据进行分库操作可以很好地解决单台数据库的性能问题。
分库策略与分表策略的实现很相似,最简单的都是可以通过取模的方式进行路由。
还是上例,将用户ID进行取模操作,这样的话获取到具体的某一个数据库,同样关键字有:
用户ID、库容量
路由的示意图如下:
上图中库容量为100。
同样,如果用户ID为UUID请先hash然后在进行取模。
四、分库与分表实现策略
上述的配置中,数据库分表可以解决单表海量数据的查询性能问题,分库可以解决单台数据库的并发访问压力问题。
有时候,我们需要同时考虑这两个问题,因此,我们既需要对单表进行分表操作,还需要进行分库操作,以便同时扩展系统的并发处理能力和提升单表的查询性能,就是我们使用到的分库分表。
分库分表的策略相对于前边两种复杂一些,一种常见的路由策略如下:
1、中间变量 = user_id%(库数量*每个库的表数量);
2、库序号 = 取整(中间变量/每个库的表数量);
3、表序号 = 中间变量%每个库的表数量;
例如:数据库有256 个,每一个库中有1024个数据表,用户的user_id=262145,按照上述的路由策略,可得:
1、中间变量 = 262145%(256*1024)= 1;
2、库序号 = 取整(1/1024)= 0;
3、表序号 = 1%1024 = 1;
这样的话,对于user_id=262145,将被路由到第0个数据库的第1个表中。
示意图如下:
五、分库分表总结
关于分库分表策略的选择有很多种,上文中根据用户ID应该是比较简单的一种。其他方式比如使用号段进行分区或者直接使用hash进行路由等。有兴趣的可以自行查找学习。
关于上文中提到的,如果用户的ID是通过UUID的方式生成的话,我们需要单独的进行一次hash操作,然后在进行取模操作等,其实hash本身就是一种分库分表的策略,使用hash进行路由策略的时候,我们需要知道的是,也就是hash路由策略的优缺点,优点是:数据分布均匀;缺点是:数据迁移的时候麻烦,不能按照机器性能分摊数据。
上述的分库和分表操作,查询性能和并发能力都得到了提高,但是还有一些需要注意的就是,例如:原本跨表的事物变成了分布式事物;由于记录被切分到不同的数据库和不同的数据表中,难以进行多表关联查询,并且不能不指定路由字段对数据进行查询。分库分表之后,如果我们需要对系统进行进一步的扩阵容(路由策略变更),将变得非常不方便,需要我们重新进行数据迁移。
最后需要指出的是,分库分表目前有很多的中间件可供选择,最常见的是使用淘宝的中间件Cobar。
GitHub地址:https://github.com/alibaba/cobara
文档地址为:https://github.com/alibaba/cobar/wiki
关于淘宝的中间件Cobar本篇内容不具体介绍,会在后边的学习中在做介绍。
另外Spring也可以实现数据库的读写分离操作,后边的文章,会进一步学习。
六、总结
上述中,我们学到了如何进行数据库的读写分离和分库分表,那么,是不是可以实现一个可扩展、高性能、高并发的网站那?很显然还不可以!一个大型的网站使用到的技术远不止这些,可以说,这些都是其中的最基础的一个环节,因为还有很多具体的细节我们没有掌握到,比如:数据库的集群控制,集群的负载均衡,灾难恢复,故障自动切换,事务管理等等技术。因此,还有很多需要去学习去研究的地方。
总之:
路漫漫其修远兮,吾将上下而求索。
前方道路美好而光明,2017年新征程,不泄步!
Mycat实现主从复制,读写分离,以及分库分表的实践
Mycat是什么
一个彻底开源的,面向企业应用开发的大数据库集群
支持事务、ACID、可以替代MySQL的加强版数据库
一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
一个新颖的数据库中间件产品
以上内容来自Mycat官网,简单来说,Mycat就是一个数据库中间件,对于我们开发来说,就像是一个代理,当我们需要使用到多个数据库和需要进行分库分表的时候,我们只需要在mycat里面配置好相关规则,程序无需做任何修改,只是需要将原本的数据源链接到mycat而已,当然如果以前有多个数据源,需要将数据源切换为单个数据源,这样有个好处就是当我们的数据量已经很大的时候,需要开始分库分表或者做读写分离的时候,不用修改代码(只需要改一下数据源的链接地址)
使用Mycat分表分库实践
haha,首先这不是一篇入门Mycat的博客但小编感觉又很入门的博客!这篇博客主要讲解Mycat中数据分片的相关知识,同时小编将会在本机数据库上进行测试验证,图文并茂展示出来。
数据库分区分表,咋一听非常地高大上,总有一种高高在上,望尘莫及的感觉,但小编想说的是,其实,作为一个开发人员,该来的总是会来,该学的东西你还是得学,区别只是时间先后顺序的问题。
一、分区分表
分区就是把一个数据表的文件和索引分散存储在不同的物理文件中。
mysql支持的分区类型包括Range、List、Hash、Key,其中Range比较常用:
RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。
LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。
HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。
KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。
分表是指在逻辑上将一个表拆分成多个逻辑表,在整体上看是一张表,分表有水平拆分和垂直拆分两种,举个例子,将一张大的存储商户信息的表按照商户号的范围进行分表,将不同范围的记录分布到不同的表中。
二、Mycat 数据分片的种类
Mycat 的分片其实和分表差不多意思,就是当数据库过于庞大,尤其是写入过于频繁且很难由一台主机支撑是,这时数据库就会面临瓶颈。我们将存放在同一个数据库实例中的数据分散存放到多个数据库实例(主机)上,进行多台设备存取以提高性能,在切分数据的同时可以提高系统的整体性。
数据分片是指将数据全局地划分为相关的逻辑片段,有水平切分、垂直切分、混合切分三种类型,下面主要讲下Mycat的水平和垂直切分。有一点很重要,那就是Mycat是分布式的,因此分出来的数据片分布到不同的物理机上是正常的,靠网络通信进行协作。
水平切分
就是按照某个字段的某种规则分散到多个节点库中,每个节点中包含一部分数据。可以将数据水平切分简单理解为按照数据行进行切分,就是将表中的某些行切分到一个节点,将另外某些行切分到其他节点,从分布式的整体来看它们是一个整体的表。
垂直切分
一个数据库由很多表构成,每个表对应不同的业务,垂直切分是指按照业务将表进行分类并分不到不同的节点上。垂直拆分简单明了,拆分规则明确,应用程序模块清晰、明确、容易整合,但是某个表的数据量达到一定程度后扩展起来比较困难。
混合切分
为水平切分和垂直切分的结合。
三、Mycat 垂直切分、水平切分实战
1、垂直切分
上面说到,垂直切分主要是根据具体业务来进行拆分的,那么,我们可以想象这么一个场景,假设我们有一个非常大的电商系统,那么我们需要将订单表、流水表、用户表、用户评论表等分别分不到不同的数据库中来提高吞吐量,架构图大概如下:
由于小编是在一台机器上测试,因此就只有host1这个节点,但不同的表还是依旧对应不同的数据库,只不过是所有数据库属于同一个数据库实例(主机)而已,后期不同主机只需增加
节点即可。
mycat配置文件如下:
server.xml
root
// 对应四个逻辑库
order,trade,user,comment
schema.xml
select user()
登陆本机mysql,创建order,trade,user,comment
4个数据库:
create database database1 character set utf8;
create database database2 character set utf8;
create database database3 character set utf8;
create database database4 character set utf8;
执行bin
目录下的startup_nowrap.bat
文件,如果输出下面内容,则说明已经启动mycat成功,如果没有,请检查order,trade,user,comment
4个数据库是否已经创建。
采用下面语句登陆Mycat服务器:
mysql -uroot -proot -P8066 -h127.0.0.1
在comment
数据库中创建Comment
表,并插入一条数据
上图1处新建一个Comment
表,2处插入一条记录,3处查看记录插入到哪个数据节点中,即database4
。
2、水平切分
server.xml
root
TESTDB
schema.xml
select user()
rule.xml
id
rang-long
autopartition-long.txt
conf
目录下的autopartition-long.txt
# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2
上面的配置创建了一个名为TESTDB
的逻辑库,并指定了需要切分的表标签,表名为travelrecord
,分区的策略采用rang-long
算法,即根据id
数据列值的范围进行切分,具体的规则在autopartition-long.txt
文件中定义,即id
在0-500*10000
范围内的记录存放在db1
的travelrecord
表中,id
在500*10000 - 1000*10000
范围内的记录存放在db2
数据库的travelrecord
表中,下面我们插入两条数据,验证是否和分片规则一致。
创建db1,db2,db3
数据库
create database db1 character set utf8;
create database db2 character set utf8;
create database db3 character set utf8;
确实是这样的,到此我们就完成了mycat数据库的水平切分,这个例子只是演示按照id列值得范围进行切分,mycat还支持很多的分片算法,如取模、一致性哈希算法、按日期分片算法等等,大家可以看《分布式数据库架构及企业实战----基于Mycat中间件》这本书深入学习。
为什么需要读写分离
至于为什么需要读写分离,在我之前的文章有介绍过了,相信看到这篇文章的人也知道为什么需要读写分离了,当然如果你也需要了解一下,那么欢迎查看我之前的文章SpringBoot Mybatis 读写分离配置,顺便也可以了解一下怎么通过代码进行读写分离的
MySQL主从复制
主从复制是读写分离的关键,不管通过什么方式进行读写分离,前提就是MySQL有主从复制,当前双机主从也行,但是关键的关键,是要能保证2个库的数据能一致(出掉刚写入主库从库还未能及时反应过来的情况),如果2个库的数据不一致,那么读写分离也有没有任何意义了,具体MySQL怎么做主从复制可以查看我之前的文章MySQL主从复制搭建,基于日志(binlog)
Mycat读写分离设置
配置Mycat用户
Mycat的用户就跟MySQL用户是同一个意思,主要配置链接到Mycat的用户名以及密码,以及能使用的逻辑库,用户信息主要在server.xml中配置的,具体如下
druidparser
rayewang
separate
其中
定义了一个名为raye的用户,标签user中的rayewang
定义了用户的密码,separate
定义了用户可以使用的逻辑库
配置Mycat逻辑库
Mycat的配置有很多,不过因为我们只是使用Mycat的读写分类的功能,所以用到的配置并不多,只需要配置一些基本的,当然本文也只是会介绍到读写分离相关的配置,其他配置建议读者自己查看一下文档,或者通过其他方式了解,逻辑库是在schema.xml
中配置的
首先介绍Mycat逻辑库中的一些配置标签
schema
schema
标签是用来定义逻辑库的,schema
有四个属性dataNode
,checkSQLschema
,sqlMaxLimit
,name
dataNode
标签属性用于绑定逻辑库到某个具体的 database 上,1.3 版本如果配置了 dataNode,则不可以配置分片表,1.4 可以配置默认分片,只需要配置需要分片的表即可
name
是定义当前逻辑库的名字的,方便server.xml
中定义用户时的引用
checkSQLschema
当该值设置为 true 时,如果我们执行语句select * from separate.users;则 MyCat 会把语句修改 为select * from users;。即把表示 schema 的字符去掉,避免发送到后端数据库执行时报(ERROR 1146 (42S02): Table ‘separate.users’ doesn’t exist)。 不过,即使设置该值为 true ,如果语句所带的是并非是 schema 指定的名字,例如:select * from db1.users; 那么 MyCat 并不会删除 db1 这个字段,如果没有定义该库的话则会报错,所以在提供 SQL语句的最好是不带这个字段。
sqlMaxLimit
当该值设置为某个数值时。每条执行的 SQL 语句,如果没有加上 limit 语句,MyCat 也会自动的加上所对应的值。例如设置值为 100,执行select * from users;的效果为和执行select * from users limit 100;相同。设置该值的话,MyCat 默认会把查询到的信息全部都展示出来,造成过多的输出。所以,在正常使用中,还是建议加上一个值,用于减少过多的数据返回。当然 SQL 语句中也显式的指定 limit 的大小,不受该属性的约束。需要注意的是,如果运行的 schema 为非拆分库的,那么该属性不会生效。需要手动添加 limit 语句。
schema
标签中有标签table
用于定义不同的表分片信息,不过我们只是做读写分离,并不会用到,所以这里就不多介绍了
dataNode
dataNode
dataNode 标签定义了 MyCat 中的数据节点,也就是我们通常说所的数据分片。一个 dataNode 标签就是一个独立的数据分片,dataNode
有3个属性:name
,dataHost
,database
。
name
定义数据节点的名字,这个名字需要是唯一的,此名字是用于table
标签和schema
标签中引用的
dataHost
该属性用于定义该分片属于哪个数据库实例的,属性值是引用 dataHost 标签上定义的 name 属性
database
该属性用于定义该分片属性哪个具体数据库实例上的具体库,因为这里使用两个纬度来定义分片,就是:实例+具体的库。因为每个库上建立的表和表结构是一样的。所以这样做就可以轻松的对表进行水平拆分
dataHost
dataHost
是定义真实的数据库连接的标签,该标签在 mycat 逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句,dataHost
有7个属性:name
,maxCon
,minCon
,balance
,writeType
,dbType
,dbDriver
,有2个标签heartbeat
,writeHost
,其中writeHost
标签中又包含一个readHost
标签
name
唯一标识 dataHost 标签,供dataNode
标签使用
maxCon
指定每个读写实例连接池的最大连接。也就是说,标签内嵌套的 writeHost、readHost 标签都会使用这个属性的值来实例化出连接池的最大连接数
minCon
指定每个读写实例连接池的最小连接,初始化连接池的大小
balance
读取负载均衡类型
balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
balance="2",所有读操作都随机的在 writeHost、readhost 上分发。
balance="3",所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力
writeType
写入负载均衡类型,目前的取值有 3 种:
writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
writeType="1",所有写操作都随机的发送到配置的 writeHost
dbType
指定后端连接的数据库类型,目前支持二进制的 mysql 协议,还有其他使用 JDBC 连接的数据库。例如:mongodb、oracle、spark 等
dbDriver
指定连接后端数据库使用的 Driver,目前可选的值有 native 和 JDBC。使用 native 的话,因为这个值执行的 是二进制的 mysql 协议,所以可以使用 mysql 和 maridb。其他类型的数据库则需要使用 JDBC 驱动来支持。从 1.6 版本开始支持 postgresql 的 native 原始协议。 如果使用 JDBC 的话需要将符合 JDBC 4 标准的驱动 JAR 包放到 MYCAT\lib 目录下,并检查驱动 JAR 包中包括如下目录结构的文件:META-INF\services\java.sql.Driver。在这个文件内写上具体的 Driver 类名,例如: com.mysql.jdbc.Driver。
heartbeat
这个标签内指明用于和后端数据库进行心跳检查的语句。例如,MYSQL 可以使用 select user(),Oracle 可以使用 select 1 from dual 等。 这个标签还有一个 connectionInitSql 属性,主要是当使用 Oracla 数据库时,需要执行的初始化 SQL 语句就这个放到这里面来。例如:alter session set nlsdateformat='yyyy-mm-dd hh24:mi:ss'
writeHost
,readHost
这两个标签都指定后端数据库的相关配置给 mycat,用于实例化后端连接池。唯一不同的是,writeHost 指定写实例、readHost 指定读实例,组着这些读写实例来满足系统的要求。 在一个 dataHost 内可以定义多个 writeHost 和 readHost。但是,如果 writeHost 指定的后端数据库宕机,那么这个 writeHost 绑定的所有 readHost 都将不可用。另一方面,由于这个 writeHost 宕机系统会自动的检测到,并切换到备用的 writeHost 上去,这2个标签属性都一致,拥有host
,url
,password
,user
,weight
,usingDecrypt
等属性
host
用于标识不同实例,一般 writeHost 我们使用M1,readHost 我们用S1
url
真实数据库的实例的链接地址,如果是使用 native 的 dbDriver,则一般为 address:port 这种形式。用 JDBC 或其他的dbDriver,则需要特殊指定。当使用 JDBC 时则可以这么写:jdbc:mysql://localhost:3306/
user
真实数据库实例的链接用户名
password
真实数据库实例的链接密码
weight
权重 配置在 readhost 中作为读节点的权重,主要用于多台读取的数据库实例机器配置不同的情况,可以根据权重调整访问量
usingDecrypt
是否对密码加密默认 0 否 如需要开启配置 1,同时使用加密程序对密码加密
注意,readHost是在writeHost标签内的,不是单独的
以下是我的读写分离配置文件
select user()
前面已经差不多都解释清楚了,因为我只是用的基本的主从复制,所以我的将dataHost
的balance
设置成了3
启动mycat,然后用数据库连接工具连接到mycat,可以测试是否配置成功,最简单的就是通过修改从库的数据,这样方便查看到底是运行到哪个库上面了,另外由于我是基于docker启动的mycat,所以如果是直接在系统中运行的mycat的,可以去看官方文档,看看到底怎么启动mycat
你可能感兴趣的:(重新学习Mysql数据13:Mysql主从复制,读写分离,分表分库策略与实践)
【机器学习】---神经架构搜索(NAS)
Undoom
机器学习 Python 机器学习 架构 人工智能 python
这里写目录标题引言1.什么是神经架构搜索(NAS)1.1为什么需要NAS?2.NAS的三大组件2.1搜索空间搜索空间设计的考虑因素:2.2搜索策略2.3性能估计3.NAS的主要方法3.1基于强化学习的NAS3.2基于进化算法的NAS3.3基于梯度的NAS4.NAS的应用5.实现一个简单的NAS框架6.总结引言随着深度学习的成功应用,神经网络架构的设计变得越来越复杂。模型的性能不仅依赖于数据和训练方
ORA-01033告警的乌龙事件
deadknight9
运维 Oracle 数据库
一、现象如下日志所示,数据库出现ORA-01033:ORACLE正在初始化或关闭报错,非常吓人,但数据库没有重启记录。ThuJun0902:35:232022Thread1advancedtologsequence7321(LGWRswitch)Currentlog#9seq#7321mem#0:+XXSDG/XXsdb/onlinelog/group_9.268.975690667Current
Spring Cloud 路由与过滤器
扬子鳄008
Spring Cloud spring cloud
SpringCloud路由与过滤器是SpringCloudGateway的核心功能。SpringCloudGateway是一个用于构建API网关的框架,旨在提供简单、有效的路由管理及API请求过滤。为了实现这些功能,SpringCloudGateway使用了路由(Route)和过滤器(Filter)两个重要概念。下面我们详细介绍这两个部分。路由(Route)路由是将请求映射到后端服务的规则。每个路
JAVA中Interface(接口)的使用
爪哇哇哇哇
JAVA基础 java 开发语言
interface一、interface概述二、接口的使用1.接口的理解2.定义接口的关键字3.接口内部结构说明:4.接口与类的关系:实现关系5.格式:6.满足此关系之后,说明:7.接口与接口的关系:8.接口的多态性:9.区分抽象类和接口三、jdk8、9中interface的新特性1.jdk8:声明静态方法、默认方法一、interface概述接口就是规范,定义的是一组规则,体现了现实世界中“如果你
微服务-高级篇
爪哇哇哇哇
微服务 微服务 java 服务器 架构
微服务-高级篇一.微服务保护1.初识Sentinel2.微服务整合Sentinel3.限流4.隔离和降级5.授权规则6.规则管理模式二、分布式事务1.什么是分布式事务?2.理论基础3.部署与集成Seata4.Seata的四种模式5.Seata高可用三、分布式缓存1.Redis持久化2.搭建主从架构与哨兵模式3.RedisTemplate的哨兵模式4.Redis分片集群数据迁移5.RedisTemp
Python爬取豆瓣图书网Top250 实战
有杨既安然
python 开发语言 爬虫 网络爬虫 爬虫实战
Python爬取豆瓣图书网Top250实战只是用于学习,请不要恶意攻击别人的网站,尊重他人。1.引言豆瓣图书Top250是一个经典的图书排行榜,包含了大量优质图书的信息。本文将深入探讨如何使用Python爬取豆瓣图书Top250的内容,并将数据分别保存到数据库(SQLite)和文本文档中。我们将涵盖反爬虫策略、异常处理、数据清洗等技术细节,并提醒大家在爬取数据时尊重他人的劳动成果。2.技术栈与工具
【JavaWeb阶段学习】三步学会JDBC知识点
ss273
java 学习 mysql java
(❁´◡`❁)您的点赞➕评论➕收藏⭐是作者创作的最大动力支持我:点赞+收藏⭐️+留言目录1、JDBC基础JDBC数据库连接JDBC实现增删改查JDBC代码规范化2、结果集2.1、结果集光标与元数据3、预处理4、sql查询继续巩固练习1.查出至少有一个员工的部门,显示部门编号/部门名称/部门位置/部门人数2.列出所有员工的姓名及其直接上级的姓名3.列于受雇日期早于直接上级的所有员工的编号/姓名/部门
JavaScript 数组去重:告别重复,打造完美数据!
故梦867
前端八股总结 javascript 开发语言
JavaScript数组去重:告别重复,打造完美数据!有没有遇到过这样的困扰:你处理的数据中,明明是几百条记录,却有很多完全重复的元素,冗余的数据让人头疼!如果你正在为此烦恼,别担心,今天我们将带你一起探索几种既简单又强大的JavaScript数组去重技巧,让你的数据焕然一新,效率倍增!一、Set去重:傻瓜式简单,高效得让人惊艳想要快速去重?那就让Set来帮你!在ES6中,Set是一个天然去重的超
自学嵌入式
风华漫舞21
linux c语言
#学习嵌入式第二天##C语言的基本数据类型C语言的基本数据类型,基本的数据类型有整型、浮点型(单精度、双精度)、字符型。整型数据有int、short、long、longlong四种类型。数据又分为有符号数和无符号数,二者数据表示的范围不同。int型:占4个字节;对于有符号数(signed)数据表示范围为:-2^31~2^31-1,对于无符号数据表示范围为:0~2^32-1。short型:占2个字节
超详细python实现爬取淘宝商品信息(标题、销量、地区、店铺等)
芝士胡椒粉
python 爬虫 数据库 数据可视化
引导因为数据可视化这门课程的大作业要自己爬取数据,想着爬取淘宝的数据,结果找了不少文章都不太行、或者已经失效了等等,就边学边看边写搓了一份代码出来,一是为了记录一下、二是如果大家有需要也可以使用。首先看最后爬取的数据的效果:代码部分引入第三方库importpymysqlfromseleniumimportwebdriverfromselenium.common.exceptionsimportTi
机器学习模型调优指南
闵少搞AI
人工智能 机器学习 人工智能
机器学习模型调优指南机器学习模型参数调优的作用在于优化模型的性能,使其能够在给定任务上更好地泛化和预测。通过合理调整模型的超参数,能够提高模型的准确性、降低过拟合或欠拟合的风险、加快训练过程等。具体来说,机器学习模型参数调优的作用可以从以下几个方面来理解:1.提高模型的预测性能通过调优超参数,可以使模型更适应数据的特征,从而提高其在未知数据上的预测性能。超参数通常会影响模型的拟合能力和泛化能力。例
2024年开发语言热度排名
码上飞扬
开发语言
随着技术的不断发展和变化,编程语言的热度也在不断演变。2024年即将到来,我们有必要回顾和展望当前和未来的开发语言市场。本文将基于多个因素,包括行业需求、社区支持、流行度以及新兴趋势,对2024年的开发语言热度进行排名和分析。1.Python:持续的热潮热度原因Python近年来一直在编程语言中占据着重要的地位,预计到2024年仍将保持其热度。主要原因包括:数据科学与人工智能:Python是数据科
SpringBoot一键提取身份证与营业执照信息
一名技术极客
# java相关 工具类 spring boot 后端 java
SpringBoot一键提取身份证与营业执照信息使用的工具和库步骤和代码示例添加依赖图像预处理和文字识别信息提取使用OpenCV对图像进行预处理OpenCV图像预处理示例集成到OCR服务中在SpringBoot中实现图片中的身份证号、营业执照等信息的识别,可以分为以下几个步骤:图像预处理:为了提高识别的准确性,首先对图片进行预处理,如调整大小、对比度、亮度等。文字检测:使用图像处理算法或框架来定位
优化Elasticsearch搜索性能:查询调优与索引设计
一勺菠萝丶
Java # ELK # SpringBoot elasticsearch 大数据 搜索引擎
在构建基于Elasticsearch的搜索解决方案时,性能优化是关键。本文将深入探讨如何通过查询调优和索引设计来优化Elasticsearch的搜索性能,从而提高用户体验和系统效率。查询调优优化查询是提高Elasticsearch性能的重要方法。以下是一些有效的查询调优策略,并附上具体例子以便理解:使用合适的查询类型:选择最合适的查询类型可以提高查询效率。例如,对于精确匹配,使用termquery
Kubernetes:基础的架构
土豆凌凌七
kubernetes 架构 容器 golang 后端
kubernetes的一个简单机构图形k8s主要分为两个大结构:1控制面:master是集群的大脑和心脏2数据面:worker主要在master的指挥下进行工作,也称之为nodekubectl是k8s的管理工具我们可以使用kubectlgetnode来查看节点的状态因为Master和Node的划分不是绝对的。当集群的规模较小,工作负载较少的时候,Master也可以承担Node的工作使用kubect
es查询大文本效率_Elasticsearch 技术分析(七): Elasticsearch 的性能优化
weixin_39672296
es查询大文本效率
javajava8java开发Elasticsearch技术分析(七):Elasticsearch的性能优化硬件选择Elasticsearch(后文简称ES)的基础是Lucene,所有的索引和文档数据是存储在本地的磁盘中,具体的路径可在ES的配置文件../config/elasticsearch.yml中配置,如下:#-----------------------------------Paths
Python中的列表
蒙面人mmmmmm
Python
1、IDLE默认内置函数都是紫色,字符串是绿色,关键字(如if)是橙色,生成的所有结果为蓝色2、Python的变量标识符没有类型!!但是标识符指示的数据对象有类型。3、Python列表可以包含各种类型的数据,也就是说在同一个列表中,可以同时有字符串和数字4、for循环:可以实现迭代for目标标识符in列表:列表处理代码(suite)这里有缩进的哦~~当然,迭代也可以用while。不过使用while
技术解析 | 云游戏在未来如何实现?
腾讯云音视频
游戏 网络 视频处理
在刚刚过去的腾讯全球数字生态大会上,腾讯云发布了全新的云游戏解决方案,将云游戏带入了2.0时代。今天的技术解码就由胡小华老师为大家解读云游戏的相关技术细节。云游戏是一种以云计算、渲染及云传输为基础的游戏实现方式,与传统游戏区别在于游戏的运行在云端边缘计算节点上,而非用户本地终端上;用户本地终端通过网络接收云端边缘计算节点发送的数据进行游戏声音与画面的本地呈现,同时用户将对游戏的操作控制指令发送到云
开源人工智能模型框架:探索与实践
CodeJourney.
人工智能 能源
摘要本文深入探讨了开源人工智能模型框架,旨在为研究人员、开发者及相关从业者提供全面的理解与参考。通过对多个主流开源框架,如TensorFlow、PyTorch、Keras、Detectron2、OpenCV、HuggingFaceTransformers、AllenNLP、MindSpore和Fastai的详细分析,阐述其特点、应用场景、优势与不足,并结合具体示例说明其使用方法,同时配以相关架构图
深入探究 Vue 3 中动态组件加载与性能优化
桂月二二
vue.js 性能优化 前端
随着前端工程化的深入发展,Vue.js已成为最受欢迎的前端框架之一,其灵活性和生态系统丰富性让开发者爱不释手。然而,当我们开发中大型项目时,性能优化往往成为不得不面对的问题。在Vue3中,官方提供了动态组件加载与性能优化的支持,通过动态导入(DynamicImport)和Suspense组件的结合,我们可以更好地管理资源、减少初始加载时间,同时提升用户体验。这篇文章将详细讲解这项技术的使用方式及其
C# 中的 Base 关键字
山语山
c# 开发语言
在C#面向对象编程中,base关键字是一个非常重要的概念,它用于在派生类中访问基类的成员。本文将详细探讨base的理解与用法,帮助你更好地掌握这一关键特性。一、base的基本概念1.1基类与派生类在C#中,类之间的关系可以通过继承来表示。一个类可以继承另一个类,从而获得基类的属性和方法。基类是被继承的类,而派生类是从基类派生出来的类。例如:publicclassAnimal{publicvoidE
Java 大视界 -- Java 开发 Spark 应用:RDD 操作与数据转换
一只蜗牛儿
java spark 开发语言
ApacheSpark是一个强大的分布式计算框架,提供了高效的数据处理能力,广泛应用于大数据分析与机器学习。Spark提供了多种高级API,支持批处理和流处理。Spark提供了两种主要的数据抽象:RDD(弹性分布式数据集)和DataFrame。本文将重点介绍如何使用Java开发Spark应用,并深入探讨RDD的操作与数据转换。一、Spark环境搭建首先,确保您的环境中安装了Java和Spark。您
深入HDFS——DataNode启动源码
黄雪超
大数据基础 # 深入HDFS hdfs hadoop 大数据
引入上一篇我们看完了NameNode的启动源码,对于NameNode我们已经很熟悉了,今天我们接着来看看它的“得力干将”——DataNode。首先,自然还是从元数据管理篇提到的DataNode类(org.apache.hadoop.hdfs.server.datanode.DataNode)开始。不过在深入启动源码前,我们先看看它的源码注释:DataNodeisaclass(andprogram)
什么是工业4.0?
lynn-fish
工业4.0 智能制造 智能化 物联网 智能工厂 制造 数字化转型
在当今这个日新月异的时代,科技的每一次飞跃都深刻地改变着我们的生活与工作方式。而在这场全球性的变革中,工业4.0不仅代表了制造业的未来趋势,更是全球经济发展的新引擎。那么,究竟什么是工业4.0?它如何重塑我们的工业体系,又将带来哪些前所未有的机遇与挑战?一、工业4.0的定义工业4.0,也被称为第四次工业革命,是信息技术与制造业深度融合的产物。它起源于2011年德国提出的高科技战略项目,旨在通过计算
Java 静态代理和动态代理
Bou_Cher
Java java 代理模式 开发语言
Java静态代理和动态代理代理模式:A调用B,由于某些原因(解耦合、保护B、扩展B),B不想让A直接调用,创建一个中间代理者C,由A调用C,由C中调用B的功能和C封装的东西。优点:将调用者与被调用者分离,保护被调用者,降低耦合度扩展被调用者功能时比较方便缺点:增加较多的代理类,类的设计数量会上升,增加系统复杂度请求经过代理类,整体的运行响应速度会有影响静态代理只能指定单一的被代理类,动态代理可以在
Three.js实现动态水泡效果逐步解析GLSL着色器
贵州数擎科技有限公司
javascript 着色器 开发语言
大家好!我是[数擎AI],一位热爱探索新技术的前端开发者,在这里分享前端和Web3D、AI技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步!开发领域:前端开发|AI应用|Web3D|元宇宙技术栈:JavaScript、React、ThreeJs、WebGL、Go经验经验:6年+前端开发经验,专注于图形渲染和AI技术经验经验:演示地址开源项目:智简未来、晓智元宇宙、数字
【C#深度学习之路】如何使用C#读取pickle类型的大模型文件
来瓶霸王防脱发
C#深度学习之路 c# 机器学习
【C#深度学习之路】如何使用C#读取pickle类型的大模型文件背景Pickle文件的结构及读取思路读取方法以压缩文件的方式加载Pickle类型文件读取Header的内容读取tensor的权重值该方法的不足总结本文为原创文章,若需要转载,请注明出处。原文地址:https://blog.csdn.net/qq_30270773/article/details/141367057项目对应的Github
python-44-嵌入式数据库SQLite和DuckDB
皮皮冰燃
python3 数据库 python sqlite DuckDB
文章目录1SQLite1.1世界上最流行的数据库1.1SQLite简介1.2插入语句1.3查询数据1.4更新数据1.5删除数据2DuckDB2.1DuckDB简介2.2DuckDB与Python结合使用2.2.1创建表2.2.2分析语句2.2.3导出为parquet文件2.3Windows中使用DuckDB3参考附录1SQLitePython的一个特点是,它内置了一个轻量级的关系型数据库SQLit
Java中的延迟加载与即时加载:JPA与Hibernate的使用指南
微赚淘客系统@聚娃科技
java hibernate
Java中的延迟加载与即时加载:JPA与Hibernate的使用指南大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在开发企业级Java应用时,JPA(JavaPersistenceAPI)和Hibernate是常用的持久化框架。它们帮助我们轻松地管理数据库中的数据。然而,在处理复杂关系数据时,加载策略(即延迟加载和即时加载)会显著影响性能和内存使用。因此,理解并
华为OD机试题库大全【JAVA&Python&C++&JS题解】
步入烟尘
算法个人练习笔记 python 华为od java javascript c++ c语言
OD机试是一项重要环节,用于评估应聘者的编程能力和算法理解程度。在申请OD岗位时,应聘者需要首先通过机试的考核,才有机会进入后续的面试环节。机试的内容主要包括算法和数据结构的应用,题型可能涵盖递归、分治、单调栈、并查集、滑动窗口、前缀和、查分、二分查找、BFS广搜以及DFS深搜等多种算法。考试形式为在线答题,题目难度和具体内容会根据不同的招聘岗位而有所调整。华为OD机试共有三道题,前两道题的总分是
Spring4.1新特性——综述
jinnianshilongnian
spring 4.1
目录
Spring4.1新特性——综述
Spring4.1新特性——Spring核心部分及其他
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——异步调用和事件机制的异常处理
Spring4.1新特性——数据库集成测试脚本初始化
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——页面自动化测试框架Spring MVC T
Schema与数据类型优化
annan211
数据结构 mysql
目前商城的数据库设计真是一塌糊涂,表堆叠让人不忍直视,无脑的架构师,说了也不听。
在数据库设计之初,就应该仔细揣摩可能会有哪些查询,有没有更复杂的查询,而不是仅仅突出
很表面的业务需求,这样做会让你的数据库性能成倍提高,当然,丑陋的架构师是不会这样去考虑问题的。
选择优化的数据类型
1 更小的通常更好
更小的数据类型通常更快,因为他们占用更少的磁盘、内存和cpu缓存,
第一节 HTML概要学习
chenke
html Web css
第一节 HTML概要学习
1. 什么是HTML
HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,它规定了自己的语法规则,用来表示比“文本”更丰富的意义,比如图片,表格,链接等。浏览器(IE,FireFox等)软件知道HTML语言的语法,可以用来查看HTML文档。目前互联网上的绝大部分网页都是使用HTML编写的。
打开记事本 输入一下内
MyEclipse里部分习惯的更改
Array_06
eclipse
继续补充中----------------------
1.更改自己合适快捷键windows-->prefences-->java-->editor-->Content Assist-->
Activation triggers for java的右侧“.”就可以改变常用的快捷键
选中 Text
近一个月的面试总结
cugfy
面试
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/46753275
前言
打算换个工作,近一个月面试了不少的公司,下面将一些面试经验和思考分享给大家。另外校招也快要开始了,为在校的学生提供一些经验供参考,希望都能找到满意的工作。 
HTML5一个小迷宫游戏
357029540
html5
通过《HTML5游戏开发》摘抄了一个小迷宫游戏,感觉还不错,可以画画,写字,把摘抄的代码放上来分享下,喜欢的同学可以拿来玩玩!
<html>
<head>
<title>创建运行迷宫</title>
<script type="text/javascript"
10步教你上传githib数据
张亚雄
git
官方的教学还有其他博客里教的都是给懂的人说得,对已我们这样对我大菜鸟只能这么来锻炼,下面先不玩什么深奥的,先暂时用着10步干净利索。等玩顺溜了再用其他的方法。
操作过程(查看本目录下有哪些文件NO.1)ls
(跳转到子目录NO.2)cd+空格+目录
(继续NO.3)ls
(匹配到子目录NO.4)cd+ 目录首写字母+tab键+(首写字母“直到你所用文件根就不再按TAB键了”)
(查看文件
MongoDB常用操作命令大全
adminjun
mongodb 操作命令
成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作。输入help可以看到基本操作命令,只是MongoDB没有创建数据库的命令,但有类似的命令 如:如果你想创建一个“myTest”的数据库,先运行use myTest命令,之后就做一些操作(如:db.createCollection('user')),这样就可以创建一个名叫“myTest”的数据库。
一
bat调用jar包并传入多个参数
aijuans
下面的主程序是通过eclipse写的:
1.在Main函数接收bat文件传递的参数(String[] args)
如: String ip =args[0]; String user=args[1]; &nbs
Java中对类的主动引用和被动引用
ayaoxinchao
java 主动引用 对类的引用 被动引用 类初始化
在Java代码中,有些类看上去初始化了,但其实没有。例如定义一定长度某一类型的数组,看上去数组中所有的元素已经被初始化,实际上一个都没有。对于类的初始化,虚拟机规范严格规定了只有对该类进行主动引用时,才会触发。而除此之外的所有引用方式称之为对类的被动引用,不会触发类的初始化。虚拟机规范严格地规定了有且仅有四种情况是对类的主动引用,即必须立即对类进行初始化。四种情况如下:1.遇到ne
导出数据库 提示 outfile disabled
BigBird2012
mysql
在windows控制台下,登陆mysql,备份数据库:
mysql>mysqldump -u root -p test test > D:\test.sql
使用命令 mysqldump 格式如下: mysqldump -u root -p *** DBNAME > E:\\test.sql。
注意:执行该命令的时候不要进入mysql的控制台再使用,这样会报
Javascript 中的 && 和 ||
bijian1013
JavaScript && ||
准备两个对象用于下面的讨论
var alice = {
name: "alice",
toString: function () {
return this.name;
}
}
var smith = {
name: "smith",
[Zookeeper学习笔记之四]Zookeeper Client Library会话重建
bit1129
zookeeper
为了说明问题,先来看个简单的示例代码:
package com.tom.zookeeper.book;
import com.tom.Host;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.Wat
【Scala十一】Scala核心五:case模式匹配
bit1129
scala
package spark.examples.scala.grammars.caseclasses
object CaseClass_Test00 {
def simpleMatch(arg: Any) = arg match {
case v: Int => "This is an Int"
case v: (Int, String)
运维的一些面试题
yuxianhua
linux
1、Linux挂载Winodws共享文件夹
mount -t cifs //1.1.1.254/ok /var/tmp/share/ -o username=administrator,password=yourpass
或
mount -t cifs -o username=xxx,password=xxxx //1.1.1.1/a /win
Java lang包-Boolean
BrokenDreams
boolean
Boolean类是Java中基本类型boolean的包装类。这个类比较简单,直接看源代码吧。
public final class Boolean implements java.io.Serializable,
读《研磨设计模式》-代码笔记-命令模式-Command
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* GOF 在《设计模式》一书中阐述命令模式的意图:“将一个请求封装
matlab下GPU编程笔记
cherishLC
matlab
不多说,直接上代码
gpuDevice % 查看系统中的gpu,,其中的DeviceSupported会给出matlab支持的GPU个数。
g=gpuDevice(1); %会清空 GPU 1中的所有数据,,将GPU1 设为当前GPU
reset(g) %也可以清空GPU中数据。
a=1;
a=gpuArray(a); %将a从CPU移到GPU中
onGP
SVN安装过程
crabdave
SVN
SVN安装过程
subversion-1.6.12
./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --with-openssl=/
sql 行列转换
daizj
sql 行列转换 行转列 列转行
行转列的思想是通过case when 来实现
列转行的思想是通过union all 来实现
下面具体例子:
假设有张学生成绩表(tb)如下:
Name Subject Result
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
*/
/*
想变成
姓名 &
MySQL--主从配置
dcj3sjt126com
mysql
linux下的mysql主从配置: 说明:由于MySQL不同版本之间的(二进制日志)binlog格式可能会不一样,因此最好的搭配组合是Master的MySQL版本和Slave的版本相同或者更低, Master的版本肯定不能高于Slave版本。(版本向下兼容)
mysql1 : 192.168.100.1 //master mysq
关于yii 数据库添加新字段之后model类的修改
dcj3sjt126com
Model
rules:
array('新字段','safe','on'=>'search')
1、array('新字段', 'safe')//这个如果是要用户输入的话,要加一下,
2、array('新字段', 'numerical'),//如果是数字的话
3、array('新字段', 'length', 'max'=>100),//如果是文本
1、2、3适当的最少要加一条,新字段才会被
sublime text3 中文乱码解决
dyy_gusi
Sublime Text
sublime text3中文乱码解决
原因:缺少转换为UTF-8的插件
目的:安装ConvertToUTF8插件包
第一步:安装能自动安装插件的插件,百度“Codecs33”,然后按照步骤可以得到以下一段代码:
import urllib.request,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a30980927
概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM
geeksun
PHP
CGI
CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。 FastCGI
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不
Git push 报错 "error: failed to push some refs to " 解决
hongtoushizi
git
Git push 报错 "error: failed to push some refs to " .
此问题出现的原因是:由于远程仓库中代码版本与本地不一致冲突导致的。
由于我在第一次git pull --rebase 代码后,准备push的时候,有别人往线上又提交了代码。所以出现此问题。
解决方案:
1: git pull
2:
第四章 Lua模块开发
jinnianshilongnian
nginx lua
在实际开发中,不可能把所有代码写到一个大而全的lua文件中,需要进行分模块开发;而且模块化是高性能Lua应用的关键。使用require第一次导入模块后,所有Nginx 进程全局共享模块的数据和代码,每个Worker进程需要时会得到此模块的一个副本(Copy-On-Write),即模块可以认为是每Worker进程共享而不是每Nginx Server共享;另外注意之前我们使用init_by_lua中初
java.lang.reflect.Proxy
liyonghui160com
1.简介
Proxy 提供用于创建动态代理类和实例的静态方法
(1)动态代理类的属性
代理类是公共的、最终的,而不是抽象的
未指定代理类的非限定名称。但是,以字符串 "$Proxy" 开头的类名空间应该为代理类保留
代理类扩展 java.lang.reflect.Proxy
代理类会按同一顺序准确地实现其创建时指定的接口
Java中getResourceAsStream的用法
pda158
java
1.Java中的getResourceAsStream有以下几种: 1. Class.getResourceAsStream(String path) : path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。 2. Class.getClassLoader.get
spring 包官方下载地址(非maven)
sinnk
spring
SPRING官方网站改版后,建议都是通过 Maven和Gradle下载,对不使用Maven和Gradle开发项目的,下载就非常麻烦,下给出Spring Framework jar官方直接下载路径:
http://repo.springsource.org/libs-release-local/org/springframework/spring/
s
Oracle学习笔记(7) 开发PLSQL子程序和包
vipbooks
oracle sql 编程
哈哈,清明节放假回去了一下,真是太好了,回家的感觉真好啊!现在又开始出差之旅了,又好久没有来了,今天继续Oracle的学习!
这是第七章的学习笔记,学习完第六章的动态SQL之后,开始要学习子程序和包的使用了……,希望大家能多给俺一些支持啊!
编程时使用的工具是PLSQL