-
敏捷开发中如何持续集成和优化软件性能
2016-03-24 15:39:06敏捷开发中快速进行版本迭代和发布,... 其实,做到这一点也不难,对于核心代码建立单元级别的自动化性能测试,对于核心业务流程建立Web应用级别的自动化性能测试,在每次代码集成或发布的时候由构建系统自动运行测试敏捷开发中快速进行版本迭代和发布,已经成为大多数敏捷团队的工作常态。同时,保证每个版本软件功能运行性能不下降也是其基本目标,但是由于团队资源不足或者测试成本过高等原因,对于多数团队来说这一基本目标也只是美好的愿景。
其实,做到这一点也不难,对于核心代码建立单元级别的自动化性能测试,对于核心业务流程建立Web应用级别的自动化性能测试,在每次代码集成或发布的时候由构建系统自动运行测试,测试完成后和历史数据进行对比评估并自动发送报告给团队成员,做的好一点甚至可以和代码变更记录进行关联联想,自动推测可能导致性能下降的代码变更,这样团队就可以及时发现潜在的问题,快速消除风险。这套体系基本上是一次性投入,多次复用的,比起赌概率等问题出现搞突击加班加点还是很划算的。
涉及到的要点主要如下:
1、构建系统自动运行测试和发送报告
现在的构建系统都支持自定义运行任务,自动发送报告,已经不是什么问题。
2、编写单元性能测试代码
已经有测试软件可以支持直接调用代码,以脚本式语言快速编写测试代码,只需几行方法调用,就可以模拟并 发运行以及支持配置复杂逻辑调用,比如HyperPacer、Jmeter等
3、应对Web页面快速变化自适应的性能测试脚本开发
大多数开发平台的Web控件都是有规则可循的,选择支持基于关键字匹配的测试软件(比如HyperPacer), 可以将Web页面的控件识别设置形成规则库,在脚本运行时自动进行关联匹配,只要关键字不变,即使Web页面 发生变化,也能匹配到正确的控件,提高脚本的复用性。
4、应对数据变化的测试
应用真实模拟测试中,经常需要模拟变化的数据,选择支持数据工厂或数据池化处理的测试工具(比如HyperPacer),可以根据规则自动生成需要的测试数据,或者将已有的测试数据管理起来,减少模拟数据的工作量。
-
流程整合前提:熟悉业务和业务流程
2014-01-09 10:58:33只有管理层熟悉了业务流程才能真正具备话语权,只有最熟悉业务流程的人,才能懂得如何做到流程整合和流程优化。比如在传统制造业物流敢住商品实时运存情况,资金关注应收应付,信息流关注客户或供应商企业情况,商品...只有管理层熟悉了业务流程才能真正具备话语权,只有最熟悉业务流程的人,才能懂得如何做到流程整合和流程优化。比如在传统制造业物流敢住商品实时运存情况,资金关注应收应付,信息流关注客户或供应商企业情况,商品信息变化,社会化情况变化;金融业物流关注与银行、基金公司、券商等交收路线,资金流关注在途、应收应付,信息流关注机构或个人信息变化,社会化情况或行情变化。管理层只有抓住核心内容就可以对工作流程进行整合和优化。
1)理清流程路径
熟悉业务和业务流程的第一步,我们需要理清流程的路径。画出流程图,对每个环境的业务处理、传输数据作出明确定义,同时理解整个组织架构。这些我们可以通过工作流引擎中的流程建模简单地实现。
熟悉业务和业务流程的第一步:画出流程图
2)流程考核的量化
通过这个步骤,伴随着考核的量化实现。流程部署的完成,岗位职能明确,工作列表明确了,日志自动生成了,考核点也明确了。如下图我们对流程效果的跟踪:
熟悉业务和业务流程的第一步:流程考核的量化 -
Ansible 的配置优化
2020-12-02 17:13:33Ansible服务端使用了默认的SSH无代理方式与客户端通信,效率远低于有代理的通讯方式,然而通过本文,您将学习到如何通过配置优化,来加速Ansible的执行速度,以提高自动化运维的工作效率,做到等同于有代理通讯方式...前言
Ansible服务端使用了默认的SSH无代理方式与客户端通信,效率远低于有代理的通讯方式,然而通过本文,您将学习到如何通过配置优化,来加速Ansible的执行速度,以提高自动化运维的工作效率,做到等同于有代理通讯方式的效率,包括:
- 如何开启SSH长连接,避免SSH短连接的通信开销;
- 开启Pipelin-ing,利用SSH会话来缩短PUT脚本至远端客户端执行的流程;
- 开启Accelerate模式,利用远端客户端上运行的守护进程,优化Ansible的执行流程;
- 在Playbook中修改Ansible的执行策略,减少多主机批量执行过程的等待;
- 在Playbook中使用异步特性,减少执行任务的同步等待;
- 设置Facts缓存,通过提前将Facts信息缓存于本地JSON文件、Redis或Memcached内存数据库中,来提高PlayBook的执行效率。
1.Ansible执行速度过慢问题
在测试连通性的过程中,利用默认配置,发现有一个问题非常困扰,就是通过Ansible服务端向客户端执行命令非常缓慢,主要体现在创建SSH的通道很慢,虽然Ansible在同一个task里面是并行的控制多台受管端,但是每一个task都需要和受控端创建SSH通道,非常影响效率。由下面也能看出,一个简单的PING命令都要耗时13秒以上。
time ansible test -m ping X.X.X.X | SUCCESS => { "changed": false, "ping": "pong" } real 0m13.030s user 0m1.147s sys 0m0.263s
这种执行效率显然是无法接受的,那么通过配置优化来提升Ansible的执行效率势在必行。
2.开启SSH长连接
我们知道Ansible模式是使用SSH和远端主机进行通信,所以Ansible对于SSH的依赖性非常强,下面我们第一步就从SSH入手来优化Ansible。OpenSSH在5.6版本以后支持了Multiplexing(多路复用)功能,它支持同一主机的多个SSH会话共享单一TCP连接进行通讯,一旦第一个连接建立,后续连接就不再需要凭证,从而消除了每次连接同一机器都需要键入密码的麻烦并且大幅度节省了服务器端的资源,这种功能也称作长连接机制。
如果Ansible中控机的SSH -V版本高于5.6时,我们可以直接在ansible.cfg文件中设置SSH长连接即可。设置参数如下:
[ssh_connection] ssh_args = -o ControlMaster=auto -o ControlPersist=5d
Contro1Persist=5d这个参数是设置整个长连接的保持时间,默认值为60秒,这里设置为5天,如果开启后,通过SSH连接过的设备都会在用户当前目录的~/ansible/cp/目录下生成一个socket文件,每个会话一个文件,以便相同连接复用,也可以通过netstat命令查看,会发现有一个ESTABLISHED状态的连接一直与远端设备进行着TCP连接。如果长连接时间超过Contro1Persist的设定值,连接将被断开,socket文件也将被清理。另外,如果不仅仅需要Ansible开启SSH长连接,SSH命令也保持长连接的话,可以修改Ansible中控端的SSH CLIENT的全局性配置文件:/etc/ssh/ssh_config,或者修改当前用户的~/.ssh/config文件,使本用户生效:
ServerAliveInterval 30 ServerAliveCountMax 3 ControlMaster auto ControlPath ~/.ssh/sockets/%r@%h-%p ControlPersist 5d
其中ServerAliveInterval表示client每隔30秒发送一次请求给server,然后server响应,从而保持连接;ServerAliveCountMax表示client发出请求后,服务器端没有响应的次数达到3,就自动断开连接;ControlPath表示socket的存放和复用路径。
如果我们的Ansible中控机SSH-V版本低于5.6时,则需要升级到5.6版本后才能启用SSH Multiplex-ing特性。
通过SSH-V命令查看了下当前演示环境的OpenSSH的版本为:OpenSSH_5.3p1,这次需要将openssh版本升级到OpenSSH_6.7p1,安装包的下载地址为:
http://www.linuxfromscratch.org/blfs/view/7.7/postlfs/openssh.html
升级过程如下:
- 查看是否缺少依赖包:
rpm -qa|egrep “gcc|make|perl|pam|pam-devel”
- 缺少了依赖包,可以通过YUM源直接安装这些缺少的包:
yum –y install gcc* make perl pam pam-devel
上传安装包:
openssh-6.7p1.tar.gz
备份ssh:
mv /etc/ssh /etc/ssh.bak
编译安装新版本OpenSSH:
gzip -dc openssh-6.7p1.tar.gz|tar -xvf – cd openssh-6.7p1 ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords make
卸载旧版本OpenSSH:
rpm -a|grep openssh rpm -e `rpm –qa|grep openssh` --nodeps
装新版本OpenSSH:
make install
配置OpenSSH,主要是保证ssh-copy-id等命令能够正常使用:
cd openssh-6.7p1 install -v -m755 contrib/ssh-copy-id /usr/bin install -v -m644 contrib/ssh-copy-id.1 /usr/share/man/man1 install -v -m755 -d /usr/share/doc/openssh-6.7p1 install -v -m644 INSTALL LICENCE OVERVIEW README* /usr/share/doc/openssh-6.7p1
查看是否升级到了新版本:
ssh –V OpenSSH_6.7p1, OpenSSL 1.0.1e-fips 11 Feb 2013
复制启动脚本到/etc/init.d:
cp /root/openssh-6.7p1/contrib/redHat/sshd.init /etc/init.d/sshd
将sshd加入开机自启动:
chkconfig --add sshd
重新启动sshd
service sshd restart
执行速度验证:
time ansible X.X.X.X -a uptime X.X.X.X | SUCCESS | rc=0 >> 15:37:17 up 881 days, 17:12, 1 user, load average: 0.00, 0.00, 0.00 real 0m4.228s user 0m2.591s sys 0m0.327s
通过OpenSSH的版本升级,我们发现速度优化较为明显,执行速度为4秒左右。我们当然不然满足于此,看看按照前面介绍的方式,开启Multiplexing功能特性后的Ansible执行速度又如何:
time ansible X.X.X.X -a uptime X.X.X.X | SUCCESS | rc=0 >> 15:37:31 up 881 days, 17:12, 1 user, load average: 0.00, 0.00, 0.00 real 0m3.075s user 0m2.532s sys 0m0.310s
执行速度又降低了1秒,看来复用了长连接,减少SSH的TCP通信开销还是有效果的。
3.开启Pipelining
Pipelining也是OpenSSH的一个特性,在Ansible的整个执行流程中,包含三个步骤:
- 首先,基于调用的模块生成一个Python脚本
- 其次,再将Python脚本复制到主机上
- 最后,在远端服务器上执行这个Python脚本
我们可以看到,其中有一个流程就是把生成好的本地Python脚本PUT到远端服务器执行,如果开启了Pipelining,Ansible执行Python脚本的时候并不会复制它,而是通过管道传递给SSH会话,Ansible使用的SSH会话将减少到一个,这样可以大大提高整个执行效率。尤其是在在部署大规模服务器或引用模块非常多时,开启Pipelining特性会给Ansible带来更加显著的性能提升。下面我们通过一个示例展示整个过程。首先在ansible.cfg配置文件中设置Pipelining。
[ssh_connection] pipelining = True
再来看开启了Pipelining之后整个Ansible的执行流程有什么变化:
开启Pipelining之前的流程如下:
开启Pipelining之后的流程如下:
我们可以看到开启了Pipelining之后整个流程少了一个PUT脚本和SFTP去远端服务器的流程,且大量减少了SSH连接次数,第一步就是直接调用ssh执行脚本。那么经过优化后的耗时又如何呢:time ansible X.X.X.X -a uptime X.X.X.X | SUCCESS | rc=0 >> 15:38:26 up 881 days, 17:13, 0 users, load average: 0.00,0.00, 0.00 real 0m1.741s user 0m1.429s sys 0m0.176s
耗时又降低了1.3秒。
但是我们要注意,如果在Ansible中使用sudo命令的话,例如:ssh user@host sudo cmd,需要在被控节点的/etc/sudoers中禁用"requiretty"。这是因为ssh远程执行命令时,它的环境是非登录式非交互式 shell,默认不会分配tty,没有tty,ssh的sudo就无法关闭密码回显(业可以在Ansible命令行中使用"-tt"参数来强制SSH分配tty)。所以出于安全考虑,/etc/sudoers中默认是开启requiretty的,它要求只有拥有tty的用户才能使用sudo,也就是说ssh连接过去不允许执行sudo。所以我们需要编辑sudo配置文件,通过注释该选项来禁用它。如果我们在Playbook中不适用sudo越权功能,则不需要在被控节点的sudo配置文件中禁用该选项。
4.开启Accelerate模式
除了OpenSSH上述两个功能之外,Ansible还有一个Accelerate模式,这和前面SSH Multiplexing功能有点类似,因为都依赖Ansible中控机跟远端机器有一个长连接。但是Accelerate是使用Python程序在远端机器上运行一个守护进程,然后Ansible会通过这个守护进程监听的端口进行通信。开启Accelerate模式很简单,只要在Playbook中配置accelerate:true即可开启。但是需要注意,如果开启Accelerate模式,则需要在Ansible中控机与远端机器都安装python-keyczar软件包,软件包的下载地址如下:
http://rpm.pbone.net/index.php3/stat/4/idpl/49957349/dir/redhat_el_6/com/python-keyczar-0.71c-1.el6.noarch.rpm.html
安装python-keyczar软件包,中控机和远端都需要安装。远程批量安装可以参考采用之前所介绍的方式实施。
yum install python-pyasn1 rpm -ivh python-keyczar-0.71c-1.el6.noarch.rpm
定义ansible.cfg文件中Accelerate参数,例如远端机器的监昕端口以及timeout设置。当然这些参数也可以在写playbook的时候再定义:
[accelerate] accelerate_port = 5099 accelerate_timeout= 30 accelerate_connect_timeout= 5.0
在Playbook中定义Accelerate,例如:
--- - hosts: all accelerate: true accelerate_port: 5099
然而,RedHat官方目前不赞成使用Accelerate模式。因为在启用ControlPersist和Pipelining管道的情况下,Ansible的执行效率比较高。Accelerate功能在后面的Ansible版本中将被删除。
5.修改Ansible执行策略
默认Ansible在远程执行任务是按批并行执行的,一批控制多少台主机由命令行的-f参数或ansible.cfg配置中的–forks选项控制。例如,默认的并行进程数是5,如果有20台被控主机,那么只有在每5台全部执行完一个任务才继续下一批的5台执行该任务,即使中间某台机器性能较好,完成速度较快,它也会空闲地等待在那,直到所有20台主机都执行完该任务才会以同样的方式继续下一个任务。
在Ansible 2.0版本后,添加了一个策略控制选项strategy,默认值为"linear",即上面按批并行处理的方式。我们还可以设置strategy的值为"free"。在free模式下,Ansible会尽可能快的切入到下一个主机。同样是上面的例子,首先每5台并行执行一个任务,当其中某一台机器由于性能较好提前完成了该任务,它不会等待其他4台完成,而是会跳出该任务让Ansible切入到下一台机器来执行该任务。也就是说,这种模式下,一台主机完成一个任务后,另一台主机会立即执行任务,它是"前赴后继"的方式。所以这种策略的执行结果给人感觉是无序的甚至是杂乱无章的,而且每次执行结果的Task显示顺序很可能不一样。利用Playbook,这两种策略的设置的方式如下:
--- - hosts: all strategy: free tasks: ...
6.任务执行优化
默认情况下Playbook中的任务在执行时会一直保持连接,直到该任务在每个主机节点都执行完毕,下一个任务才会开始执行。有时这是不必要的,比如有些操作运行时间比SSH超时时间还要长。解决该问题最简单的方式是一起执行它们,然后轮询直到任务执行完毕,简单的意思就是,像下面的例子,执行任务后,Ansible就不等它了,往下执行下一个任务,然后每隔5秒钟去看看它执行完成没,超时时间为45秒,async参数值代表了这个任务执行时间的上限值。即任务执行所用时间如果超出这个时间,则认为任务失败。如果async参数若未设置,则为同步执行。我们也可以对执行时间非常长(有可能遭遇超时)的操作使用异步模式。为了异步启动一个任务,可以指定其最大超时时间以及轮询其状态的频率。如果没有为 poll 指定值,那么默认的轮询频率是10秒钟。
--- - hosts: all remote_user: root tasks: - name: simulate long running op (15 sec), wait for up to 45 sec, poll every 5 sec command: /bin/sleep 15 async: 45 poll: 5
在异步执行任务时,需要注意那些有依赖性的任务。对于那些对资源要求占有排它锁的任务,如yum,不应该将Poll的间隔设置为0。如果设置为0,很可能会导致资源阻塞。总结来说,大概有以下一些场景需要使用到Ansible的异步特性:
- 某个Task需要运行很长的时间,这个Task很可能会达到ssh连接的Timeout。
- 没有任务是需要等待它才能完成的,即没有任务依赖此任务是否完成的状态。
- 需要尽快返回当前shell的。
当然也有一些场景不适合使用异步特性:
- 这个任务是需要运行完后才能继续另外的任务的。
- 申请排它锁的任务。
7.设置Facts缓存
当我们用ansible-playbook执行Playbook的时候,我们会发现,默认第一个Task都是GATHERING FACTS,这个过程就是Ansible收集每台主机的Facts信息,方便我们在Playbook中直接引用Facts里的信息。当然如果我们的Playbook中不需要Facts信息,可以在Playbook中设置gather_facts: False来提高Playbook的效率:
--- - hosts: 10.0.108.2 gather_facts: no tasks: ...
也可以在ansible.cfg文件中添加如下配置来默认禁用Facts采集:
[defaults] gathering = explicit
但是如果我们既想每次执行Playbook的时候都能收集Facts信息,又想加速这个收集过程,这时候可以设置Facts的缓存。例如,在空闲的时候收集Facts,缓存下来,在需要的时候直接读取缓存进行引用,直到缓存过期。目前Ansible支持使用Json文件,Redis、Memcached内存数据库来存储Facts信息。
- Json文件缓存Fact信息
使用Json文件作为Fact缓存后端时,Ansible将会把采集的Fact写入Ansible中控机的上的文件中。如果系统中已经存在这个文件,那么Ansible将使用这个文件中的数据,而不再连接到主机去采集Fact。下面我们首先通过示例来了解如何使用Json文件存储Facts信息,在ansible.cfg文件中添加:
[defaults] gathering = smart fact_caching_timeout = 86400 fact_caching = jsonfile fact_caching_connection = /tmp/ansible_fact_cache
Ansible的配置文件中可以修改gathering的值为smart、implicit或者explicit。
smart表示默认收集Facts,但Facts已有的情况下不会收集,即使用缓存Facts;
implicit表示默认收集Facts,要禁止收集,必须使用gather_facts: False;
explicit表示默认不收集,要显式收集,必须使用gather_facts: Ture;
在使用Facts缓存时(即设置为smart),Ansible支持两种Facts缓存:redis和jsonfile。这里设置Facts过期时间为86400秒(会根据文件的最后修改时间来确定Facts信息是否过期),Json文件存放在/tmp/ansi-ble_fact_ cache下,下面我们执行一下Playbook:
我们再执行Playbook的时候就没有Facts收集这个过程了。直接从Json文件中读取Facts缓存信息:
可以看到10台受控机的执行耗时仅1.8秒,效率是非常不错的。- Redis缓存Fact信息
由于目前Ansible Facts缓存还不支持远端,所以需要在 Ansible中控机上安装Redis服务,并安装Redis Python模块。
如何安装,这里不再赘述,有兴趣可以去下载安装包安装。Redis配置ansible.cfg文件如下所示:
[defaults] gathering = smart fact_caching_timeout = 86400 fact_caching = redis
- Memcache缓存Fact信息
Ansible Facts存储还支持Memcached 存储,配置方法也很简单,在安装完Memcached服务并运行后,同时安装Python的Memcached依赖包,最后配置ansible.cfg即可:
[defaults] gathering = smart fact_caching_timeout = 86400 fact_caching = memcached
参考链接 :
如何做好 Ansible 的配置优化? :https://mp.weixin.qq.com/s/wmXlqtpl-2fXuGjvXPY54g
-
颠覆认知的MySQL性能优化四件套:深度优化+面试集锦+思维导图
2021-01-14 17:05:34作为一名后端开发,MySQL 是工作上最常用的关系型数据库之一。但随着移动互联网的高速发展,集群架构已经...如何做到数据库的高并发与高可用? 为了解答MySQL 体系架构、执行流程、索引优化等问题,这里给大家推荐.作为一名后端开发,MySQL 是工作上最常用的关系型数据库之一。但随着移动互联网的高速发展,集群架构已经成为主流趋势,对于数据库的高并发,高可用等指标的要求也越来越高。
应聘者是否具备相应的底层机制和原理的驾驭能力,成为了互联网公司筛选人才的重要考核标准。如果只停留在建库、创表、增删查改等基本操作的水平,迟早会被企业淘汰掉。比如,面试官经常会问到:
如何提高查询语句性能?如何突破单库性能瓶颈?如何做到数据库的高并发与高可用?
为了解答 MySQL 体系架构、执行流程、索引优化等问题,这里给大家推荐一份“MySQL数据库优化”,特别适合对 MySQL索引调优、事务和锁优化等进阶内容掌握不系统的朋友。
MySQL如何优化
数据库设计
分库分表
SQL优化
索引
SQL优化技巧
MySQL数据引擎
年薪50万的Java岗MySQL考核准则
MySQL 面试专题(140道题含答案解析)
数据库基础知识:
- 为什么要使用数据库什么是SQL?
- 什么是MySQL?
- MySql, Oracle, Sql Service的区别
- 数据三大范式是什么
- mysql有关权限的表都有哪几个
- MySQL的binlog有有几种录入格式?分别有什么区别?
- 数据库经常使用的函数
数据类型
- mysql有哪些数据类型
引擎
- MySQL存储引擎
- MyISAM与InnoDB区别
- MyISAM索引与InnoDB索引的区别?
- InnoDB引擎的4大特性
存储引擎选择
- 索引什么是索引?
- 索引有哪些优缺点?
- 怎么创建索引的,有什么好处,有哪些分类
- 简述有哪些索引和作用
- 索引使用场景
- 主键索引与唯一索引的区别
- 索引有哪几种类型?
- 索引的数据结构(B树,Hash)
MySQL 优化最佳实践
MySQL思维导图(Xmind)
今天的分享就到这里,以上的【MySQL数据库优化】+【MySQL 面试专题(140道题含答案解析)】+【MySQL 优化最佳实践】+【MySQL思维导图(Xmind)】我已经做了一个整理,帮忙转发一下,关注后添加助理vx:yunduoa2019或扫描下图二维码,跟随助理指引自行获取
-
腾讯技术专家整理的MySQL深度优化四件套:深度优化+面试集锦+思维导图
2021-01-14 17:06:28作为一名后端开发,MySQL 是工作上最常用的关系型数据库之一。但随着移动互联网的高速发展,集群架构已经...如何做到数据库的高并发与高可用? 为了解答MySQL 体系架构、执行流程、索引优化等问题,这里给大家推荐. -
成本优化浪潮下重新思考RPA技术
2019-12-23 14:37:26下一次成本优化浪潮正加速到来,如何真正做到降本增效,是当前全球企业亟待解决的问题。 为此,人们将目光放在了能够替代人工的自动化、智能化科技上,从桌面自动化发展到机器人流程自动化(RPA),最终将实现智能... -
webpack2 终极优化
2021-01-01 19:13:14是时候告诉大家如何用webpack2优化你的构建让它构建出更小的文件尺寸和更好的开发体验。 优化输出 打包结果更小可以让网页打开速度更快以及简约宽带。可以通过这以下几点做到 压缩css <p><code>css-loader</code> 在... -
webpack编译流程漫谈
2020-12-02 18:03:50【webpack编译对象compilation】 webpack将编译结果导出到output是怎么做到的 如上,webpack在plugin结束前,将会在内存中生成一个compilation对象文件模块tree。 这个阶段是webpack的done阶段 : ... -
嗨,送你一张Web性能优化地图
2021-01-08 14:30:23不会介绍每个优化项目具体如何操作。PS:后续会有系列文章针对不同优化分类下的具体优化操作进行更详细的介绍。 <h2>1. 度量标准与设定目标 在进行性能优化之前,我们需要为应用选择一个正确的度量标准&... -
运输经理工作职责.doc
2021-01-15 18:57:17车辆如何调配才能发挥它的最大优势,看似简单,实则需要周密的考虑,对大局的整体把握,如此一来才能做到万无一失。运输经理对公司车辆的有序有效的运行 岗位描述: 1、全面负责运输业务日常运作管理,制定部门... -
-
数据行业工作3年,我靠这7个能力,成为领导青睐的高级数据分析师
2020-08-06 10:42:41每个行业都有好的数据分析师,但如何定义顶尖呢?...在互联网公司,优化产品的数据分析师做到了这一点,比如通过与产品的协同进行AB测试,给出产品优化的具体建议,从分析到生产的流程特别短,这是非常. -
erp系统方案书_生产制造业ERP管理系统规划方案
2020-12-11 00:57:50如何把这些繁琐的工作信息化,制度化,解放人工成为企业焦灼的重点。企业实施ERP的根本目的在于加强企业各部门,各生产单位之间的信息化建设,控制生产成本,优化生产流程,全面提升企业的效益与效率。最终做到可视... -
<紧急召集>欲招募11月IBM虚拟化与云计算高峰论坛现场观众(11月26日)
2010-10-27 16:50:54虚拟化和云计算是热门话题,学习了虚拟化ABC,但...如何将IT与业务紧密结合,提升业务灵活性,真正提供从资源整合、工作负载管理、自动化流程到优化服务交付? 继9月于西部重镇成都成功举办拟化与云计算高峰论坛后... -
采购部年度计划模板.doc
2021-01-15 21:46:59采购部年度计划篇一 20xx年酒店要继续完善和提高采购控制流程水平,对采购中的一些细节进行规范,使之采购水平能够逐步优化,促进公司拥有更好的竞争力。工作计划网年度工作计划频道为大家提供《20xx年酒店采购年度... -
GPS平差处理软件
2018-01-12 08:51:41对异步环中超限基线次数的统计,可以快速定位问题基线,做到优化有的放矢, 也就是说,它可以起到“如何做”这个功能。 基线类型: 基线文件的类型,可选 LGO、TBC、Gamit(o 文件)、CosaGPS 基线。 -
4.4.5 JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代,说说你知道的几种主要的JVM参数。 4.4.6 你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理,流程,优缺点。 4.4.7 垃圾回收算法的...
-
深入理解Android:卷I--详细书签版
2012-12-12 15:51:21与surfaceflinger之间的关系、surfaceflinger的工作原理、surface系统中的帧数据传输以及layerbuffer的工作流程。第9章对vold和rild的原理和机制进行了深入的分析,同时还探讨了 phone设计优化的问题;第10章分析了... -
如何做到各个组件化模块能获取到全局上下文? 组件在lib和app之间进行切换,如何处理butterKnife使用问题呢? 当组件是lib时,写代码需要注意哪些语法? 不要乱发bus消息?如果项目中大量的使用eventbus,那么会看到...
-
asp.net知识库
2015-06-18 08:45:45优化后的通用分页存储过程 sql语句 一些Select检索高级用法 SQL server 2005中新增的排序函数及应用 根据基本表结构及其数据生成 INSERT ... 的 SQL 简便的MS SQL 数据库 表内容 脚本 生成器 将表数据生成SQL脚本的... -
2018 年终总结
2020-12-26 16:13:19比如统一技术栈和规范、封装公共的组件和方法、以及配套的测试上线发布流程,然后这套项目代码就作为这类系统的开发模板。背后的技术本身不复杂,但是的确是一个团队要做的事情,因为有这样一个... -
-
-
-
-
-
-
-
-
-
Windows系统管理
-
MHA 高可用 MySQL 架构与 Altas 读写分离
-
LeetCode141.环形链表[立flag]|刷题打卡
-
LVS + Keepalived 实现 MySQL 负载均衡与高可用
-
MySQL 高可用(DRBD + heartbeat)
-
2.数据类型、表达式和基本运算
-
Git: 教你如何在Commit时有话可说
-
华为1+X认证——网络系统建设与运维(初级)
-
TLD跟踪算法源代码(作者的MATLAB+C版本)
-
用Go语言来写区块链(一)
-
i7 9750h和i5 10210U 哪个好
-
PPT大神之路高清教程
-
MySQL DML 语言(插入、更新与删除数据)
-
MySQL 高可用工具 heartbeat 实战部署详解
-
MikroTik-RouterOS-6.45.6.1.ova
-
spring @Qualifier注解
-
谷歌相册备份backupandsync.exe
-
新形势下的网络安全等级保护实践.pptx
-
MMM 集群部署实现 MySQL 高可用和读写分离
-
Leetcode 559. Maximum Depth of N-ary Tree(DFS与BFS)